【论文阅读笔记】End-to-End Object Detection with Transformers

news2024/10/12 1:23:46

代码地址:https://github.com/facebookresearch/detr

论文小结

  本文是Transformer结构应用于目标检测(OD)任务的开山之作。方法名DETE,取自Detection Transformer。
  作为2020年的论文,其表现精度在当时也不算高的,但为后面的DETE-based方法提供了基础。

  DETR的模型架构设计,使用的是混合Transformer结构,即CNN+Transformer的结构,

  与YOLO系列基于grid的预测对比,DETR经过transformer的decoder输出的是序列集。由于OD任务不需要自回归处理,所以decoder的输出可以并行处理,同时输出多个检测框

  transformer输出的是序列集,而OD任务所需要的最终结果也是一个边框集合,所以DETR是直接对结果进行的预测,即OD任务在此直接为集合预测问题
  集合预测问题,在匹配损失的时候,具有唯一性。所以DETR的预测结果在合理的Loss作用下,是不需要NMS后处理的。且在没有anchor grid和anchor box的偏差预测过程的情况下,DETR算法管道实现端到端训练和预测,丢弃了YOLO系列所需的融入先验知识的需求(anchor & nms)。

  文中DETR对比的算法是Faster RCNN,是2015年的一篇论文,精度差不多,运行时间也差不多。小目标不如Faster RCNN,大目标好不少,最后mAP基本持平。
  后续也有论文改进了transformer在小目标检测上精度不足的问题。

论文简介

  现有大多数检测算法,都依赖于一些初始猜测。不管是基于proposal的二阶目标检测算法,还是anchor-based、anchor-free的一阶目标检测算法,都是没有直接去预测集合预测的,而是设计了一个替代的任务(回归和类别概率)来解决目标检测问题。
  现代目标检测器的检测性能很受后处理步骤的影响,比如(1)密集预测边界框的消除;(2)anchor集合的额设计;(3)将目标分配给anchor的启发性方法;
  DETR通过直接预测集合的方法来绕过这些“代理”任务,无需任何人工先验知识,实现端到端预测

  DETR的结构图如图1所示。其组件transformer-encoder将序列元素两两交互,其全局的交流有利于一些特别限制的集合预测,比如移除重复的预测结果。
  DETR使用二分图匹配来计算端到端的几何损失,匹配的唯一性,也进一步限制了重复的预测结果。
  和其他的集合集合预测方法对比,DETR的主要区别就在于使用了二分图匹配损失以及平行解码的transformer结构。之前的集合预测方法一般使用RNNs模型做自回归预测。

论文方法

  由于transformer的decoder结构其输入输出维度保持不变,故当输入序列长度为 N N N,我们也能得到序列长度为 N N N的固定长度输出。本文DETR的输入序列命名为 object quires,是一组基于学习得来的参数,可视化如下 7 7 7所示。

损失计算

  集合预测的训练难点在于如何结合GT来给预测目标打分。本文的损失计算策略先用二分图匹配方法,再对有目标(匹配成功)的bboxes计算损失

  将目标集合 y y y扩展到长度 N N N,不足长度的部分用 ∅ \varnothing 表示,意为无目标。预测集合 y ^ \hat{y} y^和GT集合 y y y的匹配,是寻找两个集合匹配的最低消耗,如公式 ( 1 ) (1) (1),其中 σ ( i ) \sigma(i) σ(i)是预测集合第 i i i个。
σ ^ = arg min σ ∈ G N ∑ i N L match ( y i , y ^ i ) (1) \hat{\sigma}=\mathop{\text{arg min}} \limits_{\sigma\in\mathscr{G}_N}\sum_i^N\mathcal{L}_{\text{match}}(y_i, \hat{y}_i)\tag{1} σ^=σGNarg miniNLmatch(yi,y^i)(1)

  匈牙利算法(Hungarian algorithm)是这个最佳匹配的一个较优解法。匹配消耗考虑类别预测和边框预测的综合损失。考虑第 i i i个预测的类别 c i c_i ci的预测概率为 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) p^σ(i)(ci),则对应的匹配损失为: L match ( y i , y ^ i ) = − I { c ≠ ∅ } p ^ σ ( i ) ( c i ) + I { c ≠ ∅ } L box ( b i , b ^ σ ( i ) ) \mathcal{L}_{\text{match}(y_i,\hat{y}_i)}=-\mathbb{I}_{\{c\neq \varnothing\}}\hat{p}_{\sigma(i)}(c_i)+\mathbb{I}_{\{c\neq\varnothing\}}\mathcal{L}_{\text{box}}(b_i,\hat{b}_{\sigma(i)}) Lmatch(yi,y^i)=I{c=}p^σ(i)(ci)+I{c=}Lbox(bi,b^σ(i))

  在使用匈牙利算法寻找到最佳匹配之后,我们定义的匈牙利损失如公式 ( 2 ) (2) (2)所示:其中 σ ^ \hat{\sigma} σ^在计算优化损失的第一步已经有了确定赋值;为类别平衡,当 c i = ∅ c_i=\varnothing ci=时,类别权重下降 10 10 10
