第五章 深度学习
八、目标检测
3. 目标检测模型
3.2 YOLO 系列
3.2.4 YOLOv4(2020 年 4 月)
YOLOv4 将最近几年 CV 界大量的研究成果集中在一套模型中,从检测速度、精度、定位准确率上有了明显改善(相对于 YOLOv3,AP 值和 FPS 分别上涨了 10%和 12%)。YOLOv4 主要改进点有:
- 输入端。采用更大的输入图像,采用新的样本增强方法;
- 骨干网。采用新的、改进的骨干网 CSPDarknet53;新的激活函数和 dropout 策略;
- 特征融合部分。插入 SPP,FPN+PAN 等新的结构;
- 输出端。采用改进的损失函数。
3.2.4.1 Backbone, Neck, Head
首先,作者提出了一个目标检测的通用框架,将一个目标检测框架分为 Input,Backbone,Neck,Head 几个部分:
- Input(输入):输入部分,如图像、批次样本、图像金字塔
- Backbone(骨干网):各类 CNN,主要作用是对图像中的特征做初步提取
- Neck(脖子):特征融合部分,主要作用是实现多尺度检测
- Head(头):产生预测结果
YOLOv4 从以上几个结构部分均进行了优化和改进,取得了较好的综合效果。
3.2.4.2 模型结构
YOLOv4 模型结构如下图所示:
3.2.4.3 主要改进
-
输入端
(1)Mosaic 数据增强。Mosaic 是参考 2019 年提出的 CutMix 数据增强的方式,但 CutMix 只使用了两张图片进行拼接,而 Mosaic 数据增强则采用了 4 张图片,随机缩放,随机裁剪,随机排布的方式进行拼接 。这样使得模型更获得更多相关或不相关的上下文信息,学习到更加鲁棒的特征。
(2)自对抗训练(SAT,Self Adversarial Trainning)。自对抗训练代表了一种新的数据增强技术,操作在两个向前后阶段。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自己进行了对抗性的攻击,改变原始图像来制造图像上没有需要的对象的假象。在第二阶段,训练神经网络以正常的方式在修改后的图像上检测目标。
(3)CmBN(交叉小批量归一化)。BN 策略可以缓解梯度消失、过拟合,增加模型稳定性。BN 在计算时仅仅利用当前迭代批次样本进行计算,而 CBN 在计算当前时刻统计量时候会考虑前 k 个时刻统计量,从而实现扩大 batch size 操作。CmBN 是 CBN 的修改版,CBN 在第 t 时刻,也会考虑前 3 个时刻的统计量进行汇合。
-
Backbone 部分
(1)CSPDarknet53。CSPDarknet53 是在 YOLOv3 主干网络 Darknet53 的基础上,借鉴 2019 年的 CSPNet 的经验,产生的 Backbone 结构,其中包含了 5 个 CSP 模块。 其结构如下图所示:
CSPNet(Cross Stage Partial Network,跨阶段局部网络)主要用来提高学习能力同时,降低模型对资源的消耗。每个 CSPX 中包含 3+2 × X 个卷积层,因此整个主干网络 Backbone 中一共包含
2+(3+2×1)+2+(3+2×2)+2+(3+2×8)+2+(3+2×8)+2+(3+2×4)+1=72 个卷积层。每个 CSP 模块前面的卷积核大小都是 3x3,步长为 2,因此可以起到下采样的作用。因为 Backbone 有 5 个 CSP 模块,输入图像是 608 x 608,所以特征图的变化规律是:608->304->152->76->38->19 经过 5 次 CSP 模块后得到 19*19 大小的特征图。Backbone 采用 Mish 激活函数。(2)Mish 激活函数。一种新的、非单调、平滑激活函数,其表达式为f(x)=x∗tanh(log(1+ex))f(x) = x*tanh(log(1+e^x))f(x)=x∗tanh(log(1+ex