
WeThinkIn
2022/09/18阅读:149主题:橙心
【Make YOLO Great Again】YOLOv1-v7全系列大解析(输入侧篇)

Rocky Ding
公众号:WeThinkIn

写在前面
【Make YOLO Great Again】栏目专注于从更实战,更深刻的角度解析YOLOv1-v7这个CV领域举足轻重的算法系列,并给出其在业务侧,竞赛侧以及研究侧的延伸思考。欢迎大家一起交流学习💪,分享宝贵的ideas与思考~
大家好,我是Rocky。
近年来YOLO系列层出不穷,更新不断,已经到v7版本。Rocky认为不能简单用版本高低来评判一个系列的效果好坏,YOLOv1-v7不同版本各有特色,在不同场景,不同上下游环境,不同资源支持的情况下,如何从容选择使用哪个版本,甚至使用哪个特定部分,都需要我们对YOLOv1-v7有一个全面的认识。
故Rocky将YOLO系列每个版本都表示成下图中的五个部分,逐一进行解析,并将每个部分带入业务侧,竞赛侧,研究侧进行延伸思考,探索更多可能性。
【Make YOLO Great Again】YOLOv1-v7全系列大解析(Neck篇)和【Make YOLO Great Again】YOLOv1-v7全系列大解析(Head篇)已经发布,大家可按需取用~
而本文将聚焦于YOLO系列输入侧知识的分享,希望能让江湖中的英雄豪杰获益,也希望大家提出宝贵的建议与观点,让这个栏目更加繁荣。

So,enjoy(与本文的BGM一起食用更佳哦):
干货篇
----【目录先行】----
-
YOLOv1-v7论文&&代码大放送
-
YOLO系列中输入侧结构的特点
-
YOLOv1 输入侧解析
-
YOLOv2 输入侧解析
-
YOLOv3 输入侧解析
-
YOLOv4 输入侧解析
-
YOLOv5 输入侧解析
-
YOLOx 输入侧解析
-
YOLOv6-v7 输入侧解析
【一】YOLOv1-v7论文&&代码大放送
YOLOv1论文名以及论文地址:You Only Look Once:Unified, Real-Time Object Detection[1]
YOLOv1开源代码:YOLOv1-Darkent[2]
YOLOv2论文名以及论文地址:YOLO9000:Better, Faster, Stronger[3]
YOLOv2开源代码:YOLOv2-Darkent[4]
YOLOv3论文名以及论文地址:YOLOv3: An Incremental Improvement[5]
YOLOv3开源代码:YOLOv3-PyTorch[6]
YOLOv4论文名以及论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection[7]
YOLOv4开源代码:YOLOv4-Darkent[8]
YOLOv5论文名以及论文地址:无
YOLOv5开源代码:YOLOv5-PyTorch[9]
YOLOx论文名以及论文地址:YOLOX: Exceeding YOLO Series in 2021[10]
YOLOx开源代码:YOLOx-PyTorch[11]
YOLOv6论文名以及论文地址:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications[12]
YOLOv6开源代码:YOLOv6-PyTorch[13]
YOLOv7论文名以及论文地址:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[14]
YOLOv7开源代码:Official YOLOv7-PyTorch[15]
【二】YOLO系列中输入侧结构的特点
YOLO系列中的输入侧结构主要包含了输入图像,数据增强算法以及一些预处理操作。
输入侧可谓是通用性最强的一个部分,具备很强的向目标检测其他模型,图像分类,图像分割,目标跟踪等方向迁移应用的价值。
从业务侧,竞赛侧,研究侧等角度观察,输入侧结构也能在这些方面比较好的融入,从容。
【三】YOLOv1 输入侧解析
YOLOv1的输入侧有着朴素的逻辑,做的最多的工作是调整输入图像的尺寸以支持对图像细粒度特征的挖掘与检测。
同样的,YOLO系列的grid逻辑(“分而治之”)也从输入侧开始展开,直到Head侧输出相应结果。


