人体姿态估计-论文精读--DeepPose: Human Pose Estimation via Deep Neural Networks

news2024/11/16 17:59:03

在这里插入图片描述
图 1. 除了关节的极端变异性外,许多关节几乎不可见。我们能猜测左图中右臂的位置,因为我们看到了姿势的其余部分,并预测了这个人的运动或活动。同样,右边的人的左半身也根本看不见。这些都是需要进行整体推理的例子。我们相信DNNs可以很正确地进行这种类型的推理。

Abstract

我们提出了一种基于深度神经网络(DNNs)的人体姿态估计方法。姿态估计被表述为一个基于DNN的身体关节回归问题。我们提出了一连串的DNN回归器,以输出高精度的姿态估计。该方法的优势是以一种整体的方式推理姿势,有一个简单但强大的公式,利用了深度学习的最新进展。我们提出了一个详细的实证分析,在各种真实图像的四个学术基准上具有最新或更好的性能。

Introduction

人体姿态估计问题,被定义为人体关节的定位问题,在计算机视觉界引起了广泛的关注。在图 1中,我们可以看到这个问题的一些挑战——大关节、小的几乎不可见的关节、遮挡和捕获背景。

该领域的主流工作主要是由第一个挑战推动的,即需要在大空间中寻找所有可能的关节姿态。基于部分的模型使他们自然的模仿关节连接,并且近年来也提出了各种具有有效推理的模型。

然而,上述的效率是以表达的限制为代价实现的——使用局部检测器,这在许多情况下是关于单个的,最重要的是可以仅通过对身体部分之间的所有交互的一小部分进行建模。如图1所示,这些局限性已被认识到,并提出了以整体方式推理姿势的方法,但在现实问题中取得的成功也是有限的。

在这项工作中,我们归纳了人类姿态估计的整体观点。我们利用深度学习的最新发展,提出了一种基于深度神经网络(DNN)的新算法。DNNs在视觉分类任务[14]和最近在对象定位[23,9]上表现出了出色的表现。然而,应用dnn精确定位铰接物体的问题在很大程度上仍然没有得到解答。在本文中,我们试图阐明这个问题,并基于DNN提出简单而强大的整体人体姿态估计方法。

在这项工作中,我们归纳了人类姿态估计的整体观点。我们利用深度学习的最新发展,提出了一种基于深度神经网络(DNN)的新算法。DNN在视觉分类任务和最近在对象定位上表现出了出色的性能。然而,应用DNN精确定位关节物体的问题在很大程度上仍未得到解答。在本文中,我们试图阐明这个问题,并提出一个类似DNN的,简单而强大的整体人体姿态估计器。

我们将姿态估计表示为一个联合回归问题,并展示了如何成功地在DNN设置中描述它。使用完整图像和7层通用卷积DNN作为输入,回归每个身体关节的位置。这种方法有两个优点。首先,DNN能够捕获每个身体关节的完整背景——每个关节回归器使用完整的图像作为信息。其次,该方法比基于图形模型的方法要简单得多——无需显式设计模型拓扑和关节之间的交互;不需要显式地设计模型拓扑和关节之间的交互。相反,我们证明了可以针对此问题使用通用DNN卷积。

此外,我们提出了一个基于DNN的姿态级联预测器。这种联级(网络的串联)可以提高连接位置的精度。从基于完整图像的初始姿态估计开始,我们学习基于DNN的回归器,它通过使用更高分辨率的子图像来细化联合预测。

我们使用四个广泛使用的基准测试比对所有实验结果,展示了最先进的结果。我们的方法在外表上呈现明显不同的关节的人的图像上也会表现良好。最后,我们通过跨数据集评估来展示泛化性能。

Related Work

从计算机视觉 [16] 的早期提倡将一般的铰接物体,特别是人体姿势表示为零件图的想法。由 Fishler 和 Elschlager 引入的图形结构 ( Pictorial Strictures PS) ,Felzenszwalb 和 Huttenlocher使用距离变换技巧变得易于处理和实用。因此,随后开发了多种具有实际意义的基于 PS 的模型。

