1. 输入端的创新点:训练时对输入端的改进,主要包括 Mosaic 数据增强、cmBN、SAT 自对抗训练。
2. BackBone主干网络:各种方法技巧结合起来,包括:CSPDarknet53、Mish 激活函数、Dropblock。
3. Neck:目标检测网络在 BackBone 和最后的输出层之间往往会插入一些层,比如 YOLOv4 中的 SPP 模块、FPN+PAN 结构。
4. Prediction:输出层的锚框机制和 YOLOv3 相同,主要改进的是训练时的回归框位置损失函数CIOU_Loss,以及预测框筛选的 NMS 变为 DIOU_NMS。
1. Yolov4 中使用的 Mosaic 是参考 2019 年底提出的 CutMix 数据增强的方式,但 CutMix 只使用了两张图片进行拼接,而 Mosaic 数据增强则采用了 4 张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。
这样做增强了对正常背景(context)之外的对象的检测,丰富检测物体的背景。此外,每个小批次包含一个大的变化图像(4倍),因此,减少了估计均值和方差的时需要大 mini-batch 的要求,降低了训练成本。
1. 两个 batch 相关的概念:
2. CBN 主要用来解决在 batch-size 较小时,BN 的效果不佳问题。CBN 连续利用多个迭代的数据来变相扩大 batch size 从而改进模型的效果。这种用前几个 iteration 计算好的统计量来计算当前迭代的 BN 统计量的方法会有一个问题:过去的 BN 参数是由过去的网络参数计算出来的特征而得到的,而本轮迭代中计算 BN 时,它们的模型参数其实已经过时了。
3. CmBN 是基于 CBN 改进的,按照论文的图示的意思,主要的差异在于从滑动窗口变为固定窗口。每个 batch 中的统计不会使用 batch 之前的迭代的信息,仅会累积该 batch 内的 4 次迭代以用于最后一次迭代的更新。这一策略基本与梯度累积策略仍有不同,梯度累加仅仅累加了梯度,但是前面的图中明显可以看到 BN 的统计量实际上也累积了起来,而图中的展现的 BN 似乎更像是梯度累积。
1. CSP 将基础层的特征映射为两个分支,第二个分支通过 Dense block 发送副本到下一个阶段,接着将两个分支的信息在通道方向进行 Concat 拼接,最后再通过 Transition 层进一步融合。
2. 为什么要采用 CSP 模块呢?
CSPNet 全称是 Cross Stage Paritial Network,主要从网络结构设计的角度解决推理中计算量很大的问题。
CSPNet 的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。
因此采用 CSP 模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时,可以保证准确率。
因此 YOLOv4 在主干网络 Backbone 采用 CSPDarknet53 网络结构,主要有三个方面的优点:
(1) 优点一:增强 CNN 的学习能力,使得在轻量化的同时保持准确性。
(2) 优点二:降低计算瓶颈。
(3) 优点三:降低内存成本。
1. Mish 函数图像:
2. Mish 和 Leaky_relu 激活函数的图形对比如下。优点:
(1)从图中可以看出该激活函数,在负值时并不是完全截断,而允许比较小的负梯度流入从而保证了信息的流动。
(2)Mish 激活函数无边界,这让他避免了饱和(有下界,无上界)且每一点连续平滑且非单调性,从而使得梯度下降更好。
1. 传统的 Dropout:随机删除减少神经元的数量,使网络变得更简单。
2. Dropblock:DropBlock 技术在称为块的相邻相关区域中丢弃特征。Dropblock 方法的引入是为了克服 Dropout 随机丢弃特征的主要缺点。Dropout 主要作用在全连接层,在卷积层上效果不太好;而 Dropblock 可以作用在任何卷积层之上。这样既可以实现生成更简单模型的目的,又可以在每次训练迭代中引入学习部分网络权值的概念,对权值矩阵进行补偿,从而减少过拟合。
3. 之前的 Dropout 是随机选择点,现在随机选择一个区域,如下图所示。
1. SPP-Net 全称 Spatial Pyramid Pooling Networks,是何恺明大佬提出的,主要是用来解决不同尺寸的特征图如何进入全连接层的,在网络的最后一层 concat 所有特征图,后面能够继续接 CNN 模块。
SPP 模块的主要目的是解决图像在输入到卷积神经网络时尺寸不一的问题。通过将不同大小的输入映射到固定长度的输出,SPP 模块使得神经网络能够处理任意大小的输入,从而大大提高了模型的灵活性和泛化能力。
2. 具体结构如下:
1. YOLOv3 中的 Neck 只有自顶向下的 FPN,对特征图进行特征融合,而 YOLOv4 中则是 FPN+PAN 的方式对特征进一步的融合。引入了自底向上的路径,使得底层信息更容易传到顶部。
2. 下面是 YOLOv3 的 Neck 中的 FPN,如图所示:FPN 是自顶向下的,将高层的特征信息通过上采样的方式进行传递融合,得到进行预测的特征图。
3. YOLOv4 中的 Neck 如下:
4. YOLOv4 在原始 PAN 结构上进行了一点改进,原本的 PANet 网络的 PAN 结构中,特征层之间融合时是直接通过 addition 的方式进行融合的,而 YOLOv4 中则采用在通道方向 concat 拼接操作融合的,如下图所示。
Q:为什么要把 add 改为 concat?
add:将两个特征图直接相加,是 resnet 中的融合方法,基于这种残差堆叠相加,可以有效地减小因为网络层数加深而导致的 cnn 网络退化问题。add 改变特征图像素值,并没有完全保留原本特征图信息,更多的可以看作对原特征图信息的一种补充,深层特征图在卷积过程中丢失了许多细节信息,通过 add 的方式得以补全,是在二维的平面上对特征图的增强。因此 add 在进行图像特征增强时使用最佳。
concat:将两个特征图在通道数方向叠加在一起,原特征图信息完全保留下来,再对原特征图增加一些我们认为是较好的特征图,丰富了特征图的多样性,是在空间上对原特征图的增强,这样在下一次卷积的过程中我们能得到更好的特征图。
1. 经典 IOU loss,IOU 算法是使用最广泛的算法,大部分的检测算法都是使用的这个算法。不足:没有相交则 IOU=0 无法梯度计算,相同的 IOU 却反映不出实际情况。
2. GIOU(Generalized IOU)损失:GIOU 考虑到,当检测框和真实框没有出现重叠的时候 IOU 的 loss 都是一样的,因此 GIOU 就引入了最小封闭形状 C(C 可以把 A、B 包含在内),在不重叠的情况下能让预测框尽可能朝着真实框前进,这样就可以解决检测框和真实框没有重叠的问题。
如上图所示,绿框是 Prediction 框就记为 A 框,橙框是 Ground truth 框就记为 B 框,最外面的蓝框是将这两个矩形用最小矩形框起来的边界就记为 C 框,然后计算 ,计算这个值与 C 面积的比值,最后用 AB 的 IOU 减去这个比值得到 GIOU。
不足:(1) 对每个预测框与真实框均要去计算最小外接矩形,计算及收敛速度受到。 (2) 在两个预测框完全重叠的情况下,不能反映出实际情况,这时 GIOU 就退化为 IOU。
3. DIOU(Distance IOU)损失:DIOU 考虑到 GIOU 的缺点,也是增加了 C 检测框,将真实框和预测框都包含了进来,但是 DIOU 计算的不是框之间的交并,而是计算的每个检测框之间的欧氏距离,这样就可以解决 GIOU 包含出现的问题。
其中 d = ρ(A,B) 是 A 框与 B 框中心点坐标的欧式距离,而 c 则是包住它们的最小方框的对角线距离。
不足:DIOU 考虑了重叠面积和中心点距离,当目标框包裹预测框的时候,直接度量 2 个框的距离,因此 DIOU 收敛的更快,但并没有考虑到长宽比。
4. CIOU 就是在 DIOU 的基础上增加了检测框尺度的 loss,增加了长和宽的 loss,这样预测框就会更加的符合真实框。
公式:损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比,其中 α 可以当做权重参数。
总结:
IOU_Loss:主要考虑检测框和目标框重叠面积。
GIOU_Loss:在 IOU 的基础上,解决边界框不重合时的问题。
DIOU_Loss:在 IOU 和 GIOU 的基础上,考虑边界框中心点距离的信息。
CIOU_Loss:在 DIOU 的基础上,考虑边界框宽高比的尺度信息。
1. DIOU-NMS:DIOU-NMS 不仅考虑 IOU 的值,还考虑两个框的中心点的距离。如果两个框之间的 IOU 比较大,但是他们中心点之间的距离比较远,则会被认为是不同物体的检测框而不会被过滤掉。
2. 公式:不仅考虑了 IOU 的值,还考虑了两个 Box 中心点之间的距离,其中 M 表示高置信度候选框, B i B_i Bi 就是遍历各个框跟置信度高的重合情况。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务