L Hungarian ( y , y ^ ) = ∑ i = 1 N [ − log  p ^ σ ( i ) ( c i ) + I { c ≠ ∅ } L box ( b i , b ^ σ ^ ( i ) ) ] (3) \mathcal{L}_\text{Hungarian}(y,\hat{y})=\sum \limits_{i=1}^N[-\text{log }\hat{p}_{\sigma(i)}(c_i)+\mathbb{I}_{\{c\neq\varnothing\}} \mathcal{L}_\text{box}(b_i,\hat{b}_{\hat{\sigma}}(i))]\tag{3} LHungarian(y,y^)=i=1N[log p^σ(i)(ci)+I{c=}Lbox(bi,b^σ^(i))](3)

  一般类别损失会使用log空间。但作者发现不用log空间时,分类损失和定位损失的值域相近,训练结果会更好一点。故后面使用 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) p^σ(i)(ci),而不是log概率。

  当预测的集合和GT的空集 ∅ \varnothing 进行匹配时,其匹配消耗不依赖于预测,消耗为一个常数。

  对于边框定位损失,在当时使用的是 L 1 \mathcal{L}1 L1损失,后面采用IoU损失。作者选择了 L 1 \mathcal{L}1 L1损失和IoU损失的结合。

模型架构

  DETR的架构整体如下图2所示:经过decoder的处理后,使用FFN(feed forward network)做最终预测(类别和边框)。

  DETR的CNN backbone,下采样倍数为 32 32 32倍,输出channel为 2048 2048 2048。对于应用于实时目标检测的transformer来说,这个channel还是比较大的,作者选择使用 Conv 1 × 1 \text{Conv}1\times1 Conv1×1压缩channel到 d d d,默认为256。将特征图 H 32 × W 32 × d \frac H{32}\times \frac W{32} \times d 32H×32W×d展开后( d × H W d\times HW d×HW)放入encoder中。位置编码是基于学习的。
  文中默认配置为encoder有 6 6 6个,decoder有 6 6 6个,multi-attention的head有 8 8 8个,hidden dim为 256 256 256

  encoder和decoder是标准的transformer结构,不同的地方在于decoder是并行解码 N N N个目标,而《Attention is all you need》中的transformer-decoder是自回归结构,同一时间只能预测输出序列的一个元素。
  decoder的input embeddings必须不同来产生不同结果。这个input embeddings在DETR是学习来的,本文叫做object queires。COCO中学习到的object queries如下图7所示,每个输入都检测一部分框。

  FFNs,本文采用的是 3 3 3层感知机 + ReLU激活函数 + 线性映射层。预测定位的结果是正则化的中心坐标以及框的宽高。分类的预测是使用Softmax函数处理,其中加一个特殊类 ∅ \varnothing 来表示无目标。

  在训练中,DETR中每个transformer-decoder都添加一个辅助监督,所有预测分支的FFNs共享权重。添加一个额外的layer-norm,在每个decoder层FFNs的输入上应用。

  DETR的pytorch实现如下图所示;

论文实验

训练相关参数和策略

  训练数据集为COCO2017,训练集中平均每张图 7 7 7个实例,最多一张图为 63 63 63个实例。所以,在COCO上,DETR使用的 N = 100 N=100 N=100是完全足够的。

  DETR使用AdamW优化器,transformer的初始 l r lr lr 1 0 − 4 10^{-4} 104,backbone的初始 l r lr lr 1 0 − 5 10^{-5} 105,这是因为backbone是使用ImageNet预训练的。transformer权重使用Xavier初始化。
  DETR使用的两个backbone为ResNet-50和ResNet-101,对应的检测器模型为DETRDETR-101。像《Fully convolutional instance-aware semantic segmentation》一样,在backbone的最后一个stge上增加dilation作用。同时在该stage的第一个Conv上移除stride的作用,以增加分辨率。以此策略对应的模型为DETR-DC5DETR-DC5-R101Dilated C5 stage。该参数让分辨率扩大 2 2 2倍,因此改善了小目标的性能。推理消耗为 16 16 16倍的encoder(self-attention),整体消耗为 2 2 2倍计算消耗。

  增强策略上,使用尺度增强(短边最少 480 480 480最多 800 800 800,长边最高 1333 1333 1333)。为帮助transformer-encoder的self-attention学习全局关系,作者使用随机裁剪增强,这带来了将近 1 1 1AP的提升。使用dropout增强策略,概率为0.1

  在推理时,有的slots会预测空类 ∅ \varnothing 。为了优化AP,这些slots用第二高的类别及其分数。这种操作带来了2个AP的改善。

  消融实验,训练 300 300 300个epoch,在 200 200 200epoch时学习率下降 10 10 10倍。baseline模型在 16 16 16个V100 GPUs上训练 300 300 300个epoch,耗时 3 3 3天,每个GPU 4 4 4张图,故batchSize为 64 64 64
  与Faster RCNN相比,更长训练策略为 500 500 500个epoch, 400 400 400个epoch后下降学习率。 500 500 500个epcoh相比 300 300 300个epoch,能带来 1.5 1.5 1.5AP的提升。

  其他参数: λ L 1 = 5 \lambda_{L1}=5 λL1=5 λ i o u = 2 \lambda_{iou}=2 λiou=2。Faster-RCNN+的边框回归损失使用GioU loss和L1的结合。

