当前位置:网站首页>论文笔记:DETR: End-to-End Object Detection with Transformers (from 李沐老师and朱老师)
论文笔记:DETR: End-to-End Object Detection with Transformers (from 李沐老师and朱老师)
2022-06-22 09:14:00 【被rua弄的小狸花】

背景
大多数目标检测方法都是two-stage(proposal),即便是single-stage(anchor),最后往往还需要一个后处理的操作,也就是nms(non-maximum suppersion)非极大值抑制来去除预测框。避免了调参和部署困难(很多复杂的库和普通硬件不支持的算子,人工干预的先验知识)。
先前广泛使用的检测模型将detection通过
- proposal: Faster-R-CNN,mask RCNN,fpn RCNN, Cascade RCNN
- anchors base: YOLO, Focal loss
- Non anchors base: Window centers, center net, FCOS
等将几何预测任务间接转化为回归/分类任务去解决问题,也受限于postprocessing。Transformer作NLP Decoder就用自回归生成,而DETR则是直接输出结果,一是快,二是图片无须依靠顺序回归,每个bounding box结果没有相联系的关系
而于2020 ECCV上DETR这篇的里程碑式的目标检测论文将Transformer is all you need运用到了Object Detection任务上来,直接利用Transformer这种全局建模的能力,将目标检测这种局部信息看作一个集合预测的问题。同时也因此不会输出那些冗余框,端到端的输出结果。
创新点
- 实现十分简单,核心代码不超过50行就包括了模型建立,前向和推理过程。能让目标检测和图片分类一样简单,不需要冗余的各种处理和知识。
- 提出新的目标函数可以通过二分图匹配的方式生成独一无二的预测(无框)。
- 而在Transfomer Decoder中还增添额外输入(learned object queries,类似anchor)与全局图像信息结合在一起,可以做到能够让模型直接**并行一起(in parallel)**输出last 预测框
- 适用于很多复杂任务,例如全景分割,目标追踪,视频的姿态预测和语义分割
相关工作
原论文
2.1 集合预测科普
2.2 Transformer 和 parallel decoding
2.3 目标检测之前的相关工作
DETR主要的两个特点
- Set-based loss
- Recurrent detectors
之前都有工作在其他backbone上实现过,但是效果不够好,仍然较为复杂,还用了人工干预,所以归根结底还是Transformer的成功
模型详解
主体方法
下图是DETR的整个工作流程
(1)先CNN抽特征,拉直后送入transformer
(2)Encoder学全局特征,大概区分物体块,使其与输出预测框一对一,而不是一对多,帮助后面做检测
(3)Decoder中会有object query限制出几个框(100),这是替代生成anchor的机制
(4)计算与ground truth框的matching loss,来决定哪几个预测框与grond truth一一对应,其余标记为背景。然后再算分类loss和bounding box loss。 二分图匹配替代nms,把不可学变成了可学。
推理的时候前三步一样,但最后一步loss不需要,用一个阈值卡一下输出的置信度(>0.7)
缺陷:在大物体上预测结果好,小物体上预测结果差,DETR训练慢,不过半年后的Deformable DETR用多尺度多特征解决了
启发:改变了训练setting,使得无法与前人方法公平对比,怎样让审稿人放过你
【1】基于集合的目标函数set prediction loss
最优二分图匹配使得cost最低的最优排列(匈牙利算法),如scipy库里的linear sum assignment函数
cost martix=set prediction loss=分类loss+出框准确度
其实总的来看,和往人做法差不多,但严格限制得到一对一匹配关系
【2】具体模型架构Recurrent detectors
其实和上面流程图差不多,就是backbone的地方concat一个位置编码,再transformer decoder的输入加一个object queries
实验

带+号的是使用新的数据增强策略训练过的Model,APs是小物体,DETR明显低了2个到5个点,而在APm和APl就好上不少,甚至高6个点。
其余更多的是可视化分析(encoder将object分得很开,decoder处理边界边缘和遮挡),以及消融实验,来进行公平对比就不一一列举了
PS:一个想法在数据集a不work,不代表在数据集b不work。{合适的切入点很重要}
DERT是一篇object detection领域里程碑的paper,后续有相当的多的工作以它为名字进行改进(后续的Deformable DETR在2021年ICLR影响力也是第二,第一是ViT),以后可以尝试一下这种架构。
边栏推荐
猜你喜欢

为啥要使用梯度下降法

How C processes use non static methods

MSSQL injection of SQL injection

字符串与内存操作函数详解与模拟实现
![[network security officer] an attack technology that needs to be understood - high hidden and high persistent threats](/img/c9/c0ee95e816cac698f5397cc369d9ec.jpg)
[network security officer] an attack technology that needs to be understood - high hidden and high persistent threats

MySQL中常用的SQL语句

C# 进程如何使用非静态方法

前馈和反向传播

机器学习|nltk_Data下载错误|nltk的stopwords语料下载错误解决方法
![[detailed explanation] point multiplication and cross multiplication of neural network matrix (pytorch version)](/img/17/e964216d81555d0a1203ee51d4698e.png)
[detailed explanation] point multiplication and cross multiplication of neural network matrix (pytorch version)
随机推荐
为啥要使用梯度下降法
Share 830 spider IP segments (by analyzing 1g logs)
.a文件链接库的使用
Unicode characters / static non static access
C语言刷题 | 输入一个数输出对应的值(13)
重写?重载?你晕了吗?
PHP seven methods to obtain complete instances of file name suffixes [collect]
稀疏数组^创建^还原^存盘^取盘--全家桶
Stream stream creation_ Operation_ Collection_ case
rewrite? Reload? Are you dizzy?
【uni-app】实战总结(含多端打包)
Quick search system (aso+xls) v1.0
pytorch的模块使用:线性模型(未完成)
PIP3 install XXX reports an error: command'lsb_ release -a' returned non-zero exit status 1.
C language question brushing | input a number and output the corresponding value (13)
Find the size of cosine
希望越来越多的女性从事科技工作
cocoscreator编译报错记录 Could not write cache value 。。。.gradle\daemon\4.10.3\regi
断言assert()
机器学习|nltk_Data下载错误|nltk的stopwords语料下载错误解决方法