10. UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models
该文提出一种基于DDPM的非配对的图像转换方法,称为UNIT-DDPM,能够实现源域的图像到目标域图像的转换,在保留原有图像内容的同时,转换为目标域图像的风格,如RGB图像到红外图像的转换。与DDPM过程类似,在训练过程中需要训练一个噪声估计器
ϵ
θ
\epsilon_{\theta}
ϵθ,来估计噪声。再次基础上,本文提出的方法还额外训练一个域转换网络
g
ϕ
g_{\phi}
gϕ,来实现源域和目标域图像之间的转换。因此在噪声估计的过程中,不仅需要源域的噪声图像
x
t
A
\mathbf{x}_t^A
xtA,还需要转换得到的目标域图像
x
~
t
B
\tilde{\mathbf{x}}^B_t
x~tB。并且这个转换和生成过程是双向的,就是不仅源域向目标域转换,同时目标域也向源域转换。具体的实现方式如下
先看训练阶段,源域的图像
x
0
A
\mathbf{x}_{0}^{A}
x0A经过域转换网络
g
ϕ
A
A
g_{\phi^A}^A
gϕAA转换之后,得到转换后的目标域图像
x
~
0
B
\tilde{\mathbf{x}}_{0}^{B}
x~0B。源域图像
x
0
A
\mathbf{x}_{0}^{A}
x0A和经过转换的目标域图像
x
~
0
B
\tilde{\mathbf{x}}_{0}^{B}
x~0B分别进行扩散,在扩散的过程中我们要对噪声估计器
ϵ
θ
A
A
(
x
t
(
x
0
A
,
ϵ
)
,
x
~
t
B
,
t
)
\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{B}, t\right)
ϵθAA(xt(x0A,ϵ),x~tB,t)进行训练。与一般的DDPM不同的是,估计时需要将转换后的目标域图像
x
~
0
B
\tilde{\mathbf{x}}_{0}^{B}
x~0B作为一个条件一起输入进去。训练的目标函数与DDPM是类似的,如下所示
L
θ
(
θ
A
,
θ
B
)
=
E
t
,
x
0
A
,
ϵ
[
∥
ϵ
−
ϵ
θ
A
A
(
x
t
(
x
0
A
,
ϵ
)
,
x
~
t
B
,
t
)
∥
2
]
+
E
t
,
x
0
B
,
ϵ
[
∥
ϵ
−
ϵ
θ
B
B
(
x
t
(
x
0
B
,
ϵ
)
,
x
~
t
A
,
t
)
∥
2
]
\mathcal{L}_{\theta}\left(\theta^{A}, \theta^{B}\right)= \mathbb{E}_{t, \mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{B}, t\right)\right\|^{2}\right] +\mathbb{E}_{t, \mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), \tilde{\mathbf{x}}_{t}^{A}, t\right)\right\|^{2}\right]
Lθ(θA,θB)=Et,x0A,ϵ[
ϵ−ϵθAA(xt(x0A,ϵ),x~tB,t)
2]+Et,x0B,ϵ[
ϵ−ϵθBB(xt(x0B,ϵ),x~tA,t)
2]
值得注意的是,上面的介绍只介绍了一个方向的转换,也就是从源域到目标域的转换。就如我们前文所述,这个转换过程是双向的,同时也要做从目标域到源域的转换,这一点在上述目标函数中也能体现出来,因为转换过程是完全对称的,我们就不再重复介绍了。此外,在训练过程中不仅要对噪声估计器
ϵ
θ
\epsilon_{\theta}
ϵθ进行训练,还需要对域转换网络
g
ϕ
g_{\phi}
gϕ进行训练,其目标函数如下
L
ϵ
ϕ
(
ϕ
A
,
ϕ
B
)
=
E
t
,
x
0
B
,
ϵ
[
∥
ϵ
−
ϵ
θ
A
A
(
x
t
(
g
ϕ
B
B
(
x
0
B
)
,
ϵ
)
,
x
t
(
x
0
B
,
ϵ
)
,
t
)
∥
2
+
∥
ϵ
−
ϵ
θ
B
B
(
x
t
(
x
0
B
,
ϵ
)
,
g
ϕ
B
B
(
x
t
(
x
0
B
)
,
ϵ
)
,
t
)
∥
2
]
+
E
t
,
x
0
A
,
ϵ
[
∥
ϵ
−
ϵ
θ
B
B
(
x
t
(
g
ϕ
A
A
(
x
0
A
)
,
ϵ
)
,
x
t
(
x
0
A
,
ϵ
)
,
t
)
∥
2
+
∥
ϵ
−
ϵ
θ
A
A
(
x
t
(
x
0
A
,
ϵ
)
,
g
ϕ
A
A
(
x
t
(
x
0
A
)
,
ϵ
)
,
t
)
∥
2
]
\begin{array}{l} \mathcal{L}_{\epsilon^{\phi}}\left(\phi^{A}, \phi^{B}\right)= \\ \mathbb{E}_{t, \mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(g_{\phi^{B}}^{B}\left(\mathbf{x}_{0}^{B}\right), \boldsymbol{\epsilon}\right), \mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right. \\ \left.\quad+\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}, \boldsymbol{\epsilon}\right), g_{\phi^{B}}^{B}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{B}\right), \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right] \\ +\mathbb{E}_{t, \mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}}\left[\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{B}}^{B}\left(\mathbf{x}_{t}\left(g_{\phi^{A}}^{A}\left(\mathbf{x}_{0}^{A}\right), \boldsymbol{\epsilon}\right), \mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right. \\ \left.\quad+\left\|\boldsymbol{\epsilon}-\epsilon_{\theta^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}, \boldsymbol{\epsilon}\right), g_{\phi^{A}}^{A}\left(\mathbf{x}_{t}\left(\mathbf{x}_{0}^{A}\right), \boldsymbol{\epsilon}\right), t\right)\right\|^{2}\right] \end{array}
Lϵϕ(ϕA,ϕB)=Et,x0B,ϵ[
ϵ−ϵθAA(xt(gϕBB(x0B),ϵ),xt(x0B,ϵ),t)
2+
ϵ−ϵθBB(xt(x0B,ϵ),gϕBB(xt(x0B),ϵ),t)
2]+Et,x0A,ϵ[
ϵ−ϵθBB(xt(gϕAA(x0A),ϵ),xt(x0A,ϵ),t)
2+
ϵ−ϵθAA(xt(x0A,ϵ),gϕAA(xt(x0A),ϵ),t)
2]在训练过程中,需要固定噪声估计器的参数
θ
A
\theta^A
θA和
θ
B
\theta^B
θB。在此基础上,作者还引入了CycleGAN中提到的循环一致性损失,来对域转换网络进行监督
L
cyc
(
ϕ
A
,
ϕ
B
)
=
E
x
0
B
[
∥
g
ϕ
A
A
(
g
ϕ
B
B
(
x
0
B
)
)
−
x
0
B
∥
1
]
+
E
x
0
A
[
∥
g
ϕ
B
B
(
g
ϕ
A
A
(
x
0
A
)
)
−
x
0
A
∥
1
]
\begin{array}{l} \mathcal{L}_{\text {cyc }}\left(\phi^{A}, \phi^{B}\right)=\mathbb{E}_{\mathbf{x}_{0}^{B}}\left[\left\|g_{\phi^{A}}^{A}\left(g_{\phi^{B}}^{B}\left(\mathbf{x}_{0}^{B}\right)\right)-\mathbf{x}_{0}^{B}\right\|_{1}\right] +\mathbb{E}_{\mathbf{x}_{0}^{A}}\left[\left\|g_{\phi^{B}}^{B}\left(g_{\phi^{A}}^{A}\left(\mathbf{x}_{0}^{A}\right)\right)-\mathbf{x}_{0}^{A}\right\|_{1}\right] \\ \end{array}
Lcyc (ϕA,ϕB)=Ex0B[
gϕAA(gϕBB(x0B))−x0B
1]+Ex0A[
gϕBB(gϕAA(x0A))−x0A
1]综合后的目标函数如下
L
ϕ
(
ϕ
A
,
ϕ
B
)
=
L
ϵ
ϕ
(
ϕ
A
,
ϕ
B
)
+
λ
cyc
L
cyc
(
ϕ
A
,
ϕ
B
)
\mathcal{L}_{\phi}\left(\phi^{A}, \phi^{B}\right)=\mathcal{L}_{\epsilon^{\phi}}\left(\phi^{A}, \phi^{B}\right)+\lambda_{\text {cyc }} \mathcal{L}_{\text {cyc }}\left(\phi^{A}, \phi^{B}\right)
Lϕ(ϕA,ϕB)=Lϵϕ(ϕA,ϕB)+λcyc Lcyc (ϕA,ϕB)整个训练的流程如下图所示
完成训练后,我们再来看一下生成过程。
首先,从源域中采集一个参考图像
x
0
A
\mathbf{x}_{0}^{A}
x0A,从标准正态分布中采集一个噪声
x
^
T
B
\hat{\mathbf{x}}_T^B
x^TB。然后对参考图像
x
0
A
\mathbf{x}_{0}^{A}
x0A进行逐步的扩散得到噪声
x
T
A
\mathbf{x}_{T}^{A}
xTA,对噪声
x
^
T
B
\hat{\mathbf{x}}_T^B
x^TB逐步去噪得到目标图像
x
^
0
B
\hat{\mathbf{x}}_0^B
x^0B。我们上文讲到噪声估计网络
ϵ
θ
\epsilon_{\theta}
ϵθ的输入不仅有
x
^
t
B
\hat{\mathbf{x}}_t^B
x^tB,还需要
x
^
t
A
\hat{\mathbf{x}}_t^A
x^tA。
x
^
t
B
\hat{\mathbf{x}}_t^B
x^tB就是上一时刻的去噪结果,
x
^
t
−
1
B
=
μ
θ
B
(
x
^
t
B
,
x
^
t
A
,
t
)
+
Σ
θ
B
(
x
t
,
t
)
ϵ
B
\hat{\mathbf{x}}_{t-1}^{B}=\mu_{\theta^{B}}\left(\hat{\mathbf{x}}_{t}^{B}, \hat{\mathbf{x}}_{t}^{A}, t\right)+\Sigma_{\theta^{B}}\left(\mathbf{x}_{t}, t\right) \epsilon^{B}
x^t−1B=μθB(x^tB,x^tA,t)+ΣθB(xt,t)ϵB而
x
^
t
A
\hat{\mathbf{x}}_t^A
x^tA的计算分成了两个阶段,第一阶段从时刻
T
T
T到时刻
t
r
+
1
t_r+1
tr+1的过程中,
x
^
t
A
\hat{\mathbf{x}}_t^A
x^tA是由扩散过程得到的
x
^
t
A
=
α
ˉ
t
A
x
0
A
+
1
−
α
ˉ
t
A
ϵ
A
\hat{\mathbf{x}}_{t}^{A}=\sqrt{\bar{\alpha}_{t^{A}}} \mathbf{x}_{0}^{A}+\sqrt{1-\bar{\alpha}_{t^{A}}} \boldsymbol{\epsilon}^{A}
x^tA=αˉtAx0A+1−αˉtAϵA第二阶段从
t
r
t_r
tr到1的过程中,
x
^
t
A
\hat{\mathbf{x}}_t^A
x^tA是通过去噪的方式计算的
x
^
t
−
1
A
=
1
1
−
α
t
(
x
^
t
A
−
1
−
α
t
1
−
α
t
‾
ϵ
θ
A
(
x
^
t
A
,
x
^
t
B
,
t
)
)
+
σ
t
ϵ
A
\hat{\mathbf{x}}_{t-1}^{A}=\frac{1}{\sqrt{1-\alpha_{t}}}\left(\hat{\mathbf{x}}_{t}^{A}-\frac{1-\alpha_{t}}{\sqrt{1-\overline{\alpha_{t}}}} \epsilon_{\theta^{A}}\left(\hat{\mathbf{x}}_{t}^{A}, \hat{\mathbf{x}}_{t}^{B}, t\right)\right)+\sigma_{t} \boldsymbol{\epsilon}^{A}
x^t−1A=1−αt1(x^tA−1−αt1−αtϵθA(x^tA,x^tB,t))+σtϵA这个时间点
t
r
t_r
tr被称为释放时刻(release time),整体的生成过程如下图所示