论文解读:DeepBDC小样本图像分类

Joint Distribution Matters: Deep Brownian Distance Covariance for Few-Shot Classification

摘要

由于每个新任务只给出很少的训练样例,所以few -shot分类是一个具有挑战性的问题。解决这一挑战的有效研究路线之一是专注于学习由查询图像和某些类别的少数支持图像之间的相似性度量驱动的深度表示。统计上,这相当于测量图像特征的依赖性,被视为高维嵌入空间中的随机向量。以往的方法要么只使用边际分布而不考虑联合分布,表示能力有限,要么利用联合分布计算量大。本文提出了一种基于深度布朗距离协方差(DeepBDC)的小样本分类方法。DeepBDC的核心思想是通过测量嵌入特征的联合特征函数与边缘积之间的差异来学习图像表示。由于BDC度量是解耦的,我们将其表述为一个高度模块化和高效的层。此外,我们在两种不同的少量分类框架中实例化了DeepBDC。我们在六个标准的少拍图像基准上进行了实验,涵盖了一般目标识别、细粒度分类和跨域分类。广泛的评估表明,我们的DeepBDC显著优于同行,同时建立了新的最先进的结果。源代码可从http://www.peihuali.org/DeepBDC获得。

介绍

Few-shot分类[15,17]关注的是一项任务,其中分类器可以适应于区分以前未见过的类别,仅给定这些类别的非常有限数量的示例。这是一个具有挑战性的问题,因为几乎没有标记的例子远远不足以学习丰富的知识,还可能导致过拟合。一个实用的解决方案是基于元学习或学习如何学习[12,39]技术,其中情景训练是为了将在跨越大量已知类的大量元训练集上获得的知识转移到新类的少数镜头政权。在已经取得的巨大进展中,基于度量的方法引起了相当大的研究兴趣[15,26,33,39],近年来取得了最先进的性能[45,47]。

基于度量的few-shot分类的主要思想是通过深度网络学习表征,由查询图像与某些类别的少数支持图像之间的相似性度量驱动[33,47]。统计上,查询图像的特征(支持图像)可以看作是一个随机向量X(Y)的观测值。在高维嵌入空间中。因此,图像之间的相似性可以通过概率分布来度量。然而,对高维(通常很少)特征的分布进行建模是困难的,常用的方法是对统计矩进行建模。ProtoNet[33]及其变体(例如,[26])通过一阶矩(平均向量)表示图像,并使用欧几里得距离或余弦相似度进行度量学习。为了获取更丰富的统计数据,一些作品研究了第二矩(协方差矩阵)[44]或一矩和第二矩的组合以高斯形式[20]进行图像表示,同时采用Frobenius范数或kullbackleiberler (KL)散度作为相似性度量。然而,这些方法只利用了边际分布而忽略了联合分布,限制了学习模型的性能。此外,协方差只能模拟线性关系。

一般来说,X和Y之间的依赖关系应该根据它们的联合分布f_{XY}(x,y)[6]。动土距离(EMD)是测量这种相关性的有效方法。如[29,2.3节]所述,EMD寻求最优联合分布f_{XY}(x,y),其边际被限定为给定f_{X}(x),f_{y}(y),使得运输成本的期望最小。在少镜头分类中,DeepEMD[47]提出差分EMD来实现图像区域的最优匹配。虽然达到了最先进的性能,但由于固有的线性算法,DeepEMD的计算成本很高[45][c]。互信息(MI)[3,28]是一个众所周知的度量,它可以通过两个随机变量的联合分布和边际积之间的kl -散度来量化两个随机变量的相关性。不幸的是,MI的计算在实值、高维设置中是困难的[2],并且通常涉及困难的密度建模或kl -散度的下界估计[14]。

