DETR基于规范的Transorfmer构造,性能可能媲美Faster RCNN,而论文整体思维非常简洁,心愿能像Faster RCNN为后续的很多钻研提供了大抵的思路
起源:晓飞的算法工程笔记 公众号
论文: End-to-End Object Detection with Transformers
- 论文地址:https://arxiv.org/abs/2005.12872
- 论文代码:https://github.com/facebookresearch/detr
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)。
Backbone
定义初始图片$x_{img} \in \mathbb{R}^{3\times H_o\times W_o}$,应用惯例的CNN骨干生成低分辨率特色图$f\in \mathbb{R}^{C\times H\times W}$,论文采纳$C=2048$以及$H,W=\frac{H_o}{32}, \frac{W_o}{32}$。
Transformer encoder
先用$1\times 1$卷积将输出降至较小的维度$d$,失去新特色图$z_o \in \mathbb{R}^{d\times H\times W}$,再将特色图$z_o$空间维度折叠成1维,转换为$d\times HW$的序列化输出。DETR蕴含多个encoder,每个encoder都为规范构造,蕴含mullti-head self-attention模块和前向网络FFN。因为transformer是排序不变的,为每个attention层补充一个固定的地位encoding输出。
Transformer decoder
decoder也是transformer的规范构造,应用multi-head self-attention模块和encoder-decoder注意力机制输入$N$个大小为$d$的embedding,惟一不同的是DETR并行地decode $N$个指标,不须要自回归的机制。因为decoder也是排序不变的,采纳学习到的地位encdoing(等同于anchor)作为输出,称为object queries。相似于encoder,将地位encoding输出到每个attention层,另外还有空间地位encoding,见图10。decoder将$N$个object queries转换为$N$个输入embedding,而后独立地解码成box坐标和class标签,失去$N$个最终的预测构造。因为了应用self-attention以及encoder-decoder注意力机制,模型可能全局地思考所有的指标。
Prediction feed-forward networks (FFNs)
应用带ReLU激活的3层感知机以及线性映射层来解码失去最终的预测后果,感知机的暗藏层维度为$d$。FFN预测$N个$归一化的核心坐标、高度、宽度以及softmax后的类别得分,因为$N$个别大于指标个数,所以应用非凡的类别$\emptyset$来标记无预测指标,相似于背景类。须要留神,最初用于输入的FFN与encoder和decoder里的FFN是不一样的。
Auxiliary decoding losses
论文发现对decoder应用辅助损失进行训练非常无效,特地是帮忙模型输入正确的指标个数,所以在每个decoder层增加FFN和Hugarian loss,所有的FFN共享参数,另外也应用了共享的layer-norm来归一化FFN的输出。
Object detection set prediction loss
DETR输入固定的$N$个预测后果,最大的艰难在于依据GT对预测后果进行评分,须要先找到预测后果和GT的对应关系。定义$y$为GT汇合,大小为N,短少的用$\emptyset$填充,$\hat{y}=\{ \hat{y}_i\}^N_{i=1}$为预测后果,为了最好地匹配GT和预测后果,应用匈牙利算法(二部图匹配办法)找到可能最小化匹配损失的最优排列办法$\sigma$:
$\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)})$为排序后GT-预测后果对的匹配损失,匹配损失思考类别预测以及bbox的类似度。$y_i=(c_i, b_i)$为GT,其中$c_i$为类别,$b_i\in [0, 1]^4$为绝对于图片大小的坐标向量(x, y, hetight, weight),$\hat{p}_{\sigma(i)}(c_i)$和$\hat{b}_{\sigma(i)}$别离为预测的类别置信度和bbox。这里的匹配过程相似于目前检测算法中anchor和GT的匹配逻辑,而区别在于这里的预测后果和GT是一一对应的。
在找到最优排列办法$\hat{\sigma}$后,计算Hungarian loss:
在实现时,思考分类不平衡,对$c_i=\emptyset$的分类项降权10倍。
与一般的指标检测办法预测bbox的差值不同,DETR间接预测bbox的坐标。尽管这个办法实现很简略,但计算损失时会受指标尺寸的影响,论文采纳线性$\mathcal{l}_1$损失和IoU损失来保障尺度不变,bbox损失$\mathcal{L}_{box}(b_i, \hat{b}_{\sigma (i)})$为$\lambda_{iou}\mathcal{L}_{iou}(b_i, \hat{b}_{\sigma(i)})+\lambda_{L1} || b_i - \hat{b}_{\sigma(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为后续的很多钻研提供了大抵的思路。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】