然而,上述的可操作性伴随着一个限制,那就是基于树的姿势模型具有简单的二进制潜力,不依赖于图像数据。因此,研究的重点是在保持可操作性的同时丰富模型的表现力。早期实现这一目标的尝试是基于更丰富的部分检测器。

最近,人们提出了各种各样的表达复杂联合关系的模型。Yang和Ramanan使用了一个零件的混合模型。Johnson和Everingham[13]研究了全模型规模的混合模型,通过具有PS的混合。Tian等人[25]在一个分层模型中捕获了更丰富的高阶空间关系。捕捉高阶关系的另一种方法是通过与图像相关的PS模型,它可以通过全局分类器来估计。

我们以整体方式推理姿势的方法显示出有限的实用性。Mori和Malik试图从一组标记的图像中为每张测试图像找到最接近的样本,并转换连接位置。Shakhnarovich等人[21]采用了类似的近邻设置,但他们使用的是位置敏感散列。最近,Gkioxari等人[10]提出了一个用于零件配置的semi-global分类器。这种提法在现实世界的数据上显示出非常好的效果,然而,它是基于线性分类器,其表现力不如我们,而且只在手臂上测试。最后,Ionescu等人[11]采用了姿势回归的思想,然而他们推理的是三维姿态

与我们最接近的工作是使用CNN和邻接成分分析,向代表姿势的嵌入中的一个点回归[24]。然而,这项工作并没有采用级联网络的方式。然而,DNN回归器的级联已经被用于面部点的定位[22]。在脸部姿势估计的相关问题上,Osadchy等人[17]采用了一个基于NN的姿势嵌入,用对比损失进行训练。

Deep Learning Model for Pose Estimation

我们使用以下符号。为了表达一个姿势,我们将所有k个身体关节的位置编码在姿势向量中,定义为 y = ( . . . , y i T . . . ) , i ∈ 1 , . . . , k y = (. . . , y^T_i. . . ), i∈ {1, . . . , k} y=(...,yiT...),i1,...,k,其中 y i y_i yi包含第 i i i个关节的 x x x y y y坐标。标记的图像用 ( x , y ) (x,y) (x,y)表示,其中x代表图像数据,y是ground truth。

此外,由于关节坐标是绝对图像坐标,因此要将它们标准化为限制人体或其部分的框 b 。在一个简单的情况下,框可以表示完整的图像。这样的方框由其中心 b c ∈ R 2 b_c\in\R^2 bcR2以及宽度 b w b_w bw 和高度 b h b_h bh 定义: b = ( b c , b w , b h ) b =(b_c,b_w,b_h) b=(bc,bw,bh)。然后连接点 y i y_i yi 可以通过框中心进行平移,并通过框大小进行缩放,我们将其称为 b b b 的归一化:
N ( y i ; b ) = [ 1 / b w 0 0 1 / b h ] ( y i − b c ) (1) N(y_i;b)=\begin{bmatrix} 1/b_w &0 \\ 0 &1/b_h \end{bmatrix}(y_i-b_c)\tag{1} N(yi;b)=[1/bw001/bh](yibc)(1)
此外,我们对姿态向量 N ( y ; b ) = ( . . . , N ( y i ; b ) T , . . . ) T N(y;b)=(...,N(y_i; b)^T ,...)^T N(y;b)=(...,N(yi;b)T,...)T 的元素应用相同的归一化,从而得到归一化的姿态矢量。最后,我们使用 N ( x ; b ) N(x; b) N(x;b) 来表示边界框 b b b 对图像 $x $的裁剪,这实际上通过边界框对图像进行了归一化。为简洁起见,我们用 N ( ⋅ ) N(·) N() 归一化表示,其中 b 是完整图像框。

