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

server/2025/3/19 23:00:29/

文章目录

  • 0.前言
  • 1.当前问题
  • 2.怎么解决问题
  • 3.具体做法(Method)
    • 3.1 受什么的启发?(Motivation)
    • 3.2具体的模型设计(Design)
    • 3.3 整体算法
  • 4.实验效果
    • 4.1 Synthetic(CelebA-Test)
    • 4.2 Real World (LFW, WebPhoto, and WIDER)

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)

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


http://www.ppmy.cn/server/176363.html

相关文章

高频SQL50题 第一天 | 1757. 可回收且低脂的产品、584. 寻找用户推荐人、595. 大的国家、1683. 无效的推文、1148. 文章浏览 I

1757. 可回收且低脂的产品 题目链接&#xff1a;https://leetcode.cn/problems/recyclable-and-low-fat-products/description/?envTypestudy-plan-v2&envIdsql-free-50 状态&#xff1a;已完成 考点&#xff1a;无 select product_id from Products where low_fats Y a…

漏洞挖掘—EDU SRC证书站漏洞挖掘记录

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 前言 好久没…

理解矩阵乘以向量如何“将空间进行了扭曲”

要理解矩阵乘以向量如何“将空间进行了扭曲”&#xff0c;我们可以从 ​线性变换 的角度来深入分析。矩阵乘以向量的运算本质上是将一个向量从一个空间映射到另一个空间&#xff0c;这种映射过程可以改变向量的 ​方向 和 ​长度&#xff0c;从而实现对空间的“扭曲”或“变换”…

EDID读取学习

简介 Video BIOS可以被认为是一个具有独立硬件抽象层的操作系统。它不会阻止或监视操作系统、应用程序或设备驱动程序对硬件的直接访问。虽然不推荐,但一些DOS应用程序确实可以改变基本的硬件设置,而根本不需要通过视频BIOS。大多数现代应用程序和操作系统都避免直接使用硬件…

TikTok账号养成计划:从0到1打造高权重店铺

TikTok账号养成计划&#xff1a;从0到1打造高权重店铺 随着TikTok Shop的火爆&#xff0c;越来越多跨境电商卖家希望在TikTok上打造高权重店铺&#xff0c;实现源源不断的流量和销售转化。那么&#xff0c;如何从零开始养成一个权重高、流量稳定的TikTok账号呢&#xff1f;本篇…

linux下组建软raid方法

基于磁盘信息的 Linux RAID 配置指南 磁盘信息摘要 设备名容量类型用途建议sda80G系统盘系统分区&#xff08;勿操作&#xff09;sdb40G数据盘推荐用于 RAIDsdc40G数据盘推荐用于 RAIDsdd40G数据盘推荐用于 RAIDsde30G数据盘容量较小&#xff0c;慎用 方法一&#xff1a;使用 …

Spring Boot 核心知识点:依赖注入 (Dependency Injection)

Spring Boot 核心知识点&#xff1a;依赖注入 (Dependency Injection) 一、引言 在软件开发中&#xff0c;对象之间的依赖关系是不可避免的。一个对象通常需要与其他对象协作才能完成其功能。传统的对象创建方式往往需要在对象内部显式地创建或查找其依赖的对象&#xff0c;这…

PCDN 在去中心化互联网中的角色

在去中心化互联网的架构下&#xff0c;PCDN&#xff08;P2P CDN&#xff09;正扮演着举足轻重的角色&#xff0c;成为推动互联网高效、公平发展的关键力量。 PCDN 充分利用了用户设备的闲置资源。传统互联网模式下&#xff0c;大量个人设备的带宽、存储资源在多数时间处于未充…