【论文阅读】DiffusionDet: Diffusion Model for Object Detection

news2024/11/30 2:42:48

原文链接:https://arxiv.org/abs/2211.09788

1. 引言

  过去的目标检测方法依赖手工设计的候选对象(如滑动窗口、区域提案、锚框和参考点);或是依赖可学习的物体查询。
  本文使用更加简单的方法,随机初始化边界框(不含可学习参数或启发式先验),直接从噪声框中细化位置和尺寸。这种从噪声生成边界框的方法与去噪扩散模型生成图像的过程类似。
  DiffusionDet将目标检测任务视为边界框中心和尺寸的生成任务。在训练阶段,高斯噪声会添加到真实边界框中,得到带噪声的边界框;然后带噪声的边界框会用于裁剪RoI内的、图像编码器输出的特征,进一步输入检测头进行边界框预测。推断阶段,DiffusionDet通过将噪声先验分布调整为学习到的分布,来生成边界框。
  DiffusionDet可以训练一次就用到不同的推断设置中。例如,推断时使用的随机边界框数量不需要和训练时相同;推断时可任意调整去噪采样步数来平衡性能与推断时间。

3. 方法

3.1 准备知识

  目标检测的任务是从图像 x x x估计边界框集合 b ∈ R N × 4 b\in\mathbb{R}^{N\times4} bRN×4和类别标签 c c c
  扩散模型通过对样本数据逐步添加噪声,定义了前向扩散过程的一个马尔科夫链。前向过程如下: q ( z t ∣ z 0 ) = N ( z t ∣ α ˉ t z 0 , ( 1 − α ˉ t ) I ) , t ∈ { 1 , 2 , ⋯   , T } q(z_t|z_0)=\mathcal{N}(z_t|\sqrt{\bar{\alpha}_t}z_0,(1-\bar{\alpha}_t)I),t\in\{1,2,\cdots,T\} q(ztz0)=N(ztαˉt z0,(1αˉt)I),t{1,2,,T}其中 α ˉ t : = ∏ s = 0 t α s = ∏ s = 0 t ( 1 − β s ) \bar{\alpha}_t:=\prod_{s=0}^t\alpha_s=\prod_{s=0}^t(1-\beta_s) αˉt:=s=0tαs=s=0t(1βs) β s \beta_s βs表示噪声方差。神经网络 f θ ( z t , t ) f_\theta(z_t,t) fθ(zt,t)会通过最小化如下的训练目标,从 z t z_t zt预测 z 0 z_0 z0 L train = 1 2 ∥ f θ ( z t , t ) − z 0 ∥ 2 \mathcal{L}_\text{train}=\frac{1}{2}\|f_\theta(z_t,t)-z_0\|^2 Ltrain=21fθ(zt,t)z02  推断时,数据样本 x 0 x_0 x0会使用模型 f θ f_\theta fθ从噪声样本 z T z_T zT迭代地重建。
  本文的数据样本为 z 0 = b z_0=b z0=b。给定条件 x x x,神经网络 f θ ( z t , t , x ) f_\theta(z_t,t,x) fθ(zt,t,x)会从带噪声的边界框 z t z_t zt预测 z 0 z_0 z0,并相应生成类别标签 c c c

3.2 结构

在这里插入图片描述
  在每个迭代步骤直接将 f θ f_\theta fθ应用于原始图像在计算量上是不可接受的。本文将整个模型分为两部分:图像编码器和检测解码器。前者只会运行一次,以得到输入图像的深度特征表达,后者将深度特征作为条件,逐步细化带噪声边界框 z t z_t zt
  图像编码器提取图像特征,包含CNN/Transformer主干+FPN。
  检测解码器输入提案框的集合,从图像特征裁剪得到RoI特征,并输入检测头获取回归和分类结果。解码器与Sparse-CNN结构类似,使用6个级联阶段。区别在于本文使用随机边界框而非学习到的边界框,且无需提案特征。此外,DiffusionDet会在迭代采样阶段重复利用检测头,每个阶段会加入步数编码。

