Yolo系列简单汇总一(yolov1至yolov5)见: https://www.cnblogs.com/xiaxuexiaoab/p/16615242.html
六、YoloX
pdf: https://arxiv.org/pdf/2107.08430.pdf
code: https://github.com/Megvii-BaseDetection/YOLOX
参考链接: https://www.zhihu.com/question/473350307 https://zhuanlan.zhihu.com/p/397993315
由旷视科技开源,与之前 YOLO 最大的区别在于 Decoupled Head,Data Aug,Anchor Free 和样本匹配这几个地方(SimOTA)
6.1 Decoupled Head
将检测头解耦无疑会增加运算的复杂度,但经过权衡速度和性能上的得失,我们最终使用 1个1x1 的卷积先进行降维,并在分类和回归分支里各使用了 2个3x3 卷积,最终调整到仅仅增加一点点参数,YOLOX 在 s,m,l,x 模型速度上的轻微下降也全源自于此。表面上看,解耦检测头提升了 YOLOX 的性能和收敛速度,但更深层次的,它为 YOLO 与检测下游任务的一体化带来可能。如:
- YOLOX + Yolact/CondInst/SOLO ,实现端侧的实例分割
- YOLOX + 34 层输出,实现端侧人体的 17 个关键点检测
6.2 Data Aug
为 Mosaic 配上 Copypaste,依然有不俗的提升。组内的共识是:当模型容量足够大的时候,相对于先验知识(各种 tricks,hand-crafted rules ),更多的后验(数据/数据增强)才会产生本质影响。可 Copypaste 的实现依赖于目标的 mask 标注,而 mask 标注在常规的检测业务上是稀缺的资源。而由于 MixUp 和 Copypaste 有着类似的贴图的行为,还不需要 mask 标注,因此可以让 YOLOX 在没有 mask 标注的情况下吃到 Copypaste 的涨点。不过我们实现的 Mixup,没有原始 Mixup 里的 Bernoulli Distribution 和 Soft Label ,有的仅是 0.5 的常数透明度和 Copypaste 里提到的尺度缩放 ( scale jittering )。 YOLOX 里的 Mixup 有如此明显的涨点,大概是因为它在实现和涨点原理上更接近 Copypaste,而不是原版 Mixup。
要在训练结束前的15个 epoch 关掉 Mosaic 和Mixup ,这对于 YOLOX 非常重要(Mosaic+Mixup 生成的训练图片,远远脱离自然图片的真实分布,并且 Mosaic 大量的 crop 操作会带来很多不准确的标注框)
6.3 Anchor Free 与 Label Assignment
至于为什么 Anchor Free 现在可以上 YOLO ,并且性能不降反升,这与样本匹配有密不可分的联系
-
loss/quality/prediction aware
基于网络自身的预测来计算 anchor box 或者 anchor point 与 gt 的匹配关系,充分考虑到了不同结构/复杂度的模型可能会有不同行为,是一种真正的 dynamic 样本匹配 -
center prior
目标的质心都与目标的几何中心有一定的联系,将正样本限定在目标中心的一定区域内做 loss/quality aware 样本匹配能很好地解决收敛不稳定的问题 -
不同目标设定不同的正样本数量( dynamic k )
Dynamic k 的关键在于如何确定k,有些方法通过其他方式间接实现了动态 k ,比如 ATSS、PAA ,甚至 RetinaNet ,同时,k的估计依然可以是 prediction aware 的,我们具体的做法是首先计算每个目标最接近的10个预测,然后把这个 10 个预测与 gt 的 iou 加起来求得最终的k,很简单有效,对 10 这个数字也不是很敏感,在 5~15 调整几乎没有影响
6.4 训练中出现的问题
-
question
RuntimeError: Ninja is required to load C++ extensions -
solution
https://github.com/Megvii-BaseDetection/YOLOX/issues/1454
wget https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
七、YoloV6
由美团开发,没有论文
code: https://github.com/meituan/YOLOv6
参考链接:https://tech.meituan.com/2022/06/23/yolov6-a-fast-and-accurate-target-detection-framework-is-opening-source.html
7.1 BackBone 和 Neck
受到硬件感知神经网络设计思想的启发,基于 RepVGG style 设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PAN Neck。
-
EfficientRep
-
Rep-PAN
7.2 Efficient Decoupled Head
优化设计了更简洁有效的 Efficient Decoupled Head,在维持精度的同时,进一步降低了一般解耦头带来的额外延时开销。
7.3 训练策略
- Anchor-free 无锚范式
- SimOTA 标签分配策略
- SIoU 边界框回归损失
SIoU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度,SIou论文:https://arxiv.org/ftp/arxiv/papers/2205/2205.12740.pdf
八、YoloV7
pdf: https://arxiv.org/pdf/2207.02696.pdf
code: https://github.com/WongKinYiu/yolov7
8.1 架构方面
提出了基于 ELAN 的扩展 E-ELAN,新的 E-ELAN 完全没有改变原有架构的梯度传输路径,其使用组卷积来增加添加特征的基数(cardinality),并以 shuffle 和 merge cardinality 的方式组合不同组的特征。这种操作方式可以增强不同特征图学得的特征,改进参数的使用和计算效率。
因此,对基于串联的模型,我们不能单独分析不同的扩展因子,而必须一起考虑。该研究提出图 3(c),即在对基于级联的模型进行扩展时,只需要对计算块中的深度进行扩展,其余传输层进行相应的宽度扩展。这种复合扩展方法可以保持模型在初始设计时的特性和最佳结构。
8.2 可训练的「bag-of-freebies」
主要从重参数化模块、动态标签分配两方面阐述,其他措施包括一些已有的方法,如批量归一化(BN)等。
-
重参数化的模块如何替换原始模块
对于模型重参数化,该研究使用梯度传播路径的概念分析了适用于不同网络层的模型重参数化策略,并提出了有计划的重参数化模型。
-
动态标签分配策略如何处理分配给不同输出层的问题
研究者发现使用动态标签分配技术时,具有多个输出层的模型在训练时会产生新的问题:如何为不同分支的输出分配动态目标?
针对这个问题,研究者提出了一种新的标签分配方法,称为从粗粒度到细粒度(coarse-to-fine)的引导式标签分配。
coarse表示通过放宽正样本分配过程的约束,允许更多网格被视为正目标,从而生成粗标签。
-
其他策略
(1) Batch normalization
(2) Implicit knowledge (YOLOR)
(3) EMA model (权重进行移动平均)