【论文精读】DifFace: Blind Face Restoration with Diffused Error Contraction

发布于:2025-03-16 ⋅ 阅读:(16) ⋅ 点赞:(0)


Method

0.前言

这篇文章是被 2024 TPAMI接收的关于人脸修复(face restoration)方向的论文,作者是南洋理工大学Chen Change Loy 课题组的。这个课题组很经典,在图像Low Level 方向发表了多篇经典论文,例如视频超分辨率的BasicVSR++,人脸修复的CodeFormer。

实际上,这篇文章并不算很新,早在2022年就被挂在了 arXiv,但是并没有激起像同任务中的CodeFormer一样大的水花,可能是恢复效果并不是很惊艳的原因吧。整体思想我觉得还是挺有趣的,设计中间转移过程,将低质量图像LQ转到中间态,然后利用预训练扩散模型的反向过程恢复到清晰的图像。
以下是论文链接和代码链接[paper] [code]
更多关于face restoration方向的论文可以查看这个仓库[Face_Restoration_Ref],整理了挺多经典论文。

1.当前问题

文章指出当前face restoration 两个局限性:

1、当遇到训练数据外的复杂退化,恢复效果会劣化。
2、有许多loss要设计、要平衡,例如保真、感知、对抗损失,这需要大量的人力成本去调这些超参。

2.怎么解决问题

这个文章的做法就是建立LQ到HQ的后验分布,就是设计一个中间过渡分布状态。
LQ->中间态->HQ ,中间态到HQ是采用预先训练的扩散模型(充分利用扩散模型的能力)。这样的优势在于:

1、LQ->中间态的监督只需要使用L1损失函数,省掉了大量的人力成本
2、中间的过渡分布可以收缩恢复模型的偏差,让整个算法更加鲁棒(遇到复杂退化也不怕)。

3.具体做法(Method)

明确优化目标,给定LQ图像恢复到HQ图像即 y 0 y_{0} y0 -> x 0 x_{0} x0 ,所以整体的目标是设计 p ( x 0 ∣ y 0 ) {p(x_{0}|y_{0})} p(x0y0)的合理后验分布。

3.1 受什么的启发?(Motivation)

考虑一个具有 T 个离散步骤的扩散模型,它提供了从 x t x_t xt x t − 1 x_{t-1} xt1 的转换函数。借助这种转变,可以构造后验分布 p ( x 0 ∣ y 0 ) {p(x_{0}|y_{0})} p(x0y0) 如下:
p ( x 0 ∣ y 0 ) = ∫ p ( x N ∣ y 0 ) ∏ t = 1 N p θ ( x t − 1 ∣ x t ) d ⁡ x 1 : N {p(x_{0}|y_{0})}=\int p(\mathbf{\mathit{x}}_{N}|\mathbf{\mathit{y}}_{0})\prod_{t=1}^{N}p_{\theta}(\mathbf{\mathit{x}}_{t-1}|\mathbf{\mathit{x}}_{t}){\operatorname{d}}x_{1:N} p(x0y0)=p(xNy0)t=1Npθ(xt1xt)dx1:N
N在1和T之间,就是中间状态,从N到x0的步骤可以使用预训练的扩散模型来获得,整个算法的设计目标就变成了设计 p ( x N ∣ y 0 ) {p(x_{N}|y_{0})} p(xNy0)

作者发现到如果将 p ( x N ∣ y 0 ) {p(x_{N}|y_{0})} p(xNy0)替换成 q ( x N ∣ x 0 ) {q(x_{N}|x_{0})} q(xNx0) ,那么整个求解目标就变成的扩散+重建过程。
x N ∼ q ( x N ∣ x 0 ) ⏟ D i f f u s i o n , x t − 1 ∣ x t ∼ p θ ( x t − 1 ∣ x t ) ⏟ R e c o n s t u c i i o \underbrace{x_{N}\sim q(x_{N}|x_{0})}_{\mathrm{Diffusion}},\quad\underbrace{x_{t-1}|x_{t}\sim p_{\theta}(x_{t-1}|x_{t})}_{\mathrm{Reconstuciio}} Diffusion xNq(xNx0),Reconstuciio xt1xtpθ(xt1xt)
因此这个N的取值就很有意思了,如果N取的太大,扩散的太严重,相当于是从噪声恢复回来,那就会失真,所以N需要取小一点,文中提出需要<500,才能恢复比较正确的人脸。