3.3 训练

  训练算法如下:

  1. 图像编码器提取图像特征;
  2. 填充和缩放真实边界框得到 z 0 z_0 z0
  3. { 1 , 2 , ⋯   , T } \{1,2,\cdots,T\} {1,2,,T}内均匀采样时间 t t t,从标准正态分布中采样噪声 ϵ \epsilon ϵ。计算 z t = α ˉ t z 0 + 1 − α ˉ t ϵ z_t=\sqrt{\bar{\alpha}_t}z_0+\sqrt{1-\bar{\alpha}_t}\epsilon zt=αˉt z0+1αˉt ϵ
  4. 将图像特征、 z t z_t zt t t t输入解码器得到预测边界框;
  5. 计算预测边界框与真实边界框的损失。

  真实边界框填充:通常不同图像中的实例数不同。本文通过向真实边界框集合中添加(填充)额外边界框,使得边界框总数为固定值 N train N_\text{train} Ntrain。填充方法包括重复已有边界框、添加随机边界框或添加图像大小的边界框。实验表明添加随机边界框的效果最好。
  边界框破坏:向填充后的边界框集合添加噪声,噪声尺度由 α t \alpha_t αt控制。 α t \alpha_t αt服从单调递减余弦调度。此外,真实边界框需要缩放以保证信噪比。
  训练损失:检测头输入 N train N_\text{train} Ntrain个被破坏的边界框,预测 N train N_\text{train} Ntrain个类别和候选框。使用集合预测损失,并按照最优传输分配方法,通过选择代价最小的 k k k个预测,为每个真实边界框分配多个预测。

3.4 推断

  推断过程从采样自高斯噪声的边界框集合逐步细化为预测结果,算法如下所示。

  1. 图像编码器提取图像特征;
  2. 从标准正态分布中采样边界框提案 z T z_T zT
  3. t = T t=T t=T开始,进行下面的过程直到 t = 0 t=0 t=0
      将图像特征、 z t z_t zt t t t输入解码器得到预测边界框;
      根据 z t z_t zt、预测边界框、 t t t t − Δ t-\Delta tΔ,使用DDIM预测上一步的边界框提案 z t − Δ z_{t-\Delta} ztΔ;(DDIM是一种采样时可跳步的扩散模型)
      更新边界框提案 z t − Δ z_{t-\Delta} ztΔ

  采样过程:将每一步得到的边界框提案输入解码器得到预测边界框后,使用DDIM估计上一步的边界框提案。去掉DDIM后,性能会有严重下降。
  边界框更新:每一步采样后,预测的边界框可分为期望的预测(位于相应目标处)和不期望的预测(随意分布)。对于不期望的预测,其分布没有被学习,因此会被替换为新的随机边界框(从高斯分布中采样)。实际中,将分数低于特定阈值的预测视为不期望的预测。
  一次训练适用于多种测试设置:由于随机边界框的设计,推断阶段采用的随机边界框数和采样阶段数无需和训练阶段保持一致。

4. 实验

4.1 实施细节

  测试细节:每个采样步骤的预测结果会集成起来通过NMS,以获得最终的预测。