本文提出了一种基于深度布朗距离协方差(DeepBDC)的小样本分类方法。在[35,36]中首次提出的BDC度量被定义为联合特征函数与边际积之间的欧几里得距离。它可以自然地量化两个随机变量之间的依赖关系。对于离散观测(特征),BDC度量是解耦的,因此我们可以将BDC表述为池化层,可以无缝地插入到深度网络中,接受特征映射作为输入,并输出BDC矩阵作为图像表示。这样,两幅图像之间的相似度被计算为对应的两个BDC矩阵之间的内积。因此,我们的DeepBDC的核心是高度模块化和即插即用的不同方法的少样本图像分类。具体来说,我们在元学习框架(Meta DeepBDC)和依赖非情景训练的简单迁移学习框架(STL DeepBDC)中实例化了我们的DeepBDC。与协方差矩阵相反,我们的DeepBDC可以自由地处理非线性关系并充分表征独立性。与EMD相比,它还考虑了联合分布,最重要的是,它可以有效地进行解析计算。与MI不同,BDC不需要密度建模。我们在表1中列出了我们的BDC与同行之间的差异。

表1。我们的DeepBDC与同类产品的比较。为了量化随机向量X和Y之的依赖关系,基于矩量的方法[20,33,44]只能模拟边缘分布,表示能力有限;虽然通过考虑联合分布实现了最先进的性能,但DeepEMD[47]在计算上是昂贵的。我们的DeepBDC测量联合特征函数与边际积之间的差异,可以有效地以封闭形式计算,并且可以模拟非线性关系并充分表征独立性。注意,对于一个随机向量,它的特征函数和概率分布是等价的,因为它们形成了傅里叶变换对。本文报告了miniImageNet上5-way 1-shot=5-shot分类的准确性;我们的结果是由Meta DeepBDC获得的,对应的结果是从各自的论文中复制的。

我们的贡献总结如下。

(1)首次将布朗距离协方差(brown distance covariance, BDC)这一基础但被忽视的依赖建模方法引入到基于深度网络的少样本分类中。我们的工作表明了BDC在深度学习中的巨大潜力和未来的应用。

(2)我们将DeepBDC制定为一个高度模块化和高效的层,适用于不同的few-shot学习框架。此外,我们提出了两种基于少镜头分类的实例,即以ProtoNet为蓝图的基于元学习框架的Meta DeepBDC和基于简单迁移学习框架而不进行情景训练的STL DeepBDC。

(3)我们对我们的方法进行了彻底的消融研究,并在6个少弹分类基准上进行了广泛的实验。实验结果表明,我们的两个实例都取得了优异的性能,同时也创造了新的技术水平。

相关的工作

小样本分类中的表示学习

在标记样本有限的情况下,图像表示和相似度度量在小样本分类中起着重要作用。

根据图像的表示方式,我们可以将少镜头分类方法大致分为两类。在第一类中,图像表示是基于分布建模的。他们使用一阶矩(平均向量)[33]、第二阶矩(协方差矩阵)[44]、高斯分布[20]或离散概率[47],并因此采用欧氏距离(或余弦相似度)、Frobenious范数、kl -散度或地球移动者距离作为不相似度度量。第二类涉及查询图像和支持图像之间的特征重建,通过Ridge回归[45]或注意机制[9,46]直接进行线性重建,或者设计关系模块来学习可转移的深度度量[34,48]。

我们的方法属于第一类,与现有作品最大的区别在于我们使用布朗距离协方差进行少镜头状态下的表示学习。

元学习与简单迁移学习

元学习实际上是一种少样本分类的框架[12,39]。它涉及一系列任务(情节),这些任务被分成互不关联的元训练集和元测试集。通常,每个任务被表述为一个N-way K-shot分类,它跨越N个类,每个类提供K个支持图像和一些查询图像。元训练集和元测试集共享情景训练策略,促进跨任务的泛化能力。大多数方法,无论是基于优化的[12,30]还是基于度量的[33,34],都遵循这种方法。许多研究[5,45,47]表明,与从头开始进行元训练相比,对整个元训练集进行预训练对元学习更有帮助。最近有研究发现,完全不依赖情景训练的简单迁移学习(STL)框架取得了非常有竞争力的表现[4,8,37]。对于STL方法,在元训练过程中,通过跨所有类的整个元训练集上的标准交叉熵损失来训练深度网络以解决常见的分类问题;在元测试过程中,将训练好的模型作为特征提取的嵌入模型,然后构建一个线性模型,如soft-max分类器[4,8]或逻辑回归模型[37],并对其进行训练以进行少镜头分类。