对比实验

  DTER和Faster RCNN的对比实验如下表所示:

  DETR中transformer-encoder层数的消融实验:encoder层数越高,AP越高。作者选择了 6 6 6。如果没有encoder,会降低 3.9 3.9 3.9AP,大目标降低 6.0 6.0 6.0AP,说明encoder还是重要的。

  encoder的可视化(encoder最后一层的attention maps)看图像中的一些点。可以看出其中貌似已经完成实例分割了,可以在decoder简单地进行目标提取和定位。

  在decoder中每层增加FFN来预测,见下图:每加一层decoder,AP和AP50都会上升。只有一个decoder层的解码能力比较多,容易产生多余的输出。随着decoder层数上升,NMS的作用下降。

  decoder的attention可视化如下图所示,不同颜色表示不同预测目标的attention maps。可看出,decoder的注意力是比较局部的,它主要关注的是物体的四肢、头脚等。作者假设,encoder使用全局attention分离实例,而decoder仅需要关注端点以提取类和对象边界

  DETR有两种pos embeddings:(1)空间位置编码;(2)输出位置编码(object queries)。下表实验了一些组合:固定编码和可学习编码。输出位置编码是必要的,且不可移除的。

  边框定位损失的消融实验: λ L 1 = 5 \lambda_{L1}=5 λL1=5 λ i o u = 2 \lambda_{iou}=2 λiou=2的组合下,GIoU损失和L1损失的结合是最佳的。

  每个边框预测是其中的一个点。绿色是小框,蓝色是大的竖向的框,红色是大的横向的框。可以发现20个slots都有一条红的竖线在中间,应该是COCO数据集的实例表现问题。

  训练集中同一张图像没有那么多实例的类别,在预测时也能有比较好的泛化。比如长劲鹿的图像,在COCO中最多一张图像13个实例,作者生成了个24实例的图像,也能准确预测。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:信号保存与处理

使用kill -l命令查看信号: 信号量和信号确实一点关系没有 信号是操作系统发出的进程与进程之间的通知于中断,是进程之间时间异步通知的一种方式 先了解同步通信:同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步…

学以致用 SAP HCM 顾问excel函数实战系列

EXCEL函数:在上学的时候,对word、excel、PPT感觉都很简单,稀里糊涂的学,稀里糊涂的忘,然后走向工作岗位的时候,突然发现这三大宝剑无比锋利,可惜自己太菜,曾经努力学习,但…

前端 | Uncaught (in promise) undefined

