DETR : End-to-End Object Detection with Transformers
Paper : https://arxiv.org/abs/2005.12872
预备知识
Transformer,二分图匹配(匈牙利算法),GIoU 损失
整体思路
通过 CNN 提取目标特征 ( ),使用 1x1 卷积降维 , 随后把特征转换为序列 ( ) 输入到 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框
是 N 个 GT 目标集,没有目标的用 表示, 是 N 个预测目标集,寻找最优二分匹配
是在GT 和索引为 预测的匹配损失,最优匹配使用匈牙利(Hungarian)算法计算。匹配损失同时考虑了类别预测以及预测的和 GT 的相似性。GT 的每一个元素 都可以看做 , 是类标签(可能为空), 是一个向量,使用 GT box 相对图像大小的中心坐标和高宽表示。对于 的预测,类标签 概率定义为 ,预测框为 。 定义为
-
计算对应框的损失
使用 L1 损失和 广义 IoU 损失 ,则
这两个损失通过批次内的目标数量标准化。
2. DETR architecture
一个CNN backbone提取特征表示,Transformer,前馈网络做最终的预测
Backbone
使用 CNN backbone 生成低分辨率的特征图
Transformer encoder
使用 卷积减少特征图 的通道数,从 减少到 ,得到新特征图 . 由于encoder的输入需要是序列,所以把 的空间维度折叠到一个维度上,得到 的特征图。
由于 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个像素)。