Paper : https://arxiv.org/abs/2005.12872
预备知识
Transformer,二分图匹配(匈牙利算法),GIoU 损失
整体思路
通过 CNN 提取目标特征 ( C × H × W C×H×W C×H×W ),使用 1x1 卷积降维 d × H × W d×H×W d×H×W, 随后把特征转换为序列 ( d × H W d×HW d×HW ) 输入到 Transformer Encoder 中,使用学习的 N 个 object query 和 Encoder 的输出作为 Transformer Decoder 的输入得到 N 解码结果,然后把这 N 个解码结果通过前馈网络直接得到相对坐标的预测以及类别。
创新点
- 真正的端到端,没有复杂的 anchor 设计和 后处理 NMS
- 使用学习的 object query 加到解码器的每一个 Attention 层
- 在 Decoder 部分直接固定输入和输出的长度 N,可以并行处理
- 最后预测的文本框与标注框使用匈牙利算法得到最佳二分图匹配,然后计算损失
缺点 在小目标上的检测效果不佳,需要改进
应用 这样的结构在文本检测方面是否可行,可以尝试一下
1. Object detection set prediction loss
N 个预测,N 大于一张图像中的目标的数量。在预测和标注之间产生一个最优二分匹配,然后优化特征目标(bbox)的损失。
-
首先找到最优二分匹配,一个预测框对应一个GT框
y y y 是 N 个 GT 目标集,没有目标的用 ∅ \emptyset ∅ 表示, y ^ \hat{y} y^ 是 N 个预测目标集,寻找最优二分匹配
σ ^ = arg min σ ∈ S N ∑ i K L m a t c h ( y i , y ^ σ ( i ) ) (1) \hat{\sigma} = \mathop{\text{arg min}}_{\sigma \in \mathfrak{S}_N} \sum_i^K \mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)}) \tag{1} σ^=arg minσ∈SNi∑KLmatch(yi,y^σ(i))(1)
L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)}) Lmatch(yi,y^σ(i)) 是在GT y i y_i yi 和索引为 σ ( i ) \sigma(i) σ(i) 预测的匹配损失,最优匹配使用匈牙利(Hungarian)算法计算。匹配损失同时考虑了类别预测以及预测的和 GT 的相似性。GT 的每一个元素 i i 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 \in [0,1]^4 bi∈[0,1]4 是一个向量,使用 GT box 相对图像大小的中心坐标和高宽表示。对于 σ ( i ) \sigma(i) σ(i) 的预测,类标签 c i c_i ci 概率定义为 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) p^σ(i)(ci) ,预测框为 b ^ σ ( i ) \hat{b}_{\sigma(i)} b^σ(i) 。 L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_{match} (y_i, \hat{y}_{\sigma(i)}) Lmatch(yi,y^σ(i)) 定义为
-
计算对应框的损失
L b o x ( ⋅ ) \mathcal{L}_{box}(\cdot) Lbox(⋅) 使用 L1 损失和 广义 IoU 损失 L i o u ( ⋅ , ⋅ ) \mathcal{L}_{iou}(\cdot, \cdot) Liou(⋅,⋅) ,则
L b o x ( b i , b ^ σ ( i ) ) = λ i o u L i o u ( b i , b ^ σ ( i ) ) + λ L 1 ∣ ∣ b i − b ^ σ ( i ) ∣ ∣ 1 (3) \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 \tag{3} Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1∣∣bi−b^σ(i)∣∣1(3)
这两个损失通过批次内的目标数量标准化。
2. DETR architecture
一个CNN backbone提取特征表示,Transformer,前馈网络做最终的预测
Backbone
使用 CNN backbone 生成低分辨率的特征图 f = R C × H × W , C = 2048 , H , W = H 0 32 , W 0 32 f = \Bbb{R}^{C×H×W}, C=2048, H,W=\frac{H_0}{32}, \frac{W_0}{32} f=RC×H×W,C=2048,H,W=32H0,32W0
Transformer encoder
使用 1 × 1 1×1 1×1 卷积减少特征图 f f f 的通道数,从 C C C 减少到 d d d,得到新特征图 z 0 ∈ R d × H × W z_0 \in \Bbb{R}^{d×H×W} z0∈Rd×H×W . 由于encoder的输入需要是序列,所以把 z 0 z_0 z0 的空间维度折叠到一个维度上,得到 d × H W d×HW d×HW 的特征图。
由于 transformer 的体系结构是置换不变性 ( permutation-invariant ),所以给每个 attention 层的输入加上固定的位置编码
Transformer decode
与原始模型的区别在于论文的模型在每个解码器层并行解码 N 个目标。
因为解码器也是置换不变的,所以 N 个输入也加上了位置编码,不过这里的位置编码是通过学习的,论文中叫 object query,也是在每个 attention 层上都加。
Prediction feed-forward networks ( FFNs )
预测框相对于输入图像的中心点坐标,高和宽。线性层使用 softmax 函数预测类别。
DETR’s transformer
预测目标的可视化解码注意力
3. DETR for panoptic segmentation
每个目标的 transformer 解码器的输出作为输入,在编码器的输出上计算该嵌入的多头(M头)注意力得分,为每个目标生成 M 个低分辨率的注意力热图。为了生成最后的预测和增加分辨率,使用了类 FPN 的结构。为了预测全景分割,简单的在每个像素上使用了 argmax 计算掩模分数,把对应的类别用于结果掩模。
在推理阶段,首先过滤掉置信度小于 0.85 的检测框,然后再计算每个像素的 argmax,决定每个像素属于哪个mask。然后把属于同一类别的不同 mask 合并,过滤掉空 mask (少于4个像素)。