在这里插入图片描述
论文标题:Paired Image Generation with Diffusion-Guided Diffusion Models
发表期刊:The Medical Image Computing and Computer Assisted Intervention
论文链接:https://papers.miccai.org/miccai-2025/paper/4386_paper.pdf

关键词:配对图像生成、扩散引导型扩散模型、数字乳腺断层合成(DBT)肿块分割


Abstract

Background
乳腺断层合成摄影(DBT)图像中肿块病灶的分割对于乳腺癌的早期筛查具有重要意义。
然而,乳腺组织的高密度往往导致肿块病灶的高隐蔽性,这使得人工标注困难且耗时。因此,缺乏用于模型训练的标注数据。
扩散模型通常用于数据增强。但现有方法面临两个挑战:
一是由于病变的高度隐蔽性,模型难以学习病变区域的特征,导致病变区域的生成质量较低,从而限制了生成图像的质量;
二是现有方法只能生成图像,不能生成相应的标注,这限制了生成图像在监督训练中的可用性。

在这项工作中,我们提出了一种成对图像生成方法。该方法不需要外部条件,并且可以通过为条件扩散模型训练额外的扩散引导器来实现成对图像的生成。
在实验阶段,实验结果表明,该方法能够在不依赖外部条件的情况下提高生成质量,并有助于缓解标注数据不足的问题,从而提高后续任务的性能.


一、方法

理论基础

  1. 扩散模型基础:前向加噪(Forward)
    对干净样本 x 0 x_0 x0,定义逐步加噪的马尔可夫过程:
    q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) , q ( x t ∣ x t − 1 ) = N  ⁣ ( x t ; 1 − β t   x t − 1 , β t I ) q(x_{1:T}\mid x_0)=\prod_{t=1}^T q(x_t\mid x_{t-1}), \quad q(x_t\mid x_{t-1})=\mathcal N\!\left(x_t;\sqrt{1-\beta_t}\,x_{t-1},\beta_t I\right) q(x1:Tx0)=t=1Tq(xtxt1),q(xtxt1)=N(xt;1βt xt1,βtI)

并有闭式形式(可直接从 x 0 x_0 x0 得到任意步的 x t x_t xt):
x t = α ˉ t   x 0 + 1 − α ˉ t   ϵ , ϵ ∼ N ( 0 , I ) , α ˉ t = ∏ i = 1 t ( 1 − β i ) x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\epsilon, \quad \epsilon\sim\mathcal N(0,I), \quad \bar\alpha_t=\prod_{i=1}^t(1-\beta_i) xt=αˉt x0+1αˉt ϵ,ϵN(0,I),αˉt=i=1t(1βi)

  1. 成对数据:双扩散前向过程(Paired Forward)
    PIG 把训练样本看作一对 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)(例如 mask 与 DBT slice),分别加噪:
    q ( x 1 : T , y 1 : T ∣ x 0 , y 0 ) = ∏ t = 1 T q x ( x t ∣ x t − 1 )   q y ( y t ∣ y t − 1 ) q(x_{1:T},y_{1:T}\mid x_0,y_0)=\prod_{t=1}^T q_x(x_t\mid x_{t-1})\,q_y(y_t\mid y_{t-1}) q(x1:T,y1:Tx0,y0)=t=1Tqx(xtxt1)qy(ytyt1)
    x t = α ˉ t x 0 + 1 − α ˉ t ϵ 1 , y t = α ˉ t y 0 + 1 − α ˉ t ϵ 2 , ϵ 1 , ϵ 2 ∼ N ( 0 , I ) x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_1,\quad y_t=\sqrt{\bar\alpha_t}y_0+\sqrt{1-\bar\alpha_t}\epsilon_2, \quad \epsilon_1,\epsilon_2\sim\mathcal N(0,I) xt=αˉt x0+1αˉt ϵ1,yt=αˉt y0+1αˉt ϵ2,ϵ1,ϵ2N(0,I)

  2. 联合反向去噪(Joint Reverse)
    生成时从高斯噪声开始:
    P ( x T ) = N ( 0 , I ) , P ( y T ) = N ( 0 , I ) P(x_T)=\mathcal N(0,I),\quad P(y_T)=\mathcal N(0,I) P(xT)=N(0,I),P(yT)=N(0,I)
    并学习联合一步去噪:
    p θ ( x 0 : T , y 0 : T ) = P ( x T ) P ( y T ) ∏ t = 1 T p θ ( x t − 1 , y t − 1 ∣ x t , y t ) p_\theta(x_{0:T},y_{0:T})=P(x_T)P(y_T)\prod_{t=1}^T p_\theta(x_{t-1},y_{t-1}\mid x_t,y_t) pθ(x0:T,y0:T)=P(xT)P(yT)t=1Tpθ(xt1,yt1xt,yt)

  3. 关键理论点:联合去噪可分解(Proposition 1)
    论文证明联合一步转移可以用两个条件去噪串行实现:
    p θ ( x t − 1 , y t − 1 ∣ x t , y t ) = p x ( x t − 1 ∣ x t , y t ) ⋅ p y ( y t − 1 ∣ x t − 1 , y t ) p_\theta(x_{t-1},y_{t-1}\mid x_t,y_t) = p_x(x_{t-1}\mid x_t,y_t)\cdot p_y(y_{t-1}\mid x_{t-1},y_t) pθ(xt1,yt1xt,yt)=px(xt1xt,yt)py(yt1xt1,yt)

