Closed JunnHan closed 3 years ago
DETR作为首个实现端到端目标检测的框架,在设计上避免了原本许多需要人工先验知识设计的环节,例如anchor的生成、target label的分配以及NMS后处理操作等。但是其也存在着一定的问题:1.相较于现有的目标检测方法,DETR需要更长的训练轮数才能实现收敛;(在初始化阶段,注意力机制对于特征图上所有的像素都具有一致的注意权重,这就使得需要足够多的训练轮数来让注意力机制能够学习注意到稀疏的具有意义的目标区域)2.DETR在针对小目标的检测精度上表现出了相对较差的性能。(一般的目标检测方法可以通过增加特征图的分辨率来提高小目标的检测精度,但这在DETR中会带来难以接受的计算复杂度,encoder中的注意力权值计算是与像素数量成平方关系的) 本文提出可形变注意力模块,对特征图上的像素先进行筛选,使得注意力机制仅作用于一个小的采样集合,再结合上多尺度特征图的聚合,来改善DETR所存在的问题,结构示意图如下:
此外,还讨论了一些其他的变体用于提升检测的精度,例如iterative bounding box refinement以及two-stage Deformable DETR
Deformable Attention Module DETR存在上述问题的一个很关键的点就是注意力机制在对特征图进行操作时,会考虑到空间当中所有可能的位置,这就进而造成了收敛慢以及难以处理大特征图的情况。本文中提出可形变注意力模块,仅针对参考点周围的一小集合的关键采样点进行计算,进而与特征图尺寸无关。计算公式如下:
Multi-scale Deformable Attention Module 多尺度特征图在提升目标检测性能方面具有很大的优势,这里也可以将上述模块拓展至多尺度特征,计算公式如下:
Deformable Transformer Encoder 将encoder中的注意力模块替换为多尺度可形变注意力模块来处理特征图,encoder的输入和输出是同样分辨率的多尺度特征图。类似于FPN,在这里也是从ResNet中选取多尺度的特征图(L=4,C3-C6),但是不采用FPN的top-down结构,因为注意力模块自身可以实现不同尺度间的信息交换,见下图:
encoder中的key和query都是来自多尺度特征图中的像素,其中对于每一个query像素,参考点就是它自己。为了能够辨别出每一个query像素落在哪一层特征图上,在feature representation和positional embedding上加上了scale-level embedding(e_l),这个e_l是和网络一起进行训练的。Deformable Transformer Decoder 在decoder的self-注意力模块中,key和query都是object queries,并不是特征图,因此自注意力模块不变;cross-注意力模块的key是来自encoder的输出特征图,因此将其替换为多尺度可形变注意力模块。对于每一个object query,其参考点的2-d坐标都是根据其object query embedding,利用线性变换+sigmoid预测得到的。 由于注意力模块是在参考点周围提取图像特征的,因此在边框的预测时,改为预测偏差,进一步减小了优化的难度,参考点就视作初始的边框中心。
Iterative Bounding Box Refinement decoder的每一层都是根据前一层的预测结果进行优化,如下式:
Two-Stage Deformable DETR 在第一阶段,为了获得高召回率的候选框,特征图中的每一个像素都当做是object query,但这样会造成计算的复杂度过高,因此去掉decoder,仅保留encoder来生成区域候选。每一个像素都当作object query,直接预测一个边框,选取得分靠前的作为候选框,送到decoder中做进一步优化
相较于DETR的500轮,deformable detr仅用50轮就实现了较好的收敛,但是运行速度变慢了,根据实验结果看是由28FPS->19FPS
Abstract
本文针对DETR存在的问题进行分析改进,主要是考虑到1.训练时收敛速度慢,需要迭代的轮数多以及2.特征图的分辨率/空间尺寸的影响(尤其是对小目标检测性能的影响),提出了新的目标检测范式,注意力机制仅作用于目标周围的key sampling points的小集合,加快了收敛速度,并利用多尺度特征图提升了小目标检测的精度。