DETR(目标检测的变压器)
DETR(目标检测转变的美丽)
使用transformers进行端到端检测的深入研究和清晰解释
注意:本文深入探讨了计算机视觉的精妙世界,特别关注Transformers和注意力机制。建议您熟悉论文“Attention is All You Need.”中的关键概念。
历史快照
DETR是DEtection TRansformer的缩写,由Nicolas Carion和Facebook AI Research团队于2020年首次提出,开创了目标检测领域的新浪潮。
尽管目前并不处于SOTA(最先进技术)状态,但DETR对目标检测任务的创新重新定义,对后续模型(如CO-DETR,目前的目标检测和实例分割最先进技术)产生了重大影响。
DETR摒弃了传统的一对多问题场景,其中每个真实目标对应大量锚点候选框,而将目标检测视为集合预测问题,预测与真实目标一一对应,从而消除了某些后处理技术的需求。
目标检测回顾
目标检测是计算机视觉的一个领域,专注于识别和定位图像或视频帧中的对象。除了对对象进行分类外,它还提供了一个边界框,指示对象在图像中的位置,从而使系统能够理解各个已识别对象的空间上下文和位置。

目标检测本身非常有用,例如在自动驾驶中,但它也是实例分割的一个初步任务,目标是在能够区分不同实例的同时,寻求对象更精确的轮廓(不同于语义分割)。
解密非极大抑制(及其摆脱)

非极大抑制(NMS)长期以来一直是目标检测算法的核心,它在后处理中起到了不可或缺的作用,用于优化预测输出。在传统目标检测框架中,模型对潜在目标区域提出了大量边界框,其中一些边界框不可避免地存在相当大的重叠(如上图所示)。
NMS通过同时保留具有最大预测置信度的边界框并抑制相邻具有高重叠度(由交并比(IoU)度量)的边界框来处理此问题。具体来说,给定一个预先确定的IoU阈值,NMS迭代选择具有最高置信度得分的边界框,并使IoU超过此阈值的边界框变为无效,确保每个对象只有一个高置信度的预测结果。
尽管NMS在目标检测中广泛应用,但DETR(DEtection TRansformer)大胆地避开传统NMS,通过将其作为集合预测问题进行重新定义,对目标检测进行了革新。
通过利用变压器,DETR直接预测一组固定大小的边界框,消除了传统的NMS的必要性,显著简化了目标检测流程,同时保持或提升了模型的性能。
深入了解DETR架构
在高级别的图像中,DETR是:
- 图像编码器(实际上是双重图像编码器,首先是CNN骨干,然后是Transformer编码器,以实现更高的表达能力)
- Transformer解码器,从图像编码中生成边界框。

让我们逐个部分更详细地了解:
- 骨干:
我们从一个初始的具有3个色彩通道的图像开始:
而这个图像被馈送到一个骨干,它是一个卷积神经网络
我们通常使用的典型值为C = 2048和H = W = H0 =W0 = 32
2. Transformer编码器:
理论上说,Transformer编码器并不是强制性的,但它为骨干添加了更高的表达能力,并且消融研究表明了性能的改进。
首先,1×1卷积将高级激活图f的通道维度从C降低到较小的维度d。
卷积之后
但是,正如您所知,Transformer将输入向量序列映射为输出向量序列,因此我们需要折叠空间维度:
折叠空间维度之后
现在我们准备将其馈送给Transformer编码器。
重要的是要注意,Transformer编码器仅使用自注意机制。
这就是图像编码部分的全部内容!

3. Transformer解码器:
这部分是最难理解的部分,坚持住,如果你理解了这一部分,你就理解了大部分文章。
解码器使用自注意和交叉注意机制的组合。它接受N个对象查询,并将每个查询转换为输出框和类别。
一个边界框预测是什么样子的?
实际上由两个组成部分:
- 一个边界框具有一些坐标(x1,y1,x2,y2),用于识别边界框。
- 一个类别(例如海鸥,但也可能为空)
重要的是要注意,N是固定的。这意味着DETR总是精确预测N个边界框。但其中一些可以为空。我们只需要确保N足够大,以覆盖图像中足够多的对象。
然后,交叉注意机制可以关注由编码部分(骨干 + Transformer编码器)产生的图像特征。
如果您对这个机制不确定,这个方案应该能够澄清事情:

