DETR基于标准的Transorfmer结构,性能能够媲美Faster RCNN,而论文整体思想十分简洁,希望能像Faster RCNN为后续的很多研究提供了大致的思路
来源:晓飞的算法工程笔记 公众号
论文: End-to-End Object Detection with Transformers
Introduction
之前也看过一些工作研究将self-attention应用到视觉任务中,比如Stand-Alone Self-Attention in Vision Models和On the Relationship between Self-Attention and Convolutional Layers,但这些方法大都只是得到与卷积类似的效果,还没有很出彩的表现,而DETR基于transformer颠覆了主流目标检测的做法,主要有三个亮点:
- Standard Transformer,DETR采用标准的Transformer和前向网络FFN进行特征的处理以及结果的输出,配合精心设计的postion encoding以及object queries,不需要anchor,直接预测bbox坐标以及类别。
- Set prediction,DETR在训练过程中使用匈牙利排序算法将GT和模型预测结果一一对应,使得在推理时的模型预测结果即为最终结果,不需要后续的NMS操作。
- 目标检测性能超越了经典的Faster RCNN,打开了目标检测研究的新路线,并且DETR也能改装应用于全景分割任务,性能也不错。
The DETR model
DETR architecture
DETR的整体架构很简单,如图2所示,包含3个主要部分:CNN主干、encoder-decoder transformer和简单的前向网络(FFN)。
定义初始图片 x i m g ∈ R 3 × H o × W o x_{img} \in \mathbb{R}^{3\times H_o\times W_o} ximg∈R3×Ho×Wo,使用常规的CNN主干生成低分辨率特征图 f ∈ R C × H × W f\in \mathbb{R}^{C\times H\times W} f∈RC×H×W,论文采用 C = 2048 C=2048 C=2048以及 H , W = H o 32 , W o 32 H,W=\frac{H_o}{32}, \frac{W_o}{32} H,W=32Ho,32Wo。
先用 1 × 1 1\times 1 1×1卷积将输入降至较小的维度 d d d,得到新特征图 z o ∈ R d × H × W z_o \in \mathbb{R}^{d\times H\times W} zo∈Rd×H×W,再将特征图 z o z_o zo空间维度折叠成1维,转换为 d × H W d\times HW d×HW的序列化输入。DETR包含多个encoder,每个encoder都为标准结构,包含mullti-head self-attention模块和前向网络FFN。由于transformer是排序不变的,为每个attention层补充一个固定的位置encoding输入。
decoder也是transformer的标准结构,使用multi-head self-attention模块和encoder-decoder注意力机制输出 N N N个大小为 d d d的embedding,唯一不同的是DETR并行地decode N N N个目标,不需要自回归的机制。由于decoder也是排序不变的,采用学习到的位置encdoing(等同于anchor)作为输入,称为object queries。类似于encoder,将位置encoding输入到每个attention层,另外还有空间位置encoding,见图10。decoder将 N N N个object queries转换为 N N N个输出embedding,然后独立地解码成box坐标和class标签,得到 N N N个最终的预测结构。由于了使用self-attention以及encoder-decoder注意力机制,模型能够全局地考虑所有的目标。
使用带ReLU激活的3层感知机以及线性映射层来解码得到最终的预测结果,感知机的隐藏层维度为 d d d。FFN预测 N 个 N个 N个归一化的中心坐标、高度、宽度以及softmax后的类别得分,由于 N N N一般大于目标个数,所以使用特殊的类别 ∅ \emptyset ∅来标记无预测目标,类似于背景类。需要注意,最后用于输出的FFN与encoder和decoder里的FFN是不一样的。
论文发现对decoder使用辅助损失进行训练十分有效,特别是帮助模型输出正确的目标个数,所以在每个decoder层添加FFN和Hugarian loss,所有的FFN共享参数,另外也使用了共享的layer-norm来归一化FFN的输入。
Object detection set prediction loss
DETR输出固定的 N N N个预测结果,最大的困难在于根据GT对预测结果进行评分,需要先找到预测结果和GT的对应关系。定义 y y y为GT集合,大小为N,缺少的用 ∅ \emptyset ∅填充, y ^ = { y ^ i } i = 1 N \hat{y}=\{ \hat{y}_i\}^N_{i=1} y^={y^i}i=1N为预测结果,为了最好地匹配GT和预测结果,使用匈牙利算法(二部图匹配方法)找到能够最小化匹配损失的最优排列方法 σ \sigma σ:
L
m
a
t
c
h
(
y
i
,
y
^
σ
(
i
)
)
=
−
1
{
c
i
≠
∅
}
p
^
σ
(
i
)
(
c
i
)
+
1
{
c
i
≠
∅
}
L
b
o
x
(
b
i
,
b
^
σ
(
i
)
)
\mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)})=-\Bbb{1}_{\{c_i \ne \emptyset\}}\hat{p}_{\sigma(i)}(c_i)+1_{\{c_i \ne \emptyset \} } \mathcal{L_{box}}(b_i, \hat{b}_{\sigma(i)})
Lmatch(yi,y^σ(i))=−1{ci=∅}p^σ(i)(ci)+1{ci=∅}Lbox(bi,b^σ(i))为排序后GT-预测结果对的匹配损失,匹配损失考虑类别预测以及bbox的相似度。
y
i
=
(
c
i
,
b
i
)
y_i=(c_i, b_i)
yi=(ci,bi)为GT,其中
c
i
c_i
ci为类别,
b
i
∈
[
0
,
1
]
4
b_i\in [0, 1]^4
bi∈[0,1]4为相对于图片大小的坐标向量(x, y, hetight, weight),
p
^
σ
(
i
)
(
c
i
)
\hat{p}_{\sigma(i)}(c_i)
p^σ(i)(ci)和
b
^
σ
(
i
)
\hat{b}_{\sigma(i)}
b^σ(i)分别为预测的类别置信度和bbox。这里的匹配过程类似于目前检测算法中anchor和GT的匹配逻辑,而区别在于这里的预测结果和GT是一一对应的。
在找到最优排列方法
σ
^
\hat{\sigma}
σ^后,计算Hungarian loss:
在实现时,考虑分类不均衡,对
c
i
=
∅
c_i=\emptyset
ci=∅的分类项降权10倍。
与普通的目标检测方法预测bbox的差值不同,DETR直接预测bbox的坐标。虽然这个方法实现很简单,但计算损失时会受目标尺寸的影响,论文采用线性
l
1
\mathcal{l}_1
l1损失和IoU损失来保证尺度不变,bbox损失
L
b
o
x
(
b
i
,
b
^
σ
(
i
)
)
\mathcal{L}_{box}(b_i, \hat{b}_{\sigma (i)})
Lbox(bi,b^σ(i))为
λ
i
o
u
L
i
o
u
(
b
i
,
b
^
σ
(
i
)
)
+
λ
L
1
∣
∣
b
i
−
b
^
σ
(
i
)
∣
∣
1
\lambda_{iou}\mathcal{L}_{iou}(b_i, \hat{b}_{\sigma(i)})+\lambda_{L1} || b_i - \hat{b}_{\sigma(i)} ||_1
λiouLiou(bi,b^σ(i))+λL1∣∣bi−b^σ(i)∣∣1,bbox损失需要用正样本数进行归一化。
Experiments
DETR性能超越了经典的Faster RCNN。
探究encoder层数对性能的影响
每层decoder输出进行预测的准确率,可以看到逐层递增。
位置embedding方式对性能的影响,这里的spatial pos对应图10的spatial positional encoding,而output pos则对应图10的Object queries。
损失函数对性能的影响。
DETR for panoptic segmentation
DETR也可以在decoder的输出接一个mask head来进行全景分割任务,主要利用了DETR模型的特征提取能力。
与当前主流模型的全景分割性能对比。
Conclustion
DETR基于标准的Transorfmer结构,性能能够媲美Faster RCNN,而论文整体思想十分简洁,希望能像Faster RCNN为后续的很多研究提供了大致的思路。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】