Yolov7论文讲解

介绍:

YOLOv7相同体量下比YOLOv5精度更高,速度快120%(FPS),yolov7已经超过了我们所熟知的目标检测网络,比如像YOLOV7-E6,在V100的GPU上速度达到56FPS,AP为55.9%,超越了基于transformer的目标检测网络SWINL Cascade-Mask RCNN,还有ConvNeXt-XL网络。YOLOV7还超过了YOLOR、YOLOX、YOLO5等等

Yolov7论文讲解_第1张图片

 

本文提出的方法的发展方向不同于目前主流的实时目标检测器。除了架构优化之外,我们提出的方法将侧重于训练过程的优化。我们将重点关注一些优化的模块和优化方法,这些模块和方法可以提高训练成本,以提高目标检测的准确性,但不会增加推理成本。

网络整体架构:

 

先整体来看下 YOLOV7,首先对输入的图片 resize 为 640x640 大小,输入到 backbone 网络中,然后经 head 层网络输出三层不同 size 大小的 feature map,经过 Rep 和 conv输出预测结果,这里以 coco 为例子,输出为 80 个类别,然后每个输出(x ,y, w, h, o) 即坐标位置和前后背景,3 是指的 anchor 数量,因此每一层的输出为 (80+5)x3 = 255再乘上 feature map 的大小就是最终的输出了。

Backbone

首先是经过 4 层卷积层,CBS 主要是 Conv + BN + SiLU 构成,在图中用不同的颜色表示不同的 size 和 stride, 如 (3, 2) 表示卷积核大小为 3 ,步长为 2。经过 4个 CBS 后,特征图变为 160 * 160 * 128 大小。随后会经过论文中提出的 ELAN 模块,ELAN 由多个 CBS 构成,其输入输出特征大小保持不变,通道数在开始的两个 CBS 会有变化, 后面的几个输入通道都是和输出通道保持一致的,经过最后一个 CBS 输出为需要的通道。MP1层输入输出通道相同,输出长宽为输入长宽的一半。

综述整个backbone层由若干BConv层、E-ELAN层以及MPConv层交替减半长宽,增倍通道,提取特征。

Head

YOLOV7 head 其实就是一个 pafpn 的结构,和之前的YOLOV4,YOLOV5 一样。区别在于将 YOLOV5 中的 CSP 模块换成了ELAN-H 模块,同时下采样变为了MP2层。ELAN-H和 backbone 中的 ELAN 稍微有点区别就是 cat 的数量不同。通道数减半

首先,对于 backbone 最后输出的 32 倍降采样特征图 C5,然后经过 SPPCSP,通道数从1024变为512。先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合。对于 pafpn 输出的 P3、P4 和 P5 ,经过 RepConv 调整通道数,最后使用 1x1 卷积去预测 objectness、class 和 bbox 三部分。

ELAN:

在体系结构上,E-ELAN只改变了计算模块的体系结构,而过渡层的体系结构完全不变。作者使用组卷积来扩展计算模块的通道数和基数。对每一个计算层的所有计算模块应用相同的组卷积参数和通道乘法器。然后,将每个计算模块计算出的特征图,按照设定的组卷积参数g,打乱成g组,再将他们拼接在一起。此时,每组特征图的通道数将与原始架构中的通道数相同。除了保持原有的 ELAN 设计架构,E-ELAN 还可以引导不同组的计算块学习更多样化的特征。

单纯的从图2的(d)来看的话就是通过超参数g来确定扩张的通道数,和分组卷积的个数,保证每个组内的通道数和原来的ELAN的通道数相同,这里g=2。

Yolov7论文讲解_第2张图片

 

模型缩放