N的取值和恢复效果示意图可以见下图:
在这里插入图片描述
所以整个的目标就又进一步明确了,需要设计一种方法,让 p ( x N ∣ y 0 ) {p(x_{N}|y_{0})} p(xNy0)进一步的贴近 q ( x N ∣ x 0 ) {q(x_{N}|x_{0})} q(xNx0),这样就可以更好利用扩散模型的能力了!

3.2具体的模型设计(Design)

上面提到了整体的目标变成了设计一种方案,让 p ( x N ∣ y 0 ) {p(x_{N}|y_{0})} p(xNy0)贴近 q ( x N ∣ x 0 ) {q(x_{N}|x_{0})} q(xNx0)的分布,然而,我们知道的是 q ( x N ∣ x 0 ) {q(x_{N}|x_{0})} q(xNx0)是正向扩散过程,也就是不断叠加高斯噪声的过程,是可以被知道的分布。因此,整体的分布就可以近似为下式:
p ( x N ∣ y 0 ) = N ( x N ; α N f ( y 0 ; w ) , ( 1 − α N ) I ) p(x_{N}|y_{0})=\mathcal{N}\left(x_{N};\sqrt{\alpha_{N}}f(y_{0};w),(1-\alpha_{N})I\right) p(xNy0)=N(xN;αN f(y0;w),(1αN)I)

也就是通过一个神经网络 f ( ⋅ ; w ) f(\cdot;w) f(;w),来预测从 x 0 x_0 x0 x N x_N xN的噪声参数,所以对作者来说,这只能称为一个扩散的预测器(diffused estimator)。

至于损失函数,就是 p ( x N ∣ y 0 ) {p(x_{N}|y_{0})} p(xNy0) q ( x N ∣ x 0 ) {q(x_{N}|x_{0})} q(xNx0)之间的KL散度了。
D KL ⁡ [ p ( x N ∣ y 0 ) ∥ q ( x N ∣ x 0 ) ] = 1 2 κ N ∥ e ∥ 2 2 D_{\operatorname{KL}}\left[p(x_{N}|y_{0})\|q(x_{N}|x_{0})\right]=\frac{1}{2}\kappa_{N}\|e\|_{2}^{2} DKL[p(xNy0)q(xNx0)]=21κNe22

3.3 整体算法

通过上述的近似计算,加上扩散的逆过程,就可以实现完整LQ-HQ的重建过程,整体流程图如下:
在这里插入图片描述
1、首先输入LQ图像和时间步N,
2、利用扩散预测器(SwinIR)预测当前步骤的噪声参数
3、从N反向扩散直至到清晰图像X0

整体算法和其他deep learning的方式的差别就是引入了中间状态,如下图所示:
在这里插入图片描述
作者提醒到,从N-1到0的反向扩散过程中随机性太强,会引入和HQ有偏差的信息,因此在计算 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_{t}) pθ(xt1xt) 采样时利用配置 η = 0.5 的 DDIM 采样器,该策略在一定程度上有效地消除了采样过程中固有的随机性,提高了重构HQ图像的保真度,同时做了相关的消融实验证明η设置的依据。

4.实验效果

模拟退化数据CelebA-Test数据和真实场景数据LFW, WebPhoto, and WIDER 上效果都不错,挑出来的图效果都很好。

4.1 Synthetic(CelebA-Test)

在这里插入图片描述

4.2 Real World (LFW, WebPhoto, and WIDER)

在这里插入图片描述
如果有帮助到你,帮忙点个赞呗