YOLOv5学习笔记

转载于:深入浅出Yolo系列之Yolov5核心基础知识完整讲解_江南研习社-CSDN博客_yolov5

1 网络结构

Yolov5官方代码中,给出的目标检测网络中一共有4个版本,分别是 Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。

YOLOv5学习笔记

YOLOv5学习笔记

(1)Yolov5s.yaml

YOLOv5学习笔记

(2)Yolov5m.yaml

YOLOv5学习笔记

(3)Yolov5l.yaml

YOLOv5学习笔记

(4)Yolov5x.yaml

YOLOv5学习笔记

四种结构就是通过上面的两个参数,来进行控制网络的 深度宽度。其中 depth_multiple控制网络的 深度width_multiple控制网络的 宽度

YOLOv5学习笔记

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

2 Yolov5核心基础内容

2.1输入端

(1)Mosaic数据增强

(2) 自适应锚框计算

在Yolo算法中,针对不同的数据集,都会有 初始设定长宽的锚框

在网络训练中,网络在初始锚框的基础上输出预测框,进而和 真实框groundtruth进行比对,计算两者差距,再反向更新, 迭代网络参数

因此初始锚框也是比较重要的一部分,比如Yolov5在Coco数据集上初始设定的锚框:

YOLOv5学习笔记

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

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

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

YOLOv5学习笔记

控制的代码即 train.py中上面一行代码,设置成 False,每次训练时,不会自动计算。

(3)自适应图片缩放

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。

比如Yolo算法中常用 416416,608608等尺寸,比如对下面 800*600的图像进行缩放。

YOLOv5学习笔记

Yolov5代码中对此进行了改进,也是 Yolov5推理速度能够很快的一个不错的trick。

作者认为,在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。

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

YOLOv5学习笔记

图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。

这种方式在之前github上Yolov3中也进行了讨论:https://github.com/ultralytics/yolov3/issues/232

在讨论中,通过这种简单的改进,推理速度得到了37%的提升,可以说效果很明显。

但是有的同学可能会有 大大的问号??如何进行计算的呢?大白按照Yolov5中的思路详细的讲解一下,在 datasets.py的letterbox函数中也有详细的代码。

第一步:计算缩放比例

YOLOv5学习笔记

原始缩放尺寸是416*416,都除以原始图像的尺寸后,可以得到0.52,和0.69两个缩放系数,选择小的缩放系数。

第二步:计算缩放后的尺寸

YOLOv5学习笔记

原始图片的长宽都乘以最小的缩放系数0.52,宽变成了416,而高变成了312。

第三步:计算黑边填充数值

YOLOv5学习笔记

将416-312=104,得到原本需要填充的高度。再采用numpy中np.mod取余数的方式,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。

此外,需要注意的是:

a.这里大白填充的是黑色,即 (0,0,0),而Yolov5中填充的是灰色,即 (114,114,114),都是一样的效果。

b.训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416*416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。

c.为什么np.mod函数的后面用 32?因为Yolov5的网络经过5次下采样,而2的5次方,等于 32。所以至少要去掉32的倍数,再进行取余。

2.2 Backbone

1)Focus结构

YOLOv5学习笔记

Focus结构,在Yolov3&Yolov4中并没有这个结构,其中比较关键是切片操作。

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

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

需要注意的是:Yolov5s的Focus结构最后使用了32个卷积核,而其他三种结构,使用的数量有所增加,先注意下,后面会讲解到四种结构的不同点。

(2)CSP结构

Yolov4网络结构中,借鉴了CSPNet的设计思路,在主干网络中设计了CSP结构。

YOLOv5学习笔记

Yolov5与Yolov4不同点在于,Yolov4中只有主干网络使用了CSP结构。

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

YOLOv5学习笔记

2.3 Neck

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

Yolov4的Neck结构中,采用的都是普通的卷积操作。而Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。

YOLOv5学习笔记

Original: https://blog.csdn.net/weixin_44570701/article/details/122135224
Author: 「已注销」
Title: YOLOv5学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/692441/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球