2.YOLOv5简介
2.1 YOLOv5算法简介
YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其 速度与精度都得到了极大的性能提升。主要的改进思路如下所示:
2.2 YOLOv5网络架构
上图展示了YOLOv5目标检测算法的整体框图。对于一个目标检测算法而言,我们通常可以将其划 分为4个通用的模块,具体包括:输入端、基准网络、 Neck网络与Head输出端,对应于上图中的4个红 色模块。 YOLOv5算法具有4个版本,具体包括: YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种,本 文重点讲解YOLOv5s,其它的版本都在该版本的基础上对网络进行加深与加宽。
输入端: 输入端表示输入的图片。该网络的输入图像大小为608*608,该阶段通常包含一个图像预处理阶段,即将输入图像缩放到网络的输入大小,并进行归一化等操作。
在网络训练阶段, YOLOv5使用Mosaic数据增强操作提升模型的训练速度和网络的精度;并提出了一种自适应锚框计算与自适应图片缩放方法。
基准网络: 基准网络通常是一些性能优异的分类器种的网络,该模块用来提取一些通用的特征表示。 Y
OLOv5中不仅使用了CSPDarknet53结构,而且使用了Focus结构作为基准网络。
Neck网络: Neck网络通常位于基准网络和头网络的中间位置,利用它可以进一步提升特征的多样性及鲁棒性。虽然YOLOv5同样用到了SPP模块、 FPN+PAN模块,但是实现的细节有些不同。
Head输出层: Head用来完成目标检测结果的输出。针对不同的检测算法,输出端的分支个数不尽相同,通常包含一个分类分支和一个回归分支。 YOLOv4利用GIOU_Loss来代替Smooth L1 Loss函数,从而进一步提升算法的检测精度。
2.3 YOLOv5算法详解
2.3.1 YOLOv5基础组件
CBL :CBL模块由Conv+BN+Leaky_relu激活函数组成,如上图中的模块1所示。
Res unit:借鉴ResNet网络中的残差结构,用来构建深层网络, CBM是残差模块中的子模块,如 上图中的模块2所示。
CSP1_X :借鉴CSPNet网络结构,该模块由CBL模块、 Res unint模块以及卷积层、 Concate组成而 成,如上图中的模块3所示。 CSP2_X :借鉴CSPNet网络结构,该模块由卷积层和X个Res unint模块Concate组成而成,如上图 中的模块4所示。
Focus :如上图中的模块5所示, Focus结构首先将多个slice结果Concat起来,然后将其送入CBL 模块中。
SPP :采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合,如上图中的模块6所 示。
2.3.2 输入端细节详解
Mosaic数据增强: YOLOv5中在训练模型阶段仍然使用了Mosaic数据增强方法,该算法是在
CutMix数据增强方法的基础上改进而来的。 CutMix仅仅利用了两张图片进行拼接,而Mosaic数据 增强方法则采用了4张图片,并且按照随机缩放、随机裁剪和随机排布的方式进行拼接而成,具体 的效果如下图所示。这种增强方法可以将几张图片组合成一张,这样不仅可以丰富数据集的同时极 大的提升网络的训练速度,而且可以降低模型的内存需求。
自适应锚框计算: 在YOLO系列算法中,针对不同的数据集,都需要设定特定长宽的锚点框。在网络训练阶段,模型在初始锚点框的基础上输出对应的预测框,计算其与GT框之间的差距,并执行 反向更新操作,从而更新整个网络的参数,因此设定初始锚点框也是比较关键的一环。在YOLOv3 和YOLOv4检测算法中,训练不同的数据集时,都是通过单独的程序运行来获得初始锚点框。 YOLOv5中将此功能嵌入到代码中,每次训练时,根据数据集的名称自适应的计算出最佳的锚点 框,用户可以根据自己的需求将功能关闭或者打开,具体的指令为
parser.add_argument(’–noautoanchor’, action=‘store_ true’,
help=‘disable autoanchor check’),
如果需要打开,只需要在训练代码时增加– noautoanch or选项即可。
自适应图片缩放: 针对不同的目标检测算法而言,我们通常需要执行图片缩放操作,即将原始的输
入图片缩放到一个固定的尺寸,再将其送入检测网络中。 YOLO系列算法中常用的尺寸包括 416*416 ,608 *608等尺寸。原始的缩放方法存在着一些问题,由于在实际的使用中的很多图片 的长宽比不同,因此缩放填充之后,两端的黑边大小都不相同,然而如果填充的过多,则会存在大 量的信息冗余,从而影响整个算法的推理速度。为了进一步提升YOLOv5算法的推理速度,该算法 提出一种方法能够自适应的添加最少的黑边到缩放之后的图片中。具体的实现步骤如下所述。
步骤1:根据原始图片大小与输入到网络图片大小计算缩放比例。
步骤2:根据原始图片大小与缩放比例计算缩放后的图片大小。
步骤3:计算黑边填充数值。
如上图所示, 416表示YOLOv5网络所要求的图片宽度, 312表示缩放后图片的宽度。首先执行相减 操作来获得需要填充的黑边长度104;然后对该数值执行取余操作,即104%32=8,使用32是因为整个 YOLOv5网络执行了5次下采样操作,即2^5 = 32;最后对该数值除以2,即将填充的区域分散到两边。 这样将416*416大小的图片缩小到416*320大小,因而极大的提升了算法的推理速度。
需要注意的是:(1)该操作仅在模型推理阶段执行,模型训练阶段仍然和传统的方法相同,将原 始图片裁剪到416*416大小;(2) YOLOv3与YOLOv4中默认填充的数值是(0,0,0),而YOLOv5中默认 填充的数值是(114,114,114);(3)该操作仅仅针对原始图片的短边而言,仍然将长边裁剪到416。
2.3.3 基准网络细节详解
Focus结构: 该结构的主要思想是通过slice操作来对输入图片进行裁剪。如下图所示,原始输入图片大小为6086083,经过Slice与Concat操作之后输出一个30430412的特征映射;接着经过一个通 道个数为32的Conv层(该通道个数仅仅针对的是YOLOv5s结构,其它结构会有相应的变化),输 出一个30430432大小的特征映射。
CSP结构: YOLOv4网络结构中,借鉴了CSPNet的设计思路,仅仅在主干网络中设计了CSP结构。而YOLOv5中设计了两种CSP结构,以YOLOv5s网络为例, CSP1_X结构应用于Backbone主干网络 中,另一种CSP2_X结构则应用于Neck网络中。 CSP1_X与CSP2_X模块的实现细节如2.1所示。
2.3.4 Neck网络细节详解
FPN+PAN-YOLOv5的Neck网络仍然使用了FPN+PAN结构,但是在它的基础上做了一些改进操
作, YOLOv4的Neck结构中,采用的都是普通的卷积操作。而YOLOv5的Neck网络中,采用借鉴 CSPnet设计的CSP2结构,从而加强网络特征融合能力。 下图展示了YOLOv4与YOLOv5的Neck网 络的具体细节,通过比较我们可以发现:(1)灰色区域表示第1个不同点, YOLOv5不仅利用 CSP2_\1结构代替部分CBL模块,而且去掉了下方的CBL模块;(2)绿色区域表示第2个不同点, YOLOv5不仅将Concat操作之后的CBL模块更换为CSP2_1模块,而且更换了另外一个CBL模块的位 置;(3)蓝色区域表示第3个不同点, YOLOv5中将原始的CBL模块更换为CSP2_1模块。
2.3.5 Head输出端细节详解 GIoU_Loss-YOLOv5中采用GIoU_Lss做Bounding box的损失函数。
CIOU_Loss : 目标检测任务的损失函数一般由分类损失函数和回归损失函数两部分构成,回归损失函数的发展过程主要包括:最原始的Smooth L1 Loss函数、 2016年提出的IoU Loss、2019年提 出的GIoU Loss、2020年提出的DIoU Loss和最新的CIoU Loss函数。
1、 IoU Loss :所谓的IoU Loss,即预测框与GT框之间的交集/预测框与GT框之间的并集。这种损 失会存在一些问题,具体的问题如下图所示,(1)如状态1所示,当预测框和GT框不相交时,即 IOU=0,此时无法反映两个框之间的距离,此时该 损失函数不可导,即IOU_Loss无法优化两个框 不相交的情况。(2)如状态2与状态3所示,当两个预测框大小相同时,那么这两个IOU也相同, IOU_Loss无法区分两者相交这种情况。
2、GIOU_Loss :为了解决以上的问题, GIOU损失应运而生。 GIOU_Loss中增加了相交尺度的衡 量方式,缓解了单纯IOU_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的计算公式,三者的值都是相同的。为了解决这个问题, CIOU_Loss应运而生。
4、CIOU_Loss: CIOU_Loss在DIOU_Loss的基础上增加了一个影响因子,将预测框和GT框的长宽 比也考虑了进来。具体的计算方法如下式所示,即CIOU_Loss将GT框的重叠面积、中心点距离和 长宽比全都考虑进来了。
总而言之, IOU_Loss主要考虑了检测框和GT框之间的重叠面积; GIOU_Loss在IOU的基础 上,解决边界框不重合时出现的问题; DIOU_Loss在IOU和GIOU的基础上,同时考虑了边界框中 心点距离信息; CIOU_Loss在DIOU的基础上,又考虑了边界框宽高比的尺度信息。
3. YOLOv5效果展示与分析
上图展示了不同版本的YOLOv5与EfficientDet检测算法之间的性能比较曲线图。横轴表示的是该算 法在GPU上面的推理时间(ms/img),该数值越小越好;纵轴表示的是该算法在COCO测试数据集上面的 AP指标,该数值越大越好。通过观察我们可以得出以下的初步结论:
( 1)与EfficientDet0相比, YOLOv5s不仅可以获得更高的AP指标,而且可以获得更快的推理速度;
(2)与EfficientDet4相比, YOLOv5x不仅能够获得更高的AP指标,其推理速度是它的1/5左右。
上表展示了不同版本的YOLOv5检测算法在COCO2017验证集与测试集上面的各项指标,具体包 括:模型输入大小、 AP50指标、 Speed、 FPS、 params与GFLOPS。通过观察我们可以得出以下的初步 结论: ( 1) YOLOv5s的输入图片分辨率为640*640,在COCO测试集与验证集上面的AP指标为36.8 , AP50指标为55.6。该算法在V100 GPU上面的推理速度仅仅需要2.2ms,帧率为455FPS,该网络的模 型大小仅为7.3M ;(2) YOLOv5x的输入图像分辨率为640*640,在COCO测试集与验证集上面的AP 指标为50.1 ,AP50指标为68.7。该算法在V100 GPU上面的推理速度仅仅需要6.0ms,帧率为 167FPS,该网络的模型大小为87.7M。(3)我们可以根据现实场景的需要选择合适的模型,如果我们 关注速度的话可以选择YOLOv5s模型;如果我们关注精度的话可以选择YOLOv5x模型。
4. 总结与分析文章来源:https://www.toymoban.com/news/detail-448141.html
YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使得 其速度与精度都得到了极大的性能提升,具体包括:输入端的Mosaic数据增强、自适应锚框计算、自 适应图片缩放操作;基准端的Focus结构与CSP结构; Neck端的SPP与FPN+PAN结构;输出端的损失 函数GIOU_Loss以及预测框筛选的DIOU_nms。除此之外, YOLOv5中的各种改进思路仍然可以应用到 其它的目标检测算法中。文章来源地址https://www.toymoban.com/news/detail-448141.html
到了这里,关于yolo5简介说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!