3.1. Pose Estimation as DNN-based Regression

在这项工作中,我们将姿态估计视为回归问题,其中我们训练并使用函数 ψ ( x ; θ ) ∈ R 2 k ψ(x;θ)\in R^{2k} ψ(x;θ)R2k,该函数对于图像x回归到归一化的姿态向量,其中θ表示模型的参数。因此,使用等式(1)的归一化变换,绝对图像坐标中的姿势预测 y ∗ y^* y读取
y 1 ← N − 1 ( ψ ( N ( x ; b 0 ) ; θ 1 ) ; b 0 ) (2) \quad \mathbf{y}^{1} \leftarrow N^{-1}\left(\psi\left(N\left(x ; b^{0}\right) ; \theta_{1}\right) ; b^{0}\right) \tag{2} y1N1(ψ(N(x;b0);θ1);b0)(2)

尽管其公式简单,但该方法的能力和复杂性是 ψ \psi ψ决定的,他基于卷积深度神经网络(DNN)。这种卷积网络由几层组成,每层都是线性变换,后面是非线性变换。第一层将预定义大小的图像作为输入,其大小等于像素数乘以三个颜色通道。最后一层输出回归的目标值,在我们的例子中是2k个坐标。

我们将 ψ \psi ψ的体系结构建立在Krizhevsky等人[14]对图像分类的工作基础上,因为它在对象定位方面也表现出了突出的结果。
在这里插入图片描述
左图:基于DNN的姿态回归示意图。其中卷积层用蓝色表示,全连接层用绿色表示。我们不显示无参数层。右图:在 s 个阶段,将精细化回归应用于子图像以改进前一阶段的预测。

网络由7层组成(见左图2)。用C表示卷积层,用LRN表示局部响应标准化层,用P表示池化层,用F表示全连接层。只有C层和F层包含可学习的参数,而其余的是无参数的。C层和F层都由一个线性变换和一个非线性变换组成,在我们的例子中,非线性变换是一个校正的线性单元。对于C层,尺寸定义为宽度×高度×深度,其中前两个维度具有空间意义,而深度定义了滤波器的数量。如果我们将每层的尺寸写在括号内,那么网络可以简单地描述为 C ( 55 ∗ 55 ∗ 96 ) − L R N − P − C ( 27 ∗ 27 ∗ 256 ) − L R N − P − C ( 13 ∗ 13 ∗ 384 ) − C ( 13 ∗ 13 ∗ 384 ) − C ( 13 ∗ 13 ∗ 256 ) − P − F ( 4096 ) − F ( 4096 ) C(55*55*96)-LRN-P-C(27*27*256)-LRN-P-C(13*13*384)-C(13*13*384)-C(13*13*256)-P-F(4096)-F(4096) C(555596)LRNPC(2727256)LRNPC(1313384)C(1313384)C(1313256)PF(4096)F(4096)。前两个C层的滤波器尺寸为11 × 11和5 × 5,其余三层的滤波器尺寸为3 × 3。在三层之后应用池化,尽管分辨率降低,但仍有助于提高性能。网络的输入是一幅220×220×23的图像,它通过步长为4的(卷积),变为55×55×48输入到网络中。上述模型的参数总数约为40M。

在实验部分,我们展示了这样一种通用架构可以用于学习模型,从而在姿态估计方面达到最先进或更好的性能。此外,这样的模型是一个真正的整体模型-最终的关节位置估计是基于完整图像的复杂非线性变换。此外,这样的模型是一个真正的整体模型-最终的联合位置估计基于完整图像的复杂非线性变换。
此外,DNN的使用消除了设计领域特定姿势模型的需要。相反,这种模型和特征是从数据中学习的。虽然回归损失没有模拟关节之间的显式交互,但这是由所有7个隐藏层隐式捕获的——所有关节回归器共享所有内部特征。

Training

