文章目录
前言
DETR提出了Query Based的端到端目标检测算法,把目标检测看成了一个集合预测的问题,巧妙避开目标检测中常用的Anchor和NMS的方法,具有实现简单、拓展性强的优点。但同时DETR也存在一些问题:
- 训练周期长,相比faster rcnn慢10-20倍
- 对小目标不友好。
Deformable DETR分析了存在上述两个问题的原因,并做出改变以解决上述问题。
1. 模型特点
1.1 分析问题
针对DETR所存在的上述两个问题,分析其原因如下:
- Transformer最大的问题就是在初始化时对于特征图上每个像素的权重几乎都是一样的,而且都非常小,这导致很长的训练周期和需要大量数据去学习。实际上,我们只需要关注少数有意义的点即可。
- 小目标的分辨率往往很低,而DETR的输入特征图分辨率也很低,先用卷积层降低输入图片的分辨率使参数量下降到可计算的范围。如果提高特征图的分辨率会使计算复杂度呈平方倍上升。
1.2 解决方案
Deformable DETR改进如下:
- 采用Deformable Attention,将可变形卷积与Transformer结合,使得注意力机制在小范围中采样,只考虑最有价值的几个点,以降低计算量,加快收敛速度。
- 采用多尺度Deformable Attention。在多尺度特征图上做Deformable Attention,在提高对小目标检测效率的同时,有效控制了参数数量。
为什么不直接使用可变形卷积?
可变形卷积参见论文FCOS。可变形卷积问题在于缺少了对元素间整体关系的建模。模型只知道哪几个点最有价值,却不明白为什么这几个点最有价值。改进的关键就在于将可变形卷积与Transformer结合。
2. 模型结构
使用多尺度可变形注意力机制模块,代替Transformer注意力模块处理特征图。
①Deformable Attention模块:加入了采样模块,不管输入图像多大,只关注目标点附近的几个点。
②多尺度特征:多尺度Deformable Attention模块
2.1 Deformable Attention
思路:采样点个数变少了,为了保持较好的效果,训练偏移量,用
K
K
K个点替代原来的全部点。
输入特征图
x
x
x(C x H x W),特征图中每个像素点都是一个C通道的向量
z
q
z_q
zq,每个像素点的索引(Reference Point)也就是二维位置坐标为
p
q
p_q
pq。
M
M
M代表多头注意力机制中头的数目(原论文中M=8)。每一个头中只考虑
z
q
z_q
zq附近
K
K
K个点(K远小于H x W,原论文中为K=4)。
Δ
p
m
q
k
\Delta p_{mqk}
Δpmqk代表采样的位置偏移量,是一个二维的坐标(初始化采样点是固定的,但后续将通过全连接层计算预测更加值得关注的点的坐标)。
A
m
q
k
A_{mqk}
Amqk代表注意力的权重(
∑
k
=
1
A
m
q
k
=
1
\sum_{k=1}A_{mqk}=1
∑k=1Amqk=1)。
W
m
W_m
Wm和
W
’
m
W’_{m}
W’m代表两组全连接层的权重参数。
两个需要学习预测的值
A
m
q
k
A_{mqk}
Amqk和
Δ
p
m
q
k
\Delta p_{mqk}
Δpmqk都是通过
z
q
z_q
zq计算而来的。
输入特征图中一向量
z
q
z_q
zq,其坐标#p_q#为
(
p
q
x
,
p
q
y
)
(p_{qx}, p_{qy})
(pqx,pqy)。
z
q
z_q
zq通过全连接层,得到该向量的value。同时
z
q
z_q
zq向量通过全连接层学习得到该向量经过位置偏移后的K个采样点。用这K个采样点去合成
z
q
z_q
zq处向量实际的特征。K个采样点分别贡献了多少权重?同样用
z
q
z_q
zq通过全连接层得到注意力权重。
疑问: z q z_q zq是怎么选取的?随机选取的部分点,还是需要遍历全部点?->源码
2.2 多尺度特征
{
x
l
}
l
=
1
L
\lbrace x^l \rbrace{^L_{l=1}}
{xl}l=1L是输入多尺度特征图,其中
x
l
∈
R
C
×
H
l
×
W
l
x^l \in \mathbb R^{C \times H_l \times W_l}
xl∈RC×Hl×Wl代表第
l
l
l层特征图。
p
q
^
∈
[
0
,
1
]
2
\hat{p_q} \in [0, 1]^2
pq^∈[0,1]2代表query元素q的归一化二维坐标。(为什么要归一化?为了让不同尺度的坐标尽可能对齐)。
ϕ
l
(
p
q
^
)
\phi_l(\hat{p_q})
ϕl(pq^)代表将归一化的坐标重新映射到对应层的坐标。
需要注意的是,由于多尺度Deformable Attention本身可以在多尺度特征图之间交换信息,所以这里并没有采用一般惯用的FPN模块。
2.3 整体结构
在Encoder中,使用Deformable Attention替代了DETR中处理特征图的Transformer模块,其输入和输出都是相同分辨率的多尺度特征图。以ResNet为backbone,从其第三层到第五层的输出特征图中提取多尺度特征图。特征图中的每个像素点即作为一个Query,将Query的一部分通过线性层计算预测偏移点的二维坐标。每个偏移点都是特征图中的一个像素(偏移点即为Key)。对于多尺度Deformable Attention,则每个Query找 L × K L \times K L×K个Keys。重复做多次Deformable Self-Attention操作,最后得到特征图中每个像素对应的注意力特征向量。
考虑要不要在Encoder中加位置编码?
答:一定要加。但是在多尺度特征中,不同层级里相同位置的位置编码应当有所差异。源码实现:相对位置编码+level位置编码(可学习的位置编码)。
Decoder由cross-attention、self-attention组成,两组attention使用的query相同。其中self-attention是object query之间彼此交互,k与q相同;而cross-attention是从encoder输出的特征图中提取特征(key和value),每一个query在特征图中逐L层,每层提取K个Key,通过Deformable Attention回归 L × K L \times K L×K个位置偏移坐标。最后在query的基础上根据位置偏移坐标聚合特征,作为value。
最后的预测头利用object queries生成预测的anchor,与Ground Truth计算IOU,进行label assign(分类+出框)。
3. 思考分析
虽然Deformable DETR在一定程度上解决了DETR中存在的两个问题,但是其本身的设计也并非十全十美。
- 没有设计特别的采样策略,只采样了周围的点而已。只认为关注点周围的点是重要的,真的是这样吗?在informer论文中提及了对采样策略的设计。
- 特征对齐是否对语义分割有价值?Deformable DETR没有选择使用FPN,并且使用归一化位置编码的方法一定程度上改善了FPN特征没有对齐的缺陷,但是,仅通过归一化位置编码似乎并没有完美解决特征对齐的问题。(最短路径优先算法实现特征对齐)
- 在多尺度Deformable attention模块中,每一个query都是逐L层,每层计算预测K个Keys。是否可以打破层之间的隔阂,在L层中一起预测 L × K L \times K L×K个Keys,以进一步加强不同尺度之间的信息流通。
4. 下一步计划
- 训练FCN网络,分析模型效果
- 学习DeepLab系列网络,看源码并训练
- 回归Query based的分割任务,粗读Cell-DETR、VisTR和QueryInst论文