不同于现有的主流方法,yolov7的主要改进点在优化训练过程,
包括优化modules 和 优化方法,这些会加强traing cost从而提高object detect的accuracy, 但是不会提高inference cost(时间开销),
这个改进方法和优化方法叫做trainable bag-of-freebies。
最近,模型的re-parameterization和动态label assignment在模型训练和object detection中都是重要话题。
yolov7因此Propose了planned re-parameterized model
根据动态label assignment存在的问题:怎么给多个output layers branches分配动态的targets,yolov7提出了coarse-to-fine lead guided label assignment.
compound scaling,
可减掉40%的参数和50%的计算量。
model re-parameterization
相当于组合了多个计算的modules into one at inference stage.
分为module-level 和 model-level.
model level的有2种常用的方法:
1.用不同training data训练同一模型,得到多个weight, 求这些weight的平均
2.把不同迭代次数的weight求平均
但设计好的一些re-parameterization方案并不适用于所有的网络结构,因此,yolov7重新设计了一个re-parameterization和相关的应用策略。
model scaling
根据计算设备的不同scale up or down一个模型
可scale的因素有:图像size, layer数量,channel数量,特征金字塔层数
这个方向network architecture search(NAS)可以自动搜索合适的缩放因子,缺点是计算量很大
目前这个方向的方法都是在研究各个单独的缩放因素(假设各因素独立),而不是整体研究。
yolov7提出一个混合因素的缩放方案。
结构设计
目前很多设计实效性方案的考虑多是参数的数量,计算量等,
本文考虑的是梯度路径,参考CSPVoVNet和ELAN的结构,
因为ELAN中提出如何设计efficient network: 控制最短和最长的梯度路径,deeper net就可以learn和收敛更快。
然后yolov7在ELAN的基础上提出了Extended-ELAN(E-ELAN), 结构如下(真够复杂的):
在大规模的ELAN中,梯度长度和stacking number of computation blocks已经达到了一种稳定的状态,
如果继续增加computational blocks, 这种稳定的状态会遭到破坏,
proposed E-ELAN使用expand, shuffle, merge机制,在不破坏原有梯度path的基础上增强学习能力。
用group convolution来扩展channel和computation blocks的基数。
computational layer中所有的计算block共用相同的group parameter和channel multiplier。
得到的feature map会shuffle到g个组,然后连接起来,
每个group的channel数和原始结构的channel数是一样的。
model scaling for concatenation-based models
model scaling的目的在于满足不同的推断速度需要(计算量的不同)
级联模型只scale一个因素的话,会影响in-degree和out-degree, 见图,
所以,提出了同时scale几个factor, 比如图3的scale depth的时候,还要考虑到它对输出有什么变化,要同时scale width。
这样会保持模型最初的设计,保持最优的结构。
planned re-parameterized convolution
re-parameterization直接用在不同的网络,可能效果不好。
经过测试,发现RepConv不能用在ResNet结构中,如果用RepConv结构,就不用identity connection,
下面是测试的一些结构
deep supervision 与 head
deep supervision经常用在训练很深的网络,主要通过在网络中间层增加附加的head以辅助训练。
本文中,把和最终output相关的较lead head, 辅助训练的叫auxiliary head
label assignment
以前的训练是直接把output和ground truth的label直接结合起来
而最近通过output的分布等信息,和ground truth综合考虑,通过某种方法产生soft label,
比如YOLO就是通过把预测的边框和ground truth的IOU作为soft label。
目前存在的问题是还没有文献指出如何分配soft label给auxiliary head和lead head,
已有的方法是分别分配的,而yolov7是用lead head的预测值同时分配给auxiliary head和lead head
理由是认为lead head有更强的学习能力,学习出来的soft label更能表现data和target的关联性。
coarse to fine label
产生两种soft label, 即coarse label 和 fine label
fine label和lead head产生的soft label一样
coarse label就是把正样本的条件放松一些,让更多的grid被认为是positive target,
理由是aux head没有lead head那么强的学习能力,因此让更多的positive信息给它,集中在优化recall的方式。
最后的output会从高recall结果里选择高precision的。
但是要注意coarse label必须和fine label是接近的,
为了抑制不好的coarse positive,yolov7在decoder中加了一些限制,动态调整coarse label和fine label的比重,保证fine label的优化上边界始终比coarse label要高。
some tricks in training
conv-bn-activition中的BN, CNN与BN直接连接
把卷积层的feature map和YOLOR的implicit knowledge结合:把implicit knowledge在推断时提前计算,作为一个向量,这个向量可以和bias, 卷积层的weight相结合(加/乘)
EMA model,作为最后的inference model
不同的版本
yolov7-tiny(edge GPU), yolov7(normal GPU), yolov7-W6(cloud GPU)
yolov7-E6(proposed E-ELAN)
其中激活函数:
yolov7-tiny: ReLU, 其它:SiLU
baseline:
前一版本的YOLO和YOLOR
与前几版yolo的实验对比
Ablation study
scale:
综合scale width 和 depth 与 单独scale这俩的对比实验:
re-parameterized model:
验证级联和residual-based model,
选择3-stacked ELAN 和 CSPDarknet验证,
验证ELAN时,把3x3卷积放到不同的位置
验证dark block时,由于原来的block没有3x3卷积,因此重新设计了一个block进行验证