DETR: End-to-End Object Detection with Transformers论文学习

论文地址:https://arxiv.org/pdf/2005.12872
代码地址:https://github.com/facebookresearch/detr
相关学习视频:https://space.bilibili.com/94779326/lists?sid=1531941

标题前言:

DETR 是 Facebook 团队于 2020 年提出的基于 Transformer 的端到端目标检测,是Transformer在目标检测的开山之作 – DEtection TRansformer。
相比于传统的RCNN、Fast-RCNN、Faster-RCNN、YOLO系列,DETR有以下几个优点:

  1. 无需NMS后处理2
  2. 无需设定anchor
  3. 高效并行预测。

整个由网络实现端到端的目标检测实现,大大简化了目标检测的 pipeline。DETR在COCO 数据集上效果与 Faster RCNN 相当,在大目标上效果比 FasterRCNN 好,且可以很容易地将 DETR迁移到其他任务例如全景分割。

1. 基本结构

DETR的总体框架如图,分为三个部分,分别是:

  1. 提取图像的特征的backbone
  2. 使用了transformer的编码器解码器
  3. prediction heads:FFN,前馈神经网络给出最后的类别和Box信息的预测

在这里插入图片描述
首先使用传统的卷积神经网络(CNN)主干网络来学习输入图像的二维表示。随后将特征信息加上位置编码送入encoder,这里的encoder进行特征序列构造。在decoder中会首先初始化100个向量(object queries),这些向量通不断学习encoder构造的特征序列,再经过prediction heads将解码器的每个输出嵌入传递给一个共享前馈网络(FFN),该网络会预测检测结果(类别和边界框)或者 “无目标” 类别。

2. 基础的backbone

CNN:图像经过 CNN 学习后,得到 (2048,H/32,W/32) 的输出,然后和 position encoding 相加,输入 transformer-encoder

3. Encoder和Decoder

不同于原始的 transformer ,DETR 在以下方面对其进行修改
1)positional embeding: DETR 的只作用于 encoder 的 Q 和 encoder-decoder K,原始 transformer 作用于所有的 Q、K、V
2)object queries:DETR 的 object queries 一次性全部输入 decoder,而原始 transformer 是通过 shifted right 一个一个地移动
在这里插入图片描述
借用一张知乎对比图:
在这里插入图片描述
Object queries 是 N 个 learnable embedding,训练刚开始时可以随机初始化,比如 transformer-encoder 输出是 (B, N’, C),则 Object queries 生成后得到大小为 (B, N, C)数,相当于用 Object queries 去查询 transformer-encoder 输出的目标类别和 box,N 一般取 100
训练时随机初始化 Object queries,训练过程中学习这个 embedding,训练完成后,embedding 确定下来,后续推理直接使用

4. FNN

prediction heads是DETR的分类器与回归器,其实就是对decoder提取出来的100个目标进行FFN操作,FFN采用全连接,经过FFN分别得到种类和边界框参数,将100个预测结构object predictions和真实框ground truth box之间通过匈牙利算法进行二分匹配,一个真实框只匹配一个预测结果,其它的预测结果作为背景进行拟合。最后通过反向传播来优化模型参数。

5. loss和匈牙利算法

集合到集合的预测看起来非常直接,但是在训练的过程就会遇到一个问题,就是如何把预测出来的100个框与ground truth做匹配,然后得到损失。DETR就非常暴力,直接利用pd(predicttion)与gt(ground truth)按照最小权重做一对一匹配,剩余的框全部当做背景处理。

6. 存在的问题

优点:DETR利用transformer完成了端到端的目标检测,即每一个query直接预测出类别和框,省去了NMS的后处理
缺点:

  1. 训练时间长,收敛速度慢,需要500个epoch
  2. 对于小目标的检测性能低
  3. 存在query学习的摇摆,其实就是query查询的随机性,学习有一定的摇摆。

7.总结

在本文阅读过程中,写作其实还是很丝滑的,自己来回阅读,大致看懂了一些,剩下翻阅博客继续阅读。

  1. 目标检测 DETR(2020)
  2. 目标检测 Deformable DETR(2021)详细解读
  3. DETR:End-to-End Object Detection with Transformers
  4. 目标检测Python代码 目标检测detr
### DETR 模型概述 DETR (Detection Transformer) 是一种基于变压器架构的目标检测方法,它通过将目标检测视为集合预测问题来简化传统的两阶段管道[^3]。该模型的核心思想在于使用编码器-解码器结构,其中自注意力机制能够显式建模序列中所有成对交互关系,这使得其特别适合处理诸如消除重复预测之类的集合预测约束。 #### 编码器-解码器架构 DETR 使用了一种基于变压器的编码器-解码器架构。输入图像被划分为固定数量的 patches,并传递到 CNN 提取特征图。随后,这些特征图被展平并送入变压器编码器部分进行全局上下文建模。接着,在解码器端引入一组可学习的位置嵌入(称为查询),用于表示潜在的对象位置和属性。最终,解码器输出一系列边界框坐标以及对应的类别标签。 以下是实现 DETR 的基本代码框架: ```python import torch from torchvision.models.detection import detr_resnet50 # 加载预训练的 DETR 模型 model = detr_resnet50(pretrained=True) # 设置为评估模式 model.eval() # 输入张量形状 (batch_size, channels, height, width) input_tensor = torch.rand(1, 3, 800, 800) # 进行推理 outputs = model(input_tensor) print(outputs) ``` 此代码片段展示了如何加载一个预先训练好的 DETR 模型,并对其进行简单的前向传播操作以获取预测结果。 #### 训练流程优化 为了进一步提升性能,研究者们还提出了一些改进措施。例如,在小样本场景下,可以通过迁移学习技术增强泛化能力;或者设计专门针对稀有类别的损失函数来缓解数据不平衡现象[^4]。 ### 应用实例:全景分割 除了常规的目标检测任务外,DETR 同样可以扩展至更复杂的视觉理解领域——比如全景分割。具体而言,只需稍作调整即可让同一套网络同时完成语义分割与实例分割两项子任务。下面给出一段展示如何利用官方 Colab 笔记本运行 DEMO 的链接说明[^1]: [Panoptic Colab Notebook](https://github.com/facebookresearch/detr/blob/main/notebooks/panoptic.ipynb).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值