YOLOv5论文笔记

1、网络结构图

在这里插入图片描述

(1)输入端 :Mosaic数据增强、自适应锚框计算、自适应图片缩放
(2)Backbone :Focus结构,CSP结构
(3)Neck :FPN+PAN结构
(4)Prediction :GIOU_Loss

(1)输入端

Mosiac数据增强

自适应锚框计算

在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框。在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。

在Yolov3、Yolov4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。

但Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。

当然,如果觉得计算的锚框效果不是很好,也可以在代码中将自动计算锚框功能关闭。

自适应图片缩放

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。比如Yolo算法中常用416416,608608等尺寸,缩放后仍然会保持原来的长宽比,只是对缺少的部分用黑边或者灰边填充,使用letterbox函数。
在这里插入图片描述
作者认为,在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。

因此在Yolov5的代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边。
在这里插入图片描述

注意,由于yolo网络经过5次下采样后,缩减为32倍,因为要保证图片尺寸为32的倍数。

(2)backbone

Focus结构

在这里插入图片描述

比如上图的切片示意图,443的图像切片后变成2212的特征图。

以Yolov5s的结构为例,原始6086083的图像输入Focus结构,采用切片操作,先变成30430412的特征图,再经过一次32个卷积核的卷积操作,最终变成30430432的特征图。

YOLOv5s在focus中最后使用32个卷积核,而剩下m,l,x逐渐增多。

CSP结构

在这里插入图片描述
Yolov5与Yolov4不同点在于,Yolov4中只有主干网络使用了CSP结构。

而Yolov5中设计了两种CSP 结构,以Yolov5s网络为例,CSP1_X 结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中

(3)Neck

Yolov5的Neck和Yolov4中一样,都采用FPN+PAN的结构。

Yolov5和Yolov4的不同点在于,Yolov4的Neck结构中,采用的都是普通的卷积操作。而Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。
在这里插入图片描述

(4)输出端

ciou_loss

diou_nms

它对于一些遮挡重叠的目标 ,确实会有一些改进。

2、YOLOv5的四种网络结构

Yolov5代码中的四种网络,和之前的Yolov3,Yolov4中的cfg文件不同,都是以yaml的形式来呈现。
(1)Yolov5s.yaml
在这里插入图片描述
(2)Yolov5m.yaml
在这里插入图片描述
(3)Yolov5l.yaml
在这里插入图片描述
(4)Yolov5x.yaml
在这里插入图片描述
而且四个文件的内容基本上都是一样的,只有最上方的depth_multiple和width_multiple两个参数不同,来进行控制网络的深度和宽度 。四种结构的yaml文件中,下方的网络架构代码都是一样的。

(1)不同的网络深度

在这里插入图片描述
需要注意的是,四种网络结构中每个CSP结构的深度都是不同的。

以yolov5s为例,第一个CSP1中,使用了1个残差组件,因此是CSP1_1。而在Yolov5m中,则增加了网络的深度,在第一个CSP1中,使用了2个残差组件,因此是CSP1_2。

(2)如何利用代码控制深度

控制四种网络结构的核心代码是yolo.py中下面的代码,存在两个变量,n和gd 。我们再将n和gd带入计算,看每种网络的变化结果。
在这里插入图片描述
下面是对该公式的说明:
在这里插入图片描述
以YOLOv5s为例,它的depth_multiple=0.33 ,即gd=0.33 ,而n则由上面红色框中的信息获得,是number那一列,分别是3,9, 9。

代入公式的,gd=0.33,带入(2)中的计算代码,结果n=1。因此第一个CSP1结构内只有1个残差组件,即CSP1_1。

第二个CSP1结构中,n等于第二个数值9,而gd=0.33,带入(2)中计算,结果n=3,因此第二个CSP1结构中有3个残差组件,即CSP1_3。

(3)YOLOv5的网络宽度(即卷积核的个数,也即特征图的厚度)

在这里插入图片描述
如上图表格中所示,四种yolov5结构在不同阶段的卷积核的数量都是不一样的,因此也直接影响卷积后特征图的第三维度,即厚度 ,表示为网络的宽度

以Yolov5s结构为例,第一个Focus结构中,最后卷积操作时,卷积核的数量是32个,因此经过Focus结构,特征图的大小变成30430432。

(4)如何利用代码控制宽度

在yolov5的代码中,控制宽度的核心代码是yolo.py文件里面的这一行:
在这里插入图片描述
它所调用的子函数make_divisible的功能是:
在这里插入图片描述
这里以YOLOv5s为例,
在这里插入图片描述
它的width_multiple=0.5 ,即gw=0.5

以第一个卷积下采样为例,即Focus结构中下面的卷积操作。按照上面Backbone的信息,我们知道Focus中,标准的c2=64,而gw=0.5,代入(4)中的计算公式,最后的结果=32。即Yolov5s的Focus结构中,卷积下采样操作的卷积核数量为32个。再计算后面的第二个卷积下采样操作,标准c2的值=128,gw=0.5,代入(4)中公式,最后的结果=64,也是正确的。

版权声明:本文为CSDN博主「weixin_43981952」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43981952/article/details/121277028

weixin_43981952

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

论文笔记之CSPNet

本文解决的是减少推理计算的问题。 本文收录于CVPR2019 论文地址:https://arxiv.org/pdf/1911.11929.pdf 1. 摘要 目前最先进的能够在计算机视觉任务上取得非常好的结果的方法往往很大程度上