最后,我们提到很少有作品将BDC用于机器学习或计算机视觉,目前我们发现了一种基于BDC的降维方法[7],与深度学习无关。

3推出的方法

在本节中,我们首先介绍布朗距离协方差(BDC)。然后我们在卷积网络中表述我们的DeepBDC。最后,我们实例化了我们的DeepBDC用于少量图像分类。

3.1. 布朗距离协方差(BDC)

BDC理论最早是在[35,36]中根据特征函数建立的。随机向量的特征函数等价于它的概率密度函数(PDF),因为它们形成了傅里叶变换对。

X\in R^{p},Y\in R^{q}分别是p维和q维的随机向量,设f_{XY}(x,y)成为他们的联合概率密度函数PDF。0X和Y的联合特征函数定义为(公式2)

\phi_{XY}(t,s)=\int_{R^p}\int_{R^q}{exp(i(t^Tx+s^Ty))f_{XY}(x,y)dxdy}

其中i是虚单位。显然,X和Y的边际分布分别为\phi_{X}(t)=\phi_{XY}(t,0),\phi_{Y}(s)=\phi_{XY}(0,s)

,其中0是一个向量,其元素全为的零。根据概率论,我们知道X和Y是独立的当且仅当
\phi_{XY}(t,s)=\phi_{X}(t) \phi_{Y}(s)。假设X和Y具有有限的一阶矩,则定义BDC度规为

\rho(X,Y)=\int_{R^p}\int_{R^q} \frac {|\phi_{XY}(t,s)-\phi_{X}(t) \phi_{Y}(s)|^{2}} {c_{p}c_{q}||t||^{1+p}||s||^{1+q}} dtds

式中||.||为欧氏范数,c_{p}=\pi^{(1+p)/2}/\Gamma((1+p)/2) ,Γ为完全函数,即\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt

对于m个观测值的集合\{(x_{1},y_{1}),...,(x_{m},y_{m})\}是独立同分布,,一个自然的方法是根据经验特征函数来定义BDC度量:

虽然公式2看起来很复杂,但BDC度量对于离散观测值具有封闭形式表达式。设\hat{A}=(\hat{a_{kl}})\in{ R^{m\times m}}

其中\hat{a_{kl}}=||x_{k}-x_{l}||是在x的观测对之间计算的欧几里得距离矩阵。类似地,我们计算欧几里得距离矩阵\hat{B}=(\hat{b_{kl}})\in R^{m\times m}其中\hat{b_{kl}}=||y_{k}-y_{l}||。那么BDC指标有如下形式[35]1(公式4):\rho(X,Y)=tr(A^T B)

事实上,\rho(X,Y)=\frac{1}{m^2}tr(A^T B),常数\frac{1}{m^2}被同化为可学习的缩放参数τ(见第3.3节),因此被省略。

式中tr(·)为矩阵迹,T为矩阵转置,A=(a_{kl})称为BDC矩阵。这里,

a_{kl}=\hat{a}_{kl} -\frac{1}{m}\sum_{k=1}^{m}\hat{a}_{kl} -\frac{1}{m}\sum_{l=1}^{m}\hat{a}_{kl} -\frac{1}{m^2}\sum_{k=1}^{m}\sum_{l=1}^{m}\hat{a}_{kl}

其中后三项分别表示\hat{A}的第l列,第k行和所有项的均值。矩阵B可以用类似的方法从\hat{B}中计算出来。由于BDC矩阵是对称的,\rho(X,Y)也可以写成两个BDC向量a和b的内积,即(公式5):

\rho(X,Y)=<a,b>=a^Tb

其中a(b)是通过提取A的上三角部分得到的(B),然后进行矢量化。

度规\rho(X,Y)有一些可取的性质。