我们与图像分类的损失不同。我们在最后一个网络层上训练线性回归,以代替分类损失,通过最小化预测和真实姿态向量之间的 L 2 L_2 L2距离来预测姿势向量。由于ground truth姿态矢量是在绝对图像坐标中定义的,并且姿态在大小上随图像而变化,我们使用等式(1)的归一化来归一化我们的训练集D。
D N = ( N ( x ) , N ( y ) ) ∣ ( x , y ) ∈ D (3) D_N = {(N(x), N(y))|(x, y) ∈ D} \tag{3} DN=(N(x),N(y))(x,y)D(3)
然后用于获得最佳网络参数的 L 2 L_2 L2损失为:

arg ⁡ min ⁡ θ ∑ ( x , y ) ∈ D N ∑ i = 1 k ∥ y i − ψ i ( x ; θ ) ∥ 2 2 (4) \arg \min _{\theta} \sum_{(x, y) \in D_{N}} \sum_{i=1}^{k}\left\|\mathbf{y}_{i}-\psi_{i}(x ; \theta)\right\|_{2}^{2}\tag{4} argθmin(x,y)DNi=1kyiψi(x;θ)22(4)
为清楚起见,作者写出了对各个关节的优化。应该注意,即使某些图像不是所有关节都被标记,也可以使用上述目的。在这种情况下,将省略总和中的相应项。

上面的参数 θ θ θ是为了在分布式配置中对实现反向传播进行优化。对于每个大小为128的mini-batch,自适应梯度更新计算为[3Adaptive subgradient methods for online learning and stochastic optimization]。学习率作为最重要的参数,设置为0.0005。由于模型参数大,但数据集相对较小,我们使用大量随机图像裁剪,左/右翻转以及F层设置为0.6的DropOut正则化来进行增强数据。

3.2. Cascade of Pose Regressors

级联姿态回归器

前一部分的姿态公式具有以下优点:联合估计基于完整图像并因此依赖于背景。然而,由于其固定输入大小为 220×220,网络查看细节的能力有限——它学习的滤波器以粗略的比例捕获姿态属性。这些粗糙姿态的估计是必要的,但不足以始终精确地定位身体关节。值得注意的是,不能轻易增加输入大小,因为这样将增加已经很多的参数。为了获得更好的精度,我们建议训练一个联级姿态回归器。在第一阶段,级联从估算初始姿态开始,如前一节所述。在随后的阶段,训练附加的DNN回归器来预测从先前阶段到真实位置的关节位置的位移。因此,每个后续阶段可以被认为是当前预测姿态的细化,如图2所示。

此外,每个后续阶段使用预测的关节位置来聚焦于图像的相关部分——围绕来自前一阶段的预测关节位置裁剪子图像,并将该关节的姿态位移回归应用于该子图像。以这种方式,后续的姿态回归器看到更高分辨率的图像,从而学习更精细尺度的特征,这最终实现更高的精度。

我们对级联的所有阶段使用相同的网络架构,但是学习不同的网络参数。对于阶段 s ∈ { 1 , . . . , S } s ∈\{1, ... ,S\} s{1,...,S} 共 S 个级联阶段,我们用 θ s θ_s θs表示网络的学习参数。因此,姿态位移回归量是 ψ ( x ; θ s ) ψ(x;θ_s) ψ(x;θs) 。为了改进给定的关节位置 y i y_i yi,我们将考虑捕获 y i y_i yi周围的子图像的关节边界框 b i b_i bi: b i ( y ; σ ) = ( y i , d i a m ( y ) σ , d i a m ( y ) σ ) b_i(y;σ)=(y_i,diam(y)σ,diam(y)σ) bi(y;σ)=(yi,diam(y)σ,diam(y)σ) 以第 i 个坐标作为中心,并且尺度为 σ 。姿态的直径 d i a m ( y ) diam(y) diam(y) 定义为人体躯干上关节之间的相对距离,例如左肩和右臀的距离,这取决于具体的姿态定义和数据集。
S t a g e 1 : y 1 ← N − 1 ( ψ ( N ( x ; b 0 ) ; θ 1 ) ; b 0 ) Stage 1 : \quad \mathbf{y}^{1} \leftarrow N^{-1}\left(\psi\left(N\left(x ; b^{0}\right) ; \theta_{1}\right) ; b^{0}\right)\\ Stage1:y1N1(ψ(N(x;b0);θ1);b0)