【Rocky的延伸思考】
-
业务侧:YOLOv1 输入侧逻辑非常适合作为新业务的实验性Baseline,快速搭建,快速试错。 -
竞赛侧:YOLOv1 输入侧坦率来说在竞赛中已不具备竞争力,但作为Baseline入场模型也未尝不可。
【四】YOLOv2 输入侧解析
YOLOv2的输入侧在YOLOv1的基础上引入了多尺度训练(Multi-Scale Training),并且优化了预训练模型(High Resolution Classifier)。
多尺度训练(Multi-Scale Training)的逻辑是模型每训练一定的Epoch,改变输入图片的尺寸,使得模型对不同的输入尺寸更鲁棒,能够从容地对不同尺寸的图像进行检测。
论文中使用32的倍数作为输入的尺寸,具体使用了320、352、384、416、448、480、512、544、576、608这10种尺寸。
在预训练模型这块,YOLOv2使用了High Resolution Classifier思想。一般基于ImageNet预训练的模型的输入尺寸都是小于 的。YOLOv2使用的输入尺寸是 ,比YOLOv1的要大,故预训练模型网络需要使用大分辨率输入在ImageNet上进行微调。经过这个操作,YOLOv2的mAP提升了4%。
【Rocky的延伸思考】
-
业务侧:YOLOv2 输入侧的多尺度训练思想完全可以应用于业务baseline模型。 -
竞赛侧:YOLOv2 输入侧的多尺度训练思想在竞赛侧是一个提分利器。 -
研究侧:YOLOv2 输入侧的多尺度训练思想以及High Resolution Classifier具备作为baseline的价值,不管是进行拓展研究还是单纯学习思想。
【五】YOLOv3 输入侧解析
在YOLOv3输入侧Rocky想引入常用基础数据增强技术和高阶数据增强算法。

因为不管是YOLO系列还是二阶段目标检测系列;不管是目标检测还是图像分类和分割,基础数据增强技术和高阶数据增强算法都有很强的实用价值。
高阶数据增强算法:

其中RandErasing将图像的部分区域替换为随机值,或者是训练集的平均像素值。

而GridMask则使用了一个网格掩码,并将掩码进行随机翻转,与原图相乘,从而得到增广后的图像,通过超参数控制生成的掩码网格的大小。

基于NAS搜索的AutoAugment在一系列图像增强子策略的搜索空间中通过搜索算法找到适合特定数据集的图像增强方案。针对不同类型的数据集,会包含不同数量的子策略。每个子策略中都包含两种变换,针对每张图像都随机的挑选一个子策略,然后以一定的概率来决定是否执行子策略中的每种变换方法。

其余方法的细节知识,Rocky将在后续的高阶数据增强专题文章中依次展开,大家敬请期待。
常用基础数据增强技术:
-
颜色变换:在色彩通道空间进行数据增强,比如将某种颜色通道关闭,或者改变亮度值。 -
旋转变换:选择一个角度,左右旋转图像,可以改变图像内容朝向。 -
添加噪声:从高斯等分布中采样出的随机值矩阵加入到图像中。 -
锐化和模糊:使用高斯算子,拉普拉斯算子等处理图像。 -
缩放变换:图像按照比例进行放大和缩小并不改变图像中的内容。 -
平移变换:向上下左右四个维度移动图像。 -
翻转变换:关于水平或者竖直的轴进行图像翻转操作。 -
裁剪变换:主要有中心裁剪与随机裁剪。 -
仿射变换:对图像进行一次线性变换并接上一个平移变换。
【Rocky的延伸思考】
-
基础数据增强技术和高阶数据增强算法不管是在业务侧,竞赛侧还是研究侧都能非常稳定的带来性能的提升。
【六】YOLOv4 输入侧解析
YOLOv4的输入侧在YOLOv3的基础上,使用了Mosaic和CutMix高阶数据增强来提升模型的整体性能。

Mosaic数据增强技术从经典的CutMix优化而来。在CutMix的逻辑中,使用两张图片分别选取部分像素进行拼接,产生新的数据。而Mosaic则在此基础上图片数量增加到四张,并采用随机缩放,裁剪和排布的方式进行拼接。

Mosaic数据增强的优点:
-
优化模型对小目标的检测效果。 -
减少训练算力,由于一次性可以计算4张图片,所以Batch Size可以不用很大,也为YOLOv4在一张GPU卡上完成训练奠定了数据基础。 -
依然是一种增强数据操作,让模型的鲁棒性与泛化性能更优。
而上面提到的CutMix则从Mixup和Cutout优化而来。

由上图可知,Mixup将两张图片按比例混合,其label也按同等比例分配;Cutout则是将图片中的部分像素区域置0,但是label不变;CutMix则是在Cutout的基础上对置0的像素区域随机填充其他图像的部分像素值,label则按同等比例进行分配。

