YOLOv7:实时目标检测器的可训练技巧.
实时目标检测是计算机视觉中一个重要的课题,近年来,模型结构重参数化和动态标签分配已成为网络训练和目标检测中的重要优化方向。本文提出了YOLOv7,主要贡献为:
- 为实时检测器提出了高效的聚合网络和基于连接的模型缩放方法,可以更加高效地利用参数和计算量,可以有效地减少实时检测器50\%的参数,并且具备更快的推理速度和更高的检测精度。
- 设计了几种可训练的bag-of-freebies,使实时检测器可以在不提高推理成本的情况下大大提高检测精度。
- 用梯度传播路径的概念分析了适用于不同网络中各层结构重参数化策略,提出了规划的模型结构重参数化,高效替代原始模块。
- 提出了一种新的标签分配方法:由粗到细的引导标签分配策略,为不同输出层分支更好的分配动态目标。
1. 高效的聚合网络
在大多数关于设计高效网络的论文中,主要考虑的因素是参数量、计算量和计算密度。但从内存访存的角度出发出发,还可以分析输入/输出信道比、架构的分支数和元素级操作对网络推理速度的影响。在执行模型缩放时还需考虑激活函数,即更多地考虑卷积层输出张量中的元素数量。
CSPVoVNet是VoVNet的一个变体。除了考虑上述几个设计问题外,CSPVoVNet的体系结构还分析了梯度路径,使不同层能够学习更多样化的特征,还能使推理速度更快、模型更准确。ELAN则发现通过控制最短最长梯度路径,更深的网络可以有效地进行学习并更好地收敛。
本文作者提出了基于ELAN的扩展版本E-ELAN。在大规模ELAN中,无论梯度路径长度和计算模块数量如何,都达到了稳定的状态。但如果更多计算模块被无限地堆叠,这种稳定状态可能会被破坏,参数利用率也会降低。E-ELAN采用expand、shuffle、merge cardinality结构,实现在不破坏原始梯度路径的情况下,提高网络的学习能力。
E-ELAN利用分组卷积来扩展计算模块的通道和基数,将相同的group parameter和channel multiplier用于计算每一层中的所有模块。然后将每个模块计算出的特征图根据设置的分组数打乱成G组,最后将它们连接在一起。此时,每一组特征图中的通道数将与原始体系结构中的通道数相同。最后添加了G组特征来merge cardinality。除了维护原始的ELAN设计架构外,E-ELAN还可以指导不同的分组模块来学习更多样化的特性。
2. 基于连接的模型缩放
模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需求。诸如PlainNet或ResNet等架构在执行放大或缩小过程时,每一层的in-degree和out-degree都不会发生变化,因此可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果这些方法应用于基于连接的架构时会发现当扩大或缩小执行深度,基于连接的转换层计算块将减少或增加。
对于基于连接的模型不能单独分析不同的缩放因子,而必须一起考虑。以scaling-up depth为例,这样的动作会导致转换层的输入通道和输出通道的比例发生变化,这可能会导致模型的硬件使用率下降。因此,必须为基于连接的模型提出相应的复合模型缩放方法。当缩放一个计算块的深度因子时,还必须计算该块的输出通道的变化,然后对转换层进行等量变化的宽度因子缩放。这种复合缩放方法可以保持模型在初始设计时的特性并保持最佳结构。
3. 训练技巧 bag-of-freebies
(1) 规划的重参数化卷积 Planned re-parameterized convolution
尽管RepConv在VGG上取得了优异的性能,但将它直接应用于ResNet和DenseNet或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参数化模块应该和哪些网络搭配使用。通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,而它们为不同的特征图提供了梯度的多样性。基于上述原因,作者使用没有identity连接的RepConv结构。
(2) 辅助训练模块的标签匹配
深度监督是一种常用于训练深度网络的技术,其主要概念是在网络的中间层增加额外的辅助头,以辅助损失指导浅层网络权重。即使对于像ResNet和DenseNet这样收敛效果好的网络结构,深度监督仍然可以显著提高模型在许多任务上的性能。本文作者将负责最终的输出头称为引导头,将用于辅助训练的头称为辅助头。
无论辅助头或引导头,都需要对目标进行深度监督。本文提出一种新的标签分配方法,为辅助头和引导头合理分配软标签。通过引导头的预测来引导辅助头以及自身,即首先使用引导头的预测作为指导,生成从粗到细的层次标签,分别用于辅助头和引导头的学习。
引导头引导“标签分配器”预测结果和ground truth进行计算生成软标签。这组软标签将作为辅助头和引导头的目标来训练模型。这样做的目的是使引导头具有较强的学习能力,由此产生的软标签更能代表源数据与目标之间的分布差异和相关性。此外作者将这种学习看作是一种广义上的残差学习:通过让较浅的辅助头直接学习引导头已经学习到的信息,引导头能更加专注于尚未学习到的残差信息。
从粗到细的引导头生成软标签进行分配。作者生成了两组不同的软标签,即粗标签和细标签,其中细标签与引导头在标签分配器上生成的软标签相同,粗标签是通过降低正样本分配的约束,允许更多的网格作为正目标。原因是一个辅助头的学习能力并不需要强大的引导头,为了避免丢失信息,作者将专注于优化高样本召回的辅助头。对于引导头的输出可以过滤出高精度值的结果作为最终输出。
(3) 其他可训练的bag-of-freebies
- Batch normalization:目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。
- YOLOR中的隐式知识结合卷积特征映射和乘法方式:YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。
- EMA Model:EMA 是一种在mean teacher中使用的技术,作者使用 EMA 模型作为最终的推理模型。
4. 实验分析
作者为边缘GPU、普通GPU和云GPU设计了三种模型,分别被称为YOLOv7-Tiny、YOLOv7和YOLOv7-W6。同时,还使用基本模型针对不同的服务需求进行缩放,并得到不同大小的模型。对于YOLOv7,可进行颈部缩放(module scale),并使用所提出的复合缩放方法对整个模型的深度和宽度进行缩放,此方式获得了YOLOv7-X。对于YOLOv7-W6,使用提出的缩放方法得到了YOLOv7-E6和YOLOv7-D6。此外,在YOLOv7-E6使用了提出的E-ELAN,从而得到了YOLOv7-E6E。由于YOLOv7-tiny是一个面向边缘GPU架构的模型,因此它将使用ReLU作为激活函数;其他模型使用SiLU作为激活函数。
本文将所提出的方法与通用GPU上或边缘GPU上最先进的的目标检测器进行了比较,从表可以看出所提出的方法具有最好的速度-精度均衡性。