阅读心得:DETR:End-to-End Object Detection with Transformers

论文地址:End-to-End Object Detection with Transformers

DETR

一、 摘要

该方法提出了一个检测的新的pipeline,无需预定义锚框以及人为添加的后处理操作(NMS)。称为DEtection Transformer(DETR),一个基于集合预测 的全局损失,通过二分匹配和一个transformer编码解码器生成预测。给予一组固定的可学习的目标query集合,DETR推理目标坐标和图片上下文直接输出最终的预测结果。

二、 介绍

本方法直接将目标检测任务视为一个预测集合的问题,结构如下图。DETR一次性预测所有的目标,使用端到端的集合损失,实现预测和真实框之间的二分图匹配。通过去除多个手工设计的组件(编码先验锚框或者NMS处理),DETR简化了检测的pipeline。不同于大多数已存在检测方法,DETR不需要任何自定义层,可以轻松复制到别的框架中。
阅读心得:DETR:End-to-End Object Detection with Transformers
过去的多数的直接集合预测方法方法普遍使用RNN进行自回归解码,而DETR结合了二分图匹配损失和transformer(非自回归)平行解码。匹配损失安排一个唯一预测去回归真实框,由于预测对象的顺序是不变的,所以可以并行计算。

三、 相关工作

1. 集合预测

集合预测任务没有规范,基础的定义为一个多标签的分类任务,但是不适用于元素之间存在底层结构的检测等问题。首先的问题是避免重复,大多数当前的检测是使用后处理来解决,例如NMS,但是直接集合预测是没有后处理步骤的。它们需要对所有预测元素之间的交互进行建模的全局推理模式,以避免冗余。对于常数大小的检测,可以使用RNN之类的自回归序列模型。在所有情况下,损失函数对于预测的排列应该是不变的,常用的解决办法是设计一个基于匈牙利算法的损失,完成预测和GT框的二分图匹配(1对1)。不同于过去工作,DETR也放弃了自回归方法,而是选用了并行解码的transformer。

2. Transformer 和并行解码

Transformer是一种自注意力的结构,类似于Non-Local,优点是全局计算和完全记忆,比RNN更加优秀的长程序列处理。

Transformer期初也是使用自回归方法,但是计算量过大,导致并行序列生成的发展。DETR组合了Transformer和并行解码,权衡了计算代价和集合预测所需的全局计算能力。

四、 DETR模型

检测中的直接集合预测需要两部分:

  1. 一个1对1进行预测框和GT框进行匹配的集合预测损失;
  2. 一个可以直接预测一系列目标并建模他们之间的关联的结构。

1. 目标检测的集合预测损失

DETR通过一个解码器一次性推导一个固定大小的 N N N个预测, N N N可以设置的很大。主要训练困难是解决预测目标相应于GT框的得分(class,position,size)。

定义 y y y为目标 真实集合, y ^ = { y ^ i } i = 1 N \hat y=\{\hat y_i \}_{i=1}^N y^​={y^​i​}i=1N​是 N N N个预测集合,设 N N N大于图片目标数,将 y y y看做是一个大小为 N N N(补空集)的集合。寻找一个 N N N个元素 σ ∈ S N σ∈\mathfrak S_N σ∈SN​的排序使得二分图匹配损失最小:
σ ^ = arg ⁡ min ⁡ σ ∈ S N ∑ i N L match ⁡ ( y i , y ^ σ ( i ) ) (1) \hat{\sigma}=\underset{\sigma \in \mathfrak{S}_{N}}{\arg \min } \sum_{i}^{N} \mathcal{L}_{\operatorname{match}}\left(y_{i}, \hat{y}_{\sigma(i)}\right) \tag{1} σ^=σ∈SN​argmin​i∑N​Lmatch​(yi​,y^​σ(i)​)(1)
L match ⁡ ( y i , y ^ σ ( i ) ) \mathcal{L}_{\operatorname{match}}\left(y_{i}, \hat{y}_{\sigma(i)}\right) Lmatch​(yi​,y^​σ(i)​)表示一对真实框 y i y_i yi​和预测 σ ( i ) σ(i) σ(i)之间的匹配代价,使用匈牙利算法进行优化任务。