直观流程:先用 ( x t , y t ) (x_t,y_t) (xt,yt) 更新 x t − 1 x_{t-1} xt1,再用 ( x t − 1 , y t ) (x_{t-1},y_t) (xt1,yt) 更新 y t − 1 y_{t-1} yt1

  1. 实现要点:噪声预测 + 互引导
    训练时让网络预测噪声(MSE):
    ϵ x = m o d e l x ( x t , y t , t ) , L x = ∥ ϵ 1 − ϵ x ∥ 2 2 \epsilon_x=model_x(x_t,y_t,t),\quad \mathcal L_x=\|\epsilon_1-\epsilon_x\|_2^2 ϵx=modelx(xt,yt,t),Lx=ϵ1ϵx22
    采样时每步先得到更干净的 (\hat x_0),再用它作为条件引导生成 (y)(论文强调用 (\hat x_0) 比用带噪 (x_t) 更“干净”)。

网络架构

在这里插入图片描述

1) 两条并行状态: x t x_t xt y t y_t yt

PIG 同时维护两条扩散链的“当前状态”:

  • x t x_t xt:第 t t t 步的 x x x(例如 lesion mask)的加噪版本
  • y t y_t yt:第 t t t 步的 y y y(例如 DBT slice)的加噪版本

初始化(采样开始):
x T ∼ N ( 0 , I ) , y T ∼ N ( 0 , I ) x_T \sim \mathcal N(0,I),\qquad y_T \sim \mathcal N(0,I) xTN(0,I),yTN(0,I)

每一步的目标是把 ( x t , y t ) (x_t,y_t) (xt,yt) 更新到更干净的 ( x t − 1 , y t − 1 ) (x_{t-1},y_{t-1}) (xt1,yt1)

2) 一步反向更新的“串行数据流”

核心思想:先更新 x x x,再用更新后的 x x x 去引导更新 y y y

论文的联合转移核可以写成(联合去噪):
p θ ( x t − 1 , y t − 1 ∣ x t , y t ) p_\theta(x_{t-1},y_{t-1}\mid x_t,y_t) pθ(xt1,yt1xt,yt)

并分解为两个串行的条件去噪过程:
p θ ( x t − 1 , y t − 1 ∣ x t , y t ) = p x ( x t − 1 ∣ x t , y t ) ⋅ p y ( y t − 1 ∣ x t − 1 , y t ) p_\theta(x_{t-1},y_{t-1}\mid x_t,y_t)= p_x(x_{t-1}\mid x_t,y_t)\cdot p_y(y_{t-1}\mid x_{t-1},y_t) pθ(xt1,yt1xt,yt)=px(xt1xt,yt)py(yt1xt1,yt)

