/DDNM | 探索图像逆问题的本质:零值域分解

DDNM | 探索图像逆问题的本质:零值域分解

Zero-Shot Image Restoration Using Denoising Diffusion Null-Space Model
开源代码:https://github.com/wyhuai/DDNM
项目主页:https://wyhuai.github.io/ddnm.io/

链接(作者授权):https://zhuanlan.zhihu.com/p/588663035 

  • DDNM能实现各类图像修复任务,包括但不限于SR,Colorization,Inpainting,Deblurring,CS,Denoising等等。
  • DDNM可以解决任意倍率,比如2~256倍SR,采样率100%~0.1%的CS,任意mask的Inpainting。
  • DDNM可以解决修复,甚至非常强的噪声。
  • DDNM可以解决盲修复,比如真实世界超分,以及老照片修复等等。
  • 以上内容皆无需训练,无需优化,只需要一个预训练好的普通扩散模型即可

接下来我们详细讲解最核心的理论部分。

1. 图像逆问题

不含噪的图像线性逆问题(以下简称图像逆问题)可以定义为
, 其中 x 是原图, A 是线性退化算子,y 是原图经过退化后得到的图,也称为观测图。

图像逆问题就是要在仅知道观测图 y 的情况下,求潜在原图
。符合要求的x^一定满足下述两个约束:

  1. 数据一致性

  2. 真实性
    ,其中 q(x) 是原图所在类别的数据分布。

约束1很好理解,如果
是原图,那它经过 A 的退化后一定等于 y ; 约束2是先验项,比如已知原图是人脸图像,那么一个合理的修复结果应该是一张真实的人脸图。一般来说,只要满足这两项约束,就是好的修复结果。

主流的深度学习方法使用人造的 {y,x} 数据对来进行端到端的训练。实际上,端到端的训练目标本身隐含了约束1和约束2,但由于它只是一个优化目标,并不能保证结果一定是满足约束1和约束2的。但实际上,在已知 y 和算子A的情况下,约束1可以完全满足。

举个简单的例子,在图像上色问题中,假设算子A是逐像素的算子
,来将x的每个三通道像素
降维为 y 中对应的单值灰度像素
。假设我们拿到了灰度图y,并用它作为某个上色网络的输入,得到了预测的彩色图
,如下图所示。可见,这个结果和灰度图y很不一致。即约束1并不满足。


怎么办?我们可以做一个非常简单的操作,来得到和灰度图y具有完全的数据一致性的结果。首先我们定义一个算子
,即将每个单值灰度像素复制为一个三通道像素。然后对灰度图y和网络预测的彩色图
做一个纯数学的神秘运算,得到新的结果:
,如下图所示。


可见,这个结果肉眼上看上去是高度一致的,那么数学上呢?考虑约束1的定义,我们有


完全满足约束1。这是为什么呢?接下来我们揭示其中蕴含的数学原理:零值域分解

2. 零值域分解

2.1 矩阵中的零值域分解

零值域分解(Range-Null Space Decomposition,以下简称RND)是一个线性代数的概念。这里我们仅用矩阵来做推导,但后续的结论对任意线性算子形式(譬如卷积)皆适用。

给定一个矩阵
,它的左伪逆矩阵
满足
。伪逆矩阵
可以有很多种获得方式,比如奇异值分解,傅里叶变换,甚至是手工构造(比如我们上面构造的)。

当得到矩阵
和 A 之后,我们可以对任意变量
做如下恒等分解:



这个分解具有一种神奇的属性。当我们计算Ax :


会发现,左边的
在经过矩阵 A 变换后,就等于 Ax 。而右边的 (I−A†A)x 在经过矩阵 A 变换后等于0。我们将 A†Ax 称为 A 的值域部分(range-space part),将 (I−A†A)x 称为 A 的零域部分(null-space part)。上述分解,也被称为零值域分解(RND)。

2.2 图像逆问题中的零值域分解

回到图像逆问题 y=Ax ,若已知算子 A 及其伪逆 A† ,我们可以将原图 x 零值域分解为 x≡A†Ax+(I−A†A)x 。虽然完整的原图 x 是未知的,但其值域部分 A†Ax 是已知的,因为 A†Ax=A†y 。所以我们可以得出结论:在图像逆问题中,经过退化算子 A 的作用后,原图 x 留下来的就是值域部分,而失去的就是零域部分

并且留下来的值域部分 A†y 是满足约束1的。检查一下, AA†y=AA†Ax=Ax=y ,没问题。

由此,我们可以构造一个通解:x^=A†y+(I−A†A)xr ,其中 xr 是零域提取项。