匹配损失考虑类别预测和边界框相似度。真实集合 y y y中的每个元素i看为 y i = ( c i , b i ) y_i= (c_i,b_i ) yi​=(ci​,bi​), c i c_i ci​是目标类别标签(可能为空), b i ∈ [ 0 , 1 ] 4 b_i∈[0,1]^4 bi​∈[0,1]4是一个向量,定义边界框相较于图片大小的中心点坐标和的高宽大小。对于预测集中的某个 σ ( i ) σ(i) σ(i)下标,定义属于类别 c i c_i ci​的概率 p ^ σ ( i ) ( c i ) \hat p_{σ(i)}(c_i) p^​σ(i)​(ci​)和边界框位置 b ^ σ ( i ) \hat b_σ(i) b^σ​(i),于是 L match ⁡ ( y i , y ^ σ ( i ) ) = − 1 { c i ≠ ∅ } p ^ σ ( i ) ( c i ) + 1 { c i ≠ ∅ } L b o x ( b i , b ^ σ ( i ) ) \mathcal{L}_{\operatorname{match}}\left(y_{i}, \hat{y}_{\sigma(i)}\right) = -\mathbb{1}_{\left\{c_{i} \neq \varnothing\right\}} \hat{p}_{\sigma(i)}\left(c_{i}\right)+\mathbb{1}_{\left\{c_{i} \neq \varnothing\right\}} \mathcal{L}_{\mathrm{box}}\left(b_{i}, \hat{b}_{\sigma(i)}\right) Lmatch​(yi​,y^​σ(i)​)=−1{ci​​=∅}​p^​σ(i)​(ci​)+1{ci​​=∅}​Lbox​(bi​,b^σ(i)​)。

以上定义匹配和传统不同的是,这里是一对一的,不需要进行NMS之类的后处理对重复进行处理。

第二步是利用匈牙利算法为之前步骤的成对匹配的信息计算损失。类似于平常的检测,由类预测的负对数似然和框损失的线性组合而成:
L Hungarian  ( y , y ^ ) = ∑ i = 1 N [ − log ⁡ p ^ σ ^ ( i ) ( c i ) + 1 { c i ≠ ∅ } L box  ( b i , b ^ σ ^ ( i ) ) ] (2) \mathcal{L}_{\text {Hungarian }}(y, \hat{y})=\sum_{i=1}^{N}\left[-\log \hat{p}_{\hat{\sigma}(i)}\left(c_{i}\right)+\mathbb{1}_{\left\{c_{i} \neq \varnothing\right\}} \mathcal{L}_{\text {box }}\left(b_{i}, \hat{b}_{\hat{\sigma}}(i)\right)\right] \tag{2} LHungarian ​(y,y^​)=i=1∑N​[−logp^​σ^(i)​(ci​)+1{ci​​=∅}​Lbox ​(bi​,b^σ^​(i))](2)

σ ^ \hat σ σ^是 ( 1 ) (1) (1)中的优化任务计算的结果,实践中对于 c i = ∅ c_i = ∅ ci​=∅的log损失降低10倍以平衡类不平衡。