这对应到数据流就是:
( x t , y t )   →   x t − 1   →   y t − 1 (x_t,y_t)\ \rightarrow\ x_{t-1}\ \rightarrow\ y_{t-1} (xt,yt)  xt1  yt1

3) 模块 A: y t y_t yt 引导 x t x_t xt 去噪(model_x

输入流 ( x t ,   y t ,   t ) (x_t,\ y_t,\ t) (xt, yt, t)
输出流:预测噪声 ϵ x \epsilon_x ϵx,进而得到 x ^ 0 \hat x_0 x^0 x t − 1 x_{t-1} xt1

3.1 噪声预测
ϵ x = model x ( x t , y t , t ) \epsilon_x = \text{model}_x(x_t,y_t,t) ϵx=modelx(xt,yt,t)

3.2 由噪声预测恢复“干净估计” x ^ 0 \hat x_0 x^0
x ^ 0 = x t − 1 − α ˉ t   ϵ x α ˉ t \hat x_0=\frac{x_t-\sqrt{1-\bar\alpha_t}\,\epsilon_x}{\sqrt{\bar\alpha_t}} x^0=αˉt xt1αˉt ϵx

3.3 更新到下一步 x t − 1 x_{t-1} xt1
(论文采样设置 σ t = 0 \sigma_t=0 σt=0,可写为)
x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1   ϵ x x_{t-1}=\sqrt{\bar\alpha_{t-1}}\hat x_0+\sqrt{1-\bar\alpha_{t-1}}\,\epsilon_x xt1=αˉt1 x^0+1αˉt1 ϵx

数据流总结(模块 A)
x t , y t , t → ϵ x → x ^ 0 → x t − 1 x_t,y_t,t \rightarrow \epsilon_x \rightarrow \hat x_0 \rightarrow x_{t-1} xt,yt,tϵxx^0xt1

4) 模块 B:用更干净的 x ^ 0 \hat x_0 x^0 引导 y t y_t yt 去噪(model_y

关键点:条件不直接用带噪的 x t x_t xt,而用更“干净”的 x ^ 0 \hat x_0 x^0

输入流 ( x ^ 0 ,   y t ,   t ) (\hat x_0,\ y_t,\ t) (x^0, yt, t)
输出流:预测噪声 ϵ y \epsilon_y ϵy,进而得到 y ^ 0 \hat y_0 y^0 y t − 1 y_{t-1} yt1

4.1 噪声预测
ϵ y = model y ( x ^ 0 , y t , t ) \epsilon_y = \text{model}_y(\hat x_0,y_t,t) ϵy=modely(x^0,yt,t)

4.2 恢复“干净估计” y ^ 0 \hat y_0 y^0
y ^ 0 = y t − 1 − α ˉ t   ϵ y α ˉ t \hat y_0=\frac{y_t-\sqrt{1-\bar\alpha_t}\,\epsilon_y}{\sqrt{\bar\alpha_t}} y^0=αˉt yt1αˉt ϵy

4.3 更新到下一步 y t − 1 y_{t-1} yt1
y t − 1 = α ˉ t − 1 y ^ 0 + 1 − α ˉ t − 1   ϵ y y_{t-1}=\sqrt{\bar\alpha_{t-1}}\hat y_0+\sqrt{1-\bar\alpha_{t-1}}\,\epsilon_y yt1=αˉt1 y^0+1αˉt1 ϵy

数据流总结(模块 B)
x ^ 0 , y t , t → ϵ y → y ^ 0 → y t − 1 \hat x_0,y_t,t \rightarrow \epsilon_y \rightarrow \hat y_0 \rightarrow y_{t-1} x^0,yt,tϵyy^0yt1

5) 把一步合起来:完整的 per-step 数据流

