当前位置:网站首页>End-to-End Object Detection with Transformers(DETR)论文阅读与理解
End-to-End Object Detection with Transformers(DETR)论文阅读与理解
2022-07-02 18:13:00 【liiiiiiiiiiiiike】
论文题目:End-to-End Object Detection with Transformers
论文链接:DETR
摘要:
提出新的方法,直接将目标检测视为一个集合预测的问题(其实无论proposal,anchor,window centers方法本质上都是集合预测的方法,用大量的先验知识去人工干预,例如NMS);而DETR是纯end-to-end,整个训练都是不需要人工提前干预。DETR训练步骤有:(1)CNN为backbone去抽特征(2)Transformer encoder学全局特征(3)transformer decoder生成预测框(100)(4)预测框和GT做匹配文章亮点。推理的时候不需要(4),生成预测框后通过阈值判断再输出。
简介
DETR采用一种基于transformer的编码器-解码器结构,利用自注意力机制来显示编码序列中所有元素间的相互作用,这样做的好处是可以删除目标检测中产生的冗余框!!,DETR一次性预测所有目标,并通过集合损失函数进行端到端的训练,该函数在预测结果和真实结果之间进行二部图匹配。(例如产生100框,GT为10,计算预测和GT最match的10框,我们认为其是正样本,其余90均为负样本,这样不需要NMS)
相关工作
DETR工作建立在:(1)用于集合预测的二部图匹配损失 (2)transformer encoder-decoder (3)并行解码和目标检测。
(1)集合预测
目前大部分检测器需要使用后处理NMS来去除冗余框。但是直接进行集合预测不需要后处理,全局推理模式来模拟所有预测元素之间的相互作用,可以避免冗余。对于常数集的集合预测,MLP就ok了(暴力:每一个都算匹配程度),但是成本高。通常解决方案是匈牙利算法基础上设计一个损失,以找到真实值与预测值之间的二部匹配。
(2)Transformer结构
注意力机制可以从整个输入序列中聚集信息。基于自注意力的模型主要优点之一:是其全局计算和完美记忆性。(感受野!)
(3)目标检测
大多数目标检测主要是proposal,anchor,window center来进行预测,但是由于产生了很多冗余的框,这里就不得不使用NMS。而DETR可以去除NMS从而达到end-to-end。
DETR模型
在目标检测模型中,有两个因素对直接集合预测至关重要:
(1)集合预测损失,它强制保证预测和GT之间的唯一匹配
(2)一次性预测一组对象并对它们之间的关系建模
集合预测损失
在一次decoder过程中,DETR推荐出N个结果的预测集合,N类似给图片分配N个框。训练的主要难点之一是根据真实值对预测对象(类别,位置,大小)进行评分。论文设置了预测目标和GT之间的最佳二部匹配,然后优化特定目标边界框的损失。
- 第一步是得到唯一的二部匹配代价,为了在预测框和真实框之间找到一个二部匹配(类似:3个工人,A适合1任务,B适合2任务,C适合3任务,怎么分配代价最小),寻找一个N个元素排列使得开销最小。(即最优分配)
前人工作,匈牙利算法
论文:真值集合中的每个元素i可以被看作是yi =( ci,bi ),ci是目标类标签(注意可能是 ∅);bi是一个向量 [0, 1]^4,定义了b-box的中心坐标和其相对于图像大小的高度和宽度。
- 第二步是计算损失函数,即前一步所有匹配对的匈牙利损失。我们对损失的定义类似于一般的目标检测器的损失,即类预测的负对数似然和后面定义的检测框损失Lbox的线性组合:

3. 边界框损失:
对边界框进行评分。不像许多检测器通过一些最初的猜测做边界框预测,我们直接做边界框预测。虽然这种方法简化了实现,但它提出了一个相对缩放损失的问题。最常用的L1损失对于小边界框和大边界框有不同的尺度,即使它们的相对误差是相似的。为了缓解这个问题,我们使用L1损失和尺度不变的广义IoU损失的线性组合。
DETR框架

