原文地址:https://arxiv.org/pdf/2207.02696v1.pdf
github地址:GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
阅读本文前默认已熟悉yolov7之前已出的相关版本比如v1-v6、yolox、ppyoloe等
题外话:最近,Yolov7算是引起了一个小轰动。实际上会搜到yolov7在github上有俩个(担心多年的重名问题终于还是出现了),一个star少的但是更早发布的更像是一个框架,也没有对应paper(作者在github上也回应了取名争议,他取名更早,而且v7是因为幸运数字是7,不是版本号)。这篇文章主要是对应star多的更晚的那篇!就在此前几天,美团提出的yolov6(2022年6月底)我简单看了一下,大概就是在yolov5的基础上结合了yolox的anchor-free以及解耦检测头的改进,实际上我觉得没有什么新意(因此好像也不太被业界认可),但是这个yolov7的影响力好像还是挺大的,就如其作者在arxiv文中说的“YOLOv7
在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器。”这篇文章的摘要部分我就不写了,想省时的直接看结论部分吧。
目录
一、介绍
二、相关工作
2.1 实时目标检测
2.2 模型重新参数化
2.3 模型缩放
三、网络结构
3.1 扩展的高效层聚合网络
3.2 基于级联(concatenate)的模型缩放
四、训练方法(tricks)
4.1 计划的重新参数化卷积
4.2 辅助训练模块:coarse-to-fine(由粗到细)引导标签分配策略
4.3 其他tricks
五、实验部分
总结
在本文中,我们提出的实时目标检测器主要希望它能够同时支持移动GPU和从边缘到云端的GPU设备。也指明了yolov7的竞争领域是“实时”目标检测,一定要快!
针对目前目标检测的两个重点:1、模型重新参数化;2、动态标签分配问题。yolov7设计了一些有效方法来解决。比如提出了计划重新参数化模型(planned re-parameterized model)以及从粗到细的引导标签分配(coarse-to-fine lead guided label assignment)。
最终总结yolov7的贡献:(1)设计了几种可供训练的Bag of Freebies(免费包,指的是那些不增加模型复杂度,也不增加推理的计算量的训练方法技巧,来提高模型的准确度)
(2)发现目标检测发展到此的俩个新问题:1、模型重新参数化;2、动态标签分配问题。并且设计了一些方法对策
(3)我们提出了实时目标检测器的“扩展”和“复合缩放”方法,可以有效地利用参数和计算。
(4)减少了参数量、计算量(更快),提高了推理速度和精度
先介绍了当前最先进的实时目标检测器主要是yolo系列和FCOS系列。也提出了要成为最先进的实时目标检测器,优点或者说改进方向有几个:1、更快更强的网络结构;2、更有效的特征集成方法(FPN这种);3、更精确的检测方法;4、更有效的标签分配方法;5、更有效的训练方法;6、更鲁棒(稳健)的损失函数
作者提出,针对上述4、5、6方向,设计了新的Bag of Freebies
模型重新参数化技术在推理阶段将多个计算模块合并为一个。模型再参数化技术可以看作是一种集成技术,我们可以将其分为两类,即模块级集成和模型级集成。为了获得最终的推理模型,模型级重新参数化有两种常见做法。一种是用不同的训练数据训练多个相同的模型,然后平均多个训练模型的权重。另一种是对不同迭代次数下的模型权重进行加权平均。这几年比较热门的是模块级集成方法。这种方法在训练期间将一个模块拆分为多个相同或不同的模块分支,并在推理期间将多个分支模块集成为完全等效的模块。然而,并不是所有提出的重新参数化模块都可以完美地应用于不同的体系结构。因此,我们开发了新的重新参数化模块,并为各种架构设计了相关的应用策略。
模型缩放是一种放大或缩小已设计模型并使其适合不同计算设备的方法。模型缩放方法通常使用不同的缩放因子,例如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征金字塔数),以便在网络参数量、计算、推理速度和精度方面实现良好的权衡。由于提出的yolov7架构是基于级联的,因此我们为该模型设计了一种新的复合缩放方法。
yolov7提出的E-ELAN(最右),采用expand、shuffle、merge cardinality结构,实现在不破坏原始梯度传输路径的情况下,提高网络的学习能力。在体系结构方面,E-ELAN只改变了计算模块中的结构,而过渡层的结构则完全不变。作者的策略是利用分组卷积来扩展计算模块的通道和基数,将相同的group parameter和channel multiplier用于计算每一层中的所有模块。然后,将每个模块计算出的特征图根据设置的分组数G打乱成G组,最后将它们连接在一起。此时,每一组特征图中的通道数将与原始体系结构中的通道数相同。最后,作者添加了G组特征来merge,可以引导不同组的计算块学习更多样化的特征。
通常对于基于级联的模型执行深度缩放,会导致计算块的输出宽度也增加(a到b),因此提出了(c),即在对基于concatenation的模型进行模型缩放时,只需要对计算块中的深度进行缩放,其余过渡传输层进行相应的宽度缩放。保持模型在初始设计时的特性并保持最佳结构。
Planned re-parameterized convolution(RepConv)已经在VGG上取得了优异的性能,但当将它直接应用于ResNet
、DenseNet
和其他架构时,它的精度将显著降低。作者使用梯度流传播路径来分析重参数化的卷积应该如何与不同的网络相结合,发现在具有残差(Res)和串联(Dense)连接的层中使用RepConv不应该有identity connection,因此设计了RepConvN(去除了 identity connection)。作者还相应地设计了计划中的重参数化的卷积(下图为d设计了egh三种可行的方案)。注意其中的Plain代表朴素,普通的意思
这部分比较难理解。作者介绍了一种“深度监督”的优化方法。对于一般的模型(a)而言,这种算法在中间层添加了辅助训练的额外的辅助头(auxiliary head
),改成了(b)这样的结构,将整个网络的检测头分成了辅助头和最终预测的引导头(lead head
)。
过去,在深度网络的训练中,标签分配通常直接指ground truth,并根据给定的规则生成硬标签。然而,近年来,如果以目标检测为例,研究者经常利用网络预测输出的质量和分布,然后结合GT考虑,使用一些计算和优化方法来生成可靠的软标签。例如,YOLO使用边界框回归预测和ground truth的IoU作为客观性的软标签。在本文中,将网络预测结果与GT一起考虑,然后将软标签分配的问题。
于是作者发现一个问题:“如何将软标签分配给 auxiliary head
和lead head
”?目前已有的方案是辅助头和引导头各自独立,分别利用ground truth和它们(辅助头、引导头)各自的预测结果实现标签分配,类似图(c)。
YOLOV7算法中提出了利用引导头的预测结果作为指导,生成从粗到细的层次标签,将这些层次标签分别用于辅助头和引导头的学习,如图(d)和(e)所示。这样做的原因是lead head
具有相对较强的学习能力,因此由此产生的软标签应该更能代表源数据与目标之间的分布和相关性。此外,还可以将这种学习看作是一种generalized residual learning
。通过让较浅的auxiliary head
直接学习lead head
已经学习到的信息,lead head
将更能专注于学习尚未学习到的残余信息。
(1) conv-bn-activation topology
中的Batch normalization
:这部分主要将batch normalization layer
直接连接到卷积层。这样做的目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。
(2) 隐性知识在YOLOR
中结合卷积特征图的加法和乘法方式:YOLOR
中的隐式知识可以在推理阶段通过预计算简化为向量。该向量可以与前一个或后一个卷积层的偏差和权重相结合。
(3) EMA
模型:EMA
是一种在 mean teacher
中使用的技术,在系统中使用 EMA
模型纯粹作为最终的推理模型。
直接上一些对比表和图
yolov7算是目前比较火的一个热点,相对于当前最火的目标检测算法而言,主要优点在速度上很快,可能精度并不是最高的。相对于yolo其他系列而言,创新点基本是一个扩展的高效层聚合网络、基于concatenate模型的模型缩放、重新设计的Re-parameterized convolution、带辅助头的从粗到细的标签匹配等。