一、YOLOv4 结构
YOLOv4 网络模型由CSPDarknet53特征提取网络、PANet(PathAggregation Network,路径聚合网络)、SPP(Spatial Pyramid Pooling,空间金字塔池化)等组成,并引入了 Mish激活函数、自对抗训练(Self-adversarial training)、实现速度和准确性的良性结合,YOLOv4 的网络结构如下图所示。
YOLOv4 合并了 CSPNet(Cross Stage Partial Networks,跨阶段部分连接网络)来当作其特征提取网络,解决了其他大型卷积神经网络中梯度信息重复的问题,从而在精度和速度方面取得了不错的效果。
CSPDarknet53 是 YOLOv4 模型的主体,用于提取目标特征,由 CSP和 Darknet-53 构成。完成目标的提取后,需要对提取的目标进行融合,YOLOv4 特征融合网络包括 SPP 与 PANet。
SPP 网络位于特征提取网络CSPDarknet53 之后,使用了四种不同比例的最大池化来处理输入的特征图,其功能是使卷积神经网络的输入不受固定大小的限制。
YOLOv4 使用了 PANet 网络,它在 SPP 网络之后,即在 FPN 网络自底向上的结构中添加自顶向下的结构,充分利用浅层特征,针对不同的检测器层次,融合不同主干层的特征,进一步提高特征提取能力。
二、YOLOv4 损失函数
损失函数为深度学习的核心组成模块,其功能大致分为以下两个方面:其一是在训练过程中根据损失函数的分布曲线判断训练成果;二是判断真实结果与预测结果的差值。YOLOv4 网络的损失函数如下式所示。
根据提供的文件内容,YOLOv4的损失函数由三部分组成,分别是IOU损失(ciou)、置信度损失(conf)和类别损失(class)。具体的损失函数定义如下:
-
IOU损失(ciou) :
L I O U = α ( v I O U − 1 D ) 2 L_{IOU} = \alpha \left( v_{IOU} - \frac{1}{D} \right)^2 LIOU=α(vIOU−D1)2其中,$ v_{IOU} 是通过坐标框 是通过坐标框 是通过坐标框(x, y, w, h) 计算得出的预测框与真实框的交并比 计算得出的预测框与真实框的交并比 计算得出的预测框与真实框的交并比IOU , , ,D 是两个框体中心点的距离, 是两个框体中心点的距离, 是两个框体中心点的距离,\alpha$是用于平衡损失函数中各项权重的超参数。
-
置信度损失(conf) :
L c o n f = ( 1 − λ ) I B E S T [ σ ( t ) − C g t ] 2 + λ I O B J [ 1 − σ ( t ) ] 2 L_{conf} = \left(1 - \lambda \right) I_{BEST} \left[ \sigma(t) - C_{gt} \right]^2 + \lambda I_{OBJ} \left[ 1 - \sigma(t) \right]^2 Lconf=(1−λ)IBEST[σ(t)−Cgt]2+λIOBJ[1−σ(t)]2其中,$ I_{BEST} 是指示函数,当预测框与真实框的 I O U 最大时为 1 ,否则为 0 ; 是指示函数,当预测框与真实框的IOU最大时为1,否则为0; 是指示函数,当预测框与真实框的IOU最大时为1,否则为0;C_{gt} 是真实框的置信度标签; 是真实框的置信度标签; 是真实框的置信度标签;\sigma(t) 是预测框的置信度;是 是预测框的置信度;是 是预测框的置信度;是I_{OBJ} 指示函数,当预测框包含目标时为 1 ,否则为 0 ; 指示函数,当预测框包含目标时为1,否则为0; 指示函数,当预测框包含目标时为1,否则为0;\lambda$是用于平衡正负样本权重的超参数。
-
类别损失(class) :
L c l a s s = 1 − P g t ⋅ log ( P ) L_{class} = 1 - P_{gt} \cdot \log(P) Lclass=1−Pgt⋅log(P)其中, P g t P_{gt} Pgt是真实框的类别概率, P P P是预测框的类别概率。将这三部分损失函数组合起来,得到YOLOv4的总损失函数:
L o s s = L I O U + L c o n f + L c l a s s Loss = L_{IOU} + L_{conf} + L_{class} Loss=LIOU+Lconf+Lclass
这个损失函数的设计旨在优化目标检测模型在预测框的定位精度、置信度评分以及类别预测上的性能。通过最小化这个损失函数,YOLOv4模型能够在训练过程中学习到更准确的目标检测能力。
三、YOLOv4使用的激活函数
Mish激活函数是一种自门控的激活函数,它结合了ReLU和Sigmoid的优点,能够在不同输入范围内提供非线性激活。Mish激活函数在YOLOv4中使用,旨在提高模型的性能和泛化能力。
M i s h ( x ) = x ⋅ tanh ( log ( 1 + e x ) ) Mish(x) = x \cdot \tanh(\log(1 + e^x)) Mish(x)=x⋅tanh(log(1+ex))
四、YOLOv4 和 YOLOv3 的差异
2020 年 4 月 23 日年 YOLOv4的问世,改变了 YOLOv3 对小目标检测的问题,使检测更加准确。
YOLOv4 相对于 YOLOv3 在输入端引入了 Mosaic 数据增强,在骨干网络中使用不包含全连接层的 CSPDarknet53 模块结构,并使用特征金字塔(Feature Pyramid Networks,FPN)和路径聚合(Path Aggregation Network,PAN)结构进行信息传递与融合。
训练方面,损失函数由 YOLOv3 的二分交叉熵损失函数变为 CIoU_Loss,对损失函数进行优化有助于网络模型在规定的周期内进行局部寻优。
激活函数方面,将 YOLOv3 使用的 Leaky ReLU 激活函数改为 Mish 激活函数。
检测方面,预测框筛选策略由传统的 NMS 变为 DIoU_NMS,不仅考虑了 IoU 的数值,还考虑到了预测框中心点之间的距离关系。
五、往期回顾
yolo入门教程:《吐血录制,yolo11猫狗实时检测实战项目,从零开始写yolov11代码》,视频全程25分钟。
(1)yolo11猫狗实时检测实战项目,从零开始写yolov11代码
(2)yolo实战:从零开始学yolo之yolov1的技术原理
(3)YOLOv1训练过程,新手入门
(4)YOLOv2和yolov1的差异
(13)10张结构图,深入理解YOLOv11算法各个模块
高清视频,3分钟揭秘神经网络技术原理