DETR : End-to-End Object Detection with Transformers

Paper : https://arxiv.org/abs/2005.12872

Code : https://github.com/facebookresearch/detr

预备知识

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 个解码结果通过前馈网络直接得到相对坐标的预测以及类别。

创新点

  1. 真正的端到端,没有复杂的 anchor 设计和 后处理 NMS
  2. 使用学习的 object query 加到解码器的每一个 Attention 层
  3. 在 Decoder 部分直接固定输入和输出的长度 N,可以并行处理
  4. 最后预测的文本框与标注框使用匈牙利算法得到最佳二分图匹配,然后计算损失

缺点 在小目标上的检测效果不佳,需要改进

应用 这样的结构在文本检测方面是否可行,可以尝试一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9epcjyQ-1594380002523)(./images/DETR-pipeline.png)]在这里插入图片描述

1. Object detection set prediction loss

N 个预测,N 大于一张图像中的目标的数量。在预测和标注之间产生一个最优二分匹配,然后优化特征目标(bbox)的损失。

  1. 首先找到最优二分匹配,一个预测框对应一个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σSNiKLmatch(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)) 定义为 在这里插入图片描述

  2. 计算对应框的损失

    在这里插入图片描述

    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))+λL1bib^σ(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} z0Rd×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个像素)。


猜你喜欢

转载自blog.csdn.net/m0_38007695/article/details/107262871