在每个后续阶段 s ≥ 2 s≥2 s2,对于所有关节 i ∈ { 1 , . . . , k } i∈\{1,...,k\} i{1,...,k} 我们通过在子图像上应用回归来精细化位置 y i s − y i ( s − 1 ) y_i^s -y_i^{(s−1)} yisyi(s1) 。子图像由来自之前 ( s − 1 ) (s-1) (s1) 层的 b i ( s − 1 ) b_i^{(s−1)} bi(s1) 定义。然后,作者重新估计方框 b i s b_i^s bis

S t a g e s : y i s ← y i ( s − 1 ) + N − 1 ( ψ i ( N ( x ; b ) ; θ s ) ; b ) ( 6 )  for  b = b i ( s − 1 ) b i s ← ( y i s , σ diam ⁡ ( y s ) , σ diam ⁡ ( y s ) ) Stage s: \quad \mathbf{y}_{i}^{s} \leftarrow \mathbf{y}_{i}^{(s-1)}+N^{-1}\left(\psi_{i}\left(N(x ; b) ; \theta_{s}\right) ; b\right)(6) \\ \text { for } b=b_{i}^{(s-1)} \\ b_{i}^{s} \leftarrow\left(\mathbf{y}_{i}^{s}, \sigma \operatorname{diam}\left(\mathbf{y}^{s}\right), \sigma \operatorname{diam}\left(\mathbf{y}^{s}\right)\right) \\ Stages:yisyi(s1)+N1(ψi(N(x;b);θs);b)(6) for b=bi(s1)bis(yis,σdiam(ys),σdiam(ys))

我们将级联应用于 S 个阶段,如 4.1节 所述。

Training

网络参数 θ 1 θ_1 θ1​ 按照第 3.1 节中的公式 (4) 训练。在随后 s ≥ 2 s\geq2 s2 的阶段,训练完成相同的微分。来自训练样本 ( x , y ) (x,y) (x,y) 的每个关节 i i i 使用不同的边界框 ( y i ( s − 1 ) , σ d i a m ( y ( s − 1 ) ) , σ d i a m ( y ( s − 1 ) ) ) (y_i^{(s−1)},σ diam(y^{(s−1)}),σ diam(y^{(s−1)})) (yi(s1),σdiam(y(s1)),σdiam(y(s1))) 来标准化——这个边界框是从之前的层次中的相同关节为中心——这样就可以根据前一阶段的模型来调整阶段的训练。

由于深度学习方法要训练很大的体量,我们通过对每个图像和关节使用 multiple normalization 来增加训练数据。作者不仅使用前一阶段的预测,而是生成模拟预测。这是通过从二维正态分布 N i ( s − 1 ) \mathcal N_i^{(s−1)} Ni(s1)随机抽样的矢量随机移动关节 i i i 的 ground truth 位置来完成的,二维正态分布其均值和方差等于观察到的训练数据中的偏置量 ( y i ( s − 1 ) − y i ) ( y i ( s − 1 ) ​ − y i ​ ) (y_i^{(s−1)}-y_i) (yi(s−1)​−yi​) (yi(s1)yi)(yi(s1)yi) 相同。被增强的完整训练数据可以这样定义:从均匀的原始数据中采样一个样本和一个关节,然后根据从 N i ( s − 1 ) \mathcal N_i^{(s-1)} Ni(s1)​ 的采样的位移 δ δ δ 生成模拟预测:

