DETR:End-to-End Object Detection with Transformers

news/2024/5/14 7:30:01/文章来源:https://blog.csdn.net/weixin_46131719/article/details/127126830

在这里插入图片描述
论文地址:https://arxiv.org/abs/2005.12872
代码地址:https://github.com/facebookresearch/detr

在看完Transformer之后,将会开始看视觉类的Transformer应用。本篇论文出自ECCV20,是关于目标检测的论文。DETR,即Detection Transformer的缩写,还记得在Transformer中,作者曾提到过该模型可能还会再视觉、视频等领域可以应用,现在看来不得不佩服当时作者的直觉。这篇论文在2020年提出后就引起了很大的反响,很多人将本篇论文中的工作评为检测里面的里程碑,还有很多人说他应当是当年eccv的最佳论文。

一、摘要和简介

摘要第一句话,作者就阐明了我们使用的是一种新的思想,不同于以往的目标检测算法,作者将目标检测看做成集合预测的问题。由于思想的转变,该框架实际上真正做到了端到端的预测,在当前流行的目标检测算法里面,不管是one-stage的还是two-stage的算法,难免都要有其他的处理操作,比如nms的后处理,anchor base的网络等,他们都没有做到真正的端到端(在这里,我认为端到端其实可以理解为–给定一张输入的图片,模型能够直接输出完整的结果,而不再需要其他的后续操作)。省掉了那些操作后,DETR极大的简化了目标检测的流程。在DETR实现中,有两个主要的创新点:提出了一个新的目标函数,使得预测成为二分图匹配的问题;使用了Transformer的encoder-decoder的结构(并不是原始结构的Transformer)。
简单性是DETR的最大优势,由于省掉了anchor和nms操作,其框架十分的简单,虽然精度上不占优势,但是在DETR后面加上一个专用的分割头后,DETR就可以用于全景分割,并且表现出了比较好的性能。同时,DETR还有一个特点就是可以并行的去计算。
在Introduction的第一段中,作者先是介绍了当前比较流行的目标检测器,比如基于候选区域的rcnn系列,单阶段检测的yolo系列算法,这些算法的性能很大程度上受限于后处理的操作,并且很依赖人的先验知识。同时,他们没有直接将目标检测看作是集合预测,而是转而使用了分类或者回归的方法来解决这一问题。
DETR的整体流程图如下图所示:
在这里插入图片描述
从上图可以看出,把一张图片输入进模型,首先会经过一个卷积网络来生成一个特征图(这一点和fastrrcnn相同),也就是初步提取这张图片的特征,然后生成的特征图会送入encoder中进行编码,在经过decoder输出预测框(这里注意,DETR由于没有anchor也没有nms,其能生成的检测框数量是固定的,原文中称为object query,能够与ground truth的框会被保留,剩余的会作为背景框处理掉)。这就是整个算法的大致流程,具体的细节会在后面进行补充。
在coco数据集上,DETR达到了与Faster-Rcnn基线网络得到了同样的精度,但是DETR在大物体的检测效果上会更好,在小物体的检测效果上比较差,这是他的缺点之一,但是作者提到了任何的模型都要经过数次的迭代和改进,才能达到比较好的性能,由于DETR是初代的算法框架,因此可以改进的地方还是非常多的。

二、相关工作

作者在这里阐述了与自己论文相关的技术,分为三个部分:基于二分图匹配的集合预测、Transformer架构的编码-解码架构、并行解码以及目标检测的方法。
关于这部分的内容大多都是知识性的背景介绍,这里就不再做相关的叙述。

三、DETR模型算法

首先放上整个模型的架构图:
在这里插入图片描述

作者在这里说了本节当中,主要介绍两个部分:关于预测值和真实标签的集合预测损失;第二个就是本文DETR的整体结构了。

3.1 目标检测集合预测损失