模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如,effentnet的缩放模型考虑了宽度、深度和分辨率。scale - yolov4的缩放模型是调整阶段数。中,Dollar等人分析了香草卷积和组卷积在进行宽度和深度缩放时对参数量和计算量的影响,并以此设计了相应的模型缩放方法。以上方法主要应用于PlainNet、ResNet等架构中。当这些架构在执行放大或缩小时,每一层的输入和输出不会发生变化,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用到基于连接的体系结构中,将发现当对深度进行向上或向下缩放时,基于连接的计算块之后的转换层的输入将会降低或增加,如下图 (a)和(b)所示。

从上述现象可以推断,对于基于串联的模型,不能单独分析不同的比例因子,而必须一起考虑。以按比例放大深度为例,这种行为会导致过渡层的输入通道和输出通道的比例变化,从而导致模型的硬件使用量下降。因此,对于基于级联的模型,必须提出相应的复合模型缩放方法。当缩放一个计算块的深度因子时,还必须计算该块输出通道的变化。然后,将对过渡层进行相同变化量的宽度因子缩放,结果如图3 ©所示。提出的复合缩放方法可以保持模型在初始设计时的属性,并保持最优结构。

根据depth的变化计算相应模块输出channel的变化,即width,然后根据变化比例调整后续transition层的width的变化。

Yolov7论文讲解_第3张图片

Yolov7论文讲解_第4张图片 

 

辅助头检测:

Yolov7论文讲解_第5张图片

 

很像之前的yolo系列,8x、16x、32x分别是从backbone出来的,最后有三个head进行检测。(b)中的结构是有辅助头的【auxiliary head】,即在FPN三个特征层上采样中用添加的这个辅助头。

(c)为通常的独立标签匹配结构【这个结构就是每个head输出与ground truth匹配后的结果(后面说的soft label过程),再与head的输出之间建立损失函数,同时也能看出辅助head和正常的head之间没有联系,是独立的】

(d)是作者提出的一个lead head指导匹配结构,与(c)不同的是,将head与辅助head之间产生了联系,在保留原有head匹配结构下,将head与GT label匹配后的输出直接与辅助头直接建立了损失函数。

(e)图是一个由粗到细的lead head指导标签匹配(coarse-to-fine lead head guided label assigner)。

由粗到细的lead head指导标签匹配(Coarse-to-fine lead head guided label assigner)同样使用了lead head的预测结果与ground truth生成soft label。只不过这里用到了两种soft label。一种是粗soft label,一种是细soft label

什么叫粗label,什么叫细label,

细label,网络最终输出的三个head是lead head,会将这部分的预测结果与ground truth生成soft label,网络会觉得这个soft label得到是数据分布更接近真实的数据分布,训练得到的内容更加“细致”。

粗label,辅助lead由于是从中间网络部分得到的,他的预测效果肯定是没有深层网络lead head提取到的数据或者特征更细致,所以辅助lead部分的内容是比较“粗糙”的,在训练过程中,会将lead head与ground truth的soft label当成一个全新的ground truth,然后与辅助head之间建立损失函数,说白了,就是让辅助head的预测结果也“近似”为lead head。

作者将会在目标检测任务中去优化辅助head的找回率(recall),这样可以避免训练中一些信息的丢失。对于lead head的输出,作者提到将会从高召回率的结果中去过滤高精度(precision)结果并作为最终的输出【这个操作感觉应该就是去除一些易分类样本,关注困难样本一些,提升性能】。不过也需要注意的是,如果粗label非常接近与细label,可能会产生不好的结果【这里我猜测有两个方面,一是过拟合,二是可能会印象到深层网络效果】,为此作者在解决这个问题的时候,会在解码部分加以限制,对于一些多余的粗正样本(也是正样本,就是涵盖信息没lead head多而已)则不会让其产生soft label。

则可能在最终预测时产生不良先验。因此,为了使这些超粗正网格具有较小的影响,我们在解码器中设置了限制,使得超粗正栅格不能完美地产生软标签。上述机制允许在学习过程中动态调整精细标签和粗糙标签的重要性,并使精细标签的优化上限始终高于粗糙标签。

你可能感兴趣的:(深度学习,目标检测,计算机视觉)