对于该通解来说,不论 xr 如何取值,约束1都是完全满足的。那么在我们的设定中,图像逆问题就只剩下了约束2,也就是要求 xr 使得 x^ 符合目标图像域的分布。本质上,我们要求解的就是零域部分

3. 零域求解

既然零域求解的目的,就是要让图像趋于目标图像域的分布,那么我们自然想到了两种方法:GAN和Diffusion。接下来介绍我们的两个相关工作。

3.1 基于GAN Prior的零域学习

论文:GAN Prior based Null-Space Learning for Consistent Super-Resolution (AAAI 2023)

Github:https://github.com/wyhuai/RND

以图像超分为例,近年来基于GAN Prior的工作不少。总的来说,它们都使用一个网络 D(⋅) 来直接预测结果:

xr=D(y)

而我们的方法很简单,就是将网络预测的结果作为零域提取项 xr ,得到

x^=A†y+(I−A†A)xr

然后将 x^ 作为结果,进行端到端的训练,来优化网络 D(⋅) 。我们发现,仅仅使用GAN loss就能得到较好的结果。并且,我们提出了一个极其简单的下采样算子 A 及其伪逆 A† ,很容易移植到现有的方法中。

img

8xSR,第一行是我们的SR结果,第二行是原网络的下采样一致性误差(约束1),第三行是用我们方法训练的下采样一致性误差(约束1)。可见,我们的方法显著提高了一致性。

在使用和原网络相同的训练配置下,我们的方法能大幅加速收敛,提升最终性能。这是因为原本的方法需要网络同时学习零域和值域内容,而我们的方法只需要学习零域。

3.2 基于零域扩散的Diffusion Models

论文:Zero-Shot Image Restoration Using Denoising Diffusion Null-Space Model

开源代码:https://github.com/wyhuai/DDNM

项目主页:https://wyhuai.github.io/ddnm.io/

扩散模型的每一步,都会将当前含噪图 xt 去噪,得到一张干净图片 x0|t ,然后对 x0|t 加一个较弱的噪声,得到下一步。直到得到最后结果 x0

img

原始的DDPM采样过程

我们将 x0|t 作为零域提取项,得到一致的重建结果 x^0|t

img

我们提出的DDNM采样过程,对中间结果进行零值域分解(RND),以解决图像逆问题.经过这样一个简单操作,就能解决各类图像重建问题。

DDNM无需训练,无需优化,只需使用一个预训练好的扩散模型,即可解决各种图像逆问题,在内存和时间消耗上,和原扩散模型基本无异。支持任务包括超分,上色,填充,压缩感知,去模糊,去噪,等等。

我们之前讨论的,都是 y=Ax 的无噪线性逆问题。如何解决含噪的线性逆问题 y=Ax+n 呢?通过分析发现,该噪声 n 最终会成为含噪图 xt−1 的一部分。因此我们的思路很简单,就是利用扩散模型本身的去噪器来去除值域中的噪声 n 。

我们引入两个参数 Σt 和 Φt ,用来调节值域相关项,以及扩散模型每步增加的噪声。通过精确的计算,在最大化值域信息的同时,保证含噪图 xt−1 中的噪声方差和原始定义的噪声方差一致,这样对于去噪器来说,面临的噪声就是不变的。

img

我们提出的DDNM+采样过程,对噪声方差进行精确控制,以解决含噪逆问题

此外,DDNM+还可以用于老照片修复等复杂应用,DDNM 解决盲退化,盲噪声。

具体细节以及理论推导可以参考我们的论文。

4. 局限

目前看来,我们的设定存在的主要局限有二:

  1. 退化算子 A 必须是已知的,且必须得到其伪逆 A† 。但其实,DDNM+证明了现实世界的退化往往可以用很简单的退化算子来近似,虽然这不是十分精确,但也能很好地保留值域信息,也能得到非常好的结果。
  2. 退化算子 A 必须是线性的。非线性算子或许也存在“伪逆”,但其不一定满足分配律,比如,sin(a+b)≠sin(a)+sin(b) ,因此非线性算子不一定存在线性可分的零域和值域。

总的来说,我个人非常喜欢DDNM这项工作,我们大部分时间都花在公式推导之中,而这些推导最终得出了理论完备、极具可解释性、无需炼丹的方法。

这是一个全新的解决low-level问题的思路,我们无需训练,就能达到接近sota的重建效果(认为如果有一个预训练的高分辨率扩散模型,效果会更好)。我们希望这些工作对low-level领域会有新的启发。

欢迎大家讨论,以及指正批评~

本文来自微信公众号“AIWalker”(ID:happyaiwalker)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。