(1)它是非负的,当且仅当X和Y独立时等于0。

(2)它可以表征X和Y之间的线性和非线性依赖关系。

(3)它对X和Y的个别平移和正交变换是不变的,对它们的个别比例因子是等变的。

也就是说,对于任意向量c_{1}\in R^p,c_2\in R^q,标量s_1,s_2和标准正交矩阵

R_2\in R^{p\times q},R_2\in R^{p\times q},\rho(c_1+S_1R_1X,c_2+s_2R_2Y)=|s_1s_2|\rho(X,Y)

3.2. 作为池化层的DeepBDC的表述

根据Eq.(4)和Eq.(5),我们可以看到BDC度量是解耦的,因为我们可以独立计算每个输入图像的BDC矩阵。具体来说,我们设计了一个适合于卷积网络的两层模块,分别进行了降维和BDC矩阵的计算。由于BDC矩阵的大小相对于网络中通道(特征映射)的数量呈二次增长,我们在网络主干网的最后一个卷积层之后插入一个1×1卷积层用于降维。

假设网络(包括降维层)参数化为θ,该θ将彩色图像z\in R^3嵌入到特征空间中。图像的嵌入是一个
h\times w \times d张量,其中hw为空间高度和宽度,d为通道数。我们将张量重塑为矩阵X\in R^{hw\times d},并且可以将每列x_k\in R^{hw}或每行(转置后)x_j\in R^{d}

视为随机向量X的观察值。我们提到,在实践中,对于任何一种情况,i.i.d.假设都可能不成立,并且在第4.2节中给出了两种选择的比较。

在下面的例子中,我们取x_k作为随机观察值。我们发展了三个算子,分别计算了平方欧几里得距离矩阵\tilde{A}=(\~a_{kl})(其中\tilde{a}_{kl}是X的第k列和第l列之间的平方欧几里得距离矩阵)、
\tilde{A}=(\sqrt{\~a_{kl}})和BDC矩阵A(由\hat A减去它的行均值、列均值和所有元素的均值)。也就是说,

这里1\in R^{d\times d}是一个矩阵,每个元素都是1,I是单位矩阵,◦表示阿达玛乘积。我们记
(U)sym=\frac{1}{2}(U+U^T)接下来,我们用A_\Theta(z)表示BDC矩阵是从用θ参数化的带有输入图像z的网络中计算出来的。

def BDCovpool(x, t):batchSize, dim, h, w = x.data.shapeM = h * wx = x.reshape(batchSize, dim, M)I = torch.eye(dim, dim, device=x.device).view(1, dim, dim).repeat(batchSize, 1, 1).type(x.dtype)I_M = torch.ones(batchSize, dim, dim, device=x.device).type(x.dtype)x_pow2 = x.bmm(x.transpose(1, 2))dcov = I_M.bmm(x_pow2 * I) + (x_pow2 * I).bmm(I_M) - 2 * x_pow2dcov = torch.clamp(dcov, min=0.0)dcov = torch.exp(t)* dcovdcov = torch.sqrt(dcov + 1e-5)t = dcov - 1. / dim * dcov.bmm(I_M) - 1. / dim * I_M.bmm(dcov) + 1. / (dim * dim) * I_M.bmm(dcov).bmm(I_M)return t

因此,我们将DeepBDC定义为无参数的空间池化层。它是高度模块化的,适用于不同的网络体系结构和不同的框架的少射分类。BDC矩阵主要涉及标准矩阵运算,适合在GPU上并行计算。从Eq.(6)可以清楚地看出,BDC矩阵通过欧几里得距离来模拟通道之间的非线性关系。协方差矩阵可以类似地解释,但是,它通过内积对通道之间的线性关系进行建模[49,第4.1节]。理论上,它们有很大的不同,因为BDC矩阵考虑联合分布,而协方差矩阵只考虑边缘分布。

3.3. 实例化DeepBDC进行少样本学习