其中, 是二进制 矩阵,用来标记需要裁剪的区域和保留的区域,裁剪的区域值均为 ,其余位置为 。图片 和 组合得到新样本,最后两个图的label也对应求加权和。
CutMix的优势:
-
由于采用填充的形式,合成的图片不会有不自然的混合情形。 -
高价值信息增多,提升训练效率,优化算法性能。 -
作为YOLOv4的Bag of freebies,其不增加模型的推理耗时。 -
增加算法的局部识别与局部定位能力。 -
在输入侧,起到了类似dropout的作用。
【Rocky的延伸思考】
-
业务侧:YOLOv4 输入侧中使用的高阶数据增强可以方便地在业务场景中使用。 -
竞赛侧:YOLOv4 输入侧中提到的Mosaic,CutMix等高阶数据增强在竞赛中是比较有效的Tricks。 -
研究侧:YOLOv4 输入侧具备作为研究Baseline的价值。
【七】YOLOv5 输入侧解析
YOLOv5的输入侧同样使用了Mosaic高阶数据增强策略,并增加自适应图像调整策略。

值得一提的是,正是Mosaic论文的作者提出了YOLOv5,并且YOLOv5的输入侧做了很多工程优化,对工业界非常友好。
而自适应图像调整策略可以优化常规图像缩放填充引入过多无效信息导致Inference耗时增加的问题。其逻辑主要是计算图像原生尺寸与输入尺寸的缩放比例,并获得缩放后的图像尺寸,最后再进行自适应填充获得最后的输入图像,具体代码逻辑可以在datasets.py的letterbox函数中查看。
【Rocky的延伸思考】
-
YOLOv5 输入侧的易用性使得其不管在业务侧,竞赛侧还是研究侧都非常友好。
【八】YOLOx 输入侧解析
YOLOx的输入侧在YOLOv5的基础上摒弃了预训练逻辑,并使用Mosaic和MixUp高阶数据增强算法。

MixUp最初应用在分类任务上,将两张图片通过设定的融合系数进行融合,两个图片上的label也对应融合。

由于Mosaic和MixUp高阶数据增强算法已经足够强大,在这种情况下ImageNet预训练并不能带来有效增益,故YOLOx摒弃了预训练逻辑,并从头训练。
【Rocky的延伸思考】
-
YOLOx 输入侧的逻辑给业务侧,竞赛侧以及研究侧提供了一些新思路,可以尝试将分类和分割领域的高阶增强算法往目标检测迁移应用。
【九】YOLOv6-v7 输入侧解析
YOLOv6-v7的输入侧沿用了YOLOv5的整体逻辑,并没有引入新的Tricks,故就不再展开赘述。


精致的结尾
Rocky将算法高价值面试知识点即“三年面试五年模拟”之独孤九剑秘籍前六式进行汇总梳理成汇总篇,并制作成pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“三年面试五年模拟” 进行取用。由于“三年面试五年模拟”之独孤九剑秘籍pdf版本是Rocky在工作之余进行整理总结,难免有疏漏与错误之处,欢迎大家对可优化的部分进行指正,Rocky将在后续的优化迭代版本中及时更正。
Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于CV算法,算法,开发,IT技术以及工作经验等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)
参考资料
You Only Look Once:Unified, Real-Time Object Detection: https://arxiv.org/pdf/1506.02640.pdf
[2]YOLOv1-Darkent: https://github.com/pjreddie/darknet
[3]YOLO9000:Better, Faster, Stronger: https://arxiv.org/pdf/1612.08242v1.pdf
[4]YOLOv2-Darkent: https://github.com/pjreddie/darknet
[5]YOLOv3: An Incremental Improvement: https://arxiv.org/pdf/1804.02767.pdf
[6]YOLOv3-PyTorch: https://github.com/ultralytics/yolov3
[7]YOLOv4: Optimal Speed and Accuracy of Object Detection: https://arxiv.org/pdf/2004.10934.pdf
[8]YOLOv4-Darkent: https://github.com/AlexeyAB/darknet
[9]YOLOv5-PyTorch: https://github.com/ultralytics/yolov5
[10]YOLOX: Exceeding YOLO Series in 2021: https://arxiv.org/pdf/2107.08430.pdf
[11]YOLOx-PyTorch: https://github.com/Megvii-BaseDetection/YOLOX
[12]YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications: https://arxiv.org/pdf/2209.02976.pdf
[13]YOLOv6-PyTorch: https://github.com/meituan/YOLOv6
[14]YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors: https://arxiv.org/pdf/2207.02696.pdf
[15]Official YOLOv7-PyTorch: https://github.com/WongKinYiu/yolov7
作者介绍
