DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析

news/2024/10/27 18:21:41/

DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析

这是一篇发表在CVPR 2023的一篇论文,因为自己本身的研究方向是目标跟踪,之前看了一点使用扩散模型进行多跟踪的论文,里面提到了DiffusionDet因此学习一下。

论文地址:https://arxiv.org/abs/2308.09905
代码地址:https://github.com/ShoufaChen/DiffusionDet
机构作者:1The University of Hong Kong 2Tencent AI Lab 3AI Institute, Fudan University 4Shanghai AI Laboratory

在这里插入图片描述
是第一篇应用扩散模型来进行目标检测的论文。核心是:将目标检测任务转化为从噪声框到目标框的去噪扩散过程。

因为自己还不去做实验的原因,对于论文中的实验的部分不做解释 自己在实验训练的时候如何用coco2017数据集来进行训练的话,默认的batchsize大小为16的话需要17G的显存空间。

摘要与整体概括

我们将从摘要中获取到的核心的概念信息来进行总结:

  1. 这是一个新的框架,它将对象检测表述为从噪声框到对象框的去噪扩散过程

  2. 在训练阶段,对象框从真实框GT扩散到随机分布,并且模型学习逆转这种噪声过程。恢复到真实框通过损失函数来进行训练。

  3. 在推理阶段,模型以渐进的方式将一组随机生成的框细化为输出结果。也就是对一张随机加噪通过模型去噪来生成最终的预测框。

  4. 在从 COCO 到 CrowdHuman 的零样本传输(zero-shot)设置下,使用更多框和迭代步骤进行评估时,DiffusionDet 实现了 5.3 AP 和 4.8 AP 的增益

体现了DiffusionDet的核心思想与其用于目标检测的强大优势。

在这里插入图片描述

之后在相关介绍的部分对整个模型进行了整体上的一个概括

具体来说,大多数检测器通过在经验设计的候选对象上定义代理回归和分类来解决检测任务,例如滑动窗口区域建议锚框参考点。最近,DETR提出了可学习的对象查询,消除了手工设计的组件,建立了端到端的检测,吸引了大量关注。

