【目标检测】DINO

一、引言

论文: DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection
作者: IDEA
代码: DINO
注意: 该算法是在Deformable DETR、DAB-DETR、DN-DETR基础上的改进,在学习该算法前,建议先掌握相关知识。
特点: 提出对比去噪训练方法,相比原DN-DETR中的去噪训练方法引入了负查询来避免重复的和不期望的预测;提出混合查询选择方法,相比原Deformable DETR中的查询选择方法移除了由编码器输出初始化解码器内容查询的部分;提出向前看两层的锚框更新方法,相比原Deformable DETR中向前看一层的锚框更新方法将梯度更新扩展到了前一层。

二、详情

DINO与其他DETR系列方法一样,包括backbone、编码器、解码器、预测头。DINO融合了Deformable DETR、DAB-DETR、DN-DETR的各种策略,例如多尺度特征图输入、可变形注意力、解码器位置查询由4D锚框表达、使用编码器输出初始化解码器输入、去噪训练、逐层更新预测框等等。

针对后三个策略,DINO又做了简单的改进。

2.1 对比去噪训练(Contrastive DeNoising Training)

DN-DETR提出去噪训练来提升模型收敛速度。但是该方法有两个问题:
(1)可能产生重复的预测。 对于同一个目标可能产生多个十分接近的预测,由于DETR系列方法都不需要执行NMS,这些不必要的预测无法被滤除,最终会对性能会有一定的影响。
(2)无法拒绝距离真实目标较远的预测。 即使预测框内无任何目标,如果它的置信分数较大也可能被选中并留到最后,这种无效预测也会影响模型性能。

对比去噪训练引入了显式的难分负样本,在训练时将其分为“no object”,从而使模型具有拒绝无用锚框的能力来解决这两个问题。与难分负样本对应的带噪正样本。事实上,正负都是通过在真实锚框和标签上增加噪声产生的,只是正负样本的噪声等级不同。下图是一个二维数据的正负样本区别示意图:

可见,作者增加了两个超参数, λ 1 < λ 2 \lambda_1<\lambda_2 λ1<λ2所有噪声等级小于 λ 1 \lambda_1 λ1的都视作正样本,所有等级大于 λ 1 \lambda_1 λ1但小于 λ 2 \lambda_2 λ2的都视作负样本。 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2差别不大时,负样本就可以视为难分负样本,因为它与正样本的区别不大,作者表示这样能提升性能。

以真实目标框归一化后的宽 w = 0.26 w=0.26 w=0.26为例, λ 1 = 1 , λ 2 = 2 \lambda_1=1, \lambda_2=2 λ1=1,λ2=2,那么在 [ ( 1 − λ 1 ) w , ( 1 + λ 1 ) w ] = [ 0 , 0.52 ] [(1-\lambda_1)w,(1+\lambda_1)w]=[0,0.52] [(1λ1)w,(1+λ1)w]=[0,0.52]范围内随机取一个值就形成了正样本的宽,在 [ ( 1 − λ 2 ) w , ( 1 − λ 1 ) w ] = [ − 0.26 , 0 ] [(1-\lambda_2)w,(1-\lambda_1)w]=[-0.26,0] [(1λ2)w,(1λ1)w]=[0.26,0] [ ( 1 + λ 1 ) w , ( 1 + λ 2 ) w ] = [ 0.52 , 0.78 ] [(1+\lambda_1)w,(1+\lambda_2)w]=[0.52,0.78] [(1+λ1)w,(1+λ2)w]=[0.52,0.78]范围内取一个值就形成了负样本的宽。

有了正负样本之后,训练时,正样本仍然使用重构损失,即锚框回归使用 l 1 l_1 l1和GIOU损失,标签分类使用focal损失。负样本因为原本就远离真实目标框了,所以框不必优化,而是希望将负样本分类为“no object”,使用focal损失。

除正负样本的生成与损失外,DINO与DN-DETR的区别还有以下几点:
(1)DN-DETR将匹配部分的内容查询(解码器嵌入)改为了类别标签嵌入,所以设置了一个指示项来区分匹配部分和去噪部分,但是DINO没有改变匹配部分的解码器嵌入所以不需要指示项。DN-DETR使用nn.Embedding初始化一个尺寸为 ( n u m _ c l a s s e s + 1 , h i d d e n _ d i m − 1 ) (num\_classes+1,hidden\_dim-1) (num_classes+1,hidden_dim1)的矩阵, − 1 -1 1留给指示项;DINO中初始化一个尺寸为 ( n u m _ c l a s s e s + 1 , h i d d e n _ d i m ) (num\_classes+1,hidden\_dim) (num_classes+1,hidden_dim)的矩阵。
(2)上面DN-DETR初始化的矩阵 + 1 +1 +1留给了匹配部分的内容查询,DINO的 + 1 +1 +1则是留给负样本。
(3)与DN-DETR一样,DINO会施加不同版本的噪声到真实目标的框和标签上。每组中每个真实目标的框和标签都会产生一个正样本和一个负样本。不同的是,DN-DETR固定每次都分5组,DINO则采取了动态组数的策略,当前批次数据中目标多时就组数就少一些,反之就多一些。

