【Make YOLO Great Again】YOLOv1-v7全系列大解析(Tricks篇)
共 4689字,需浏览 10分钟
· 2022-11-22
![](https://filescdn.proginn.com/140b60e6e19a1c08b5466b139b615846/c4ed4ee50e9c2ea5b4afa55a822d1593.webp)
极市导读
本文聚焦于YOLO系列的Tricks,对YOLOv1-v7全系列的所使用的Tricks进行了详细的解析。>>加入极市CV技术交流群,走在计算机视觉的最前沿
【Make YOLO Great Again】YOLOv1-v7全系列大解析(Neck篇)
【Make YOLO Great Again】YOLOv1-v7全系列大解析(Head篇)
【Make YOLO Great Again】YOLOv1-v7全系列大解析(输入侧篇)
干货篇
----【目录先行】----
YOLO系列中Tricks的特点 YOLOv1-v3 Tricks解析 YOLOv4 Tricks解析 YOLOv5 Tricks解析 YOLOx Tricks解析 YOLOv6-v7 Tricks解析
【一】YOLO系列中Tricks的特点
YOLO系列中使用的Tricks,从横向角度来看,基本算是当时的最优Trcks;从纵向角度来看,其大部分都具备了可迁移性,强适应性,能够跟随着我们一起进入2020年代,并且依旧发挥余热。YOLO系列中使用的Tricks和Backbone以及输入侧一样,是通用性非常强的一个部分,具备很强的向目标检测其他模型,图像分类,图像分割,目标跟踪等方向迁移应用的价值。从业务向,竞赛向,研究向等角度观察,Tricks部分也能在这些方面比较好的融入,从容。
【二】YOLOv1-v3 Tricks解析
作为YOLO系列的开山之作,YOLOv1中并未用太多的Tricks,但是设计出YOLO的架构,已经足够伟大。
![](https://filescdn.proginn.com/9f0b2231735bbeb2dc9f6d656c7c7f94/76a1d6420376f4ba801fc51c323db053.webp)
等到YOLOv2发布时,引入了当时来说比较有创造性的Tricks,即设计了分类与检测的联合训练方法,使得YOLO能够实时检测多达9000种目标,在这种方法下输出的模型称为YOLO9000。
![](https://filescdn.proginn.com/72df15292aed56629cfddf488f555842/623d517cf5ba80e9a0d2e4c2204660be.webp)
YOLO9000主要在COCO和ImageNet数据集上进行训练,首先在检测数据集上训练一定的epoch来让模型学习定位和检测目标的能力;再使用分类数据集进行训练,从而扩展模型对目标的识别能力。在训练的过程中,混合目标检测和分类的数据集。当输入是检测数据集时,对整个Loss函数计算Loss;当输入是分类数据集时,Loss函数只计算分类Loss,其余部分Loss设为零。YOLO9000使用的联合训练不同于将Backbone在ImageNet上进行预训练,联合训练可以扩充检测识别的目标类别。例如,当模型检测出车的位置后,更进一步将其细分类别轿车、卡车、客车、自行车、三轮车等。
![](https://filescdn.proginn.com/f09ce1f55d14b64441ddb853a6df7702/672456601000ca906f623ba681da23d4.webp)
等到YOLOv3发布时,YOLO系列的整体架构算是基本确定,Adam优化器也开始逐渐流行起来。
![](https://filescdn.proginn.com/453e8e39626246d857e2686d75785de5/2c0abf550de27a8e1df30a0686fdcbd9.webp)
Adam优化器结合了AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。
Adam的优势:
实现简单,计算高效,对内存需求少。 参数的更新不受梯度的伸缩变换影响。 超参数具有很好的解释性,且通常无需调整或仅需很少的微调。 更新的步长能够被限制在大致的范围内(初始学习率)。 能自然地实现步长退火过程(自动调整学习率)。 很适合应用于大规模的数据及参数的场景。 适用于不稳定目标函数。 适用于梯度稀疏或梯度存在很大噪声的问题。
Adam的实现原理:
![](https://filescdn.proginn.com/2a8eca41b2dcc48925cdd24170c40630/e2e82399c492945b099c1277536409c3.webp)
【Rocky的延伸思考】
YOLOv1-v3中使用的Tricks无论是在业务向,竞赛向还是研究向,都可以作为入场Baseline。
【三】YOLOv4 Tricks解析
YOLOv4在YOLOv3的基础上,设计使用了SAT,CmBN和Label Smoothing等Tricks。
![](https://filescdn.proginn.com/852c9142c0fe7d78b8cd9221dffc2e3a/71f9e7e5502ac8edf2de2b726b02dca6.webp)
YOLOv4中的SAT(self adversarial training) 使用基于FGSM原理的梯度攻击技术,生成对抗样本进行对抗训练。
![](https://filescdn.proginn.com/8f6309bfda5d8d7db24aa01120a1a4a8/978a2c90e91a49e8b9dcfb772dfd3ba3.webp)
首先,什么是对抗样本呢?对抗样本是在原图像中增加扰动噪声生成,如上图所示。对抗样本容易使得模型输出错误判断,这给模型的鲁棒性造成了重大挑战。打不过,就加入它。秉持着这个原则,我们在训练时将对抗样本加入训练集一起训练,即为对抗训练。进行对抗训练能扩充训练集的可能性,使得数据集逼近我们想要的数据分布,训练后的模型鲁棒性和泛化性能也大大增强。生成对抗样本的方法主要分为三种,具体逻辑如下图所示。
![](https://filescdn.proginn.com/086fe1ce24615d9ac6e3fdf4f6622948/7b3976300afbcaeca58576235b69961a.webp)
CmBN(Cross mini-Batch Normalization) 是CBN的修改版。CBN主要用来解决在Batch-Size较小时,BN的效果不佳问题。CBN连续利用多个迭代的数据来变相扩大Batch-Size从而改进模型的效果。(每次迭代时计算包括本次迭代的前四个迭代后统一计算整体BN)而CmBN是独立利用多个mini-batch内的数据进行BN操作。(每四个迭代后统一计算一次整体BN)
![](https://filescdn.proginn.com/c83831866cbfd7e0a0845ea2ba0a946d/ea48d18d965c508dba0c5105f4df1bf9.webp)
Label Smooth可以看作是一种防止过拟合的正则化方法。其主要是在One-Hot标签中加入噪声,减少训练时GroundTruth在计算损失函数的权重,来达到防止过拟合的作用,增强模型的泛化能力。通常参数设置如下图中的比例即可。
![](https://filescdn.proginn.com/690bd4c5828fe80c2f8ad209cb84b966/6330cbbdee8b9890c81860c5cfd36b2b.webp)
【Rocky的延伸思考】
YOLOv4中的Tricks具备在业务,竞赛以及研究中进行实验的价值。
【四】YOLOv5 Tricks解析
YOLOv5中使用的Tricks基本上和YOLOv4一致,并在此基础上引入了更多的工程优化逻辑。
![](https://filescdn.proginn.com/c9f980b1a7f93dc4c6a6a98897d36422/4466acd4a34c4fabe6c4ed8150b375bd.webp)
YOLOv5通过不同的训练参数配置,用来获得不同复杂度的模型。
![](https://filescdn.proginn.com/174327f8bb3bef76bbfc5a9dcbf306dc/db77abb01ede80d72c780a32813a9f99.webp)
除此之外,YOLOv5还尝试了混合精度训练和模型EMA(Exponential Moving Average)策略。混合精度训练能在尽可能减少精度损失的情况下利用FP16加速训练,并使用FP16存储模型权重,在减少占用内存的同时起到了加速训练的效果。模型EMA(Exponential Moving Average)策略将模型近期不同epoch的参数做平均,提高模型整体检测性能以及鲁棒性。【Rocky的延伸思考】
YOLOv5 Backbone的易用性使得其不管在业务向,竞赛向还是研究向都非常友好。
【五】YOLOx Tricks解析
YOLOx使用了YOLOv5中提到的模型EMA(Exponential Moving Average)策略,并且使用余弦退火学习率优化训练过程。
![](https://filescdn.proginn.com/431261c3606e00a615f6a44984c64998/4918e6dd5d0b2fa46b5513f6b71226ab.webp)
余弦退火学习率衰策略(CosineAnnealingLR)使得学习率呈周期性变化,但我们通常取它的一个余弦周期来完成整个训练过程。另外,固定步长衰减(StepLR),多步长衰减(MultiStepLR),指数衰减(ExponentialLR)等都是经典实用的学习率衰减策略。固定步长衰减在每隔一定的步长或者epoch对学习率进行一定衰减,而多步长衰减策略比起固定步长衰减则更加灵活,它可以在不同阶段使用不同强度和频率的衰减策略。指数衰减策略是使用指数逻辑对学习率进行衰减。
![](https://filescdn.proginn.com/d72627010b6ed7914be634751d27af7d/c442209c63eed844f9bcb98d2f62ee13.webp)
【六】YOLOv6-v7 Tricks解析
YOLOv6进行了很多蒸馏方向上的尝试。
![](https://filescdn.proginn.com/69812a4aac7197bbae61be0b43be0860/efd2500b48810c714673026f045ca636.webp)
比如Self-distillation,Reparameterizing Optimizer,使用 Channel-wise Distillation进行量化感知训练等方法,进一步加强模型的整体性能。YOLOv7也使用了YOLOv5中提到的模型EMA(Exponential Moving Average)策略,并引入了YOLOR中使用的隐性知识。
![](https://filescdn.proginn.com/8702cbc9854efef5a053e04551abaa95/c77e295d351ff4d2f498aa47889757f6.webp)
YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。
【Rocky的延伸思考】
蒸馏技术在业务,竞赛以及研究中的应用落地,以及蒸馏技术自身的发展,都是值得我们关注的地方。
参考资料
[1] 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
公众号后台回复“速查表”获取
21张速查表(神经网络、线性代数、可视化等)打包下载~
算法竞赛:算法offer直通车、50万总奖池!高通人工智能创新应用大赛等你来战!
技术干货:超简单正则表达式入门教程|22 款神经网络设计和可视化的工具大汇总
极视角动态:芜湖市湾沚区联手极视角打造核酸检测便民服务系统上线!|青岛市委常委、组织部部长于玉一行莅临极视角调研
点击阅读原文进入CV社区
获取更多技术干货