Facebook DETR 阅读笔记

简述

DETR (DEtection TRansformer) 是 Facebook 开发的基于 Transformer 的目标检测方案, 具有较好的性能和精度 (对大目标检测效果比传统更好, 但是小目标没那么好).

本文将目标检测看作一种端到端的直接集合预测问题 (direct set prediction problem). 不再需要后处理 (Anchor / NMS).

注意力机制明确的对序列中所有元素的相互作用进行了建模, 使得 DETR 非常适合做集合预测的特定约束, 如删除重复的预测. 这样我们就不再需要 NMS 了.

和前人相比, DETR 的主要功能是 bipartite matching loss 和 带有并行解码的 transformers.

DETR 实现

DETR 的实现中, 有两个东西是非常重要的:

  1. 一个可以要求模型的预测结果和实际数据一一对应的 set prediction loss
  2. 一个预测一个集合的对象并对他们的关系建模的架构

目标检测 Set Prediction Loss

DETR 本身会输出一个大小固定为 N 的预测结果 (N 远大于图像中的目标数).

唯一匹配这块使用了 hungarian 算法. 具体算法请参见原文.

每一个预测结果由 \( (c_i, b_i) \) 构成

  1.  \( c_i \) 是目标的标签 (可能为”空目标” \(\emptyset\))
  2. \( b_i \) 是目标的位置信息\( b_i = [0, 1]^4 \) 代表着框的中心坐标和宽高

实际训练中, 为了保证类别平衡, 将 \(\emptyset\) 的权重降低到了 \( 1/10 \)

 

DETR 结构

DETR 的结构非常简单: 如下图

一个 CNN Backbone, 一套 Transformer 编码-解码器, 一个 FFN (前馈神经网络).

Backbone

把 \( 3*H_0*W_0 \) 的输入压缩到 \( C * H * W \) 其中作者选用 \( C = 2048,  H = H_0/32, W = W_0/32 \)

Transformer 编码器

  1. 将图片用一个 \( 1*1 \) 的卷积核压缩到 d 维, 得到特征 \( d * H * W \)
  2. 压缩数据维度, 得到特征 \( d * (H*W) \)
  3. 塞入 Multi-head 自注意模块 + FFN

Transformer 解码器

这一块建议看原文

  1. N 个 object queries 是学习到的位置嵌入
  2. Transformer Decoder 将 object queries 转为 N 个输出嵌入

作者还在训练过程中使用了 Auxiliary decoding losses, 帮助模型对每个类别的对象输出正确的数量.

预测用 FFN

FFN  由三层的 全连接 + Relu 组成.

作者在 FFN 之前加了一个共享的 Layer Normalization

总结

最终效果

本文提出了一种目标检测的新方法, 虽然精度达到 SOTA, 但是思路值得借鉴.

关键是本文和 CenterNet 一样, 大幅降低了后处理的压力, 也简化了流程.

引用

论文原文: End-to-End Object Detection with Transformers

 

冷月版权所有, 严禁转载
冷月小站 » Facebook DETR 阅读笔记

发表评论