4.2 主要特性

  DeffusionDet的主要特性为“一次训练适用于多种测试设置”。因此,可根据需要调整边界框数量和采样步数,以平衡速度和精度。
  动态边界框:将DiffusionDet与DETR比较,固定训练时的边界框或物体查询数量 N train N_\text{train} Ntrain,改变测试时的边界框或物体查询数量 N eval N_\text{eval} Neval。对于DETR,由于测试时的查询数必须等于训练时的数量,因此当 N eval < N train N_\text{eval}<N_\text{train} Neval<Ntrain时从 N train N_\text{train} Ntrain个查询中选择 N eval N_\text{eval} Neval个查询,而在 N eval > N train N_\text{eval}>N_\text{train} Neval>Ntrain时随机加入 N eval − N train N_\text{eval}-N_\text{train} NevalNtrain个查询。观察性能变化情况发现,DETR的性能在 N eval = N train N_\text{eval}=N_\text{train} Neval=Ntrain时达到峰值,增加或减小 N eval N_\text{eval} Neval均会导致性能下降;而DiffusionDet的性能能随着 N eval N_\text{eval} Neval的增大稳定提升。
  若DETR在 N eval > N train N_\text{eval}>N_\text{train} Neval>Ntrain使用复制已有查询的方法,性能下降会更严重。这是因为随机加入查询能提高查询的多样性。
  逐步细化:固定随机边界框的数量,增加细化步数,性能仍有稳定提升;且随机边界框越少,增加细化步数带来的提升越大。
  对于其余方法而言,仅可使用一次检测头,重复使用会导致性能下降(见附录)。

4.3 检测数据集上的性能分析

  MS-COCO:不进行细化的时候,DiffusionDet已经能超过一些完善方法的性能。进行细化会进一步拉开差距。
  当使用更大的主干网络时,DiffusionDet也能带来稳定的性能提升。
  LIVS v1.0:与MS-COCO相比,DiffusionDet的细化在LIVS上的性能提升更加显著。这说明在更具挑战性的基准上,细化策略更有效。

4.4 消融研究

  信号缩放:信号缩放因数控制扩散过程的信噪比。与图像生成和全景分割相比,本文使用的缩放因数更大,这是因为边界框的表达相比密集表达更加“脆弱”,更高的信噪比使其更容易训练。
  GT边界框填充策略:实验表明,填充服从高斯分布的随机边界框比起其余填充方法(复制已有边界框、填充图像大小边界框、填充服从均匀分布的随机边界框)性能更优。
  采样策略:不使用DDIM和边界框更新的情况下,性能会随步数增加而下降;使用其中之一时,仅会在有限的步数内略微提升性能,但更多步数不能带来性能提升。当同时使用两者时性能最优。
   N train N_\text{train} Ntrain N eval N_\text{eval} Neval之间的匹配:无论 N train N_\text{train} Ntrain为多少,当 N eval N_\text{eval} Neval增加时,性能均能稳定提升;此外,固定 N eval N_\text{eval} Neval的情况下,当 N train N_\text{train} Ntrain N eval N_\text{eval} Neval匹配时性能最优。
  精度vs.速度:设置 N train = N eval N_\text{train}=N_\text{eval} Ntrain=Neval进行测试,发现当 N train N_\text{train} Ntrain增加时能以微小的速度下降换取大幅性能提升。增加步数时,性能有一定提升,但速度下降明显。在相同提案数的情况下,DiffusionDet的速度与Sparse-CNN接近。
  随机种子:使用不同的随机种子进行实验,DiffusionDet的性能稳定。

附录

A. 扩散模型的表达

  相关介绍见扩散模型(Diffusion Model)简介(注意符号与本文有所不同)。
  除了可使用网络 f θ ( z t , t ) f_\theta(z_t,t) fθ(zt,t)直接预测 ϵ \epsilon ϵ外,也可预测 z 0 z_0 z0。本文选择预测 z 0 z_0 z0

B. 动态边界框

  实验表明,Sparse R-CNN与Deformable DETR均不能在固定 N train N_\text{train} Ntrain的情况下随意改变 N eval N_\text{eval} Neval。这证明了DiffusionDet独特的动态特性。

C. 逐步细化

  DETR、Sparse R-CNN、Deformable DETR在进行逐步细化时均会带来性能下降;当从各步整合预测结果时,Sparse R-CNN和Deformable DETR能减轻性能下降。但对于DiffusionDet,不进行整合时,性能下降可忽略;进行整合会带来性能提升。

