AI编辑:深度眸
0 摘要
论文:暂无
github: https://github.com/ultralytics/yolov5
我注释版本:
https://github.com/hhaAndroid/yolov5-comment
关于yolov5是否应该赋予这个名称,网上众说纷纭,[如何评价YOLOv5?]讨论非常热烈,在最近的[小麦检测比赛]上也有讨论。作为技术人员,我对此不进行评论,但是由于其在各个数据集上体现出收敛速度快,模型可定制性强的特点,故还是非常有必要深入研究下源码。 本文从可视化角度结合源码进行分析,需要特别注意的是:yolov5还在快速迭代中,可能后续改动非常大,所以我仅仅以当前最新版本也就是2020.08.07时候clone的版本为例进行分析。我增加了很多注释,如果需要我新增注释以及可视化部分代码的人,可以点击注释版本github。 yolov5和前yolo系列在网络设计方面差别不大,如果要说差别的话,那就是在loss设计上面和前yolo系列存在较大差别,后面会细说。简单概述来说整个yolov5就是:通过应用类似EfficientNet的channel和layer控制因子来灵活配置不同复杂度的模型,并且在正负样本定义阶段采用了跨邻域网格的匹配策略,从而得到更多的正样本anchor,加速收敛。 网上也出现了一些yolov5的解析,但是我觉得要么写的太简单,要么没有分析到真正核心地方,故才有了这篇文章。通过对代码详细分析,并配合可视化gt和anchor分析,方便理解算法核心思想。由于本人水平有限,可能有理解错误的地方,烦请指正,谢谢。
1 整体设计
1.1 模型设计
yolov5的整体模型和yolov4差别很小,主要特点是灵活度比yolov4更高。yolov4典型结构是cspdarknet53+panet+spp+yolov3 head
YOLOv4
The model in YOLOv4 paper.
Backbone - CSPDarknet53 with Mish activation
Neck - PANet with Leaky activation
Plugin Modules - SPP
如果对yolov4网络结构不太清楚的,可以参考知乎文章[https://zhuanlan.zhihu.com/p/143747206](这位作者也出了yolov5的结构解析),为了方便分析,从里面截一张图,如有侵权,请联系我删除:
整个yolov4网络结构其实是非常清晰的,而yolov5基本没有啥变化,具体差别后面会写,先简单分析下yolov4结构:
(1) CSPDarknet53,CSP就是CSPNet论文里面跨阶段局部融合网络,仿照的是Densenet密集跨层跳层连接思想,但是考虑到内存消耗过大,故修改为部分局部跨层融合做法,图示如上所示
(2) neck模块采用的是PANet和增强模块SPP。SPP结构非常容易理解,就是不同kernel size的pool操作进行融合,在yolov3的改进版中也有应用,对整个运行速度影响很小,但是效果提升明显。而PANet是FPN结构的改进版本,目的是加快信息之间的流通,具体细节可以参考想读懂YOLOV4,你需要先了解下列技术(二)
(3) head部分没有任何改动,和yolov3和yolov4完全相同,也是三个输出头,stride分别是8,16,32,大输出特征图检测小物体,小输出特征图检测大物体
yolov5的模型构建仿照了darknet中采用的cfg模式,即通过配置文件来构建网络,但是考虑到da