作者团队:商汤,中科大,港中文
来源:arXiv:2010.04159v2
代码:https://github.com/fundamentalvision/Deformable-DETR
摘要
这篇文章主要针对的是DETR收敛速度较慢以及空间分辨率因计算资源受限问题,提出使用deformable cnn的方式以临近区域采样计算attention取代transformer中全局的self-attention,提升了收敛速度并获得超于DETR的检测性能,尤其是小目标上。
简介
DETR是第一个完全端到端的目标检测器。
DETR存在的问题:
- 需要较长的训练周期才能收敛;
- 在小目标上的检测性能较差。主要是因为小目标需要大分辨率,而大分辨率带来DETR难以接受的计算复杂度。
(个人感悟:其实DETR文章中的Figure7可以发现,queries具有一定的位置识别功能,也就是说类似于yolo中统计获得anchors尺寸,detr训练过程中实现了目标可能存在位置的统计与分配,显然收敛时间更长,另外全局的attention遍历消耗较大,而detr中需要两次该计算(一次encoder中的self-attention,一次decoder中的cross-attention))
deformable convolution可以有效地利用稀疏局部位置。dcn一方面能通过改变感受野平衡不同尺寸的目标,且仅计算局部位置信息能提升计算速度,但其缺少刻画元素之间关系的能力。
于是本文将dcn 和 transformer结合,提出了deformable DETR,能够获得较快的收敛速度以及更好的检测性能。其核心是使用deformable attention 模块取代transformers attention 模块,如图1所示,对于关键点的特征使用期邻近较小集合内的元素进行相关性刻画。
除此之外,本文还提出了两种提升检测性能的策略:迭代标定框细化策略 和两阶段deformable DETR。
相关工作
注意力机制。Transformers同时使用了自注意力机制和互注意力机制。最初的transformers时间消耗较大且需要的空间存储也较大导致很难推广。目前对其的改进分为三类:
- 使用预先定义的稀疏的key上注意力模式。其主要思路就是降低key的个数,比如fixed local window和网格状key点等;
- 学习数据依赖型稀疏注意力模式。典型做法包括对key值进行聚类等
- 探索self-attention本身具有的低秩特性。
另外一些变形的卷积操作,比如deformable和dynamic cnn都可以视为一种self-attention机制,只是其没有显式刻画元素之间的关系。
本文提出的deformable attention 模块思想源于deformable cnn,属于第二类,即由数据驱动获得对应的keys,(其实也不完全正确,因为deformable cnn也是提前限制了keys的大概范围,所以也有点类似第1种)。deformable attention模块仅从特征图中queries的邻域内预测固定数量的采样点计算attention。
目标检测中的多尺度问题。一般来说都是采用多尺度特征解决该问题,比如FPN网络等,本文提出的多尺度deformable attention模块能够自主的通过注意力机制聚合多尺度特征图,而不需要特征金字塔网络。
Transformers 和DETR回顾
transformers中的多头注意力机制,每个head单独刻画queries与keys之间的注意力加权,然后通过权重线性加权获得最终的输出,计算如下:
其中 是对key元素的编码, 是第k个key元素的权重,总共有 个key值,所以 是归一化的权重向量,正比于 , 即query的特征向量。为了区分不同的位置, 一般是内容特征和位置编码的聚合。
Transformers具有两个显著的问题。1.较长的收敛周期。考虑一个最基本的问题,假设keys初始化时是独立同分布的,那么每个key的attention权重应该为, 为key的个数,而针对于图像则是featmap中像素点的个数,于是让attention学习出具有显著性的特征向量就需要大量的训练迭代。
另一方面,query和key的数量严重影响了多头注意力模块的计算和存储。公式1中的计算复杂度为,对于图像而言,可以认为是图像像素点,于是多头注意力机制的计算复杂度近似于feature map尺寸的平方。
DETR是建立在transformer 编解码结构上的一个框架,他首先利用匈牙利算法获得预测与gt的最佳匹配,然后再匹配基础上进行loss约束。
给定一张backbone提取的特征图, DETR利用标准的transformer的编解码器将其转换为若干queries的特征集合,然后在该特征基础上使用一个3层的前馈网络和一个线性层分别进行box的回归和类别的估计。
对于DETR而言,其encoder中self-attention的计算复杂度为, 其decoder中cross-attention的计算复杂度为, self-attention的计算复杂度为, 显然复杂度主要来源于encoder的输入和输出的特征图尺寸。
方法
deformable attention module
一个公式就能看懂:
对比公式1就可以发现,这里主要不同在于k的取值有原先的整个集合 具体为K个近邻点,而每个近邻点的位置通过 学习获得,另外 也是由数据直接网络生成并进行softmax生成。
deformAttn和self-attention的不同点:
- self attention是全局特征作为key值, 而deformAttn是在每个query附近自主学习K个key值
- self attention中的权重是key和queries对的关系刻画,比如内积等,而deformAttn则是直接由线性层获得。
deformAttn位置选择和deformable cnn的不同点:deformable cnn是在正常的cnn kernel点上分别预测偏移量,而deformAttn则是在当前一个点上直接预测多个偏移量。
多尺度的deformable attention模块。
直接看公式:
其中 表示不同的尺度层, 表示将对应位置映射到第 层,可以发现和公式2相比,不同点在于公式2中从单层生成了K个点,而公式3是每层产生K个点,生成LK个采样位置,然后进行聚合。另外 还是每层共享的。
Deformable Transformer Encoder
通过可形变注意力模块,作者直接将其替换transformer注意力模块,每个encoder的输入输出都是相同分辨率的多尺度特征图,这里分辨率是指相同尺度下不同encoder的输入。多尺度的特征图直接来自ResNet的最后3个stage,而没有使用FPN,因为多尺度可形变注意力模块本身能够融合交换不同scale的信息
对于query像素位置,除了position信息外,还融合了该query所在的level,即
可行变transformer解码器
在解码器中除了self-attention还有cross-attention。因为deformable attention作用在卷积层上,因此这里只有cross-attention可以被替代,而self-attention则保持不变。对于每一个object query,由线性层和sigmoid学习出其对应的参考点的2d归一化坐标,然后即可以使用deformable attention操作。
另外deformable DETR又把DETR拉回了相对坐标回归的路子,预测box时回归的是相对于参考点的距离,能够加快收敛。
Deformable DETR的其他改进和变种
Iterative Bounding Box Refinement 针对于多个decoder,每个decoder的输入是前一层的decoder的输出
两阶段deformable DETR: DETR中的queries是随机初始化的,而两阶段方式则是由Deformable DETR的变种生成初始的候选queries。在第一阶段,移除Deformable DETR中的decoder模块,仅使用encoder模块,每个像素位置都作为queries,直接预测box,然后选择score最大的box作为候选位置。其实第一阶段就有点类似于无锚框单阶段检测思路。
实验
执行细节
多头注意力机制M=8,不同的scale K=4. 不同level的特征的encoder共享参数。adam优化器2x1e-4训练50个epoch, queries的个数从100增加到300. Focal Loss权重变为2.
DETR的比较
DC5表示对resnet网络最后一层stride以及空洞卷积保持分辨率的修改。DC5+表示已当前的训练设置相同设置DETR模型训练结果。
可以发现Deformable DETR的最大贡献点在于训练周期的大幅缩短以及对小目标精度的提升。
这应该来自于两点:1. 可形变卷积提到全局attention,减少了运算量;2.多尺度融合能够处理不同分辨率的目标;
另外还可以发现两个变种模型,性能提升都比较明显,表明先验知识其实有利于模型的精度,这应该是显然的,因为学习这种比较发散的统计规律精度还是没有专门给的先验好。
MS inputs: 表示多尺度输入,即不同的尺度的feature map独立的输入到encoder中,相当于每个尺度的feature map都经过detr有该尺度本身的预测。
MS attention:多尺度的deformable attention,相当于不同尺度的feature map具有一定的融合输入到encoder中。
K: 表示每层feature map中deformable cnn采样的点的个数。
这里有点困惑的是实验没有对比 MSinputs +FPN而不使用MS attention的参照组,第一行和最后一行只能说明FPN不能进一步提升,没说单独使用FPN和单独使用MS attention的对比。
和SOTA方法的对比
总结
本工作是对DETR的一种改进。重要的点包括:使用deformable cnn的思想实现local attention替代了全局的attention,这个模块感觉对于检测任务或者分割任务是比较有用的,但对于图像分类这种任务估计作用不是很大。另外就是multi-scale特征在encoder中通过deformable attention进行了融合,避免了FPN结构。当然本文还提出了一些更进一步的变种,比如迭代策略和两阶段策略。这两种策略的本质都是引入了更好的先验知识,所以性能能进一步的提升。
Deformable DETR的最实际的作用是大大缩短了网络的训练周期。让个人炼丹也能跑动。