基于transformer的目标检测:DETR

目录

一、背景介绍

二、DETR的工作流程

三、DETR的架构

[1. 损失函数](#1. 损失函数)

[2. 网络框架讲解及举例](#2. 网络框架讲解及举例)

一、背景介绍

在深度学习和计算机视觉领域,目标检测一直是一个核心问题。传统方法依赖于复杂的流程和手工设计的组件,如非极大值抑制 (nms)和锚点(anchor)生成,这些都需要对任务有深入的先验知识。然而,DETR的出现,为我们提供了一种全新的视角,将目标检测视为一个直接的集合预测问题,实现了端到端的检测。

DETR,即DEtection TRansformer,是一种创新的框架,它通过简化检测流程,消除了对许多手工设计组件的需求。**这一方法的核心在于其集合基础的全局损失函数,它通过二分图匹配(bi-partite matching)强制实现唯一的预测结果,以及其Transformer编码器-解码器架构。**DETR利用一组固定且学习得到的对象查询(object queries),推理对象之间的关系和全局图像上下文,直接并行输出最终的预测集合。

额外提一下,最初的DETR训练很慢,原作者训练了500个epoch。不过这些问题在后续都被慢慢解决了。

二、DETR的工作流程

根据原文的流程图,训练部分可以分成4部分:

  1. 特征提取(Feature Extraction):

    在这个阶段,输入的图像通过一个卷积神经网络(CNN)来提取图像特征。这些特征是图像的高级表示,捕捉了图像中的重要信息,为后续的编码阶段提供基础。

  2. 编码(Encoding):

    编码阶段使用Transformer的编码器部分。编码器接收CNN提取的图像特征,并将其转换为一系列特征表示。这些特征表示能够捕捉图像的全局信息,为解码阶段提供丰富的上下文。

  3. 解码(Decoding):

    解码阶段由Transformer的解码器部分负责。解码器利用编码器提供的特征表示,并通过自注意力机制来预测目标的类别和位置。解码器的输出是一组边界框预测,每个预测对应一个可能的目标。

  4. 损失计算(Loss Calculation):

    在损失计算阶段,DETR使用二分图匹配损失来优化模型。这种损失函数确保预测的边界框与真实边界框之间建立一对一的匹配关系。如果一个预测没有与任何真实边界框匹配,那么它应该被分类为"无对象"类别。

推理过程中,解码器同样生成一组边界框预测。但是,与训练不同,推理过程中不会使用二分图匹配损失。相反,会应用一个置信度阈值(例如0.7),只保留那些置信度高于这个阈值的预测。这样可以过滤掉那些不太确定的预测,只保留模型认为更有可能正确的预测。

三、DETR的架构

1. 损失函数

在DETR中,不管输入什么图片,都会在decoder输出100个框,但是一张图片中正常只会有几个target。一个预测框对应一个真实目标,模型怎么知道哪个预测框对应真实的目标框呢?于是该问题转换为了一个二分图匹配问题。

举个例子,假设我们有一张图片,其中包含3个真实目标,而DETR的解码器输出了100个预测框。二分图匹配问题就是要在这100个预测框和3个真实目标之间找到最佳的匹配关系,使得匹配的总成本(预测框与真实目标之间的损失函数)最小化。

如图所示,预测框和真值的对应问题可以列成一个矩阵,矩阵中放的是损失值,然后利用现成的匈牙利算法解决这个二分图匹配问题。

这里的损失函数分为类别损失定位损失。

每个预测框都会有一个类别损失,但只有那些通过二分图匹配与真实目标框匹配的预测框才会有位置损失。

2. 网络框架讲解及举例

根据DETR流程图,举个例子描述输入图像经过DETR模型处理的精炼详细步骤:

  1. 输入图像: 输入一张尺寸为 3×800×1066 的图像。

  2. CNN骨干网络: 使用传统的CNN骨干网络提取图像特征,得到一个 2048×25×34 的特征图,25*34是输入图像大小的1/32。

  3. 特征降维: 通过1*1卷积将特征图降维到 256×25×34。

  4. 位置编码: 为降维后的特征图添加位置编码,位置编码的尺寸同样为 256×25×34。

  5. 特征图拉平: 将添加了位置编码的特征图拉平成一维向量,尺寸为 850×256,800是像素点个数。

  6. Transformer编码器: 将拉平后的特征向量输入到Transformer编码器中进行编码。

  7. Transformer解码器输入: 解码器的输入是一个固定大小的向量,尺寸为 100×256,这代表了模型将输出100个预测框。通过QKV的计算公式可知,decoder的输出与输入相同。

  8. 交叉注意力: 解码器中的每个输出嵌入与编码器的输出进行交叉注意力操作,以结合编码器的全局信息。

  9. 解码器输出: 交叉注意力操作后,解码器输出尺寸为 100×256 的向量。

  10. 预测头: 将解码器的输出通过一个共享的前馈网络(FFN),每个FFN预测一个类别(包括"无对象"类别)和边界框。

  11. 最终预测: FFN输出最终的100个预测框,每个预测包括类别和边界框信息。

这个流程展示了DETR如何通过Transformer架构实现端到端的目标检测,从输入图像到最终的预测框,整个过程不需要传统的目标检测组件,如锚点生成或非极大值抑制。

相关推荐
AIBigModel20 分钟前
微软:GPT-4o-mini只有8B,o1-mini仅100B
深度学习
是阿静呀1 小时前
新手学习yolov8目标检测小记2--对比实验中经典模型库MMDetection使用方法(使用自己的数据集训练,并转换为yolo格式评价指标)
python·学习·yolo·目标检测
B站计算机毕业设计超人3 小时前
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
大数据·hadoop·python·深度学习·机器学习·数据分析·数据可视化
智识世界Intelligence3 小时前
美国宏观经济基础框架梳理
经验分享·笔记·深度学习·信息可视化·学习方法
Tiandaren4 小时前
医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件
c++·人工智能·python·深度学习·3d·开源
tangjunjun-owen5 小时前
DetToolChain: A New Prompting Paradigm to Unleash Detection Ability of MLLM论文解读
人工智能·目标检测·多模态大模型·dettoolchain·视觉提示prompt·思维链提示prompt
Font Tian5 小时前
深度学习中的离群值
人工智能·pytorch·深度学习·异常检测·离群值
夏天是冰红茶5 小时前
Transformer中Self-Attention以及Multi-Head Attention模块详解(附pytorch实现)
人工智能·深度学习·transformer·自注意力·多头注意力
傻瓜学习5 小时前
目标检测初始
人工智能·目标检测
知恩呐1115 小时前
最小二乘有限差分的物理信息神经网络与物理信息神经网络的区别
人工智能·深度学习·神经网络