E. 训练损失

  集合预测损失被用于 N train N_\text{train} Ntrain个预测上。集合预测损失要求预测和真值之间逐对的匹配代价(同时考虑类别与边界框): C = λ c l s C c l s + λ L 1 C L 1 + λ g i o u C g i o u \mathcal{C}=\lambda_{cls}\mathcal{C}_{cls}+\lambda_{L1}\mathcal{C}_{L1}+\lambda_{giou}\mathcal{C}_{giou} C=λclsCcls+λL1CL1+λgiouCgiou其中 C c l s \mathcal{C}_{cls} Ccls为分类的focal损失, C L 1 \mathcal{C}_{L1} CL1 C g i o u \mathcal{C}_{giou} Cgiou分别为边界框预测的L1损失和GIoU损失。
  本文使用最优传输方法,为每个真值匹配多个预测结果。即选择代价最小的 k k k个预测作为某真值的正样本,其余为负样本。损失函数与前面的代价表达式相同,但仅在匹配对之间计算。

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

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

相关文章

防火墙基础之H3C防火墙和三层交换机链路聚合的配置

H3C防火墙和三层交换机链路聚合的配置 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保…

Docker从认识到实践再到底层原理(七)|Docker存储卷

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

如何让你网站统计的更加精准?

引言 最近对比了自己网站在Cloudflare Analytics和51.la统计的数据&#xff0c;结果发现数值差距的比较大&#xff0c;这是为什么&#xff1f; 经过了摸索&#xff0c;发现了以下几个情况&#xff1a; 广告插件的拦截&#xff0c;大部分广告插件都会拦截网站统计&#xff0c…

select实现服务器并发

select的TCP服务器代码 #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/select.h> #include…

【教学类-36-10】20230908方脸爷爷和圆脸奶奶(midjounery-niji)(中班:《我爱我家》数:连线、涂色)

背景需求&#xff1a; 领导们鼓动我去参加上海市高级职称评审&#xff08;科研成果比较多&#xff09;&#xff0c;为下一轮保教主任评高级“探探路”。虽然自我感觉道行浅薄&#xff0c;无缘高级&#xff0c;但领导给机会&#xff0c;自然要参与一下&#xff0c;努力了解整个…

10.1select并发服务器以及客户端

服务器&#xff1a; #include<myhead.h>//do-while只是为了不让花括号单独存在&#xff0c;并不循环 #define ERR_MSG(msg) do{\fprintf(stderr,"%d:",__LINE__);\perror(msg);\ }while(0);#define PORT 8888//端口号1024-49151 #define IP "192.168.2.5…

10月1日作业

汇编指令合集 用select实现服务器并发代码 #include<myhead.h> #define IP "192.168.0.106" #define PORT 8888int main(int argc, const char *argv[]) {//新建套接字文件int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd < 0){ERR_MSG("socket&quo…

imgui开发笔记<4>、image-slider online

在线滑条二值化。 // // Created by sry on 2021/6/30. //#include"imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" #include <stdio.h> // Initialize with gl3wInit() #include<GL/gl3w.h> // Include …

【MATLAB第78期】基于MATLAB的VMD-SSA-LSTM麻雀算法优化LSTM时间序列预测模型

【MATLAB第78期】基于MATLAB的VMD-SSA-LSTM麻雀算法优化LSTM时间序列预测模型 一、LSTM data xlsread(数据集.xlsx);% [x,y]data_process(data,15);%前15个时刻 预测下一个时刻 %归一化 [xs,mappingx]mapminmax(x,0,1);xxs; [ys,mappingy]mapminmax(y,0,1);yys; %划分数据 n…

Android进阶——Handler底层fd监听之epoll机制

文章大纲 引言一、从网卡接收数据说起二、如何知道接收了数据&#xff1f;三、进程阻塞为什么不占用cpu资源&#xff1f;四、那么阻塞的原理是什么&#xff1f;1、工作队列2、等待队列3、唤醒进程 五、内核接收网络数据全过程六、同时监视多个socket的简单方法七、epoll的设计思…

