背景
图像去噪声是图像生成领域经典的病态问题。以往的图像去噪模型通常需要将噪声图像 x i x_i xi和对应的干净图像 y i y_i yi成对输入网络中对网络进行训练: a r g min θ ∑ i L ( f ( x i , θ ) , y i ) (1) arg\min_{\theta}\sum_iL(f(x_i,\theta), y_i ) \tag{1} argθmini∑L(f(xi,θ),yi)(1)其中 θ \theta θ代表需要优化的网络参数。然而在实际问题中,成对的训练图像往往是不易获得,甚至无法获得的,因此一系列抛弃干净图像,只使用噪声图像来训练的网络模型便应运而生。
Noise2Noise: Learning Image Restoration without Clean Data
N2N源自于一个简单的统计学常识,假如我们有一个测量的不那么精准的温度计,想测量室内的真实温度,那么最有效的办法就是通过多次测量得到一系列温度结果
z
1
,
.
.
.
,
z
k
z_1,...,z_k
z1,...,zk之后求一个值
h
h
h,使得
h
h
h到所有
z
i
z_i
zi的差值的和最小化,也就是:
a
r
g
min
h
E
z
(
L
(
h
,
z
)
)
(2)
arg\min_hE_z(L(h, z)) \tag{2}
arghminEz(L(h,z))(2)通过不同的
L
L
L,最小化上面的式子我们可以得到不同的
h
h
h的期望值:对于
L
2
L_2
L2损失
L
(
z
,
h
)
=
(
z
−
h
)
2
L(z,h) = (z − h)^2
L(z,h)=(z−h)2,最小化上面的式子我们会得到
z
i
z_i
zi的平均值,即:
h
=
E
z
(
z
)
h=E_z(z)
h=Ez(z)。对于
L
1
L1
L1损失
L
(
z
,
h
)
=
∣
z
−
h
∣
L(z,h)=|z-h|
L(z,h)=∣z−h∣,最小化上面的式子我们会得到
z
i
z_i
zi的中值。当然后面作者还根据需要,给出了一个退火版本的
L
0
L_0
L0损失,用来求众数,这个就是后话了。
然而上面提到的是一种点估计的方法,而我们训练一个网络则是这种点估计的推广,即我们需要训练一个网络,给定
x
i
x_i
xi,它经过网络后对应的期望值应该为
y
i
y_i
yi,也就是我们网络的目标是:
a
r
g
min
θ
E
(
x
,
y
)
(
L
(
f
(
x
,
θ
)
,
y
)
)
(3)
arg\min_{\theta}E_{(x,y)}(L(f(x,\theta),y)) \tag{3}
argθminE(x,y)(L(f(x,θ),y))(3)于是我们通过贝叶斯变换,将上式转换为:
a
r
g
min
θ
E
x
(
E
y
∣
x
(
L
(
f
(
x
,
θ
)
,
y
)
)
)
(4)
arg\min_{\theta}E_x(E_{y|x}(L(f(x,\theta),y))) \tag{4}
argθminEx(Ey∣x(L(f(x,θ),y)))(4)这样其实就是将(3)式转化为了一种点估计的形式(如果x和y条件独立,那么可以进一步转为(2)式的形式),理论上我们就可以通过优化每个噪声图像对
x
i
,
y
i
x_i,y_i
xi,yi来得到最优的
f
θ
f_{\theta}
fθ。
回忆开头我们所说的,像图像去噪这类问题,是典型的ill-posed问题,多张干净图像添加噪声后可能获得相同的噪声图像,因而噪声图像对应的干净图像也没有一个准确的结果。如果从(1)式来看,我们网络经过充分的优化过后,最终的输出并不是和
x
i
x_i
xi一一对应的,而是在一个范围内的随机值,而这个范围的期望值是
y
i
y_i
yi。其实这很好理解,当我们的网络没有充分收敛时,
f
θ
f_{\theta}
fθ的解空间的方差很大,对应输出的图像可能会离真实的干净图像很远,而当我们对
f
θ
f_{\theta}
fθ进行充分训练后,模型收敛,其解空间的方差会减小,对应输出的图像便会稳定在一个较小的范围内波动。尽管这个解空间的方差不会随着模型训练而无限制的减小,但是它的期望值\均值总是不变的,也就是我们配对的干净图像
y
i
y_i
yi。
这是本文最重要的一个结论,从期望的角度来看(1)式,如果我们将
y
i
y_i
yi添加均值为0的噪声,我们称之为
y
i
^
\hat{y_i}
yi^,那么在对(4)式进行期望值优化时,如果我们使用的是
L
2
L_2
L2损失,那么对最终结果是没有影响的,这是因为如果输入条件目标分布
p
(
y
∣
x
)
p(y|x)
p(y∣x)被具有相同条件期望值的任意分布替换,最终的期望值是不会受到影响的,也就是说最佳网络参数
θ
\theta
θ是保持不变的。有了这个结论之后,我们就可以将(1)式转化为下面这种形式:
a
r
g
min
θ
L
(
f
(
x
i
,
θ
)
,
y
i
^
)
(5)
arg\min_{\theta}L(f(x_i,\theta),\hat{y_i}) \tag{5}
argθminL(f(xi,θ),yi^)(5)其中
x
i
x_i
xi和
y
i
^
\hat{y_i}
yi^都是噪声图像,并且由于我们仅仅是要求
E
(
y
i
^
∣
x
i
)
=
E
(
y
i
∣
x
i
)
=
y
i
E(\hat{y_i}|x_i)=E(y_i|x_i)=y_i
E(yi^∣xi)=E(yi∣xi)=yi,所以
E
(
y
i
^
)
E(\hat{y_i})
E(yi^)相对于
x
i
x_i
xi可以是不同噪声分布。因此当噪声样本无限多时,我们完全可以用(5)来代替(1)对
f
θ
f_{\theta}
fθ进行优化,即使噪声样本少量,我们也是可以用这种替代方法的,因为他们在期望上是正确的(虽然图像数量减少可能会造成模型收敛到一个较差的水平)。而由于这种方法并不依赖于
x
x
x和
y
y
y的相关性先验,因此无论是对于(1)式还是(3)式,都是成立的。
对于实验部分,我们主要看一下下面部分:
Poisson noise,这是一种与图像x有关的噪声,明亮度越大,其噪声强度就越大。然而因为总体噪声的均值还是为0,因此使用本文方法时,依然可以取得近乎于(noise,clean)训练的网络的性能。Multiplicative Bernoulli noise 是将图像中的每一个像素点都以概率p为0,这种噪声显然不是0均值的,为此作者更换损失函数为:
a
r
g
min
θ
∑
i
(
m
⊙
(
f
(
x
i
,
θ
)
−
y
i
^
)
)
2
(6)
arg\min_{\theta}\sum_i(m \odot (f(x_i, \theta ) − \hat{y_i}))^2 \tag{6}
argθmini∑(m⊙(f(xi,θ)−yi^))2(6)通过掩码矩阵,每一次输入网络的噪声部分被从期望值中掩盖,剩余部分就可以看做是0均值的噪声。在这样的改进下,最后的结果比只使用
L
2
L_2
L2和(noise,clean)训练的网络性能还要好,这可能是由于被污染的目标在网络输出中有效地应用了dropout技术,防止了过拟合。 Impulse noise,即脉冲噪声,也是一种常见的不以0为均值的噪声,作者为此特意提出了一种退火版的
L
0
L_0
L0损失,
从结果来看,当损失函数与噪声不匹配时,用这种方法训练的模型会有较大误差,然而当损失函数与噪声匹配时,用本文的方法可以接近于使用(noise,clean)训练的模型。
Noise2Void:Learning Denoising from Single Noisy Images
上文我们介绍了N2N的图像去噪训练方法,这种方法首次提出可以抛弃干净图像,仅使用噪声图像训练模型,并且给出了严谨的数学证明,图像去噪问题可以公式化为
x
=
s
+
n
x = s + n
x=s+n,其中x是噪声图像,s是干净图像,n是噪声。尽管这是一种在理论上与监督方法等价的方法,但是由于实践操作中我们无法达到理论中的无限多的配对噪声图像这一条件,所以这是一种弱于监督,但是却强于自监督的方法,虽然这种方法有着里程碑的意义,然而N2N依然有很多理论上和实践上的问题:
1、首先,N2N虽然不需要配对的噪声/干净图像,但是如果想得到比较准确的结果,却需要大量的噪声图像,并且最重要的是,这些噪声图像
x
i
x_i
xi应该是同一张干净图像
s
s
s添加了随机噪声后获得的。然而这些噪声图像依然不容易获得,甚至是无法获得。
2、我们可以看到对于噪声分布比较规则的图像,我们可以通过使用与之相匹配的损失函数进行模型训练,然而现实中很多噪声时无法预测其分布的,当噪声分布于损失函数不匹配时,模型的性能会大幅下降。
为了解决上面的问题,许多人开始尝试能不能连配对的噪声图像也不需要,直接使用单张噪声图像进行模型训练呢,于是N2V便应运而生。
先说明一下,N2V并不是某一篇文章,而是一种模型训练的条件要求,根据这一要求,提出了一系列的相关文章,比如说:《Probabilistic Noise2Void: Unsupervised Content-Aware Denoising》、《Noise2Void - Learning Denoising from Single Noisy Images》、《SELF-SUPERVISED DEEP IMAGE DENOISING》、《Noise2Self: Blind Denoising by Self-Supervision》 等,这一部分我们依据《Noise2Void - Learning Denoising from Single Noisy Images》来说。
本文一开始便给出了另一个图像去噪中一个显然的已知信息,即图像中的像素点并不是独立存在的,每一个像素点和周围的像素点都是条件相关的。其实这很容易理解,正因为每一个像素点都和周围的像素点有着一定的关联,我们的神经网络才能利用某个被污染的像素点这种隐含信息通过观察其周围的像素点推断出被污染部分的真实值。理解了这一点,本文的核心思想也就抓住了。
首先本文做出来两个假设:图像中每个像素点都不是独立存在的,都与周围的像素点成条件概率的关系,数学表达式:
p
(
s
,
n
)
=
p
(
s
)
p
(
n
∣
s
)
,
p
(
s
i
∣
s
j
)
≠
p
(
s
i
)
(7)
p(s,n) = p(s)p(n|s),\\ p(s_i |s_j) \neq p(s_i) \tag{7}
p(s,n)=p(s)p(n∣s),p(si∣sj)=p(si)(7)其中
s
i
s_i
si和
s
j
s_j
sj是同一张图片两个不同的像素点;噪声图像中的噪声时独立于像素而存在的,任何像素点都有p的概率被独立同分布的噪声所污染,数学表达式:
p
(
n
∣
s
)
=
∏
i
p
(
n
i
∣
s
i
)
.
p(n|s) =\prod_{i}p(n_i |s_i ).
p(n∣s)=i∏p(ni∣si).其中
n
i
n_i
ni是i处对应的噪声点。之后因为本文考虑的是
L
2
L_2
L2损失,因此还对噪声做出了和N2N相同的假设,即噪声分布的均值等于0。
传统CNN的运行原理是通过一个固定大小的感受野在图像上滑块,然后将滑块与图像对应的像素进行乘积、激活等一系列操作后,将一个感受野的图像内容
x
R
F
(
i
)
x_{RF(i)}
xRF(i)映射为一个新的像素点
s
^
i
\hat{s}_i
s^i,这个过程我们可以用:
f
(
x
R
F
(
i
)
;
θ
)
=
s
i
^
(8)
f(x_{RF(i)};\theta) = \hat{s_i} \tag{8}
f(xRF(i);θ)=si^(8)来表示。通过一系列相互重叠的滑块,最终将整张图像的内容映射为另一张新的图像。如果将这种patch2pixel的想法对应到本文一开始的(1)式,那么我们就可以将其改写为:
a
r
g
min
θ
∑
j
∑
i
L
(
f
(
x
R
F
(
i
)
j
;
θ
)
=
s
^
i
j
,
s
i
j
)
(9)
arg \min_{\theta}\sum_{j}\sum_{i}L(f(x_{RF(i)}^j ;\theta) = \hat{s}_i^j ,s_i^j) \tag{9}
argθminj∑i∑L(f(xRF(i)j;θ)=s^ij,sij)(9)也就是对每个噪声图像的每个像素点,网络
f
θ
f_{\theta}
fθ力求将其映射为干净图像对应的像素点。
在N2N中,模型的训练需要至少两个独立同分布的噪声图像:
x
j
=
s
+
n
j
x
j
′
=
s
+
n
j
′
(10)
x_j = s + n_j \\ x^′_j = s + n^′_j \tag{10}
xj=s+njxj′=s+nj′(10),如果将前面我们所说的patch2pixel的也运用到这里,那么我们有其输入转化为
(
x
R
F
(
i
)
j
,
x
i
′
j
)
(x_{RF(i)}^j ,x_i^{′j} )
(xRF(i)j,xi′j),其中
x
R
F
(
i
)
j
x_{RF(i)}^j
xRF(i)j是噪声图像的一个patch,而
x
i
′
j
x_i^{′j}
xi′j是另一个噪声图像对应处的像素点,将其带入(9)式,我们可以得到:
a
r
g
min
θ
∑
j
∑
i
L
(
f
(
x
R
F
(
i
)
j
;
θ
)
=
s
^
i
j
,
x
i
′
j
)
(11)
arg \min_{\theta}\sum_{j}\sum_{i}L(f(x_{RF(i)}^j ;\theta) = \hat{s}_i^j ,x_i^{′j}) \tag{11}
argθminj∑i∑L(f(xRF(i)j;θ)=s^ij,xi′j)(11)由N2N可知,在期望下(11)式是和(9)式等价的。
接下来让我们更进一步分析,如果我们将
x
i
′
j
x_i^{′j}
xi′j换成
x
i
j
x_i^{j}
xij,换句话说,我们将一个噪声图像的一个patch和patch中对应的一个像素点配对,那么对于(11)式我们进一步将其代换为:
a
r
g
min
θ
∑
j
∑
i
L
(
f
(
x
R
F
(
i
)
j
;
θ
)
=
s
^
i
j
,
x
i
j
)
(12)
arg \min_{\theta}\sum_{j}\sum_{i}L(f(x_{RF(i)}^j ;\theta) = \hat{s}_i^j ,x_i^{j}) \tag{12}
argθminj∑i∑L(f(xRF(i)j;θ)=s^ij,xij)(12),那么(12)式是成立的吗?显然在期望下(12)式还是成立的,并且与(11)式等价。这是因为在期望下,
E
x
i
j
(
x
i
j
)
=
E
x
i
′
j
(
x
i
′
j
)
=
s
i
j
E_{x_i^j}(x_i^j)=E_{x_i^{'j}}(x_i^{'j})=s_i^j
Exij(xij)=Exi′j(xi′j)=sij。
通过这种代换,我们就可以在理论上实现我们本部分开始时的目的了,即通过单张噪声图像实现模型的训练。
但是观察上面的理论公式(12),我们很容易发现,如果将patch的全部信息同时输入到模型中,模型很容易坍缩成一个忽略目标像素点周围的信息,而只关注目标像素点自身的恒等映射。为了解决这个问题,作者提出了一个新颖的方式,blind-point。简单来说,blind-point就是将输入patch中的目标点遮盖住,然后模型可以通过未遮盖住的部分推断出遮盖住的目标点,这也就是为什么本文一开始提出的第一个假设,即图像中每个像素点都不是独立存在的。
通过这种方式,模型便可以避免了成为某个像素点的恒等映射,虽然这样做会因为patch比理论值缺少了一个像素点的信息而无法达到理论值的精度。
实验部分作者也是很贴心,先看成功的例子:
可以看出本文方法虽然效果会略弱于N2N,但是却可以强于传统的自监督方法BM3D,并且在计算量上要显著的小于传统方法。
再看一下失败的例子:
首先这个例子是说不满足第一个假设的情况:
可以看出来,在第一行图像上,由于有许多近似独立的亮点,这些亮点处的像素值很难依靠周围的像素值进行推断,因此生成的图像会丢失掉这些亮点;在第二行图像上,由于山峰处的像素变化剧烈,因此也无法用周围的像素点来近似的预测,所以生成的图像会过于平滑。
再来看不满足第二个假设的情况:
可以看出,当噪声不是均匀分布的时,噪声图像期望值等于真实图像这个基石般的前提被打破,所产生的结果也会出现问题。其实本文,包括N2N的一个隐含思想就是,期望在损失函数下为0的地方是噪声,因此当使用结构化噪声时,在本文的
L
2
L_2
L2损失下那些叠加后取平均不能被抵消的地方的噪声不能被模型所识别,所以最后被保留了下来。这就出现了第一行结果中的棋盘阴影和第二行结果中的条状阴影。虽然在实际生活中,这种结构化噪声常常因为测量仪器的固有问题而出现。
写在最后
本文通过添加前提假设,将N2N的基石公式进一步推广,实现了单噪声图像的恢复,真实实现了这一系列方法的一种无监督学习。针对本文的失败案例虽然目前各种论文已经提出了许多不同的解决方法,例如每次随机取不同的像素点/多个像素点、将遮盖的像素点信息以后验信息的形式添加到模型中等,但终究还是无法打破两个强力的假设的约束。个人感觉,如果打破这种方法的具体实现流程,而是将其期望匹配的思想应用于其他更先进的网络,也许会迈出新的一步。