2.2 混合查询选择(Mixed Query Selection)

该操作仅针对匹配部分,不影响去噪部分。

DETR、Deformable DETR、DINO的解码器查询初始化间的差异如下图所示:

DETR的内容查询是初始化为0,位置查询是用nn.Embedding随机初始化成可学习的参数。

Deformable DETR的内容查询和位置查询均由编码器输出导出。 首先编码器输出memory经过一次不变维度的全连接映射,再经过预测头预测类别和框,取类别分数topk的框(k和解码查询数量300一致),之后将topk的框的4个值进行位置编码再经过一次不变维度的全连接映射,最后分割为两部分分别作为解码器的初始化内容和位置查询。

可以看出将框的值经过位置编码再做全连接和分割感觉并不是很合理,毕竟内容查询用位置编码的映射做初始化没什么道理。所以DINO直接把topk的4个值作为位置查询的初始化,而内容查询的初始化是用nn.Embedding随机初始化成可学习的参数。

2.3 向前看两层的锚框更新(Look Forward Twice)

每层解码器输出都参与损失计算时才有用。

Deformable DETR、DINO的锚框更新间的差异如下图所示:

Deformable DETR的解码器层会预测锚框的偏移量从而逐层更新锚框。 例如上图(a)中 b i − 1 b_{i-1} bi1是上一层的锚框预测,经 L a y e r i Layer_i Layeri后得出偏移量 Δ b i \Delta b_i Δbi,综合得出该层锚框预测 b i ′ b_i^{\prime} bi

但是每层的预测结果在进行损失计算时只会影响当前层的参数更新,例如 b i ′ b_i^{\prime} bi作为第 i i i层的预测传入第 i + 1 i+1 i+1层前会被detach,即上图(a)中的虚线。detach后 b i ′ b_i^{\prime} bi b i b_i bi值相同但与该项相关的损失梯度就无法从第 i + 1 i+1 i+1层传到第 i i i层。

作者认为后一层的信息可能有助于修正前一层的锚框偏移量,所以把预测 b i p r e d b_i^{pred} bipred b i − 1 + Δ b i b_{i-1}+\Delta b_i bi1+Δbi改为了 b i − 1 ′ + Δ b i b^{\prime}_{i-1}+\Delta b_i bi1+Δbi 这样第 i + 1 i+1 i+1层的梯度可以传递到第 i + 1 i+1 i+1层和第 i i i层,同时指导 L a y e r i Layer_i Layeri L a y e r i + 1 Layer_{i+1} Layeri+1的更新,再往前就不行了,如下图所示:

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
DINO 论文简介
DINO 源码解析

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

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

相关文章

一个专为Android平台设计的高度可定制的日历库

大家好&#xff0c;今天给大家分享一个高度可定制的日历库kizitonwose/Calendar。 Calendar专为Android平台设计&#xff0c;支持RecyclerView和Compose框架。它提供了丰富的功能&#xff0c;允许开发者根据需求定制日历的外观和功能。 项目介绍 此库是开发Android应用时&…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验14 聚合了不存在的网络导致的路由环路问题

一、实验目的 1.验证由于聚合了不存在的网络而导致静态路由的路由环路问题&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证路由…

【最长公共前缀 动态规划】2430. 对字母串可执行的最大删除数

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 最长公共前缀 动态规划 动态规划汇总 LeetCode 2430. 对字母串可执行的最大删除数 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a; 删除 整个字符串 s &#xff0c;或者 …

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)一些样式的调整使用

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、比如下面的发起人双击后出现的界面不正常&#xff0c; 看它的样式主要是这个里面的margin-left应该太小了&#xff0c; [data-v-45b533d5] .el-tabs__content { margin-top: 50px;mar…

EE架构大跃进:特斯拉、小鹏引领舱驾融合,从域控融合走向单SoC

作者 |肖恩 编辑 |德新 智能汽车发展到今天&#xff0c;整车电气架构已经从分布式架构逐渐迈向中央集成式架构&#xff0c;传统的小控制器被集成到按功能划分的大域控里&#xff0c;下一个阶段将是跨域的融合&#xff0c;通过不同功能域的集成实现中央计算平台的最终目标。 …

Linux动态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&#…

QAM MMA

MMA是改进的CMA&#xff0c;有RCA和CMA的优点&#xff0c;还能对相位误差进行修正。 N 5e5; % 仿真符号数 M 16; % QAM16msg randi([0 M-1],N,1); % 产生随机符号 tx qammod(msg,M); % QAM调制test_snr 20:5:30; …