在每个时间步 t t t,网络按如下顺序执行:

  1. 先更新 x x x(得到更干净的结构/标注)
    ( x t , y t , t ) → model x ϵ x → x ^ 0 → x t − 1 (x_t,y_t,t) \xrightarrow{\text{model}_x} \epsilon_x \rightarrow \hat x_0 \rightarrow x_{t-1} (xt,yt,t)modelx ϵxx^0xt1
  2. 再更新 y y y(用 x ^ 0 \hat x_0 x^0 作为条件引导细节生成)
    ( x ^ 0 , y t , t ) → model y ϵ y → y ^ 0 → y t − 1 (\hat x_0,y_t,t) \xrightarrow{\text{model}_y} \epsilon_y \rightarrow \hat y_0 \rightarrow y_{t-1} (x^0,yt,t)modely ϵyy^0yt1

循环 t = T , T − 1 , … , 1 t=T,T-1,\dots,1 t=T,T1,,1,最终输出成对结果:
( x ^ 0 , y ^ 0 ) (\hat x_0,\hat y_0) (x^0,y^0)

6) 符号说明(最小必要集)

  • x 0 , y 0 x_0,y_0 x0,y0:干净的成对样本(如 mask 与 slice)
  • x t , y t x_t,y_t xt,yt:第 t t t 步加噪状态
  • T T T:扩散总步数
  • β t \beta_t βt:噪声日程
  • α ˉ t = ∏ i = 1 t ( 1 − β i ) \bar\alpha_t=\prod_{i=1}^t(1-\beta_i) αˉt=i=1t(1βi):累计系数
  • ϵ x , ϵ y \epsilon_x,\epsilon_y ϵx,ϵy:网络预测的噪声
  • x ^ 0 , y ^ 0 \hat x_0,\hat y_0 x^0,y^0:对干净样本的估计
  • model x , model y \text{model}_x,\text{model}_y modelx,modely:两个去噪网络( y y y 引导 x x x x ^ 0 \hat x_0 x^0 引导 y y y

二、实验

1) 实验目标

  • 进行成对生成实验:把肿块 mask 作为 x 0 x_0 x0、DBT 切片作为 y 0 y_0 y0,生成成对样本 ( x ^ 0 , y ^ 0 ) (\hat x_0,\hat y_0) (x^0,y^0)。:contentReference[oaicite:1]{index=1}
  • 将生成的成对数据加入到下游 DBT 肿块分割监督训练中,验证其有效性。:contentReference[oaicite:2]{index=2}

2) 数据集与预处理

  • 使用私有数据集 DBTMassSeg:367 名患者,包含 CC/MLO 视角及对应肿块 mask;共有 8,723 张含肿块切片;由两位有经验的放射科医生手工标注。
  • 预处理:裁掉空白区域并 resize 到 512 × 512 512\times512 512×512

3) 扩散模型实现设置(生成模型侧)

  • 归一化:线性缩放到 [ − 1 , 1 ] [-1,1] [1,1];噪声日程 β t \beta_t βt 线性从 10 − 4 10^{-4} 104 增到 0.02 0.02 0.02;最大步数 T = 1024 T=1024 T=1024
  • 网络:两条扩散模型均用 U-Net;输入通道数为 2;“引导信号”通过 channel 维拼接引入。
  • 采样:采用 DDIM 的 uniform-step 采样策略,采样步数设为 256。

4) 对比实验 A:与无条件扩散模型的生成质量对比(FID)

  • 基线:DDPM、DDIM(无条件生成)。每种方法各生成 2048 张 DBT 切片;采样步数:DDPM=1024,DDIM=256;指标:FID。
  • 结果(Table 1):PIG 的 FID 明显更低(更好):
    在这里插入图片描述

5) 对比实验 B:与条件扩散方法对比(看“下游分割收益”)

  • 思路:条件扩散可用“已有 mask 作为条件”生成图像,因此作者用“把生成数据加入分割训练后效果如何”来间接比较生成数据的价值。
    Table2

6) 定性实验:逐步生成过程可视化

  • 作者展示了 PIG 的逐步生成:早期先形成病灶形状(mask 更快“定形”),后期再细化切片整体纹理,用来说明“引导”让模型更关注病灶区域。

三、总结

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