我们基于元学习框架和简单迁移学习框架实例化了我们的DeepBDC,得到的Meta DeepBDC和STL DeepBDC分别如图1a和图1b所示。

Meta DeepBDC

标准的几次学习是在大量任务中以一种情景式的方式进行的。任务通常被表述为N-way K-shot分类问题,它指N个类,每个类有K个支持图像和Q个查询图像,在支持集D^{sup}=\{(z_j,y_j)\}^{NK}_{j=1},查询集D^{que}=\{(z_j,y_j)\}^{NQ}_{j=1}。学习器在D^{sup}上进行训练,并在D^{que}上进行预测。

我们用ProtoNet[33]作为蓝图实例化Meta DeepBDC。它学习分类所在的度量空间,通过计算到每个类原型的距离来执行。在一个任务上(D^{sup},D^{que}),我们将图像z_j馈送到网络以产生BDC矩阵
A_{\theta}(z_j)。支持类k的原型是属于其类的BDC矩阵的平均值(Avg):

其中S_kD^{sup}中标记为k类的样本集。

基于到支持类原型的距离的softmax,我们生成了类间的分布,然后制定了以下损失函数:

其中\tau是一个可学习的尺度参数[5,45,46]。

我们通过从大量的元训练集C训练中采样任务来训练学习器,其中类的数量远远大于n。然后,我们从一个固定的元测试集C测试中采样任务,我们评估学习器的性能。情景训练确保了元训练和元测试之间的一致性,这对元学习方法至关重要[33,39]。

STL DeepBDC(略)

该实例化基于广泛使用的简单迁移学习(STL)框架[10],其中深度网络在大型数据集上进行训练,然后用作嵌入模型,以提取具有少量标记示例的下游任务的特征。

3.4. 与以往方法的关系

\{x_j\}^n_{j=1}查询图像的特征,作为随机向量X的观测值。可以计算均值u_X=\frac{1}{n}\sum_{j=1}^n{x_j},协方差矩阵\Sigma_X=\frac{1}{n}\sum_{j=1}^n(x_j-u_X)(x_j-u_X)^T或高斯分布N_{u_x},\Sigma_X作为图像表示。值得注意的是,这些表征在少数次学习机制之外得到了广泛的研究,其中它们分别被认为是全局平均池化[13]、双线性[22]或协方差池化[42]和高斯池化[41]。相应的支持类原型,u_Y,\Sigma_YN_{u_Y,\Sigma_Y}

,可以使用K个支持图像的特征来计算。

ProtoNet[33]

ProtoNet[33]用均值向量表示图像,用欧几里得距离\rho_{Protonet}(X,Y)=||u_{X}-u_{Y}||^2或余弦相似度u^T_Xu_Y/(||u_X|||u_Y||)用于度量学习。

CovNet[44]

CovNet[44]采用协方差矩阵作为图像表示来改进一阶表示。

将协方差矩阵进行有符号平方根归一化,然后与矩阵空间中的欧几里得距离(即Frobenius范数)

\rho CovNet(X,Y)=||\Sigma_X-\Sigma_Y||^2

ADM[20]

ADM[20]提出使用非对称分布度量(ADM)来评估查询图像与支持类之间的不相似度。图像的分布由多元高斯分布表示,其差异由KL-divergence\rho_{ADM}(X,Y)=D_{KL}(N_{u_x,\Sigma_X}||N_{u_Y,\Sigma_Y})

DeepEMD[47]

DeepEMD[47]使用离散分布作为图像表示。具体来说,查询图像的离散PDF(Probability Distribution Function:概率分布函数)为f_X(x)=\sum_{j=1}^{n}f_{x_j}\delta_{X,X_j},其中f_{x_j}表示x_j的概率;
\delta_{X,X_j}为Kronecker delta,当x=x_j时等于1,否则为零。

设支持图像的PDF为f_Y(y)=\sum_{j=1}^{n}f_{y_j}\delta_{y,y_j}

f_X(x)f_Y(y)之间的距离表示为EMD,即
\rho_{EMD}(X,Y)=min_{f_{x_j,y_l}\ge0}\sum^n_{j=1}\sum^n_{l=1}{f_{x_j,y_l}c_{x_j,y_l}}