在这里插入图片描述

  • 介绍了扩散模型用于分割取得了良好的效果,但是在检测上却没有很好的效果(分割更接近于是一个预测的任务,而检测却看作了是一个集合预测的任务

  • 之后总结了如何进行扩散获取到检测框的(细节)

    • 它通过将检测作为图像中边界框的位置(中心坐标)和大小(宽度和高度)空间上的生成任务,使用扩散模型来处理目标检测任务。
    • 在训练阶段,将高斯噪声添加到GT框以获得噪声框,然后,这些噪声框用于从主干编码器的输出特征图中裁剪感兴趣区域(RoI)的特征,例如ResNet和Swin Transformer
    • 这些RoI特征被发送到检测解码器,该解码器经过训练可以预测无噪声的真实框。通过这个训练目标,DiffusionDet能够从随机框中预测真实框
    • 在推理阶段,DiffusionDet通过反转学习的扩散过程来生成边界框,该过程将噪声先验分布调整为边界框上的学习分布。

在这里插入图片描述
DiffusionDet的灵活性使其在检测不同场景(例如稀疏或拥挤)的对象时具有巨大优势,而无需额外的微调

在这里插入图片描述

相关工作—检测的发展

大多数现代对象检测方法对经验对象先验执行框回归和类别分类,例如建议框 、锚点 、点 。最近,Carion 等人。提出 DETR使用一组固定的可学习查询来检测对象。从那时起,基于查询的检测范式引起了极大的关注,并激发了一系列后续工作。

  1. 提案方法(Proposal-based Methods):

基本概念:Proposal方法通过在图像中生成大量候选框,然后对这些Proposal进行分类和边界框回归来检测目标。

工作流程:典型的Proposal方法如R-CNN系列,首先使用选择性搜索或区域生成网络(RPN)等技术生成大量候选框。然后,这些提案经过卷积神经网络(CNN)进行特征提取,并送入分类器和回归器以识别目标类别和精确定位目标框。

  1. 锚框方法(Anchor-based Methods):

基本概念:锚框方法预先定义一组锚框,并在每个锚点上预测目标的类别和边界框。

  1. 点方法(Point-based Methods):

基本概念:点方法直接在图像的每个像素位置上进行预测,而不依赖于预定义的候选框或锚点。

工作流程:典型的点方法如CornerNet,通过预测图像中每个像素点是否是目标的关键点(如角点或中心点),然后根据这些点进行目标检测

  1. 基于可学习查询的方法(Query-based Methods):

基本概念:基于可学习查询的方法,如DETR(Transformers for Detection),使用一组固定的可学习查询来代替传统的候选框或锚点,直接从图像中的特征表示中预测目标的位置和类别。

工作流程:DETR通过Transformer架构,将图像特征映射到查询和键值对上,通过自注意力机制进行全局感知,并直接输出目标框的位置和类别,消除了传统检测方法中的候选框生成和选择过程。

作者提出还有没有更简单的方法来实现这一个检测的功能呢?于是提出了DiffusionDet这是第一个采用扩散模型进行目标检测的工作。

DiffusionDet Approach

对整个算法流程和使用到的方法来进行一个详细的介绍。

预备知识

( x , b , c ) (x, b, c) (x,b,c)

  1. (x,b,c),其中是x是输入图像,b,c分别是图像x中的对象的边界框和类别标签。

  2. 将集合中的第i个框表示为:

b i = ( c x i , c y i , w i , h i ) \boldsymbol{b}^{i}=\left(c_{x}^{i}, c_{y}^{i}, w^{i}, h^{i}\right) bi=(cxi,cyi,wi,hi)

其中
( c x i , c y i ) \left(c_{x}^{i}, c_{y}^{i}\right) (cxi,cyi)
表示第i个框的中心点的xy坐标,(wi,hi)表示第i个框的宽度和高度值。

  1. 前向噪声的扩散过程:扩散模型的前向噪声过程使用高斯模糊噪声来逐步扰动边界框b

q ( z t ∣ z 0 ) = N ( z t ∣ α ˉ t z 0 , ( 1 − α ˉ t ) I ) , q\left(\boldsymbol{z}_{t} \mid \boldsymbol{z}_{0}\right)=\mathcal{N}\left(\boldsymbol{z}_{t} \mid \sqrt{\bar{\alpha}_{t}} \boldsymbol{z}_{0},\left(1-\bar{\alpha}_{t}\right) \boldsymbol{I}\right), q(ztz0)=N(ztαˉt z0,(1αˉt)I),

∏ s = 0 t α s = ∏ s = 0 t ( 1 − β s ) \prod_{s=0}^{t} \alpha_{s}=\prod_{s=0}^{t}\left(1-\beta_{s}\right) s=0tαs=s=0t(1βs)

I:代表的就是我们的原始输出图像了。

x t = 1 − α ˉ t × ϵ + α ˉ t × x 0 x_{t}=\sqrt{1-\bar{\alpha}_{t}} \times \epsilon+\sqrt{\bar{\alpha}_{t}} \times x_{0} xt=1αˉt ×ϵ+αˉt ×x0

扩散过程公式的细节解读:

其中  z 0 = b , z t 是是经过  t 步扩散后的边界框,  α ˉ t 是递归因子。  \text { 其中 } z_{0}=b, z_{t} \text { 是是经过 } t \text { 步扩散后的边界框, } \bar{\alpha}_{t} \text { 是递归因子。 }  其中 z0=b,zt 是是经过 t 步扩散后的边界框, αˉt 是递归因子。 

随机噪声生成:在每个时间步 t ,从均值为 0 、标准差为 σ 的高斯分布 N ( 0 , σ 2 I ) 中生成随机噪声 ϵ t ,其中 ϵ t 是形状为 [ B , N , 4 ] 的张量, B 是批量大小, N 是检测框的数量 随机噪声生成:在每个时间步 t ,从均值为 0 、标准差为 \sigma 的高斯分布 N\left(0, \sigma^{2} I\right) 中生成随机噪声 \epsilon_{t} ,其中 \epsilon_{t} 是形状为 [B, N, 4] 的张量, B 是批量大小, N 是检测框的数量 随机噪声生成:在每个时间步t,从均值为0、标准差为σ的高斯分布N(0,σ2I)中生成随机噪声ϵt,其中ϵt是形状为[B,N,4]的张量,B是批量大小,N是检测框的数量

高斯模糊噪声引入:将高斯噪声  ϵ t 乘以  1 − α cumprod  ( t ) 并加到通过递归因子缩放后的真实框  p b 上,得到扰动后的检测框  p b :  \text { 高斯模糊噪声引入:将高斯噪声 } \epsilon_{t} \text { 乘以 } \sqrt{1-\alpha_{\text {cumprod }(t)}} \text { 并加到通过递归因子缩放后的真实框 } p b \text { 上,得到扰动后的检测框 } p b \text { : }  高斯模糊噪声引入:将高斯噪声 ϵt 乘以 1αcumprod (t)  并加到通过递归因子缩放后的真实框 pb 上,得到扰动后的检测框 pb : 

p b t b , i = α cumprod  ( t ) ⋅ p b b , i + 1 − α cumprod  ( t ) ⋅ ϵ b , i , t p b_{t_{b, i}}=\sqrt{\alpha_{\text {cumprod }(t)}} \cdot p b_{b, i}+\sqrt{1-\alpha_{\text {cumprod }(t)}} \cdot \epsilon_{b, i, t} pbtb,i=αcumprod (t) pbb,i+1αcumprod (t) ϵb,i,t

这里  p b b , i = ( x b , i , y b , i , w b , i , h b , i ) 表示批次  b 中的第  i 个检测框。  \text { 这里 } p b_{b, i}=\left(x_{b, i}, y_{b, i}, w_{b, i}, h_{b, i}\right) \text { 表示批次 } b \text { 中的第 } i \text { 个检测框。 }  这里 pbb,i=(xb,i,yb,i,wb,i,hb,i) 表示批次 b 中的第 i 个检测框。 

ϵ b , i , t = ( ϵ b , i , t x , ϵ b , i , t y , ϵ b , i , t w , ϵ b , i , t h ) 是从高斯分布中采样的噪声。  \epsilon_{b, i, t}=\left(\epsilon_{b, i, t}^{x}, \epsilon_{b, i, t}^{y}, \epsilon_{b, i, t}^{w}, \epsilon_{b, i, t}^{h}\right) \text { 是从高斯分布中采样的噪声。 } ϵb,i,t=(ϵb,i,tx,ϵb,i,ty,ϵb,i,tw,ϵb,i,th) 是从高斯分布中采样的噪声。 

在这里插入图片描述

模型训练和损失函数

在训练期间,使用神经网络f θ ( zt , t , x ) ​通过最小化ℓ2损失来根据扰动后的边界框zt预测原始边界框b

L train  = 1 2 ∥ f θ ( z t , t ) − z 0 ∥ 2 . \mathcal{L}_{\text {train }}=\frac{1}{2}\left\|f_{\theta}\left(\boldsymbol{z}_{t}, t\right)-\boldsymbol{z}_{0}\right\|^{2} . Ltrain =21fθ(zt,t)z02.

z T → z T − Δ → … → z 0 \boldsymbol{z}_{T} \rightarrow \boldsymbol{z}_{T-\Delta} \rightarrow \ldots \rightarrow \boldsymbol{z}_{0} zTzTΔz0

我们旨在通过扩散模型解决目标检测任务。在我们的设置中,数据样本是一组边界框 z0 = b,其中 b ∈ RN ×4 是一组 N 个框。神经网络 fθ (zt, t, x) 被训练来从噪声框 zt 预测 z0,以相应的图像 x 为条件。对应的类别标签c据此产生。

在这里插入图片描述

网络结构

建议将整个模型分成两部分,图像编码器检测解码器,其中前者只运行一次以从原始输入图像 x 中提取深度特征表示,后者以此深度特征为条件,而不是原始图像,以逐步细化来自嘈杂框 zt 的框预测

在这里插入图片描述

  1. 图像编码器从输入图像中提取特征表示。 检测解码器将噪声框作为输入并预测类别分类和框坐标。
  2. 检测解码器在一个检测头中有 6 个阶段,遵循 DETR 和 Sparse R-CNN。 此外,DiffusionDet可以多次重复使用这个检测头(有6个阶段),这被称为“迭代评估”

图像编码器

本质上就相当于是DERT里面的cnn+enocode产生噪声框

图像编码器将原始图像作为输入,提取其高级特征用于后续检测解码器。
我们使用卷积神经网络(如ResNet)和基于基于Transformer模型(如Swin)实现了扩散。特征金字塔网络用于生成ResNet和Swin骨干网的多尺度特征图

检测解码器

借鉴 Sparse R-CNN的设计,检测解码器接收一组检测框作为输入,从图像编码器生成的特征图中裁剪感兴趣区域(RoI)特征,并将这些 RoI 特征送入检测头以获得框的回归和分类结果。

在这里插入图片描述

  1. DiffusionDet 从随机框开始,而 Sparse R-CNN 在推理中使用一组固定的学习框;

  2. 稀疏 R-CNN 将建议框及其相应的建议特征对作为输入,而 DiffusionDet 只需要建议框;

  3. DiffusionDet 在迭代采样步骤中重新使用检测器头,并且参数在不同步骤之间共享,每个步骤都通过时间步嵌入 [35、86] 指定到扩散过程,而稀疏 R-CNN 使用检测解码器仅在前向传播中进行一次

在这里插入图片描述

训练与推理过程

训练算法流程

在训练过程中,我们首先构建从真实框到噪声框的扩散过程,然后训练模型来反转该过程。算法 1 提供了 DiffusionDet 训练过程的伪代码。

在这里插入图片描述

我们简单的对这个训练部分的算法来进行描述。

  • 输入参数:
  1. images: 输入图像数据,形状为[B, H, W, 3],表示批次中的图像数量及其高度、宽度以及通道数。
  2. gt_boxes: 真实边界框数据,形状为[B, *, 4],表示批次中每个图像所对应的真实边界框数量可以是不同数量),每个边界框包含四个坐标
  • 算法步骤(动态理解网络的一个核心过程
  1. Encode提取特征

  2. 将gt_boxes进行填充到同样数量N(proposal boxes的数量)的边界框pb(通过pad_boxes函数),使得每个图像具有相同数量的边界框。

  3. 对pb进行信号缩放,将其值从[0, 1]范围内映射到[-scale, scale]范围内。

  4. 随机选择一个时间步长t(从0到T)。生成服从正态分布的噪声eps(均值为0,标准差为1),其维度为[B, N, 4],用于扰动腐蚀(corrupt)gt_boxes。

  5. 基于当前的时间步长t和信号缩放后的gt_boxes(pb),使用DiffusionDet中的alpha_cumprod函数生成混合因子,对pb和eps进行组合得到扰动的边界框pb_crpt。

  6. 基于扰动的边界框pb_crpt和特征表示feats,通过检测解码器detection_decoder生成预测的边界框pb_pred。

7.计算损失函数并进行训练。

图片真实框填充(Ground truth boxes padding)

对于现代目标检测基准,感兴趣的实例数量通常因图像而异。因此,我们首先将一些额外的框填充到原始的groundtruth框,使得所有框加起来为固定数量的Ntrain。我们探索了几种填充策略,例如,重复现有的地面实况框、连接随机框或图像大小的框。连接随机框效果最好

在这里插入图片描述

Box corruption.

我们将高斯噪声添加到填充的真实框中。噪声尺度由αt控制,αt在不同时间步t中采用单调递减的余弦时间表。值得注意的是,the ground truth box坐标也需要缩放,因为信噪比对扩散模型的性能有显着影响。我们观察到,与图像生成任务相比,目标检测有利于相对较高的信号缩放值

推理算法流程

DiffusionDet的推理过程是从噪声到目标框的去噪采样过程。从高斯分布中采样的框开始,模型逐步完善其预测,如算法 2 所示。

在这里插入图片描述
我们简单的对这个推理部分的算法来进行描述。

  • 输入参数:
  1. images: 输入图像数据,形状为[B, H, W, 3],表示批次中的图像数量及其高度、宽度以及通道数。
  2. steps: 采样步数,即需要采样多少个时间步长。
  3. T: 总时间步长。
  • 算法步骤:
  1. (通过图像编码器)得到特征表示feats

  2. 生成服从正态分布的噪声pb_t(均值为0,标准差为1),其维度为[B, N, 4],用于初始化边界框预测。

  3. 使用linespace生成一个等分线段,其从 -1 开始,到 T 结束,等分成steps份。并且在[0, T]内生成随机时间t_now。

  4. 对每个时间区间(t_now, t_next)执行如下操作:

    • a. 基于当前的时间步长t_now和噪声pb_t,通过检测解码器detection_decoder生成预测的边界框pb_pred
    • b. 基于预测边界框pb_pred和当前时间t_now以及向前时间t_next,使用ddim_step函数估计t_next时刻的边界框pb_t
    • c. 使用box_renewal函数更新边界框pb_t(指将pb_t中的值限制在[0, 1]内)。
  5. 返回最终的结果。

采样步骤

在每个采样步骤中,上一个采样步骤的随机框或估计框被发送到检测解码器以预测类别分类和框坐标。获得当前步骤的框后,采用DDIM来估计下一步的框。
在这里插入图片描述

Box更新

在每个采样步骤之后,预测框可以粗略地分为两种类型:期望的预测和不需要的预测。所需的预测包含正确位于相应对象处的框,而不需要的预测则任意分布。直接将这些不需要的框发送到下一次采样迭代不会带来任何好处,因为它们的分布不是由训练中的框损坏构建的。为了使推理更好地与训练保持一致,我们提出了框更新策略,通过用随机框替换这些不需要的框来恢复它们。

具体来说,我们首先过滤掉分数低于特定阈值的不需要的框。然后,我们将剩余的框与从高斯分布中采样的新随机框连接起来。

在这里插入图片描述

我们的DiffusionDet用于目标检测的核心原理与基本的流程从论文中就可以得到上面的一些内容,对于我们更为具体的实现也需要通过其代码进行进一步的学习。


http://www.ppmy.cn/news/1542399.html

相关文章

LabVIEW共享变量通信故障

问题概述: 在LabVIEW项目中,使用IO服务器创建共享变量,并通过LabVIEW作为从站进行数据通信。通讯在最初运行时正常,但在经过一段时间或几个小时后,VI前面板出现错误输出,导致数据传输失败。虽然“分布式系统…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时,发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”,直接导致了无法继续安装下去。出现这种情况要怎么解决呢?下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

【nginx-openssl证书过期替换证书】

1 备份原有的证书和key 备份好原来的文件 cd /usr/local/nginx/conf mv cacert.pem cacert.pem.bak mv privkey.pem privkey.bak 2 将申请好的证书和key解压后更换名称; 将文件上传到nginx目录下 cd /usr/local/nginx/conf/ 将test.bergengine.com_bundle.crt重命…

七、数据库服务器(MySQL、PostgreSQL)的搭建

Linux 数据库服务器(MySQL、PostgreSQL)搭建全攻略 在当今的信息技术领域,数据库服务器的搭建是许多开发者和系统管理员必须掌握的技能。本文将详细介绍在 Linux 系统上搭建 MySQL 和 PostgreSQL 数据库服务器的步骤,并包括数据导…

如何制作一个自己的网站?

在今天的互联网时代,网站展示已经是一个很基础的营销工具。不管是企业、还是个人,如何制作一个自己的网站?本文将会提供一个全面的基础制作网页教程,教你如何从零开始制作网页。 网页制作的基础知识:HTML、CSS和JavaS…

如何在Windows环境下开启Kibana的非localhost访问

Kibana是一个开源的分析和可视化平台,用于探索和可视化Elasticsearch数据。默认情况下,Kibana仅允许在本地访问,但通过一些简单的配置更改,你可以允许远程访问。在本文中,我们将介绍如何在Windows环境下开启Kibana的非…

anaconda jupyter notebook themes install jupyter notebook样式更改,取消页面头部,全屏展示!

现在已经有很多相关的文章了,我只说简单的解决步骤: 我用的是anaconda的 jupyter notebook,这个要更改主题,方法有: 一,最简单:用 jupyter notebook自带的setting>Theme>自己选&#xff1…

基于用户体验的在线相册管理平台创新设计与实现

基于用户体验的在线相册管理平台创新设计与实现 摘要 随着互联网和智能设备的普及,照片数量剧增,传统相册管理方式难以满足需求,在线相册管理平台应运而生。本文对在线相册管理平台的设计与实现进行了深入研究。首先剖析了平台所采用的 B/S…