全文目录
专栏链接:深度学习和论文精读
本文并非对论文直接进行翻译,增加了自己对于论文的理解,如有问题请及时指出~
本文大部分图片均参考江大白,侵权可删。
前言
论文题目:YOLOv5(无论文)
论文原文:https://github.com/ultralytics/yolov5
论文来源:无
发表时间:无
1 模型结构
YOLOv5官方代码中,给出的目标检测网络中一共有5个版本,分别是YOLOv5n、YOLOv5s、YOLO5m、YOLO5l、YOLOv5x四个模型,见下图,图源路人贾’ω’。
在YOLOv5中,已经配置了各个版本的参数,大家可以根据自己需求调用(路径:yolov5/models)。其实只是改变了文件中depth_multiple模型深度和width_multiple模型宽度这两个参数,网络结构并没有改变。
本文以下内容根据YOLOv5s版本进行讲解。
2 网络结构
YOLOv5s的整体结构见下图,图源江大白。这里可以用netron工具查看更为详细的网路结构,链接Yolov5s可视化网络结构图。
可以看出,YOLOv5还是分为输入端、Backbone、Neck、Prediction四个部分。
- 输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放
- Backbone主干网络:Focus结构,CSP结构
- Neck:FPN+PAN结构
- Prediction:GIoU Loss
基本组件:
- Focus:基本上就是YOLO v2的passthrough。
- CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
- CSP1_X:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。
- CSP2_X:不再用Res unint模块,而是改为CBL。
- SPP:采用1×1,5x5,9x9,13×13的最大池化的方式,进行多尺度融合。
个人认为YOLOv5和v4的变化不是特别大。
2.1 输入端
2.1.1 Mosaic数据增强
YOLOv5的输入端采用了和YOLOv4一样的Mosaic数据增强的方式。详细内容可以查看YOLOv4当中的介绍。
2.1.2 自适应锚框计算
此部分简单来说就是根据数据集计算初始锚框的大小。YOLO5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
2.1.3 自适应图片缩放
在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。
YOLO算法中常用
416
∗
416
416*416
416∗416,
608
∗
608
608*608
608∗608等尺寸(原因是网络有32倍的下采样,因此必须是32的倍数),比如对下面
800
∗
600
800*600
800∗600的图像进行缩放。
一般的填充方式均为直接缩放填充,但YOLOv5中对此进行了改进,使得推理速度加快。
作者认为,在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。YOLO通过对原始图像自适应缩放,以添加最少的黑边。
第一步:计算缩放比例
原始缩放尺寸是
416
∗
416
416*416
416∗416,都除以原始图像的尺寸后,可以得到0.52,和0.69两个缩放系数,选择小的缩放系数。
第二步:计算缩放后的尺寸
原始图片的长宽都乘以最小的缩放系数0.52,宽变成了416,而高变成了312。
第三步:计算黑边填充数值
将416-312=104,得到原本需要填充的高度。再采用numpy中np.mod取余数的方式,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。YOLOv5中填充的是灰色,即(114,114,114)。实际训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到
416
∗
416
416*416
416∗416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。
2.2 Backbone
2.2.1 Focus结构
YOLOv5在输入图片后,首先通过一个Focus结构,这个结构在YOLOv2时就出现过。
以YOLOv5s的结构为例,原始
608
∗
608
∗
3
608*608*3
608∗608∗3的图像输入Focus结构,采用切片操作,先变成
304
∗
304
∗
12
304*304*12
304∗304∗12的特征图,再经过一次32个卷积核的卷积操作,最终变成
304
∗
304
∗
32
304*304*32
304∗304∗32的特征图。
需要注意的是:YOLOv5s的Focus结构最后使用了32个卷积核。
2.2.2 CSP结构
CSP在YOLOv4中就被引入。YOLOv5与YOLOv4不同点在于,YOLOv4中只有主干网络使用了CSP结构。而YOLOv5中设计了两种CSP结构,以YOLOv5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。
2.3 Neck
YOLOv5现在的Neck和YOLOv4中一样,都采用FPN+PAN的结构。
YOLOv4的Neck结构中,采用的都是普通的卷积操作。而YOLOv5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。
3 总结
整体来说YOLOv5与YOLOv4的相差不大,目前最为常用的YOLO模型就是v5,大家可以集合代码分析整体架构。YOLOv5可以做很多的目标检测任务,只需要整理好数据集便可训练,十分方便。这里给出代码连接https://github.com/ultralytics/yolov5。
相关面试问题
对于单个YOLO版本的相关面试题并不是特别多,大部分都是介绍v1-v5的演变,后续有专门的汇总部分。
参考
深入浅出Yolo系列之Yolov5核心基础知识完整讲解
【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)