在原始的Transformer架构中,我们生成一个标记,然后使用自注意力和交叉注意力的组合生成下一个标记,并重复此过程。但在这里,我们不需要这种循环的形式,我们可以一次性生成所有的输出,以便利用并行计算。
主要创新:二分匹配损失
如前所述,DETR只生成N个输出(边界框+类别)。但是每个输出只对应一个ground truth。如果你还记得的话,这就是重点,我们不希望应用任何后处理来过滤掉重叠的框。

我们基本上想要将每个预测与最接近的ground truth相关联。因此,实际上我们正在寻找一个预测集和ground truth集之间的双射,它最小化了总损失。
那么我们如何定义这个损失呢?
1. 匹配损失(成对损失)
我们首先需要定义一个匹配损失,它对应于一个预测框和一个ground truth框之间的损失:
这个损失需要考虑两个组成部分:
- 分类损失(边界框内预测的类别与ground truth是否相同)
- 边界框损失(边界框是否接近ground truth)

更具体地说,边界框组件有两个子组件:
- 交并比损失(IOU)
- L1损失(坐标的绝对差异)
2. 双射的总损失
为了计算总损失,我们只需对N个实例求和:
所以基本上我们的问题是找到最小化总损失的双射:

性能见解

- DETR:指的是原始模型,使用Transformer进行物体检测,使用ResNet-50作为主干。
- DETR-R101:这是DETR的一个变体,使用ResNet-101作为主干。这里的“R101”表示“ResNet-101”。
- DETR-DC5:这个版本的DETR使用改进的ResNet-50主干中的dilated C5阶段,提高了模型在较小物体上的性能,因为增加了特征分辨率。
- DETR-DC5-R101:这个变种结合了两个修改。它使用ResNet-101主干,并包含dilated C5阶段,从更深的网络和增加的特征分辨率中获益。
DETR在大物体上表现出色,这很可能是由变换器所允许的非局部计算所使可能的。但有趣的是,DETR在小物体上的表现较差。
为什么这种情况下注意力机制如此强大?

有趣的是,我们可以观察到在重叠实例的情况下,注意力机制能够正确地将各个实例分隔开,就像上面的图片所示。

非常有趣的是,注意力机制集中在物体的极端位置上以生成包围框,这正是我们所期望的。
总结
DETR不仅仅是一个模型,它是一种范式转变,将目标检测从一对多的问题转变为一组预测问题,并有效地利用了Transformer架构的进展。
从其初始阶段开始,已经出现了一系列增强版,如DETR++和CO-DETR,在COCO数据集上成为了实例分割和目标检测的现有技术。
感谢阅读!在你离开之前:
- 查看我在Github上的AI教程合集
GitHub — FrancoisPorcher/awesome-ai-tutorials: The best collection of AI tutorials to make you a…
The best collection of AI tutorials to make you a boss of Data Science! — GitHub …
github.com
你应该订阅我的文章。 在这里进行订阅。
如果您想要访问VoAGI上的高级文章,您只需支付每月5美元的会员费。如果您通过我的链接注册,您将支持我,并且不会产生额外费用。
如果您认为本文有见地并且受益,请考虑关注我并为更深入的内容鼓掌!您的支持将帮助我继续创作有助于我们共同理解的内容。
参考资料
- “使用Transformer进行端到端目标检测” by Nicolas Carion,Francisco Massa,Gabriel Synnaeve,Nicolas Usunier,Alexander Kirillov和Sergey Zagoruyko。您可以在arXiv上完整阅读。
- Zong, Z., Song, G., & Liu, Y. (出版年份)。带有合作混合分配训练的DETRs。 https://arxiv.org/pdf/2211.12860.pdf。
- COCO数据集