【目标检测】DEtection TRansformer (DETR)

2024-05-03 15:12

本文主要是介绍【目标检测】DEtection TRansformer (DETR),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

论文: End-to-End Object Detection with Transformers
作者: Facebook AI
代码: DEtection TRansformer (DETR)
特点: 无proposal(R-CNN系列)、无anchor(YOLO系列)、无NMS的、端到端的目标检测方法。

二、框架

DETR总体框架图如下:

可见,其主要结构包括四个部分:backbone、encoder、decoder、prediction heads。

2.1 Backbone

输入图像先经过backbone进行特征提取,原文使用ResNet-50。此时,通道数变为2048,图像高宽变为原来的 1 32 \frac{1}{32} 321。再经过一个卷积核大小为1*1的卷积层,将通道数降低至256。

尺寸变换情况如下(同一批次的图像会经过padding统一大小):
[ b a t c h _ s i z e , 3 , h e i g h t , w i d t h ] → [ b a t c h _ s i z e , 2048 , h e i g h t / 32 , w i d t h / 32 ] → [ b a t c h _ s i z e , 256 , h e i g h t / 32 , w i d t h / 32 ] [batch \_size,3,height,width]\rightarrow[batch\_size,2048,height/32,width/32]\rightarrow[batch\_size,256,height/32,width/32] [batch_size,3,height,width][batch_size,2048,height/32,width/32][batch_size,256,height/32,width/32]

2.2 Encoder

Encoder结构如下图左侧所示:

可见,Encoder包括 N N N个这样的组件(原文中有6个),每个组件包括Spatial positional encoding、残差结构(当前输出+之前的输入)、Multi-Head Self-Attention、LayerNorm、FNN(全连接+激活+Dropout+全连接+Dropout)。

值得注意的是:
(1) DETR的位置编码采用了正余弦交替表达各像素点横纵坐标的方式,详情见我关于位置编码的博客(Spatial positional encoding)。
(2) DETR的位置编码仅加在了注意力模块中的Q、K上,这表明计算权重时会使用位置信息,但被传递至下一层的数据中不包含位置信息。原注意力模块的位置编码在Q、K、V上均有体现,详情见我关于注意力的博客(Multi-Head Self-Attention)。

2.3 Decoder

Decoder结构如下图右侧所示:

Decoder重复次数 M M M也是6,其包含的组件主要有位置编码、残差结构、Multi-Head Self-Attention、LayerNorm、Multi-Head Attention、FNN(全连接+激活+Dropout+全连接+Dropout)。

需要注意的有以下几点:
(1) Decoder的输入变为Object queries。Object queries是一个大小为100*256、初始全为0的可学习参数。100表示模型最多预测出100个目标框,256与图像特征通道数一致可保证注意力机制的正常运算。Decoder对应Object queries的输出经Prediction heads后将用于计算损失、预测框坐标、预测类别。
(2) Decoder中的位置编码与Object queries尺寸是一致的。没有使用Spatial positional encoding,而是由nn.Embedding随机初始化,全程保持不变。Decoder中的位置编码作用于Multi-Head Self-Attention前的Q、K和Multi-Head Attention前的Q。
(3) Decoder中有两个注意力模块,先通过Multi-Head Self-Attention,再通过Multi-Head Attention。Multi-Head Self-Attention是对Object queries执行自注意力,Decoder中的位置编码仅作用于Q、K。Multi-Head Attention以Object queries为Q,以Encoder的输出为K和V。Decoder中的位置编码作用于Q,Encoder中的位置编码作用于K。

2.4 Prediction heads

Prediction heads结构如下图右上部分所示:

可见,与其他目标检测方法一样,DETR也是对类别和边界框进行预测。

类别预测头的FFN是一层简单的全连接,例如在COCO数据集中为 256 → 92 256\rightarrow 92 25692(92=类别总数91+背景类1,实际COCO为80个有效类但给了91个类)。

边界框预测头的FFN是一个MLP,包括三层全连接和一层激活: 256 → 256 → 256 → 4 → s i g m o i d 256\rightarrow256\rightarrow256\rightarrow4\rightarrow sigmoid 2562562564sigmoid(4=左上角坐标2+右下角坐标2)。预测的坐标是归一化的,实际计算时需要映射至原图。

三、训练

如上所述,预测结果共有100个,每个都有对类别和边界框的预测。但是实际一张图像中目标数量通常不足100,DETR通过二分匹配为每个真实目标寻找一个最匹配的预测用于框相关损失的计算。

3.1 二分匹配

DETR使用匈牙利匹配算法,为每个真实目标寻找一个最匹配的预测。想要进行匹配首先要有对每个预测结果的衡量指标,DETR使用了三种指标:
(1) 在真实目标类上的预测概率(分类头输出经SoftMax后获得)。
(2) 所有预测框坐标与所有真实目标框坐标间的曼哈顿距离(残差的绝对值之和,即L1损失)。
(3) 所有预测框与所有真实目标框间的GIOU(一种改进的IoU指标)。
其中,(1)和(3)越大越好,(2)越小越好,所以衡量指标被定义为 − ( 1 ) + ( 2 ) − ( 3 ) -(1)+(2)-(3) (1)+(2)(3)

匈牙利算法能够根据衡量指标为每个真实目标都找的一个最匹配的预测。所以DETR通过二分匹配而非NMS确定用于计算框相关损失的预测。

3.2 损失

损失包括如下三项:
(1) 交叉熵损失。每张图片有100个预测,未被匹配的预测所对应的真实标签被置为背景类91。
(2) L1损失。残差的绝对值之和。
(3) GIOU损失。 1 − G I O U 1-GIOU 1GIOU
交叉熵损失针对所有预测,L1损失和GIOU损失仅针对与真实目标匹配的预测。交叉熵损失仅针对类别预测,L1损失和GIOU损失仅针对框预测。

四、测试

测试时无需计算损失,也不需要NMS,直接保留类别预测概率大于阈值的预测即可。

这篇关于【目标检测】DEtection TRansformer (DETR)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957033

相关文章

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X