system: [SYSTEM]

user: 2. 目标检测算法 2.1. CSPDarknet-53 YOLO系列目标检测算法作为一阶段算法实时性的代表，常用于大量的实际场景中。经过多个版本的迭代，速度不断提高，而在精度方面正不断的赶超二阶段的复杂网络结构算法。DarkNet网络作为一种小众的Backbone，在图像分类的性能堪比ResNet [ 6 ] 系列的卷积神经网络，应用在YOLOv2及之后的版本。YOLOv3的作者将DarkNet网络从最初DarkNet-19更新到DarkNet-53，增加了卷积层的深度和宽度，同时引入了残差单元，在通用特征表示方面得到了极大的提升。 最近的研究从网络层的梯度流动方向出发，在减少网络计算量的同时，实现一个更丰富的梯度结合。CSPNet [ 7 ] 通过切分梯度流动，使得梯度流动是通过不同的网络路径进行传播。CSPDarkNet-53在原始结果DarkNet-53基础上改进了每个阶段的梯度，在每次下采样后将输出特征图的通道一分为二，其中一个路径经过该阶段的所有残差单元，在该阶段的末端与另一个路径进行合并。如图1所示。 该主干网络增强了CNN的学习能力，使得在轻量化的同时保持准确性，降低了计算瓶颈和内存成本。 DarkNet-53的卷积层采用卷积 + BN层 + Leaky RELU的组合，而在CSPDarkNet-53中将Leaky RELU替换成Mish，关于Mish激活函数的优越性质有如下三点：无上界且有界、非单调函数、无穷阶连续性和光滑性。Mish激活函数的应用，在YOLOv4中得到了明显的性能提升。 图1. CSPDarkNet-53的CSP结构 2.2. 检测层与损失函数 在目标检测领域，为了更好的提取融合特征，通常在Backbone和输出层之间插入一些层，这个部分称为Neck。YOLOv4使用了SPP [ 8 ] 模块，相比单纯的使用k*k最大池化的方式，更有效的增加主干特征的接收范围，显著的分离了最重要的上下文特征。 另外，YOLOv4在FPN层的后面还添加了一个自底向上的特征金字塔。其中包含两个PAN结构。这样结合操作，FPN层自顶向下传达强语义特征，而特征金字塔则自底向上传达强定位特征，两者相辅相成，从不同的主干层对不同的检测层进行参数聚合，在输出层进行边框回归时，传统的目标检测模型(比如YOLOv3)等，直接根据预测框和真实框的中心点坐标以及宽高信息设定MSE (均方误差)损失函数。MSE损失函数将检测框中心点坐标和宽高等信息作为独立的变量对待的，而实际上两者之间是有关联的。从直观上来考量，框的中心点和宽高的确存在着一定的关系。使用IOU损失相比MSE损失更能表征其联系，CIOU [ 9 ] 损失在IOU损失的基础上考虑了边框的重合度、中心距离和宽高比的尺度信息，最终YOLOv4在设计损失函数时，在定位损失部分使用了CIOU损失，即L(bbox)。总损失函数为： L o s s = L ( b b o x ) + L ( c o n f ) + L ( c l s ) (1) L ( b b o x ) = λ c o o r d ∑ i = 0 K × K ∑ j = 0 M I i j o b j ( 1 − IOU ( b i ， b ^ i ) + ρ 2 ( b i ， b ^ i ) C 2 + υ 2 ( 1 − IOU ( b i ， b ^ i ) ) + υ ) (2) L ( c o n f ) = − ∑ i = 0 K × K ∑ j = 0 M I i j o b j [ c ^ i log ( c i ) + ( 1 − c ^ i ) log ( 1 − c i ) ]     − λ c o o r d ∑ i = 0 K × K ∑ j = 0 M I i j n o o b j [ c ^ i log ( c i ) + ( 1 − c ^ i ) log ( 1 − c i ) ] (3) L ( c l s ) = − ∑ i = 0 K × K ∑ j = 0 M I i j o b j [ p ^ i ( c ) log ( p i ( c ) ) + ( 1 − p ^ i ( c ) ) log ( 1 − p i ( c ) ) ] (4) 损失函数由定位损失L(bbox)、置信度损失L(conf)和分类损失L(cls)构成。其中，定位损失采用了CIOU损失，置信度损失和分类损失都使用了交叉熵损失。IOU为真实框与预测框的交并比，ρ表示欧式距离， C表示真实框与预测框的最小外界矩形的对角线距离，υ用来度量长宽比的相似性，λ为超参数，K为特征图的大小，M为锚框的数量，第ij个位置为目标时等于1，c为类别，p(c)代表类别的置信度。 2.3. 改进的YOLOv4-Tiny 图2. YOLOv4-tiny的CSP结构 为了方便YOLOv4在移动平台或边缘设备进行部署，使用一个更精简的模型YOLOv4-tiny，该检测网络在YOLOv3-tiny的基础上，引入了残差单元，采用YOLOv4类似的CSP结构，在原有7层卷积层增加至18层，改进的卷积网络能提取更多的语义信息，特征提取能力提升显著。 YOLOv4-tiny的骨干网络使用残差单元进行特征表示，并进行微小改进，将3 × 3卷积前后的特征进行堆叠，保留了原始的信息。类似CSP的结构，如图2所示，跨阶段的特征融合，在残差单元之前，摒弃一半通道的特征，在参数上更精简，梯度传导更加高效，去除了大量的计算冗余。整个骨干网络保留了YOLOv4原有架构4个阶段的形式，32倍下采样，使用两个分支进行预测，覆盖了所有多个尺度的特征。 YOLOv3-tiny仅使用3 × 3 + 最大池化的组合方式进行特征提取与尺度变换，而YOLOv4-tiny考虑了更高效的特征表示，并使用梯度截断使得大量的冗余梯度被剔除，两者的特征表示与梯度传导如下： X k = M a x P o o l ( W k ∗ X k − 1 ) (5) { X k − 4 = W k − 4 ∗ X k − 5 X k − 3 = W k − 3 ∗ X k − 4 [ 0 : C 2 ] X k − 2 = W k − 2 ∗ X k − 3 X k − 1 = W k − 1 ∗ [ X k − 3 ， W k − 2 ∗ X k − 3 ] X k = M a x P o o l ( [ X k − 4 ， X k − 1 ] ) (6) 其中，*为卷积操作，X [0:C] 表示只选取X中0~C的通道，[X 0 ，X 1 ]代表X 0 与X 1 的堆叠操作(即Concat)，MaxPool(X)为池化，公式(5)为YOLOv3-tiny基本结构的特征表示，公式(6)为YOLOv4-tiny的CSP结构的特征表示，如果使用反向传播算法更新权重，则上述两者的权重更新方程可写为： W ′ k = f ( W k ， g k − 1 ) (7) { W ′ k − 4 = f ( W k − 4 ， g k − 5 ) W ′ k − 3 = f ( W k − 3 ， g k − 4 [ 0 : C 2 ] ) W ′ k − 2 = f ( W k − 2 ， g k − 3 ) W ′ k − 1 = f ( W k − 1 ， g k − 3 ， g k − 2 ) W ′ k = f ( W k − 4 ， g k − 1 ) (8) 其中，f(X)为权重更新函数，g i 代表反向传播到第i层的梯度，从公式(7)中可以发现当串联多个基本结构时，大量的梯度信息被重新用于更新不同密集层的权重。这将导致不同的卷积层重复学习复制的梯度信息。而公式(8)使用跨阶段部分残差连接，并与最原始层进行堆叠后经过另一个过渡层W k −1 ，可以看到来自残差变换层的梯度是独立积分的。另一个路径中没有经过残差变换层的特征图X k −1 也是独立积分。因此用于更新权重的梯度信息中，两者之间都不包含属于彼此重复的梯度信息。 跨阶段的特征融合，在残差单元之前，摒弃一半通道的特征，在参数上更精简，梯度传导更加高效，去除了大量的计算冗余。整个骨干网络保留了YOLOv4原有架构4阶段的形式，32倍下采样，使用两个检测分支进行预测，可覆盖多个尺度的特征。 该算法训练过程的数据增强采用了马赛克增强，在基于CutMix [ 10 ] 的两张图片拼接的基础上，采用4张随机缩放、随机裁剪或随机排布的图片进行拼接。这极大地丰富了检测数据集，特别是通过随机缩放增加了更多的小目标，使得网络的鲁棒性更好。 对于损失函数，需要用预测概率去拟合真实概率，而拟合one-hot的真实概率函数会带来两个问题。深度学习的样本中通常会存在少量错误标签，这些错误标签会影响到预测的效果。采用标签平滑策略在训练时假设标签可能存在错误，避免“过分”相信训练样本的标签。