1、YOLO v5网络结构
2、输入端
3、Backone网络
4、Neck网络
5、Head网络
1、YOLO v5网络结构
图 1 YOLO v5网络结构图
由上图可知,YOLO v5主要由输入端、Backone、Neck以及Prediction四部分组成。其中:
(1) Backbone:在不同图像细粒度上聚合并形成图像特征的卷积神经网络。
(2) Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
(3) Head: 对图像特征进行预测,生成边界框和并预测类别。
下面介绍YOLO v5各部分网络包括的基础组件:
CBL:由Conv+BN+Leaky_relu激活函数组成
Res unit:借鉴ResNet网络中的残差结构,用来构建深层网络
CSP1_X:借鉴CSPNet网络结构,该模块由CBL模块、Res unint模块以及卷积层、Concate组成
CSP2_X:借鉴CSPNet网络结构,该模块由卷积层和X个Res unint模块Concate组成而成
Focus:首先将多个slice结果Concat起来,然后将其送入CBL模块中
SPP:采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合
2、输入端详解
YOLO v5使用Mosaic数据增强操作提升模型的训练速度和网络的精度;并提出了一种自适应锚框计算与自适应图片缩放方法
2.1 Mosaic数据增强
Mosaic数据增强利用四张图片,并且按照随机缩放、随机裁剪和随机排布的方式对四张图片进行拼接,每一张图片都有其对应的框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框,然后我们将这样一张新的图片传入到神经网络当中去学习,相当于一下子传入四张图片进行学习了。该方法极大地丰富了检测物体的背景,且在标准化BN计算的时候一下子计算四张图片的数据,所以本身对batch size不是很依赖。
2.2 自适应锚框计算
在yolo系列算法中,针对不同的数据集,都需要设定特定长宽的锚点框。在网络训练阶段,模型在初始阶段,模型在初始锚点框的基础上输出对应的预测框,计算其与GT框之间的差距,并执行反向更新操作,从而更新整个网络的参数,因此设定初始锚点框是比较关键的一环。
在yolo V3和yolo V4中,训练不同的数据集,都是通过单独的程序运行来获得初始锚点框。
而在yoloV5中将此功能嵌入到代码中,每次训练,根据数据集的名称自适应的计算出最佳的锚点框,用户可以根据自己的需求将功能关闭或者打开,指令为:
2.3 自适应图片缩放
在目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。而原始的缩放方法存在着一些问题,由于在实际的使用中的很多图片的长宽比不同,因此缩放填充之后,两端的黑边大小都不相同,然而如果填充的过多,则会存在大量的信息冗余,从而影响整个算法的推理速度。为了进一步提升YOLO v5的推理速度,该算法提出一种方法能够自适应的添加最少的黑边到缩放之后的图片中。具体的实现步骤如下所述:
(1) 根据原始图片大小以及输入到网络的图片大小计算缩放比例
(2) 根据原始图片大小与缩放比例计算缩放后的图片大小
(3) 计算黑边填充数值
其中,416表示YOLO v5网络所要求的图片宽度,312表示缩放后图片的宽度。首先执行相减操作来获得需要填充的黑边长度104;然后对该数值执行取余操作,即104%32=8,使用32是因为整个YOLOv5网络执行了5次下采样操作。最后对该数值除以2,即将填充的区域分散到两边。这样将416*416大小的图片缩小到416*320大小,因而极大的提升了算法的推理速度。
3、Backone 网络
3.1 Focus结构
Focus对图片进行切片操作,具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张图片,四张图片互补,长的差不多,但是没有信息丢失,这样一来,将W、H信息就集中到了通道空间,输入通道扩充了4倍,即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图。如下图所示,原始输入图片大小为608*608*3,经过Slice与Concat操作之后输出一个304*304*12的特征映射;接着经过一个通道个数为32的Conv层,输出一个304*304*32大小的特征映射。
3.2 CSP结构
CSPNet主要是将feature map拆成两个部分,一部分进行卷积操作,另一部分和上一部分卷积操作的结果进行concate。
在分类问题中,使用CSPNet可以降低计算量,但是准确率提升很小;
在目标检测问题中,使用CSPNet作为Backbone带来的提升比较大,可以有效增强CNN的学习能力,同时也降低了计算量。
yolo V5设计了两种CSP结构,CSP1_X结构应用于Backbone网络中,CSP2_X结构应用于Neck网络中。
4、Neck网络
在YOLO v4中开始使用FPN-PAN。其结构如下图所示,FPN层自顶向下传达强语义特征,而PAN塔自底向上传达定位特征。
yoloV5的Neck仍采用了FPN+PAN结构,但是在它的基础上做了一些改进操作,yoloV4的Neck结构中,采用的都是普通的卷积操作,而yoloV5的Neck中,采用CSPNet设计的CSP2结构,从而加强了网络特征融合能力。
5、Head网络
YOLO v5采用CIOU_LOSS 作为bounding box 的损失函数。下面依次对IOU_Loss、GIOU_Loss、DIOU_Loss以及CIOU_Loss进行介绍。
(1) IOU_Loss:预测框与GT框之间的交集/预测框与GT框之间的并集。这种损失存在一些问题:
如下图所示,当预测框和GT框不相交时,即IoU=0,此时无法反映两个框之间的距离,此时该损失函数不可导,即IoU Loss无法优化两个框不相交的情况;当两个预测框大小相同时,那么这两个IOU也相同。
(2)GIOU_Loss:为了解决以上的问题,GIOU_Loss增加了相交尺度的衡量方式。其引入最小外接矩形及外接矩形与并集的差集。
但是这种方法并不能完全解决这种问题,仍然存在着其他的问题。如上图所示,状态1、2、3都是预测框在GT框内部且预测框大小一致的情况,这时预测框和GT框的差集都是相同的,因此这三种状态的GIoU值也都是相同的,这时GIoU退化成了IoU,无法区分相对位置关系。
(3)DIOU_Loss:针对IOU和GIOU损失所存在的问题,DIOU为了解决如何最小化预测框和GT框之间的归一化距离这个问题,DIOU_Loss考虑了预测框与GT框的重叠面积和中心点距离,当GT框包裹预测框的时候,直接度量2个框的距离,因此DIOU_Loss的收敛速度更快一些。
如下图所示,当GT框包裹预测框时,此时预测框的中心点的位置都是一样的,因此按DIOU_Loss的计算公式,三者的值都是相同的。
(4)CIOU_Loss:在DIOU_Loss的基础上增加了一个影响因子,将预测框和GT框的长宽比也考虑了进来。具体的计算方法如下式所示,即CIOU_Loss将GT框的重叠面积、中心点距离和长宽比全都考虑进来了。
综上所述,IOU_Loss主要考虑了检测框和GT框之间的重叠面积;GIOU_Loss在IOU的基础上,解决边界框不重合时出现的问题;DIOU_Loss在IOU和GIOU的基础上,同时考虑了边界框中心点距离信息;CIOU_Loss在DIOU的基础上,又考虑了边界框宽高比的尺度信息。
参考资料:YOLOv4算法详解_WZZ18191171661的博客-CSDN博客_yolov4算法