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

server/2024/12/15 21:16:04/

论文地址: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. 总结

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

  1. 目标检测 DETR(2020)
  2. 目标检测 Deformable DETR(2021)详细解读
  3. DETR:End-to-End Object Detection with Transformers
  4. 目标检测Python代码 目标检测detr

http://www.ppmy.cn/server/150443.html

相关文章

控制反转IoC

什么是控制反转? 控制反转:IoC(Inversion of Control),是一种编程思想。或者叫做一种新型的设计模式。由于出现的比较新,没有被纳入GoF23种设计模式范围内。 反转是什么呢? 反转的是两件事&a…

呼叫中心大模型呼入机器人详解(转)

呼叫中心大模型呼入机器人详解(转) 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 呼叫中心大模型呼入机器人是一种基于大规模深度学习模型构建的智能化系统,它能够处理海量数据并学习其中的规律&…

开源分布式系统追踪-01-Zipkin-01-入门介绍

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么? cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …

YZ系列工具之YZ11:VBA_窗体缩放

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

Vue八股青春版

前言:本文资料来自于web前端面试以及Vue的官方文档,对其中的信息做了更新和归纳。 对vue的理解 一、从历史说起 纯前端(静态)ASP和JSP (JavaHTML),不太灵活,服务端渲染JquerySPA …

【自动化】requirements.txt

1.是什么? 用于列出项目依赖的所有Python包及其版本。这使得其他开发者可以轻松地安装与你的项目兼容的环境,或者在不同的机器上复制相同的开发环境。 2.如何编写requirements.txt 手动创建 格式: 包名版本号 在终端home命令自动生成 创建r…

mysqlelasticsearch备份恢复

目录 1. mysql备份 1.1. 使用 mysqldump 命令备份整个数据库: 1.2. 备份特定表: 2. 恢复 MySQL 数据库 2.1. 使用备份文件恢复数据库: 3. 备份elasticsearch索引 3.1. 注册本次备份的存储路径 3.2. 查看当前备份快照信息 3.3. 备份索…

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna) 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代,将自然语言查询转化为结构化查询语言(SQL)的能力变得日益重要。无论是小型创业…