之前一直对各种机器学习算法的推导比较感兴趣,又希望了解一些机器学习和深度学习模型相结合的处理方法,最近看到的这篇文章就是一个比较好的例子。文章名为 Variational Denoising Network: Toward Blind Noise Modeling and Removal 可从arXiv:1908.11314 获取。
文章目的是图像盲去噪,首先进行了领域相关工作的总结,认为主要存在两种主流解决思路,一种是大多数传统方法所基于的概率模型的方法、一种是数据驱动的深度学习模型。前者优势在于可解释性强,但劣势在于,对噪声生成方式的预先假设可能导致模型效果受限,并且算法需要对新图像进行调整,导致应用不方便。后者优势在于利用了大量 噪声图-干净图 的数据中的信息,并且测试图像处理速度快,但可能存在过拟合训练集,导致没有很好的处理测试图像中其他类型噪声的能力。
文章陈述的主要贡献:
首先说明数据表示方式, D D D 表示训练数据,形式为 D = { y j , x j } j = 1 n D=\{y_j,x_j\}_{j=1}^{n} D={yj,xj}j=1n 其中 y j y_j yj 和 x j x_j xj 表示第 j 个训练数据对,n 代表训练数据的数量。y表示噪声图,x表示相同条件下多次采集取平均得到的”近似”的干净图,这里需要注意,真实的无噪声图无法获取,数据集的干净图实际上是取平均后的近似干净图。这就是为什么不能直接将x作为label的原因,本文将x作为潜在干净图的先验。
令 y = [ y 1 , . . . , y d ] T y=[y_1, ..., y_d]^T y=[y1,...,yd]T 和 x = [ x 1 , . . . , x d ] T x=[x_1, ..., x_d]^T x=[x1,...,xd]T 表示图像对的一维展开, d = w i d t h ∗ h e i g h t d=width*height d=width∗height 用z表示潜在的干净图,将噪声的产生表示成
y i ∼ N ( z i , σ i 2 ) , i = 1 , 2 , . . . , d y_i \sim N(z_i, \sigma_i^2), i=1,2,...,d yi∼N(zi,σi2),i=1,2,...,d
这里可以看出,并没有对噪声的整体分布进行限制,而是单独可以单独考虑每个像素点。然后基于训练数据给出该高斯分布两个参数的先验:
z i ∼ N ( x i , ϵ 0 2 ) z_i \sim N(x_i, \epsilon_0^2) zi∼N(xi,ϵ02)
σ i 2 ∼ I G ( p 2 2 − 1 , p 2 ξ i 2 ) \sigma_i^2 \sim IG(\frac{p^2}{2}-1,\frac{p^2\xi_i}{2}) σi2∼IG(2p2−1,2p2ξi)
其中 ϵ 0 \epsilon_0 ϵ0 设置为一个较小的值,IG表示 inverse Gamma分布,其中 ξ = G ( ( y ^ − x ^ ) 2 ; p ) \xi = G((\hat y-\hat x)^2;p) ξ=G((y^−x^)2;p) 表示对残差平方图像用大小为p*p的高斯核进行卷积之后的结果。这里的x和y是形状为width * height的矩阵而不是一维展开。
关于IG分布确实有一些麻烦,但对整体结构的理解不会有太大影响,但是这里IG分布的构造确实有精巧之处,可以计算出,在这种参数设置下,逆伽马分布的均值就是 ξ i \xi_i ξi 也就是直接用噪声图和“近似的”干净图之差作为其分布的均值,并且p越大,卷积核越大,分布的方差就越小。从逆gama分布的图像也可以看出来,它的分布形状相当于高斯分布砍掉左侧的尾巴,这保证了方差恒正,更符合实际情况。
上面介绍了先验的情况,下面用变分的形式给出后验,我们的目标就是根据噪声图得到潜在的干净图,实际上就是求潜在干净图的后验。这个后验是用卷积网络来表示的:
数学的表示形式为
其中 W D W_D WD 表示上面的去噪网络的参数, W S W_S WS 表示下面的噪声参数估计网络的参数。
网络的结构比较容易理解,总之是直接将噪声图作为输入,两个网络分别输出同样大小的两个输出,一个表示潜在干净图的均值和方差,另一个表示噪声的两个参数,都是对每个像素点单独而言的。利用模型输出计算loss,其中涉及到的三项loss下面介绍。
这一部分的推导与EM算法的推导如出一辙,只有几个细微的地方有差别。我们训练网络要使用损失函数,EM算法实际上是最大化log边缘likelihood,在这里,也就是 l o g p ( y ∣ z , σ 2 ) log p(y|z,\sigma^2) logp(y∣z,σ2) 然后将其表示为:
其中的第二项是变分后验和真实后验的KL散度,真实的后验无法获得,只能通过一次次迭代逼近,第一项就是lower bound
具体推导在supp,也贴到这里:
然后继续处理lower bound得到:
需要注意的是,与一般的EM算法推导不同的是,这里隐变量有两个,分别是 z 和 σ \sigma σ ,这两个是相互独立的,所以可以拆开写到两项中。
进而对lower bound的三项分别进行计算,过程较为繁琐,尤其是涉及到逆伽马分布的期望,确实不易计算,supp给出了如下过程,利用结果即可:
(注:其中的 Ψ \Psi Ψ 函数代表digamma函数)
利用上面计算公式,即可利用网络的输出来算出log似然函数的下界,进而
利用优化算法训练网络即可。
本文的实验为了表现VDN的效果,利用了特殊的噪声生成方式:
对于训练图像,就使用简单的高斯随机噪声(a),对于测试图像,使用了多种形式的噪声 (b2)-(d2) ,目的是测试模型对不同于训练数据的噪声的效果。图中不同分布的噪声表示,对应各个像素点,取对应位置的噪声,使得整个图的噪声具有图中所示的不同分布。
不同算法在测试图表现如下:
VDN可以看作传统机器学习算法与神经网络结合的一个典型例子,这里主要使用神经网络来拟合了变分后验,其中涉及的,对边缘似然函数的理论下界的推导也属于EM算法推导的变形,具有一定的学习意义。