对于DETR的模型来说,最后网络总是会输出一个固定的输出N(object query所限定),就经验来说,一百个输出框已经可以覆盖一张图片中的所有物体了(大多数图片都不会有特别多的物体)。如何将预测框与ground truth进行匹配,并计算最终的loss,作者在这里将其转换成为了二分图匹配的问题,该损失函数的公式如下:
σ~=argminσ∈N∑iNLmatch(yi,y^σ(i))\widetilde{\sigma} = argmin_{\sigma\in N}\sum_{i}^{N}L_{match}(y_i, \widehat{y}_{\sigma(i)}) σ=argminσNiNLmatch(yi,yσ(i))
Lmatch(y,y^)=∑i=1N[−p^σ^(i)(ci)+1{ci∈∅}Lbox(bi,b^σ^(i))L_{match}(y, \widehat{y}) = \sum_{i=1}^{N}[-\widehat{p}_{\widehat{\sigma}(i)}(c_i)+1_{\{c_i\in\varnothing\}}L_{box}(b_i, \widehat{b}_{\widehat{\sigma}}(i)) Lmatch(y,y)=i=1N[pσ(i)(ci)+1{ci}Lbox(bi,bσ(i))

第二个公式是整个网络最后的损失函数,作者使用了第一个函数来进行loss的计算,然后通过优化最小loss达到训练网络的目的。想要弄懂损失函数具体是怎么工作的,还要知道每个数学符号的含义,在这里放上论文中的原文。
在这里插入图片描述
在这里插入图片描述
LHungarian(y,y^)=∑i=1N[−logp^σ^(i)(ci)+1{ci∈∅}Lbox(bi,b^σ^(i))]L_{Hungarian}(y, \widehat{y}) = \sum_{i=1}^{N}[-log\widehat{p}_{\widehat{\sigma}(i)}(c_i)+1_{\{c_i\in\varnothing\}}L_{box}(b_i, \widehat{b}_{\widehat{\sigma}}(i))] LHungarian(y,y)=i=1N[logpσ(i)(ci)+1{ci}Lbox(bi,bσ(i))]
在这里插入图片描述
这种损失函数会使得网络做一个强制的一对一匹配,即每个ground truth都只有唯一的prediction与其对应。该损失函数与普通的损失函数相比,其首先是算了一个最优匹配,紧接着在最优匹配的基础上,再去计算loss。

3.2 DETR的整体框架

如下图:
在这里插入图片描述网络接收一张图片作为输入的时候,首先经过一个cnn(卷积层)会得到一个特征图,紧接着经过一个降维操作层将图像进行降维(为了能够与position encoding层结合),紧接在在加入Transformer之前,使用position encoding为特征加入位置信息,就得到了Transformer的输入,经过encoder部分后,DETR的decoder部分与原始的Transformer有所不同,在这里多了一个object query(OQ)的东西,OQ本质上是一个可学习的position embedding,该层的维度是(输出数*上一层的输出维度),该层可以近似的看作是anchor机制,经过decoder的输出,下面就是预测的部分了,FFN即(Feed Forword Nework),也就是全连接层,来得到做最终的结果。然后再根据最终结果计算loss,进行反向的梯度回传。

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

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

相关文章

pyinstaller打包多个python程序

以下两个python文件 get_file_message_main.py为执行文件,继承了get_file_message.py中的类 打开终端cmd 切换到桌面 cd desktop切换到指定路径 cd python打包pyi-makespec pyi-makespec get_file_message_main.py生成get_file_message_main.spec文件 .spec文…

信息增益计算和决策树生长过程

信息增益计算和决策树生长过程 给定训练集S,下面以信息增益作为最佳划分的标准,演示信息增益的计算和决策树生长的过程: 根节点 (1)以“Outlook”被选做划分属性 总共有14条数据,打球9条,不打…

[Windows内核源码分析5] 引导过程(对象管理器初始化在Phase1部分的分析)

在第1阶段, ObInitSystem首先对每个处理器的PRCB结构的lookaside链表进行初始化。 在全局名字空间中创建根目录\ 来看一下NtCreateDirectoryObject这个函数实际上是ObCreateObject和ObInsertDirectory的封装。其内部执行的操作很简单,一个是创建一个目录对象, 接着…

y160.第九章 GitOps从入门到精通 -- Tekton Trigger(九)

8.Tekton Trigger 8.1 Tekton Trigger 基础 Tekton Triggers简介 监控特定的事件,并在满足条件时自动触发Tekton Pipeline; 例如,代码仓库上的创建pull request、push代码,以及合并pull request至main分支等Tekton Triggers为用户提供了一种声明式API 它允许用户按需定义监…

客户管理系统(SSM版):解除线索关联市场活动

一、客户需求: 用户在线索明细页面,点击某一个"解除关联"按钮,弹出确认解除的窗口; 用户点击"确定"按钮,完成解除线索关联市场活动的功能. *解除成功之后,刷新已经关联的市场活动列表 *解除失败,提示信息,列表也不刷新 二、功能实现 1.首…

openjdk源码准备编译和依赖

在Windows系统上进行openjdk的源码编译 一、准备编译需要的装备 1.首先下载一个软件Cygwin。这个软件是一个在Windows平台下模拟Linux运行环境的软件,提供了一系列的Linux的运行命令。(解释这些,有兴趣的自己百度) 下载的路径点…

Web APIs:事件基础

事件三要素 1.事件是有三部分组成 事件源 事件类型 事件处理程序 (1)事件源 事件被触发的对象 谁 按钮 (2)事件类型 如何触发 什么事件 比如鼠标点击(click),经过 还是键盘按下 &…

TRC丨艾美捷TRC D-Abequose说明书

艾美捷TRC D-Abequose是一种甜味剂和增味剂配方,适用于食品、饮料、药物和化妆品用途。 艾美捷TRC D-Abequose化学性质: 目录号A010205 化学名称D-Abequose CAS 编号56816-60-5 分子式C₆H₁₂O₄ 分子量148.16 贮存4C 溶解度甲醇(少许…

【蓝桥杯国赛】H 机房

蓝桥杯2022年第十三届决赛真题-机房 - C语言网 (dotcpp.com) 题意: 一共有n个结点,n-1条边,因此这是棵树 信息经过一个结点,就会产生一定的延迟,具体延迟的时间等于该结点的度数 每次询问树上两个结点,问…

c++学习

C学习Static变量生存期和作用域静态局部变量类的继承多态虚函数纯虚函数(接口)可见性数组字符串constmutable成员初始化列表三元操作符在堆、栈上创建C实例化对象C运算符和其重载thisC对象的生存期智能指针uniqueptr(作用域指针)s…

Ubuntu安装微信

1.安装wine sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key//根据你的系统执行不同的命令 Ubuntu 22.04 sudo wget -NP /etc/apt/sources.list.d/…

快乐刷课---Tampermonkey下载使用

TampermonkeyChrome插件伴侣下载资源: 链接:https://pan.baidu.com/s/1IIzB8N2iPW2RjUO2pqDVHw?pwd6666 提取码:6666 1. 下载 Tampermonkey 进入油猴的官网Tampermonkey,下载你使用的浏览器对应的版本 以谷歌浏览器为例&am…

如何计算维吉尼亚密码?Java实现维吉尼亚密码的加密解密算法

文章目录如何计算维吉尼亚密码?Java实现加密算法Java实现解密算法参考博客如何计算维吉尼亚密码? 计算维吉尼亚密码有2种方式,一种是根据密码表查找,另一种是手动计算方法。 1.密码表查找法 第一行是密钥,第一列是明文…

CH579 Cortex-M0 内核低功耗蓝牙 MCU 集成 ARM 内核 32 位微控制器

概述 CH579 是集成 BLE 无线通讯的 ARM 内核 32 位微控制器。片上集成低功耗蓝牙 BLE 通讯模块、以太网控制器及收发器、全速 USB 主机和设备控制器及收发器、段式 LCD 驱动模块、ADC、触摸按键检测模块、RTC 等丰富的外设资源。 特点 32 位 ARM Cortex-M0 内核,…

Arduino常用函数(二)

数学函数 1、min(x,y)函数的作用是返回x,y两者中较小的。 2、max(x,y)函数的作用是返回x,y两者中较大的。 3、abs(x)函数的作用是获取x的绝对值。 4、constrain(amt,low,high)函数的工作过程是,如果amt小于low,则返回low&…

Pytho07--面向对象2

之前我们已经知道了面向对象的概念及在python中创建空类,带方法的类,带初始化方法的类,带实例化方法的类等并认识了类的成员。在我们将其与Java的代码进行对比后发现了python确实有它的方便之处。面向对象的内容不止之前文章中提到的那些&…

IDEA+Tomcat——前端输入数据乱码问题

IDEATomcat——前端输入数据乱码问题 给别人远程部署项目的时候,发现比较老的项目会出现接收前端数据是乱码的问题,但这个项目在我自己的电脑上却是正常的,通过对比发现,IDEA版本或Tomcat版本不同及过低是造成此问题的主要原因&am…

【数学与算法】最小生成树Spanning Trees

链接 无向图: 无向图的意思是,边没有方向。 树: 树是一类特殊的图,树是由节点和无向边构成的; 所有的树都是无向图,但是无向图未必是树; 树有一些性质,但并非所有图都有这些性质…

webrtc防抖动策略NetEq

什么是NetEq:进行抖动控制和丢包隐藏,让音频更平滑。 NetEq的位置 消除抖动的基本原理 NetEq整体架构 NetEq用到的几种缓冲区 NetEq的MCU与DSP NetEq的位置: 网络抖动的计算方式: 两个包在发送端的时间间隔为S,在接收端的间隔为R,那么抖动为J=S-R。 NetEq缓冲区设置多…

golang中struct

前面已经介绍的数组,slice,map有一定的相同之处,即处理的都是相同类型的元素,map中的key和value属于相同的类型,但如果要把多个类型的元素放到一起进行处理,则要使用go语言为我们提供的数据结构struct struct非常适合定…