前端 | Uncaught (in promise) undefined 最近开发运行前端项目时,经常预计控制台报错 ,如下图: 这里我总结下,这种报错的场景和原因,并通过实际代码案例帮助小伙伴更好理解下 。 文章目录 前端 | Uncaught (in promi…

数据丢失的终极克星来了!EasyRecovery17数据恢复软件

数据丢失的终极克星来了! 各位亲爱的朋友们,你们有没有经历过那种“哎呀妈呀,重要文件找不到了!”的绝望时刻?别急,今天我要向你们安利一款神器——EasyRecovery17数据恢复软件,简直是我们这些“…

Javascript笔试题目(二)

1.如何使用ES6语法对函数所有参数进行求和?请写出具体代码 function sumAll(...args) { // args 是一个数组,包含了函数接收到的所有参数 return args.reduce((accumulator, currentValue) > accumulator currentValue, 0); } // 测试函数 console.log…

查找企业联系电话的几种方法

在商业合作和销售拓展的过程中,找到企业的联系电话是至关重要的一步。无论是精准营销还是客户开发,拥有有效的联系方式可以大大提高成功率。那么,如何快速有效地查找企业联系电话呢?下面介绍几种常见的方法,以及如何借…

摩托车一键启动智能钥匙提高了便捷性和安全性

摩托车一键启动无钥匙进入功能是一种便捷的智能配置 通过PKE智能感应技术实现无钥匙启动: 技术原理与操作 摩托车一键启动无钥匙进入系统采用了RFID无线射频技术和车辆身份编码识别系统,实现了双重射频系统、双重防盗保护。操作简便,只需携…

最后倒计时,SIGMOD 2025全球数据库盛会,你准备好了吗?

一、会议资讯: ACM SIGMOD/PODS International Conference on Management of Data是计算机科学领域中一个顶级的国际学术会议,专注于数据库管理和数据系统的前沿研究。 SIGMOD Conference 每年由 ACM 主办,汇集了全球顶尖的学者、研究人员和…

【使用Java循环输出菱形,空心金字塔】

使用Java循环输出图形的探索之旅 在这篇博客中,我们将探讨如何使用Java中的循环结构来输出各种几何图形,特别是金字塔和菱形。通过这一过程,不仅能够加深对循环的理解,还能提升编程能力。 1. 打印矩形 首先,我们从最…

初级学习:Python实现AI并搭建

随着人工智能(AI)的迅猛发展,越来越多的人希望能够学习如何通过编程实现AI应用。Python,因为其简洁易用,被广泛认为是AI开发的理想编程语言。本文将介绍Python在AI开发中的基础应用,帮助初学者入门并构建自己的AI项目。 为什么选择Python 在了解如何用Python实现AI之前,…

探索 Python 装饰器的终极利器:wrapt 库

文章目录 探索 Python 装饰器的终极利器:wrapt 库背景:装饰器的进化之旅初识 wrapt:它究竟是什么?安装 wrapt:简单几步,轻松上手函数的魔法:wrapt 的简单使用创建简单装饰器装饰器的高级用法&am…

浅谈导热油蒸汽发生器在电子及半导体行业中应用

导热油蒸汽发生器在电子或半导体行业制造过程中有着广泛的应用。为促进温控行业交流发展上海中壹展览等于十二月在上海举办主办首届“TCU China温控展”。以下是一些具体的应用场景和优势: 应用场景 1.清洗与洁净室控制: 半导体生产过程中,生产设备和工…

TikTok代理IP全面使用指南

对于那些希望通过社交媒体打造个人品牌的人来说,TikTok是现在热门的平台,他的流量与曝光不可小觑,相信很多跨境营销会选择他进行多账号营销。问题是,TikTok多账号很容易遇到封禁问题,那么如何解决? 一、什么…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念,用函数表达式来描述是这样的:f(x) f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务…

3款逆天级Word插件,一键解决文档排版烦恼

在当今快节奏的工作环境中,高效的文档处理能力至关重要,今天电脑天空将为大家介绍三款卓越的Word插件,它们能显著提升你的写作效率,让您的工作成果更加出色。 1. 文档排版利器:小恐龙公文排版助手 小恐龙公文排版助手…

Chromium 如何查找已经定义的mojom函数实现c++

进程通信定义通常都是用.mojom文件或者idl文件格式 以content\common\frame.mojom里面的BeginNavigation函数为例。 一、如何查找BeginNavigation函数定义,在vscode里面直接搜索BeginNavigation,过滤条件 *.idl,*.mojom,*.cc 效果: 这样…

HECTOR:一种新型多模态深度学习模型用于预测子宫内膜癌复发风险|顶刊精析·24-10-12

小罗碎碎念 这篇文章是关于一项名为HECTOR(histopathology-based endometrial cancer tailored outcome risk)的研究,它是一个基于多模态深度学习的预测模型,用于预测子宫内膜癌(EC)的复发风险。 作者角色作…

threejs-加载gltf模型

一、介绍 1.概念 glTF(gl传输格式)是一种开放格式的规范 (open format specification), 用于更高效地传输、加载3D内容。该类文件以JSON(.gltf)格式或二进制(.glb)格式提…

常用的web服务器简述

一.Web服务器介绍 ‌Web服务器是一种运行于互联网上的计算机硬件或软件,用于存储、处理和传输网页和其他网站内容。‌ 它通常运行在服务器上,绑定服务器的IP地址并监听某一个TCP端口,接收来自客户端的请求,然后向客户端发送所请求…

中国地级市生态韧性数据及城市生态韧性数据(2000-2022年)

一测算方式: 参考C刊《管理学刊》楚尔鸣(2023)老师的做法,城市生态韧性主要衡量一个城市在面临生态环境系统压力或突发冲击时,约束污染排放、维护生态环境状态和治理能力提升的综合水平。 参考郭海红和刘新民的研究&a…