Redis入门到精通——00数据类型

1、String 1.1、介绍 String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value其实不仅是字符串&#xff0c; 也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以容纳的数据长度是 512M 1.2、…

聊天、会议、多媒体一体化:多平台支持的即时通讯系统 | 开源日报 No.44

harness/gitness Stars: 28.2k License: Apache-2.0 Gitness 是一个建立在 Drone 之上的新型开源开发者平台&#xff0c;具备代码托管和流水线功能。它提供了以下核心优势&#xff1a; 轻量级、超快速的代码托管和持续集成服务支持 Docker 容器化部署可以在本地环境中构建和…

【C/C++笔试练习】二维数组、二维数组的访问,解引用,地址计算、计算糖果、进制转换

文章目录 C/C笔试练习1.二维数组&#xff08;1&#xff09;二维数组的访问&#xff08;2&#xff09;二维数组的初始化&#xff08;3&#xff09;二维数组的解引用&#xff08;4&#xff09;二维数组的解引用&#xff08;5&#xff09;多维数组的解引用&#xff08;6&#xff0…

没有社会性的人机环境系统智能是危险的

缺乏社会性的人工智能常常存在着一定的潜在危险性&#xff0c;这是因为&#xff1a; 首先&#xff0c;社会性对于人类而言是非常重要的&#xff0c;我们通过社交互动、合作和沟通来建立联系、理解他人以及共同解决问题。人类具有复杂的情感和道德价值观&#xff0c;这些因素在我…

嵌入式学习笔记(39)蜂鸣器和PWM定时器编程实践

7.4.1蜂鸣器的工作原理 (1)蜂鸣器里边有2个金属片&#xff0c;离得很近但没挨着。没电的时候两个金属片在弹簧本身的张力作用下分开彼此平行&#xff0c;有电的时候两边分别充电&#xff0c;在异性电荷的吸力作用下两个片挨着。 (2)我们只要以快速的频率给蜂鸣器的正负极供电…

redis使用学习笔记

文章目录 关于redis的简单性能概括Redis命令行客户端Redis命令Redis通用命令String类型key的层级格式Hash类型List类型Set类型SortedSet类型 Redis的Java客户端Jedis使用基本步骤Jedis连接池 SpringDataRedisRedisTemplate快速入门RedisSerializer 关于redis的简单性能概括 键…

c语言练习72:关于截断和整形提升

关于截断和整形提升 思考: 什么时候会发生截断和整形提升? 当以int的形式定义一个变量然后以char的形式输出是就会发生截断和整形提升 例如: #include<stdio.h> int main() {char c1, c2, c3;int i, j;c1 a, c2 97, c3 243;i b, j 1 c1;printf("%c %d\n…

Airtool for Mac——高效便捷的系统菜单栏网络工具!

在我们的数字化生活中&#xff0c;对于网络连接的稳定性和速度有着越来越高的需求。为了满足您对网络质量的实时监测和分析的需求&#xff0c;我们向大家介绍一款强大的Mac系统菜单栏网络工具——Airtool&#xff01; Airtool是一款专为Mac设计的网络工具&#xff0c;它能够提…

每日一练-Q2-贝博士的机械零件-20231001

目录 1.题目描述 2.输入描述 3.示例提示 4.问题分析 5.通过代码 1.题目描述 贝博士是个大忙人&#xff0c;他在设计和制造一台非常复杂的机械式计算机。 最近贝博士有一点烦恼&#xff0c;因为机械零件的种类繁多&#xff0c;磨损又快&#xff0c;经费不太够用了。不过&…

【C++】string 之 substr、insert、erase函数的学习

前言 之前两篇文章 我们学习了 assign、at、append函数 find、rfind、replace、compare函数 这些函数。接下来让我们继续学习其他函数 substr 两个参数 pos1&#xff0c;截取的开始位置 len&#xff0c;截取的子串长度 作用是在字符串中截取一段长度为len的子串 下面给出…