【目标检测】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,直接保留类别预测概率大于阈值的预测即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318346.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm配置wsl开发环境(conda)

背景 在研究qanything项目的过程中,为了进行二次开发,需要在本地搭建开发环境。然后根据文档说明发现该项目并不能直接运行在windows开发环境,但可以运行在wsl环境中。于是我需要先创建wsl环境并配置pycharm。 wsl环境创建 WSL是“Windows Su…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中,如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库,它基于 Apache POI 封装了简单易用的 API,使得我们能够方便地读取、写入 Excel 文件。Easy…

【讲解下如何解决一些常见的 Composer 错误】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片,那是资料获取的入口! 【高质量精品】2024五一数学建模C题成品论文22页matlab和13页python完整建模代码、可视图表分解结果等「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦&#…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据(JSON) 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢?其实在drf内部是由解析器,根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

电路笔记 : 电容电阻大小表示(103、104、151、2R5、R15的含义)

电容电阻大小表示 电阻 数字索位标称法 数字索位标称法就是在电阻体上用三位数字来标明其阻值。它的第一位和第二位为有效数字,第三位表示在有效数字后面所加“0”的个数.这一位不会出现字母。如果阻值是小数.则用“R”表示“小数点”.并占用一位有效数字&#xf…

eaapp怎么改地区?eaapp账号区域更改的简单操作教程分享

eaapp怎么改地区?eaapp账号区域更改的简单操作教程分享 EA App是由Electronic Arts艺电公司开发的官方游戏平台,为玩家提供了一个集中管理和探索EA游戏世界的平台。该平台提供了丰富的游戏库,包括热门游戏如《FIFA》和《Apex Legends》等。…

C语言——小知识和小细节17

一、未能给指针成功赋值 #include <stdio.h> #include <stdlib.h> #include <string.h>void GetMemory(char* p) {p (char*)malloc(20 * sizeof(char)); }void Test() {char* str NULL;GetMemory(str);strcpy(str, "Hello World!");printf(&quo…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址&#xff08;支持多个&#xff09;网址解析&#xff08;包括协议、主机、路径、参数等&#xff09; package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库&#xff08;5&#xff09;&#xff1a;使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

IO端子介绍及GPIO number计算

IO端子介绍 &#xff08;引脚&#xff0c;针脚&#xff09; 嵌入式系统的主芯片&#xff0c;有的IO资源少&#xff0c;有的IO资源多。 少的是这样的封装&#xff0c;IO管脚都在四周&#xff1b; 多的是这样的封装&#xff0c;IO 的PAD都在下面&#xff1a; MCU或MPU&#xff0c…

VS(Visual Studio)中查找项目里的中文字符

目录 正则表达式查找中文字符 正则表达式查找中文字符 在Visual Studio (VS) 中查找所有的中文字符&#xff0c;你可以使用其强大的查找和替换功能。不过&#xff0c;由于中文字符的范围非常广泛&#xff08;包括简体中文、繁体中文、日本汉字、韩国汉字等&#xff09;&#xf…

[1671]jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

springcloud自定义全局异常

自行创建一个实体类 /*** 全局异常处理类**/ ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) ResponseBody public Result error(Exception e){e.printStackTrace(); return Result.fail();}/*** 自定义异常处理方法* param e * re…

亚马逊云科技AWS将推出数据工程师全新认证(有资料)

AWS认证体系最近更新&#xff0c;在原有12张的基础上&#xff0c;将在2023年11月27日添加第13张&#xff0c;数据工程师助理级认证(Data Engineer Associate)&#xff0c;并且在2024/1/12前半价(省75刀&#xff1d;544人民币。 原有的数据分析专家级认证(Data Analytics Specia…

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架&#xff0c;用于学习时间序列数据的表示&#xff0c;可以在任意语义层次上进行。与现有方法不同&#xff0c;TS2Vec通过对增强的上下文视图进行层次化…

Redis 实战1

SDS Redis 只会使用 C 字符串作为字面量&#xff0c; 在大多数情况下&#xff0c; Redis 使用 SDS &#xff08;Simple Dynamic String&#xff0c;简单动态字符串&#xff09;作为字符串表示。 比起 C 字符串&#xff0c; SDS 具有以下优点&#xff1a; 常数复杂度获取字符串…

每日一题(力扣213):打家劫舍2--dp+分治

与打家劫舍1不同的是它最后一个和第一个会相邻&#xff0c;事实上&#xff0c;从结果思考&#xff0c;最后只会有三种&#xff1a;1 第一家不被抢 最后一家被抢 2 第一家被抢 最后一家不被抢 3 第一和最后一家都不被抢 。那么&#xff0c;根据打家劫舍1中的算法 我们能算出在i…

Vmware虚拟机瘦身及Samba服务不可用问题解决

虚拟机磁盘空间膨胀是一个令人头疼的问题&#xff0c;特别是对许多搞开发的小伙伴。无论是做后台服务、嵌入式还是Android开发&#xff0c;都面临着这个难题。首先&#xff0c;操作系统本身就已占用不少空间&#xff0c;更新安装包&#xff0c;再下载一些开源软件&#xff0c;剩…

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为&#xff1a; 能提交独立proof给StarkWare的Ethereum Verifier&#xff0c;的首个开源的STARK prover。 开源代码见&#xff1a; https://github.com/andrewmilson/sandstorm&#xff08;Rust&#xff09; L2Beat 提供了以太坊上Starknet的合约架构图&…