Bbox损失:
匹配损失和匈牙利损失中的 L b o x ( ⋅ ) L_{box} (·) Lbox​(⋅)表示边界框得分,在不需要先验知识的前提下直接预测边界框,虽然简化了实现,但是这带来了一个损失的规模相关问题,最常用的 L 1 L1 L1损失,但是对于不同大小边界框存在一定缩放,即使这些边界框相对误差很小。于是这里使用一个 L 1 L1 L1损失和尺度不变广义的 I O U IOU IOU损失 L i o u ( ⋅ , ⋅ ) L_{iou}(·,·) Liou​(⋅,⋅)的线性组合来减轻这个影响, L box ( b i , b ^ σ ( i ) ) = λ iou  L iou  ( b i , b ^ σ ( i ) ) + λ L 1 ∥ b i − b ^ σ ( i ) ∥ 1 \mathcal{L}_{\text {box}}(b_i, \hat{b}_{\sigma(i)})=\lambda_{\text {iou }} \mathcal{L}_{\text {iou }}\left(b_{i}, \hat{b}_{\sigma(i)}\right)+\lambda_{\mathrm{L} 1}\left\|b_{i}-\hat{b}_{\sigma(i)}\right\|_{1} Lbox​(bi​,b^σ(i)​)=λiou ​Liou ​(bi​,b^σ(i)​)+λL1​∥∥∥​bi​−b^σ(i)​∥∥∥​1​是超参,这两个损失由batch中的目标数进行标准化,其中 λ i o u , λ L 1 ∈ R \lambda_{iou},\lambda_{L1} \in R λiou​,λL1​∈R是超参,这两个损失由batch中的目标数进行标准化,其中
L iou  ( b σ ( i ) , b ^ i ) = 1 − ( ∣ b σ ( i ) ∩ b ^ i ∣ ∣ b σ ( i ) ∪ b ^ i ∣ − ∣ B ( b σ ( i ) , b ^ i ) \ b σ ( i ) ∪ b ^ i ∣ ∣ B ( b σ ( i ) , b ^ i ) ∣ ) (3) \mathcal{L}_{\text {iou }}\left(b_{\sigma(i)}, \hat{b}_{i}\right)=1-\left(\frac{\left|b_{\sigma(i)} \cap \hat{b}_{i}\right|}{\left|b_{\sigma(i)} \cup \hat{b}_{i}\right|}-\frac{\left|B\left(b_{\sigma(i)}, \hat{b}_{i}\right) \backslash b_{\sigma(i)} \cup \hat{b}_{i}\right|}{\left|B\left(b_{\sigma(i)}, \hat{b}_{i}\right)\right|}\right) \tag{3} Liou ​(bσ(i)​,b^i​)=1−⎝⎛​∣∣∣​bσ(i)​∪b^i​∣∣∣​∣∣∣​bσ(i)​∩b^i​∣∣∣​​−∣∣∣​B(bσ(i)​,b^i​)∣∣∣​∣∣∣​B(bσ(i)​,b^i​)\bσ(i)​∪b^i​∣∣∣​​⎠⎞​(3)
|.|代表面积。 B ( b σ ( i ) , b ^ i ) B(b_{\sigma(i)},\hat b_i) B(bσ(i)​,b^i​)代表包含 b σ ( i ) , b ^ i b_{\sigma(i)},\hat b_i bσ(i)​,b^i​的一个大的整体边界框。

2. DETR结构

整体检测结构如下,包含三个成分,一个CNN的backbone用于提取紧凑的特征表示,一个编码解码的transformer以及一个简单的前馈网络(FFN)组成。
阅读心得:DETR:End-to-End Object Detection with Transformers
DETR中的transformer详细结构:
阅读心得:DETR:End-to-End Object Detection with Transformers
Backbone:
输入为初始图片 x i m g ∈ R 3 × H 0 × W 0 x_{img}∈R^{3×H_0×W_0 } ximg​∈R3×H0​×W0​。通过传统CNN的backbone生成低分辨率特征图 f ∈ R C × H × W f ∈R^{C×H×W} f∈RC×H×W,C = 2048, H , W = H 0 / 32 , W 0 / 32 H,W = H_0/32,W_0/32 H,W=H0​/32,W0​/32。

Transformer 编码器:
使用1×1卷积降低backbone生成的高通道数特征图( C — > d C—>d C—>d),生成新的特征图 z 0 ∈ R d × H × W z_0 ∈R^{d×H×W} z0​∈Rd×H×W。编码器将 z 0 z_0 z0​空间维度压缩为1维(d×HW)作为输入,每个编码器是一个多头自注意力模型和一个前馈网络组成的标准结构。使用额外的固定位置编码作为输入,以满足transformer的顺序不变性。

Transformer 解码器:
解码器类似于标准的transformer结构,区别在于我们的模型在每个解码层并行解码 N N N个目标。由于解码器也有顺序不变性,所以 N N N个输入的embedding必须不同,才能生成不同的结果。这些可学习到的位置编码作为输入embedding(称为object queries),将他们加入每个注意力层,通过解码器完成输出。然后分别送入FFN层独立的解码为框坐标和类别标签,产生N个预测。使用自编码解码注意力作用于这些embedding,能够使他们之间的成对关系进行全局推理,可以使用整个图片作为上下文信息。

FFN预测:
有三层组成,一个relu激活函数层,一个d维度的隐藏层,一个线性投影层。FFN预测标准化的中心坐标,和边界框宽高,线性层使用softmax函数预测类别标签(N维)。N中存在一种特殊的类 ∅ ∅ ∅代表没有目标,或者说是背景类。

五、 实验

对比Faster RCNN效果
阅读心得:DETR:End-to-End Object Detection with Transformers
编码器自我注意为一组参考点,可以分离单独的实例:
阅读心得:DETR:End-to-End Object Detection with Transformers
损失消融对比实验:
阅读心得:DETR:End-to-End Object Detection with Transformers

上一篇:从贝叶斯滤波到扩展卡尔曼滤波


下一篇:Red Hat Enterprise Linux 8系统学习(一)