DiffusionDet: Diffusion Model for Object Detection——首次将扩散模型用于目标检测的模型,来自2023 ICCV

一. 论文梗概

        现有的目标检测方法无论是仍然有一个依赖于一个固定的 learnable query。一个自然的问题是:有没有一个更简单的方法,甚至不需要学习查询的代理?

        DiffusionDet是一个新的框架,它将对象检测公式化为从噪声框到对象框的去噪扩散过程。在训练阶段,对象框从Grounding Truth框扩散到随机分布,模型学习逆转这个噪声过程。在推理中,该模型以渐进的方式将一组随机生成的框细化为输出结果。

        总体框架:DiffusionDet 将目标检测任务建模为一个去噪扩散过程。该方法不依赖预定义的锚框或可学习查询,而是从一组随机生成的框出发,通过多个步骤逐步去噪,最终生成精准的目标框

主要目标

  • 提出一种无需 learnable query 的检测方式,减少人为设计;

  • 实现训练-推理解耦:训练阶段与推理阶段使用不同数量的框或步骤都可以;

  • 提供更强的灵活性和泛化能力(如跨数据集 zero-shot transfer)。

应用场景

  • 跨场景目标检测(如从 COCO 迁移到 CrowdHuman);

  • 多目标密集检测任务。

二.模型框架

        DiffusionDet 的整体架构可分为两个主要部分:图像编码器(Image Encoder)检测解码器(Detection Decoder)。其核心思想是将目标检测建模为一个“从随机框出发 → 逐步去噪 → 得到真实框”的扩散过程,类比于扩散模型“噪声 → 图像”的过程。训练时的候选框是对真实框加噪声得到的,而推理时则是直接从高斯分布中采样得到的随机框。

1. 图像编码器

        将原始图像作为输入,并提取其高级特征用于后续检测解码器。我们使用卷积神经网络(如ResNet)和基于变换器的模型(如Swin)实现DiffusionDet。特征金字塔网络用于为ResNet和Swin骨干生成多尺度特征图。只运行一次,输出特征图(Feature Map)供后续使用。

 2. 检测解码器

        DiffusionDet 没有完全从零设计检测头,而是以 Sparse R-CNN 为基础,复用了其 cascade-style 多阶段检测头的架构思想。它接收一组候选框作为输入,用这些框从图像编码器输出的特征图上裁剪 RoI 特征(Region of Interest),再将这些特征送入检测头,输出位置回归和类别分类的结果。借鉴 DETR、Sparse R-CNN 等方法,将检测解码器设计为 6 个级联阶段,使用 cascade-style 解码器,每个 stage 是一个小的分类 + 回归模块;每个 stage 的输出都会传递给下一个 stage,用于多次 refine 预测结果;结构上和 Sparse R-CNN 一样,是逐步精炼预测框。

➤Stage-1: 第一步

  1. 输入:N 个 noisy boxes;

  2. RoI Align:利用这些 boxes 从图像特征图上提取对应的 N 个区域特征;

  3. 全连接网络 (FC):对每个区域特征进行分类和框回归,输出预测框和类别。

➤ Stage-2 到 Stage-6:多阶段 refinement

  • 检测解码器由 6 个 stage 组成(类似 Sparse R-CNN 的 head);

  • 每个 stage 接收上一阶段预测的框,进一步 refine;

  • 参数共享:所有 stage 共享一组参数;

  • 每个 stage 都包括:RoI Align + 分类 + 回归。

检测解码器具有以下特点:

  • 推理阶段支持多轮迭代:将整个 6-stage 解码器 反复使用多次(比如 1 次、4 次、8 次);

  • 每轮输出 refined boxes,并作为下一轮输入,进一步 refine;

  • 每轮后使用 DDIM 和 Box Renewal 更新框的状态。

三. DiffusionDet 模型训练过程

        DiffusionDet 的训练过程本质上是学习一个去噪过程:从添加了噪声的目标框(noisy boxes)中恢复出原始的 ground-truth boxes。训练阶段通过模拟扩散过程生成带噪的框,然后训练网络反向学习这个过程。其核心流程如下:

步骤 1:图像输入与特征提取

将输入图像送入图像编码器(如 ResNet + FPN 或 Swin Transformer),提取出图像的多尺度特征图。这些特征图将用于后续的 RoI 特征提取。

步骤 2:Ground Truth Box Padding

由于每张图像中的目标数量不同,需要对 GT boxes 进行统一处理。具体操作为:

  • 将真实框数量不足N_{train}的图像,填充额外的框;

  • 填充方法包括重复现有框或从高斯分布中采样随机框(实验证明后者效果更好);

  • 最终每张图像拥有固定数量的候选框 N_{train}