backbone:
初始图像:H * W *3,经过传统的CNN生成一个低分辨率的特征图(H/32, W/32,2048)
Transformer encoder:
首先利用1*1 conv降维成(H/32, W/32,256),将该特征图拉成序列,方便作为transformer的输入,每个编码器都有一个标准结构,由一个多头自注意力模块和一个FFN(MLP)组成。由于transformer架构是对顺序不敏感的,我们用固定位置编码对其进行补充,并将其添加到每个注意力层的输入。
Transformer decoder:
解码器遵循transformer的标准架构,转换为尺寸为d的N个嵌入。与原始Transformer不同在于,每一个解码器都是并行解码N个对象。由于解码器是不变的,所以N个输入嵌入必须不同才能产生不同的结果,这些输入嵌入就是学习到的位置编码,成为object queries。跟encoder一样,将其添加到decoder中。然后通过FFN,将它们独立解码为框坐标和类标签,最终得到N个预测。对这些嵌入使用自注意力和encoder-decoder,模型利用所有对象之间的成对关系进行全局推理,同时能够使用整个图像作为上下文!!
FFN:
最后预测是由一个Relu、3层的MLP和一个线性投射层计算的。FFN预测输入图像的归一化中心坐标、框的高度和宽度,线性层使用softmax函数预测类标签。由于预测了一个包含固定大小N个边界框的集合,其中N通常比图像中GT数量大得多,因此使用一个额外的特殊类标签来表示此位置没有检测到目标。
在训练过程中,辅助编码损失在解码器中是很有帮助的,特别是在帮助模型输出每个类对象的正确数量方面,在每个编码器层后加入预测FFS和匈牙利损失。所有预测FFN都共享参数。
边栏推荐
- Yunna | why use the fixed asset management system and how to enable it
- PHP非对称加密方法私钥及公钥加密解密的方法
- Hospital online inquiry source code hospital video inquiry source code hospital applet source code
- [100 cases of JVM tuning practice] 03 -- four cases of JVM heap tuning
- MySQL高级(进阶)SQL语句
- 使用 Cheat Engine 修改 Kingdom Rush 中的金钱、生命、星
- [0701] [paper reading] allowing data imbalance issue with perforated input during influence
- High frequency interview questions
- Crypto usage in nodejs
- 数据降维——主成分分析
猜你喜欢

Mysql高级篇学习总结8:InnoDB数据存储结构页的概述、页的内部结构、行格式

全链路数字化转型下,零售企业如何打开第二增长曲线

教程篇(5.0) 09. RESTful API * FortiEDR * Fortinet 网络安全专家 NSE 5

yolov3 训练自己的数据集之生成train.txt

高级性能测试系列《24. 通过jdbc执行sql脚本》

消息队列消息丢失和消息重复发送的处理策略

LightGroupButton* sender = static_ cast<LightGroupButton*>(QObject::sender());
![[test development] software testing - concept](/img/24/9ee885d46f7200ae7449957ca96b9d.png)
[test development] software testing - concept

拦截器与过滤器的区别

Transformation of thinking consciousness is the key to the success or failure of digital transformation of construction enterprises
随机推荐
Tutoriel (5.0) 10. Dépannage * fortiedr * fortinet Network Security expert NSE 5
codeforces每日5题(均1700)-第四天
【测试开发】软件测试—概念篇
R语言ggplot2可视化:gganimate包创建动态柱状图动画(gif)、使用transition_states函数在动画中沿给定维度逐步显示柱状图
R language dplyr package Na_ The if function converts the control in the vector value into the missing value Na, and converts the specified content into the missing value Na according to the mapping r
日期工具类(不定时更新)
Masa framework - DDD design (1)
The difference between interceptor and filter
新手必看,點擊兩個按鈕切換至不同的內容
R语言dplyr包na_if函数把向量数值中的控制转化为缺失值NA、按照映射规则把指定内容转化为缺失值NA
Novice must see, click two buttons to switch to different content
Learn the knowledge points of eight part essay ~ ~ 1
MySQL高级(进阶)SQL语句
[100 cases of JVM tuning practice] 03 -- four cases of JVM heap tuning
Markdown基础语法
[daily question] the next day
Crypto usage in nodejs
Emmet basic syntax
Markdown basic grammar
How to copy and paste interlaced in Excel