,有约束\sum^n_{l=1}{f_{x_j,y_l}}=f_{x_j}\sum^n_{j=1}{f_{x_j,y_l}}=f_{y_l},j,l=1,...,n 。在这里c_{x_j,y_l}这是运输费。

因此,EMD寻求最优联合分布f_{XY}(x_j,y_l)使得运输成本的期望最小[29,第2.3节]。DeepEMD提出了一个交叉参考机制来定义f_{x_j}f_{y_l},并提出了一个结构化的FC层来处理K-shot分类(K>1)。

4. 实验

数据集

我们在两个通用目标识别基准上进行实验,即miniImageNet[39]和tieredImageNet[31],以及一个细粒度图像分类数据集,即CUB-200-2011[40](简称CUB)。我们还通过在miniImageNet上训练来评估模型的领域转移能力,然后在CUB[40]、Aircraft[24]和Cars[16]上进行测试。

Backbone network

为了与之前的方法进行公平比较,我们使用两种网络作为骨干网,即ResNet-12[18,37]和ResNet-18[1,23,34]。与常用做法相同,ResNet-12和ResNet-18的图像输入分辨率分别为84×84和224×224。此外,我们采用更深层次、容量更高的模型,即输入图像为224×224的ResNet-34[13]和输入图像为84×84的ResNet-34变体。

与[9,20]类似,我们删除了主干的最后一次降采样,以获得更多的卷积特征。

训练

我们的Meta DeepBDC基于元学习框架,依赖于情景训练。每个情节(任务)涉及标准的5-way 1-shot或5-way 5-shot分类,从元训练或元测试集中统一采样;之后[5,45,47],在情景训练之前,我们对初始化权重的模型进行预训练。

与Meta DeepBDC相反,我们的STL DeepBDC基于简单的迁移学习框架,需要非情景训练。接下来[37],我们训练一个网络作为一个嵌入模型,在整个跨所有类的元训练集上具有交叉熵损失;对于每个元测试任务,我们使用嵌入模型提取的特征训练一个新的逻辑回归分类器。

在补充(Supp.) S1中,我们提供了数据集的统计数据和元训练/验证/测试集的分割,以及网络架构,优化器,超参数等细节。

4.2. 消融实验

我们对我们的两个实例进行消融分析,并与以ResNet-12为骨干的miniImageNet上的5路任务进行比较。附录S-2和附录S-3分别给出了相应版本和额外实验的实施细节。

Meta DeepBDC的消融分析

由于BDC矩阵的大小在通道数量上是二次的,我们引入了1×1卷积(conv)层,将通道数量减少到d。在我们的实现中,每个BDC矩阵都像Eq.(5)一样矢量化,因此大小为d(d+1)=2。表2a(上)显示了不同的d对准确率和每集元测试时间的影响。我们可以看到,当d= 640时达到最高精度;同时,元测试时间仅随d的增大而适度增加。我们还尝试直接将BDC模块连接到主干,而不需要额外的1×1转换层;我们获得了67.10±0.43和84.50±0.28的1-shot和5-shot的效果,与使用额外的1×1转换层获得的最佳结果相当。除了Eq.(5)所示的内积外,我们还可以使用欧氏距离或余弦相似度作为度量,相应的结果如表2a(下)所示。

距离达到最高精度为5-shot。在这里获得的最佳设置将在其余纸张中使用。最后,我们注意到,无论d的值如何,Meta DeepBDC的性能都比基线(即ProtoNet)好得多,而延迟的增加很小。

4.3. 与最先进方法的比较

总结

本文提出了一种基于深度布朗距离协方差(DeepBDC)的小样本分类方法。