D A s = { ( N ( x ; b ) , N ( y i ; b ) ) ∣ ( x , y i ) ∼ D , δ ∼ N i ( s − 1 ) b = ( y i + δ , σ diam ⁡ ( y ) ) } D_{A}^{s}=\quad\left\{\left(N(x ; b), N\left(\mathbf{y}_{i} ; b\right)\right) \mid\right. \\ \left(x, \mathbf{y}_{i}\right) \sim D, \delta \sim \mathcal{N}_{i}^{(s-1)} \\ \left.b=\left(\mathbf{y}_{i}+\delta, \sigma \operatorname{diam}(\mathbf{y})\right)\right\} \\ DAs={(N(x;b),N(yi;b))(x,yi)D,δNi(s1)b=(yi+δ,σdiam(y))}

级联阶段的训练目标如 公式 4 所示,通过特别注意来为每个关节使用正确的标准化:
θ s = arg ⁡ min ⁡ θ ∑ ( x , y i ) ∈ D A s ∥ y i − ψ i ( x ; θ ) ∥ 2 2 \theta_{s}=\arg \min _{\theta} \sum_{\left(x, \mathbf{y}_{i}\right) \in D_{A}^{s}}\left\|\mathbf{y}_{i}-\psi_{i}(x ; \theta)\right\|_{2}^{2} θs=argθmin(x,yi)DAsyiψi(x;θ)22

y i s ← y i ( s − 1 ) + N − 1 ( ψ i ( N ( x ; b ) ; θ s ) ; b ) ( 6 ) (3) \quad \mathbf{y}_{i}^{s} \leftarrow \mathbf{y}_{i}^{(s-1)}+N^{-1}\left(\psi_{i}\left(N(x ; b) ; \theta_{s}\right) ; b\right)(6) \tag{3} yisyi(s1)+N1(ψi(N(x;b);θs);b)(6)(3)

Empirical Evaluation

试验评估部分介绍了作者的实验结果,不逐句翻译了,挑重点说。

数据集:

  1. Frames Labeled In Cinema: 包括来自好莱坞流行电影的 4000 个训练图像和 1000 个测试图像,每个人标记了 10 个上身关节。
  2. Leeds Sports Dataset: 包含 11000 个训练图像和 1000 个测试图像,来自体育活动,大多数只有 150 像素高度,每个人全身总共标记有 14 个关节。

作者将姿态 y 的直径定义直径定义为肩部和臀部之间的距离,并用 d i a m ( y ) diam(y) diam(y)表示。所有数据集的关节都排列在模仿人体的树中。这样就将肢体定义为姿态树中的一对相邻关节。

实验细节 :先对每个数据集使用一组 50 个的小图像来确定算法超参数。为了测量参数的最优性,所使用 PDJ 的平均值为超过所有关节的 0.2。缩放器 σ 被定义为精化关节边界框的大小,作为姿态大小的一部分:对于 FLIC选择 σ = 1.0 ,对于 LSP 作者使用 σ = 2.0 σ=2.0 σ=2.0。级联级数 S 由训练阶段确定,直到算法停止改进为止。对于 FLIC 和 LSP,令 S = 3。

为了改进泛化,对于从 s=2 开始的每个级联阶段,作者通过对每个关节抽样 40 个随机变换过的裁剪框来增加训练数据,如 3.2 节 中所述。因此,对于具有 14 个关节的 LSP 并且在对镜像进行镜像并对数量进行采样后,训练样本数目为 11000×40×2×14=12M,这对于训练大型网络是必要的。

结果与讨论

在这里插入图片描述

表 1 用于 Deep-Pose 的 LSP 上的正确部分(PCP)的百分比为 0.5,以及与五种最先进的方法的比较。作者使用稍微宽松的 PCP 版本,用每个肢体的平均值与预测肢体关节的距离用于确定是否正确检测到肢体。作者使用以人为中心的表示。
在这里插入图片描述
图 6 三级级联网络红色为预测姿态,绿色为ground truth。

