DETR
PDF: https://arxiv.org/pdf/2005.12872
Code: https://github.com/facebookresearch/detr
一、大体内容
DETR(DEtection TRansformer)基于Transformer提出了一个全新的端到端的目标检测框架,之前的目标检测方法,不管是两阶段、一阶段还是Anchor-free和Anchor-based方法,最后都需要有NMS操作来过滤重叠的预测框,而且基于Anchor和基于proposal都依赖于人为设定的大小。DETR将目标检测任务变成一个集合预测问题(原先都是通过 proposal或anchor来间接预测),不用借助NMS、Anchor、先验框等信息,直接端到端等输出物体检测框,且其只需要更换检测头就可以直接迁移到分割任务。
并且预测是并行出框的。但当时对小物体检测效果不太好且训练比较慢,但这些问题在后续提出的Deformable DETR中都得到了解决。
整体结构和流程
整体上分成4个模块,CNN骨架网络提取初始特征,加上位置编码后输入Encoder提取全局特征,再把可学习的object Queries输入到Decoder,最后经过检测头直接输出框和类别信息。
假设输入图片大小为,预测类别为91类,图片经过卷积神经网络32倍下采样后抽取特征为,在变换到,然后与同样大小的位置编码进行相加并拉直得到特征为,输入到Transform Encoder学习全局特征还是,再和可学习的固定个数的(超参 100个,所以大小为)object Queries进行自注意力操作,再经过Encoder得到大小为的特征,最后经过一个检测头输出类别信息()和框信息()。
二、贡献点
- 提出一个端到端的目标检测框架DETR,无需NMS等操作,也不需要一些先验知识去设置Anchor,直接并行输出目标框和类别
- DETR很容易扩展到分割等任务,可以作为一个视觉通用框架,DETR新挖了个坑,后续很多工作对其进行了改进
三、细节
3.1 训练和预测区别
主要区别在于是否需要二分图匹配。
在训练时需要利用二分图匹配给每个真实框分配一个唯一的预测框,进行损失计算。
二分图匹配可以参考:https://www.cnblogs.com/xiaxuexiaoab/p/17838305.html
实现上直接采用scipy包的函数linear-sum-assignment
。
而推理时直接输出预定个数的框,然后按照一个给定分数阈值,得到最终检测框。
3.2 损失函数
DETR对任意图片都输出给定的N个框,在训练时给每个真实框分配一个唯一的预测框。
其中为
整体结构上还是和Hungarian loss一致,由一个分类和一个框损失组成。
但是BETR中的分类损失没有用log,保证和框损失取值空间一致。
框损失一般用L1Loss,考虑到L1 loss和出框大小有关,越大损失越大, BETR采用了GIou loss和L1 Loss结合。
试验也表明框损失同时采用L1 loss和GIoU loss效果最好
3.3 Object Query
Object Query开始进行随机初始化,然后在Decoder中的第一个多头注意力进行自注意力。主要是为了移除冗余框,第二个多头注意力再与Encoder输出特征进行交叉注意力
这图说明学习的和anchor有点类似,相当于以不同的方式去询问,比如有的关注左下角,有的关注右侧,上图显示中间都有一条,作者给出的解释是COCO数据集一般中间都有一个大物体,这说明DETR是学习自动学习到了Anchor特征,这也避免了人为事先设定。
3.4 DETR的Transformer结构
与Transformer还是有点不一样,如:
DETR在Encoder里位置编码只加在Q和K上,而Transformer加在QKV上
DETR在解码器第一个多头注意力是对object queries进行的,到第二个才与Decoder输出关联,并将Object queries加到Q上
3.5 迁移到分割
作者通过可视化分析了Encoder和Decoder的结果,这也为直接迁移到分割提供了基础。
-
Encoder注意力可视化
图片中牛的大体区域已经学习到了,包括那头小牛位置都很清晰。 -
Decoder可视化
这张图效果更加明显,大象和斑马的皮肤很接近,但边缘位置Decoder学习的很好,能够把不同物体的边缘区分出来。 -
分割网络
在box后接入一个FPN(特征金字塔)网络可以直接实现全景分割。
3.6 不足点
- 对小目标效果不好
- 训练耗时,比较慢
在DeTR中图像通过一系列的卷积层和池化层进行特征提取,只选择了最后一层特征(没有考虑多尺度特征),这会导致特征图的分辨率降低,小物体在经过这些层后可能会失去很多细节信息,使得模型难以准确检测小目标。另外Transformer的注意力机制倾向于关注图像中的显著区域,这可能导致模型对小物体的关注度不足,在大物体占主导地位的场景中,小物体可能被忽略。
目标检测和分割通常图片分辨率较大,对应到Transformer模块计算量成倍增长,且训练时需要进行二分图匹配才能计算损失,所以训练比较耗时。
这些问题半年之后deformable detr的提出把这两个问题都解决了。(FPN===>Faster RCNN用了两年半)
四、效果
-
检测结果对比
-
不同层数效果
-
分割效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!