对于查询和支持图像,DeepBDC可以通过测量其嵌入特征的联合分布与边缘积的差异来有效地学习图像表示。DeepBDC的核心是一个模块化的高效层,可以灵活地插入到深度网络中,既适用于基于情景训练的元学习框架,也适用于依赖非情景训练的简单迁移学习框架。大量的实验表明,我们的DeepBDC方法比同类方法表现得更好,并且在多个一般、细粒度和跨域的小样本分类任务上设置了新的最先进的结果。我们的工作显示了BDC这一基本但被忽视的技术的巨大潜力,并鼓励其未来在深度学习中的应用。

自己的实验

window下注意将datamgr.py,dataset.py的num_workers全设置为0

这篇文章其中一个亮点是对设备要求不高,用的是 GeForce GTX 1080.

论文下载(2022CVPR 口头演讲)

https://arxiv.org/abs/2204.04567

📎Joint Distribution Matters Deep Brownian Distance Covariance for.pdf

代码地址

GitHub - Fei-Long121/DeepBDC: The Pytorch code of "Joint Distribution Matters: Deep Brownian Distance Covariance for Few-Shot Classification", CVPR 2022 (Oral).

参考文章

CVPR 2022 Oral | 大连理工提出小样本识别DeepBDC,6项基准性能最好-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本自动备份数据库表

今日目标&#xff1a;shell脚本自动备份数据库中的表并记录执行日志和mysql输出日志 编写思路&#xff1a; &#xff08;1&#xff09;shell脚本运行mysql命令 &#xff08;2&#xff09;脚本输出记录到日志中 &#xff08;3&#xff09;定时任务自动执行shell脚本 1、she…

【Tomcat与网络9】提高Tomcat启动速度的八大措施

本文我们来看一下如何对Tomcat进行调优&#xff0c;我们对于Tomcat的调优主要集中在三个方面&#xff1a;提高启动速度、提高系统稳定性和提高并发能力&#xff0c;后两者很多时候是相辅相成的&#xff0c;我们放在一起看。 Tomcat现在一般都嵌入在SpringBoot里&#xff0c;因…

Linux 驱动开发基础知识——总线设备驱动模型(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

动网格-尺寸函数耦合运动(五)

尺寸函数 **尺寸函数(Size Function)**通常和局部体网格重构结合使用&#xff0c;尺寸函数用于控制重构过程中的网格分布。简单地说&#xff0c;尺寸函数的功能就是在运动边界处约束网格&#xff0c;使其维持在一个较小的尺度&#xff0c;在远离运动边界处&#xff0c;逐步将其…

Windows存储空间不足局域网文件共享 Dism备份系统空间不足

问题情景 在日常使用中难免遇到Windows的空间不足的情况&#xff0c;常用办法是清理垃圾释放空间&#xff0c;部分场景例如我们需要使用Dism备份完整系统&#xff0c;所以需要非常大的存储空间不够&#xff0c;如果空间不够什么才是最有效的方案呢&#xff1f; 我们假设身边没有…

如何使用docker部署Swagger Editor并实现无公网ip远程协作编辑文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 Swagger Editor本地接口文档公网远程访问 Swagger Editor是一个用于编写OpenAPI规范的开源编…

【方案】TSINGSEE青犀智能分析网关V4+EasyCVR智慧服务区一体化监控平台

随着年关将近&#xff0c;春运大潮已然开启&#xff0c;届时又伴随着大雨暴雪天气&#xff0c;高速路况的新闻层出不穷。由于长期驾车且高速拥堵严重&#xff0c;不少人就聚集在服务区休息&#xff0c;导致服务区流量爆满&#xff0c;空前的拥堵极易导致服务区瘫痪。如何利用智…

计算机毕业设计 | springboot 多功能商城 购物网站(附源码)

1&#xff0c; 概述 国家大力推进信息化建设的大背景下&#xff0c;城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区&#xff0c;商业和服务业也比较发达&#xff0c;公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息化…

OpenHarmony—编辑器使用技巧

DevEco Studio支持使用多种语言进行应用/服务的开发&#xff0c;包括ArkTS、JS和C/C。在编写应用/服务阶段&#xff0c;可以通过掌握代码编写的各种常用技巧&#xff0c;来提升编码效率。 代码高亮 支持对代码关键字、运算符、字符串、类、标识符、注释等进行高亮显示&#x…

少儿编程教育市场分析:行业规模有望在2025年达到约500亿元

少儿编程教育是通过编程游戏启蒙、可视化图形编程等课程&#xff0c;培养学生的计算思维和创新解难能力的课程。与成人的编程不同&#xff0c;少儿编程教育并非高等教育那样学习如何写代码、编制应用程序&#xff0c;而是通过编程游戏启蒙、可视化图形编程等课程&#xff0c;培…

C语言——标准输入函数(scanf、getchar和gets)

目录 1. 标准输入输出头文件2. scanf2.1 scanf2.1.1 函数申明2.1.2 基本用法2.1.3 返回值2.1.4 占位符2.1.5 赋值忽略符 3. getchar3.1 函数申明3.2 基本用法 4. gets4.1 函数申明4.2 基本用法 1. 标准输入输出头文件 #include <stdio.h>在使用标准输入输出函数的时候都…

摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)