5. Conclusion

作者提出了深度神经网络(DNN)在人体姿态估计中的首次应用,将问题表述为基于 DNN 的回归到关节坐标。所呈现的这种回归的级联具有以整体方式捕获关于姿态的背景和推理的优点。因此,作者能够在几个具有挑战性的学术数据集上实现最先进或更好的结果。

此外,作者展示了使用通用卷积神经网络的方法,该网络最初是为分类设计的任务,可以应用于不同的本地化任务。将来,作者计划研究新颖的架构,这些架构可能更适合一般的定位问题,尤其是姿态估计。

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

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

相关文章

php处理支付宝应用网关给接口发送的post参数

php如何接收支付宝应用网关发送的POST请求方式,参数又是GET请求的数据格式配置支付宝应用网关如何接收支付宝异步通知(应用网关接收请求)将&连接的参数分割成数组实例:难点配置支付宝应用网关 首先要在服务器上写一个接口,然后将接口的访问地址设置在支付宝应用…

手把手教Arthas,不再怕排查线上问题了

Arthas是alibaba开源的java诊断工具,支持jdk6,采用命令行交互模式,可以防败的定位和诊断线上的程序运行问题。官方文档:https://arthas.aliyun.com/doc/一、Arthas使用场景是否有一个全局视角来查看系统的运行状况?为什…

六种方式,教你在SpringBoot初始化时搞点事情!

前言 在实际工作中总是需要在项目启动时做一些初始化的操作,比如初始化线程池、提前加载好加密证书....... 那么经典问题来了,这也是面试官经常会问到的一个问题:有哪些手段在Spring Boot 项目启动的时候做一些事情? 方法有很多…

卷积层里的多输入多输出通道、池化层

多输入多通道每个通道都有一个卷积核,结果是所有通道卷积结果的和。无论有多少输入通道,到目前为止我们只用到单输出通道。可以有多个三维卷积核,每个核生成一个输出通道。输出通道数是卷积层的超参数。每个输入通道有独立的二维卷积核&#…

为什么JavaScript这么难学啊?

前言 觉得Js难其实是很正常的,首先这证明你在某些知识点上没有理解透彻,JS挺多的知识点点其实是比较抽象的,比如闭包、原型和原型链等,其次便是不会变通运用,这主要是敲代码熟练度的问题,所以我针对你这种…

架构运维篇(六):MySQL 8.0启用BinLog 支持

上一篇:架构运维篇(五):Centos7/Linux中安装RocketMQ 最新线上的项目终于到多个数据执行的问题,找了团队DBA发现云上的MySQL 默认是没有启用BinLog支持。 小编研究了一下很简单,不过中间也遇到一些坑可以给…

结构重参数化(Structural Re-Parameters)PipLine

文章目录BASICSstrcutural Inception算法思想算法核心算法架构Re-Parameter四部曲:ACNetACNet原理ACNet分析涨点原因推理阶段融合机制Re-Parameter四部曲:RepVGGRepVGG原理RepVGG分析RepVGG BlockStructural Re-Parameters融合conv2d和BN融合1x1conv转换…

【一文讲通】样本不均衡问题解决--下

1欠采样、过采样欠采样:减少多数类的数量(如随机欠采样、NearMiss、ENN)。过采样:尽量多地增加少数类的的样本数量(如随机过采样、以及2.1.2数据增强方法),以达到类别间数目均衡。还可结合两者做…

地址解析协议ARP

目录地址解析协议ARP1、流程2、动态与静态的区别3、ARP协议适用范围地址解析协议ARP 如何从IP地址找出其对应的MAC地址? 1、流程 ARP高速缓存表 当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址&#xf…

Linux常用命令——lsblk命令

在线Linux命令查询工具 lsblk 列出块设备信息 补充说明 lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng…

ES报文辅助生成工具-JavaFX