步骤 3:信号缩放与添加噪声

对填充后的N_{train}个 GT boxes 执行扩散过程的前向步骤,生成 noisy boxes:

  1. 将 box 坐标( 中心点 (x, y) 和尺寸(w, h) )归一化到  [-1, 1] 区间;

  2. 乘以一个固定的信号缩放系数 scale(例如 2.0),增强可学习信号;

  3. 随机采样一个时间步t ∈ [1, T];

  4. 使用前向扩散公式向框中添加高斯噪声:

    \mathbf{b}_t=\sqrt{\bar{\alpha}_t}\cdot\mathbf{b}_0+\sqrt{1-\bar{\alpha}_t}\cdot\epsilon,\quad\epsilon\sim\mathcal{N}(0,1)

    其中,ᾱ_t 为特定时间步的扩散系数,服从 cosine schedule。

步骤 4:RoI 特征提取

利用添加噪声后的N_{train}个框b_t在图像特征图上执行 RoI Align 操作,提取每个框对应的区域特征。这些特征将用于目标的分类与位置回归。

步骤 5:检测解码器预测

将 RoI 特征与 timestep embedding 一起送入Detection Decoder。该解码器由 6 个级联的阶段组成,每个阶段进行一次框回归与分类预测。整个解码器共享参数。输出为每个框的:类别概率;回归坐标(用于恢复原始 box)。

步骤 6:预测匹配与损失计算

采用 Hungarian Matching 或 Optimal Transport Assignment(OTA)将预测结果与真实目标进行一一匹配,然后计算 Set Prediction Loss,包括:分类损失(如 Focal Loss 或 Cross-Entropy);

框的 L1 损失;GIoU 损失(用于衡量框之间的空间重叠)。最终的总损失为所有阶段输出的加权平均。

四. DiffusionDet 模型推理过程

DiffusionDet 的推理阶段是一个 从高斯噪声中采样 → 多轮去噪 → 预测目标框与类别 的过程。推理时模型不使用 GT box,而是从随机初始化框出发,反复迭代去噪,还原出目标框

步骤 1:图像输入与特征提取

将输入图像送入图像编码器(如 ResNet + FPN 或 Swin Transformer),提取出图像的多尺度特征图。这些特征图将用于后续每一轮的 RoI 特征提取。

步骤 2:初始化随机框

从二维高斯分布中采样生成固定数量的随机框z_T,作为初始候选框。每个框由中心坐标 (x, y) 和尺寸 (w, h) 表示。该步骤对应扩散模型中的最终时间步 T

步骤 3:迭代去噪采样(共 T_{eval}步)

执行T_{eval}次迭代(通常为 4~8 步),每一步包括以下操作:

3.1 使用 detection decoder 进行预测
  • 将当前的z_t输入 detection decoder;通过 RoI Align 操作提取每个框的区域特征;

  • 解码器输出每个框的分类得分和回归坐标。

3.2 使用 DDIM(Denoising Diffusion Implicit Model)调度器更新 boxes
  • 根据 decoder 的预测结果和当前时间步t,利用 DDIM 调度器计算下一步的 boxes;该步骤实现了扩散模型的反向去噪过程;

  • z_{t-1}=\sqrt{\bar{\alpha}_{t-1}}\cdot\hat{z}_0+\sqrt{1-\bar{\alpha}_{t-1}}\cdot\epsilon

  • 若跳过 DDIM 而直接使用 decoder 输出,会显著降低性能。

3.3 执行 Box Renewal(框更新)
  • 对所有预测框设置一个置信度阈值(如 0.3);筛选出当前轮中分类得分低于阈值的“无效框”;删除这些无效框后,从高斯分布中重新采样同样数量的新随机框;与“有效”框拼接,使框总数保持一致(仍为 N_{eval});

  • 将新框与剩余有效框拼接,作为下一轮sampling

这样做的目的是:让每一轮输入的框都尽可能分布在目标区域附近,更贴近训练时的分布结构,从而提升推理效果。

步骤 4:输出整合与 NMS 处理

在所有迭代结束后,将最终预测结果进行整合处理:

  • 汇总所有预测 boxes 和类别分数;

  • 执行非极大值抑制(NMS),去除重复框;

  • 输出最终的检测框及其对应的类别标签。

五. 实验结果

1. 普通实验结果

        表1显示,当在CrowdHuman数据集上直接评估COCO pretraiend模型时,它覆盖了更多拥挤的场景,DiffusionDet通过调整评估框和迭代步骤的数量实现了显着的收益。相比之下,以前的方法只能获得边际增益,甚至性能下降。 

 从表2和表3中可以看出,DiffusionDet的性能优于其他模型。