摄影分享网站目录 目录 基于Springboot的摄影分享网站设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、图片素材管理 3、视频素材管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

企业网络基础架构监控工具

IT 基础架构已成为提供基本业务服务的基石&#xff0c;无论是内部管理操作还是为客户托管的应用程序服务&#xff0c;监控 IT 基础设施至关重要&#xff0c;并且已经建立起来&#xff0c;SMB IT 基础架构需要简单的网络监控工具来监控性能和报告问题。通常&#xff0c;几个 IT …

UE5 虚幻游戏报错常用解决方法(幻兽帕鲁UE5报错)

在体验使用虚幻引擎5、4&#xff08;UE5/UE4&#xff09;开发的游戏如《幻兽帕鲁》时&#xff0c;玩家可能会遇到各种报错情况&#xff0c;例如黑屏、闪退、C运行时错误等。本博客将汇集一系列有效解决方案&#xff0c;通过调整虚幻引擎内置命令行参数以及优化系统环境&#xf…

区块链游戏解说:Sunflower Land 是什么

数据源&#xff1a;Sunflower Land Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 Sunflower Land Sunflower Land 是基于 Polygon 网络的区块链农场游戏。玩家可以在一个充满活力和身临其境的环境中耕种、收获和交易各种农产品。Sunflower Land 使用了非同质…

Springboot 整合 Quartz(定时任务框架)

一、java 定时任务调度的实现方式 1、Timer 特点是&#xff1a;简单易用&#xff0c;但由于所有任务都是由同一个线程来调度&#xff0c;因此所有任务都是串行执行的&#xff0c;同一时间只能有一个任务在执行&#xff0c;前一个任务的延迟或异常都将会影响到之后的任务&#…

STM32存储左右互搏 QSPI总线读写FLASH W25QXX

STM32存储左右互搏 QSPI总线读写FLASH W25QXX FLASH是常用的一种非易失存储单元&#xff0c;W25QXX系列Flash有不同容量的型号&#xff0c;如W25Q64的容量为64Mbit&#xff0c;也就是8MByte。这里介绍STM32CUBEIDE开发平台HAL库Qual SPI总线操作W25Q各型号FLASH的例程。 W25Q…

【通讯录案例-沙盒路径 Objective-C语言】

一、接下来,我们来学习“存储”的相关的一些东西, 1.打开这个“数据存储“的ppt, 打开这个ppt, 首先呢,关于存储这一块儿, 存储呢,首先,有常见的几种方式,注意啊,这个里边儿是“方式”,方式,什么意思,是表示怎么去存,有五种方式: 1)XML属性列表(plist)归档:…

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…

记elasticsearch CPU负载100%问题

记elasticsearch CPU负载100%问题 环境&#xff1a;问题表现&#xff1a;初步排查&#xff1a;日志查询hot_thread 深入查询当前elasticsearch正在运行的Task查看Task详情解决问题对导致问题的原因的几个猜测问题复现&#xff1a;导致问题的原因。json导入规则问题json导入规则…