论文地址:https://arxiv.org/pdf/2207.02696.pdf
代码地址:https://github.com/WongKinYiu/yolov7
近年来,针对不同的边缘设备,仍在开发实时目标检测器。例如:MCUNet和NanoDet的优化主要致力于低功耗的单片机,提高边缘CPU的推理速度。而YOLOX和YOLOR等方法则专注于提高各种gpu的推理速度。近年来,实时目标检测器的发展主要集中在高效体系结构的设计上。至于可以在CPU上使用的实时目标检测器,它们的设计大多基于MobileNet , ShuffleNet,或GhostNet。另一种主流的实时目标检测器是针对GPU开发的,它们大多使用ResNet、DarkNet或DLA,然后使用CSPNet策略来优化架构。本文提出的方法的发展方向不同于目前主流的实时目标检测器。除了架构优化之外,本文提出的方法将重点放在培训过程的优化上。重点将是一些优化的模块和优化方法,可以加强训练成本,以提高目标检测的准确性,但不增加推理成本。将所提出的模块和优化方法称为bag-of-freebies。
近年来,模型重新参数化和动态标签分配已成为网络训练和目标检测中的重要课题。主要是在上述新概念提出之后,目标检测器的训练发展出了许多新问题。在本文中,将介绍一些作者发现的新问题,并设计有效的方法来解决它们。在模型重参数化方面,结合梯度传播路径的概念,分析了不同网络中各层的模型重参数化策略,提出了规划重参数化模型。此外,当使用动态标签分配技术时,多输出层模型的训练会产生新的问题。即:如何为不同分支的输出分配动态目标?针对这一问题,提出了一种新的标签分配方法——粗到细引导标签分配方法。
本文的主要贡献如下:
(1)设计了几种可训练的检测方法,使实时目标检测在不增加推理代价的情况下大大提高了检测精度;
(2)对于目标检测方法的发展,作者发现了两个新的问题,即重参数化的模块如何取代原有的模块,以及动态标签分配策略如何处理对不同输出层的分配。此外,还提出了解决这些问题所带来的困难的方法;
(3)提出了可有效利用参数和计算量的目标检测器扩展和复合缩放方法;
(4)该方法可有效减少实时目标检测器40%左右的参数和50%的计算量,具有更快的推理速度和更高的检测精度。
一、实现细节:
(一)、现有实施目标检测器算法
目前最先进的实时目标检测器主要基于YOLO和FCOS]。他们能够成为最先进的实时对象检测器通常需要以下特征:
(1)更快更强的网络架构;
(2)一种更有效的特征集成方法;
(3)更精确的检测方法;
(4)更鲁棒的损失函数;
(5)一种更有效的标签分配方法;
(6)一种更有效的训练方法。
在本文中,作者不打算探索需要额外数据或大型模型的自我监督学习或知识蒸馏方法。相反,将针对上述(4)、(5)和(6)的最先进方法衍生的问题,设计新的可训练的bag-of-freebies方法。
(二)、模型重参数化
模型重参数化技术在推理阶段将多个计算模块合并为一个。模型重参数化技术可以看作是一种集成技术,可以将其分为两类,即模块级集成和模型级集成。为了获得最终的推理模型,有两种常见的模型级重参数化实践。一种是用不同的训练数据训练多个相同的模型,然后平均多个训练模型的权值。二是对不同迭代次数的模型权值进行加权平均。模块级重参数化是近年来比较热门的研究课题。这种方法在训练期间将一个模块拆分为多个相同或不同的模块分支,并在推理期间将多个分支模块集成为完全等价的模块。然而,并不是所有提出的重参数化的模块都能完美地应用于不同的架构。考虑到这一点,作者开发了新的重参数化模块,并为各种体系结构设计了相关的应用策略。
(三)、模型缩放技术
模型缩放是一种放大或缩小已经设计好的模型,使其适合不同的计算设备的方法。模型缩放法通常使用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征金字塔数),从而在网络参数的数量、计算量、推理速度和精度方面达到良好的权衡。网络架构搜索(Network architecture search, NAS)是一种常用的模型扩展方法。NAS可以从搜索空间中自动搜索合适的比例因子,而无需定义过于复杂的规则。NAS的缺点是需要非常高的训练成本来完成模型缩放因子的搜索。在之前的工作中,研究者分析了缩放因子与参数量和操作量的关系,试图直接估计一些规则,从而得到模型缩放所需的缩放因子。通过查阅文献,作者发现几乎所有的模型缩放方法都是独立分析单个缩放因子的,甚至复合缩放类别中的方法也是独立优化缩放因子的。这是因为大多数流行的NAS架构都处理不太相关的伸缩因子。作者观察到所有基于级联的模型,如DenseNet或VoVNet,当这些模型的深度被缩放时,会改变某些层的输入宽度。由于提出的体系结构是基于串联的,必须为此模型设计一种新的复合缩放方法。
二、实现方法
(一)、扩展的高效层聚合网络
在大多数关于设计高效架构的文献中,主要考虑的无非是参数的数量、计算量和计算密度。Ma等还从内存访问代价的特点出发,分析了输入/输出通道比、体系结构分支数量和单元操作对网络推理速度的影响。Dollar等在进行模型缩放时还考虑了激活,即更多地考虑卷积层输出张量中的元素数量。下图 (b)中的CSPVoVNet设计是VoVNet的变体。CSPVoVNet的架构]除了考虑上述的基本设计问题外,还对梯度路径进行了分析,使不同层的权值能够学习到更多样化的特征。上述梯度分析方法使得推理更快、更准确。下图 ©中的ELAN考虑了以下设计策略:如何设计一个高效的网络?他们得出结论:通过控制最短最长梯度路径,深度网络可以有效学习和收敛。在本文中,作者提出了基于ELAN的Extended-ELAN (E-ELAN),其主要架构如图2 (d)所示。
上图为扩展的高效层聚合网络。提出的扩展ELAN (E-ELAN)完全不改变原有架构的梯度传输路径,而是利用分组卷积来增加新增特性的基数,并以一种shuffle合并基数的方式将不同组的特性组合起来。这种操作方式可以增强通过不同特征映射学习到的特征,提高参数和计算的利用率。
在大规模ELAN中,无论梯度路径长度和计算块的堆叠数量如何,都达到了稳定状态。如果无限地叠加更多的算子,可能会破坏这种稳定状态,导致参数利用率下降。提出的E-ELAN利用扩展、shuffle、合并基数来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。在体系结构上,E-ELAN只改变了算子的体系结构,而过渡层的体系结构完全不变。本文的策略是使用分组卷积来扩展计算块的通道和基数。将对一个计算层的所有计算块应用相同的组数和通道乘法器。然后,将每个计算块计算出的特征映射,按照设定的组参数g,洗牌到g组中,然后拼接在一起。此时,每组feature map中的通道数将与原架构中的通道数相同。最后,添加g组特征映射来执行合并基数。除了保持原来ELAN的设计架构外,E-ELAN还可以引导不同的计算块组学习更多不同的特征。
(二)、基于串联的模型的模型缩放
模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如,effentnet的缩放模型考虑了宽度、深度和分辨率。scale - yolov4的缩放模型是调整阶段数。中,Dollar等人分析了香草卷积和组卷积在进行宽度和深度缩放时对参数量和计算量的影响,并以此设计了相应的模型缩放方法。以上方法主要应用于PlainNet、ResNet等架构中。当这些架构在执行放大或缩小时,每一层的输入和输出不会发生变化,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用到基于连接的体系结构中,将发现当对深度进行向上或向下缩放时,基于连接的计算块之后的转换层的输入将会降低或增加,如下图 (a)和(b)所示。
从上述现象可以推断,对于基于串联的模型,不能单独分析不同的比例因子,而必须一起考虑。以按比例放大深度为例,这种行为会导致过渡层的输入通道和输出通道的比例变化,从而导致模型的硬件使用量下降。因此,对于基于级联的模型,必须提出相应的复合模型缩放方法。当缩放一个计算块的深度因子时,还必须计算该块输出通道的变化。然后,将对过渡层进行相同变化量的宽度因子缩放,结果如图3 ©所示。提出的复合缩放方法可以保持模型在初始设计时的属性,并保持最优结构。
基于串联的模型的模型缩放。从(a)到(b),观察到当对基于级联的模型进行深度缩放时,计算块的输出宽度也会增加。这种现象会导致后续传输层的输入宽度增大。因此,提出©,即对基于级联的模型进行模型缩放时,只需要对计算块中的深度进行缩放,其余的传输层进行相应的宽度缩放。
(三)、重参数化卷积
虽然RepConv在VGG上已经取得了优异的性能,但当将其直接应用于ResNet和DenseNet等架构时,其精度会显著降低。用梯度流传播路径来分析如何将重参数化的卷积与不同的网络相结合。并据此设计了有计划的重参数化卷积。
RepConv实际上是在一个卷积层中结合了3乘3卷积、1乘1卷积和跳连接。通过分析RepConv与不同架构的结合及其性能,我们发现RepConv中的跳连接破坏了ResNet中的残差和DenseNet中的拼接,为不同的特征映射提供了更多的梯度多样性。基于上述原因,使用无跳连接的repconv (RepConvN)来设计计划重参数化卷积的架构。当一个带有残差或拼接的卷积层被重新参数化的卷积所取代时,应该不存在同一性联系。图4显示了我们设计的在PlainNet和ResNet中使用的重新参数化卷积的一个例子。关于基于残差模型和基于级联模型的完整规划的重新参数化卷积实验,将在消融研究环节中进行介绍。
(四)、Coarse for auxiliary and fine for lead loss
深度监督是一种常用的深度网络训练技术。其主要思想是在网络中间层增加额外的辅助检测头,以辅助损耗为指导的浅层网络权值。即使对于ResNet和DenseNet等通常收敛较好的架构,深度监督仍然可以显著提高模型在许多任务上的性能。下图 (a)和(b)分别显示了没有深度监督和有深度监督的对象检测器架构。在本文中,称负责最终输出的头部为引导头,称辅助训练的头部为辅助头。
接下来要讨论标签分配的问题。过去,在深度网络的训练中,标签分配通常是直接指向真相,根据给定的规则生成硬标签。但近年来,以目标检测为例,研究人员往往利用网络预测输出的质量和分布,再结合真值考虑,使用一些计算和优化方法生成可靠的软标签。如YOLO使用包围框回归预测IoU和ground truth作为客观性的软标签。在本文中,作者把网络预测结果和真实值一起考虑,然后分配软标签的机制。
无论辅助训练头或主导训练头的情况如何,都需要对目标进行深度监督训练。在开发软标签分配器相关技术的过程中,偶然发现了一个新的衍生问题,即如何将软标签分配给辅助头和主导头?目前最流行的方法的结果如下图©所示,将辅助头和主导头分开,利用各自的预测结果和ground truth执行标签分配。本文提出的方法是一种通过主导头预测同时引导辅助头和主导头的标签分配新方法。也就是说,以主导头预测为指导,生成粗到细的层次标签,分别用于辅助头学习和主导头学习。提出的两种深度监管标签分配策略分别如下图 (d)和(e)所示。
主导头引导的标签分配器:主要是根据主导头的预测结果和真实度进行计算,并通过优化过程生成软标签。这套软标签将作为辅助头和主导头的目标训练模型。这样做的原因是lead head具有较强的学习能力,由此产生的软标签应该更能代表源数据与目标数据之间的分布和相关性。此外,可以把这种学习看作一种广义残差学习。通过让较浅的辅助头直接学习主导头已经学习过的信息,主导头将更能专注于学习尚未学习到的残差信息。
粗到细主导头导向标签分配器:利用主导头的预测结果和真实度生成软标签。但是,在这个过程中,生成了两组不同的软标签,即粗标签和细标签,其中细标签与主头引导标签分配器生成的软标签相同,而粗标签是通过放松正样本分配过程的约束,让更多的网格作为正样本。这是因为辅助头的学习能力不如主导头强,为了避免丢失需要学习的信息,将重点在目标检测任务中优化辅助头的召回。对于主导头的输出,可以从高查全率的结果中过滤出高精度的结果作为最终输出。但是,必须注意,如果附加权重接近表现良好的标签,在最终预测时可能产生较差的先验。因此,为了使这些粗糙正样本网格的影响更小,在解码器中加入了限制条件,使这些粗糙正样本网格不能完美地产生软标签。上述机制允许精细标签和粗标签的重要性在学习过程中动态调整,使精细标签的可优化的上界始终高于粗标签。
在培训中还使用了的一些技巧,但最初的概念并不是本文提出的。这些训练细节将在附录中详细阐述,包括:
(1)conv -bn-activation拓扑中的批处理归一化:这部分主要是将批处理归一化层直接连接到卷积层。这样做的目的是在推理阶段将批处理归一化的均值和方差整合到卷积层的偏差和权重中。
(2) YOLOR中的隐性学习结合卷积特征映射的加法和乘法方式:通过推理阶段的预计算,可以将YOLOR中的隐性知识简化为向量。该向量可以与前一层或后一层的偏差和权重相结合。
(3) EMA模型:EMA是mean teacher中使用的一种技术。
三、实验验证:
(一)、实验对比
(二)、消融实验
提出的复合缩放法:
表3显示了使用不同模型缩放策略进行缩放时的结果。其中,本文提出的复合缩放方法是将计算块的深度放大1.5倍,将过渡块的宽度放大1.25倍。与仅扩大宽度的方法相比,该方法在参数较少、计算量较少的情况下,可使AP提高0.5%。如果将该方法与只增加深度的方法进行比较,该方法只需要增加2.9%的参数数和1.2%的计算量,可以提高AP的0.2%。从表3的结果可以看出,复合缩放策略可以更有效地利用参数和计算。
提出了规划的重新参数化模型:
为了验证所提出的重参数化模型的通用性,分别将其应用于基于串联的模型和基于残差的模型上进行验证。本文选择的基于级联的模型和基于残差的模型分别是3层的ELAN和CSPDarknet。
在基于级联的模型实验中,将3层堆叠ELAN中3个不同位置的3个卷积层替换为RepConv,具体配置如下图所示。从表4所示的结果中,可以看出所有较高的AP值都出现在本文提议的重新参数化的模型中。
在基于残差模型的实验中,由于原始的dark block没有一个符合本文设计策略的3 × 3 卷积 block,作者为实验设计了一个反向的dark block,其架构如图7所示。由于CSPDarknet和反向dark块具有完全相同的参数和操作量,因此进行比较是公平的。表5所示的实验结果充分证明了所提出的重新参数化模型对基于残差的模型同样有效。RepCSPResNet的设计也符合我们的设计模式。
针对对辅助检测头提出的辅助损失函数:
在辅助检测头的辅助损失实验中,作者比较了引导头和辅助头的一般独立标签分配方法,并对提出的两种标签分配方法进行了比较。表6显示了所有比较结果。从表6中列出的结果可以明显看出,任何增加助手损耗的模型都可以显著提高整体性能。此外,本文提出的引导标签分配策略在AP、AP50和AP75中比一般的独立标签分配策略获得更好的性能。对于作者提出的粗的辅助和精细的标签分配策略,在所有情况下都能得到最好的结果。在图8中,作者展示了在辅助头和引导头用不同的方法预测的热力图。从图8中我们发现,如果辅助头学习导联引导的软标签,确实可以帮助引导头从一致的目标中提取残差信息。
在表7中,进一步分析了所提出的粗细导向标签分配方法对辅助头部解码器的影响。也就是说,比较了引入上界约束和不引入上界约束的结果。从表中的数字来看,用距离物体中心的距离来约束物体的上限的方法可以获得更好的性能。