Springboot 校园安全通事件报告小程序系统-计算机毕业设计源码02445

Springboot 校园安全通事件报告小程序系统 摘 要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;校园安全通事件报告小程序系统更是深得消费者的喜爱&#xff0c;它的出现极大…

PyPDF2拆分PDF文件的高级应用:指定拆分方式

本文目录 前言一、拆分方式选择1、代码讲解2、实现效果图3、完整代码前言 前两篇文章,分别讲解了将使用PyPDF2将PDF文档分割成为单个页面、在分割PDF文档时指定只分割出指定页面,如果你还没有看过,然后有需要的话,可以去看一下,我把文章链接贴到这里: PyPDF2拆分PDF文件…

近红外光谱脑功能成像(fNIRS):1.光学原理、变量选取与预处理

一、朗伯-比尔定律与修正的朗伯-比尔定律 朗伯-比尔定律 是一个描述光通过溶液时被吸收的规律。想象你有一杯有色液体&#xff0c;比如一杯红茶。当你用一束光照射这杯液体时&#xff0c;光的一部分会被液体吸收&#xff0c;导致透过液体的光变弱。朗伯-比尔定律告诉我们&#…

2024中国西安科博会暨硬科技产业博览会11月召开

2024第18届中国西安国际科学技术产业博览会暨硬科技产业博览会 时间&#xff1a;2024年11月3日-5日 地点&#xff1a;西安国际会展中心 主办单位&#xff1a;中国国际科学技术合作协会 陕西省科技资源统筹中心 协办单位&#xff1a;西安市科学技术协会 西安市中小企业协会、…

IO多路复用学习

Linux中的I/O多路复用 相关基础概念 在学习I/O多路复用之前&#xff0c;先学习一些相关的基础概念&#xff0c;便于理解。 内核缓冲区和用户缓冲区 &#x1f62e; CPU 上会运行两种程序&#xff0c;一种是操作系统的内核程序&#xff08;也称为系统程序&#xff09;&#x…

强行仅用time.localtime制作“日历牌”——全程记录“顶牛”“调戏”我的AI学习搭子

强行只用time.localtime制作“日历牌”&#xff0c;码好代码试炼通过&#xff0c;想榨取ai智能优化算法&#xff0c;结果失败。本文详细记录“顶牛”全过程。 (笔记模板由python脚本于2024年07月01日 19:16:26创建&#xff0c;本篇笔记适合喜欢python&#xff0c;喜欢搞“事儿”…

I2C bus,adaptor,client 在sysfs 的路径定位

i2c bus 路径 struct bus_type i2c_bus_type {.name "i2c",.match i2c_device_match,.probe i2c_device_probe,.remove i2c_device_remove,.shutdown i2c_device_shutdown, }; EXPORT_SYMBOL_GPL(i2c_bus_type);static int __init i2c_init(void) {int re…

【Linux】线程封装与互斥(万字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 C多线程的用法 对原生线程进行一次封装 理解pthread线程 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 操作共享变量会有问题的售票…

数字信号处理教程(2)——时域离散信号与时域离散系统

上回书说到数字信号处理中基本的一个通用模型框架图。今天咱们继续&#xff0c;可以说今天要讲的东西必须是学习数字信号处理必备的观念——模拟与数字&#xff0c;连续和离散。 时域离散序列 由于数字信号基本都来自模拟信号&#xff0c;所以先来谈谈模拟信号。模拟信号就是…

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息&#xff0c;消息源 Evan Blass 今天在 X 平台发布推文&#xff0c;分享了小米 MIX Fold 4 折叠屏手机的高清渲染图&#xff08;图片有加工成分在&#xff0c;最终零售版本可能会存在差异…

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务1:运行环境说明

任务描述 项目的运行环境是基于Hadoop的全分布式模式集群。 任务的主要内容是规划集群节点及网络使用&#xff0c;准备初始环境&#xff0c;关闭防火墙和Selinux。 任务指导 1. 基于Hadoop的全分布式模式集群&#xff0c;如下图所示&#xff1b; 2. 硬软件环境&#xff1a;…

微信小程序转发朋友圈详细教程

微信小程序转发朋友圈功能&#xff0c;官方说的很官方&#xff0c;容易踩坑 官方链接戳这里 想分享朋友圈必须要分享好友 onShareTimeline() { } 想要生效必须先定义 onShareAppMessage() { } /*** 用户点击右上角分享*/onShareAppMessage() { },onShareTimeline() { } 简单…

当《开心消消乐》遇上 AI 推理,我们找到了高质量关卡背后的原因!

随着 AI 热潮席卷各行各业&#xff0c;其落地应用已经成为企业技术研发升级的工作重心。人工智能应用的升级不仅需要软件层面的升级迭代&#xff0c;还需要大规模基础设施的支撑。然而&#xff0c;自行搭建大规模算力、存储基础设施对于大多数企业而言都存在技术难度、人力资源…