2. 消融实验结果

1. 最佳信号缩放因子为 2.0。作者指出,由于每个 box 只有 4 个维度(中心坐标和宽高),比图像像素稠密度低,因此需要更高的信噪比(SNR)以稳定训练。

2. 将高斯随机框拼接到真实框(Gaussian padding)表现最好,这与 DiffusionDet 的“噪声建模”思路更一致。 (这一步骤位于训练过程中,作用是将每张图像中不同数量的框变为同一数量)

3. 组合使用 DDIM 和 box renewal 效果最佳,迭代到第 3 步提升了 +0.8 AP。

4. 推理框数量 N_{eval} 可以大于训练框数量 N_{train},推理表现仍然随N_{eval}增加而提高;但在某些设置中,N_{train}N_{eval} 越匹配,性能越优。说明 DiffusionDet 显著突破了 DETR 等模型训练推理框数绑定的限制。

六. DiffusionDet 的灵活优势

从以上实验结果可以看出,DiffusionDet 作为一个概率生成模型,在推理阶段具有“灵活性优势”,主要体现在两个方面:

① 动态数量的 boxes(Dynamic number of boxes)

传统方法的问题:传统的检测器(如 DETR、Sparse R-CNN)训练时使用固定数量的 proposal/query boxes,推理时必须保持一致。否则模型结构不匹配或性能下降。因为这些 queries 是可学习的参数,是模型的一部分。

✅ DiffusionDet 的创新:
  • DiffusionDet 是从随机框 random boxes出发进行检测;

  • 这些随机框不是可学习参数,而是在推理时临时生成的;

  • 所以你可以在训练时用比如 Ntrain = 300 个随机框训练模型,在推理时却用 Neval = 1000 个框去检测——这在传统方法中几乎做不到。

📈 带来的好处:
  • 可以根据任务难度和计算资源调整推理时使用的 box 数量;

  • 更复杂的场景用更多 boxes 提升召回率;

  • 简单场景用少量 boxes 提高速度。

② 迭代推理(Iterative evaluation)

在如 DETR、Sparse R-CNN 等模型中,decoder 的结构是固定的,比如 6 层,每层处理一次 proposals,然后就输出预测,不能多次复用。

✅ DiffusionDet 的创新:
  • 利用扩散模型的迭代去噪特性;每一次迭代都可以使用相同的 decoder 对 boxes 进行 refinement;

  • decoder 的参数是共享的,模型可以在多个 sampling steps 中重复使用 decoder,逐步提升 box 精度。

📈 带来的好处:
  • 多迭代几次可以提升检测结果的质量(比如从 1 步提升到 4 步,AP 提升明显);

  • 在保证模型结构不变的前提下,通过调整迭代步数控制速度-精度权衡


这两个特性的共同点:

训练阶段和推理阶段“解耦”,训练好模型后,推理时可以根据实际需要:

  • 用更多/更少的 boxes;

  • 用更多/更少的迭代步数;

  • 而无需重新训练或微调模型。

### 使用扩散模型进行目标检测计算机视觉应用中,扩散模型作为一种新兴的方法被应用于目标检测任务。DiffusionDet 是一种基于扩散模型目标检测框架[^1]。 #### DiffusionDet 的工作原理 DiffusionDet 利用了扩散模型的核心思想——通过逐步去噪的过程来生成图像中的对象边界框。具体来说: - **初始噪声注入**:算法从一组随机初始化的边界框开始。 - **迭代优化**:这些边界框经过多轮迭代更新,在每一轮中都会减少一些噪声并更接近真实物体的位置。 - **最终预测**:当达到预定的最大迭代次数或满足收敛条件时停止,并输出最有可能的对象位置作为结果。 这种方法不仅能够有效捕捉不同尺度下的特征信息,而且还可以更好地处理遮挡情况以及复杂背景环境带来的挑战。 ```python import torch from diffdet import build_diffusion_model, get_transforms model = build_diffusion_model() transform = get_transforms() image_tensor = transform(image) # 对输入图片做预处理转换 output = model(image_tensor.unsqueeze(0)) # 获取模型前向传播后的输出 ``` 该方法继承了传统一阶段探测器的速度优势的同时提升了精度表现[^2]。 对于更加复杂的场景识别需求,则可以考虑采用级联结构进一步提高准确性[^3]。 此外值得注意的是,尽管目前大多数研究集中在静态图像上的目标定位上;然而随着技术的发展,未来有望看到更多关于视频序列或者其他模态数据集方面的工作成果出现[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值