此程序为基于 Java8 开发的 JavaFX Maven 工程&#xff0c;是 Java 组装ElasticSearch请求报文工具的辅助 Java 代码生成工具&#xff0c;方便开发者快速编写代码。现学现用&#xff0c;写得不好。 工具界面 代码 pom.xml <project xmlns"http://maven.apache.org/P…

Android:URLEncoder空格被转码为“+”号

Android前段和后端接口交互时&#xff0c;经常会遇到特殊字符&#xff0c;比如表情、特殊标点等&#xff0c;这样在Url中是无法识别的&#xff0c;需要进行转码&#xff0c;后端进行解码交互。 但当使用URLEncoder时&#xff0c;会发现字符串中的空格被转换成“”号&#xff0…

客服系统即时通讯IM开发(四)网站实现实时在线访客列表【唯一客服】网站在线客服系统...

在使用我的客服系统时&#xff0c;如果引入了我的js &#xff0c;就可以实时看到网站上的所有访客了 使用 WebSocket 技术来实现实时通信。 在访客登录或退出时&#xff0c;向指定客服的 WebSocket 客户端发送消息。例如&#xff0c;你可以在访客登录时&#xff0c;向指定客服…

测试用例的设计? 万能公式

万能公式(必背)&#xff1a;功能测试性能测试界面测试兼容性测试易用性测试安全测试功能测试 &#xff1a;可能来自于需求文档&#xff0c;也可能来自生活经验性能测试 &#xff1a;功能没有问题不代表性能是ok的&#xff0c;性能往往体现在一些极端情况界面测试 &#xff1a;颜…

Prometheus-基于Consul的自动注册

一、背景介绍 如果我们的物理机有很多&#xff0c;不管是基于"file_sd_config"还是"kubernetes_sd_config"&#xff0c;我们都需要手动写入目标target及创建目标service&#xff0c;这样才能被prometheus自动发现&#xff0c;为了避免重复性工作过多&#…

【182】Java8利用二叉查找树实现Map

本文利用二叉查找树写了一个Map&#xff0c;用来保存键值对。 二叉查找树的定义 二叉查找树又名二叉搜索树&#xff0c;英文名称是 Binary Search Tree&#xff0c;缩写BST。 二叉排序树&#xff0c;英文名称是 Binary Sorted Tree&#xff0c;缩写BST。 二叉查找树、二叉搜…

excel实用技巧:如何构建多级下拉菜单

使用数据有效性制作下拉菜单对大多数小伙伴来说都不陌生&#xff0c;但说到二级和三级下拉菜单大家可能就不是那么熟悉了。什么是二级和三级下拉菜单呢&#xff1f;举个例子&#xff0c;在一个单元格选择某个省后&#xff0c;第二个单元格选项只能出现该省份所属的市&#xff0…

vue-router原理简单实现

vue-router简单实现 初步预习 动态路由 获取id方式 第一种强依赖路由 第二种父传子方式&#xff08;推荐&#xff09; 嵌套路由 相同的头和尾&#xff0c;默认index&#xff0c;替换为detail 编程时导航 this.$router.push() this.$router.repleace() this.$router.g…

吊炸天,springboot的多环境配置一下搞明白了!

1、 使用springboot的profile命名规则profile用于多环境的激活和配置&#xff0c;用来切换生产&#xff0c;测试&#xff0c;本地等多套不通环境的配置。如果每次去更改配置就非常麻烦&#xff0c;profile就是用来切换多环境配置的。在Spring Boot框架中&#xff0c;使用Profil…

漏洞优先级排序的六大关键因素

当我们谈及开源漏洞时&#xff0c;我们会发现其数量永远处于增长状态。根据安全公司 Mend 研究发现&#xff0c;在 2022 年前九个月发现并添加到其漏洞数据库中的开源漏洞数量比 2021 年增加了 33%。该报告从 2022 年 1 月到 2022 年 9 月对大约 1,000 家北美公司进行了代表性抽…