YOLOV7主要选择了结构重参数化和标签分配两个方向对YOLO系列进行了优化。
yolo系列的网络结构其实都是大差不差的,基本都是输入、backbone、neck和head几个部分。下面我主要挑重点讲一下yolov7
1.backbone
YOLOv7里使用的是CSPVOVNet, 是VoVNet的一种变体。CSPVoVNet不仅考虑到了前面所提到的模型设计问题,还分析了梯度的在模型中流动路径,通过这个来使得不同层的权重能够学习到更加多样化的特征。不管是训练阶段还是推理阶段,以上方法都能起到不错的效果,尤其是在推理方面。可以提升推理的速度与精度。
2.neck
在网络结构的neck处,作者使用了结构重参数的方法,这个跟yolov6有所不同,yolov6主要将重参数运用在backbone和neck处,作为关键的替身模型性能的组件,而yolov7主要用在head处(ps:我觉得主要是为了避嫌,毕竟v6和v7是差不多同一时间出来的文章)。同时,v7的作者分析了重构重参数的方法运用在resnet类结构中,精度变差的原因,同时提出了解决方法,这对于我们后续设计网络有非常大的帮助。
3.标签分配
在网络的训练中,标签分配通常是指GT,这个是硬标签,但近年来,需要研究者会利用网络的推理结果来结合GT,去生成一些软标签,如IOU。在YOLOv7中,有辅助头也有引导头,在训练时,它们二者都需要得到监督。因此,需要考虑如何为辅助头和引导头进行标签分配。因此在这里,作者提出了一种新的标签分配方法,是以引导头为主,通过引导头的推理来指引辅助头和自身的学习。
首先使用引导头的推理结果作为指导,生成从粗到细的层次标签,分别用于辅助头和引导头的学习。
- Lead head guided label assigner 引导头引导标签分配 引导头引导标签分配是根据引导头的预测结果和GT进行一系列优化计算来生成软标签,然后软标签作为辅助头和引导头的优化方向来训练模型。这样是由于引导头本身具备比较强的学习能力,因此由此产生的软标签应该更能代表源数据与目标之间的分布和相关性,而且还可以将这种方式当作是一种广义上的余量学习。通过让较浅的辅助头直接学习引导头已经学习到的信息,然后引导头就更能专注于学习到它还没有学习到的剩余信息。
- Coarse-to-fine lead head guided label assigner 从粗到细的引导头引导标签分配 Coarse-to-fine引导头使用到了自身引导头的推理结果GT来生成软标签,进而引导标签进行分配。然而,在这个过程中会生成两组不同的软标签,即粗标签和细标签, 其中细标签与引导头在标签分配器上生成的软标签是一样的,粗标签是通过允许更多的网格作为正目标,不单单只把gt中心点所在的网格当成候选目标,还把附近的三个也加进来了,增加正样本候选框的数量,以降低正样本分配的约束。因为辅助头的学习能力没有指导头强,所以为了避免丢失需要学习的信息,就提高辅助头的召回率。