论文解读:Unprocessing Images for Learned Raw Denoising

Unprocessing Images for Learned Raw Denoisinghtml

今天介绍谷歌发表在 2019 CVPR 上的一篇文章,Unprocessing Images for Learned Raw Denoising,这篇文章主要为了解决数据构造的问题,简单来讲,就是将 ISP 的流程逆过来,从 sRGB 图像变到 RAW 图,而后进行模型训练,从而达到降噪的过程。git

咱们都知道,基于机器学习的图像处理技术,好比降噪,超分等,对数据的分布比较敏感,若是测试数据和训练数据的分布相似,那么效果会很理想,反之,若是测试数据的分布和训练数据差异比较大,那么效果就会出现差别,因此,如今基于深度学习的图像处理技术,对数据的构造是很是重要的一个环节,一个模型好很差,不少时候,依赖于训练数据的质量。文章也指出,不少 paper 因为只训练了理想的数据,或者说和实际环境误差很大的数据,每每致使这样的模型,遇到实际场景的时候,不能很好的 work。github

这篇文章主要讲去噪,在深度学习成为愈来愈主流的今天,这篇文章也不能免俗,不过这篇文章的重点不在于讲如何构造网络模型,这篇文章的重点在于介绍如何构造符合实际环境的训练数据,以前的方法,都是直接对 RGB 图像进行加噪,而后训练模型,这篇文章,不只仅对 RGB 图像进行噪声模拟,而是对全 ISP 通路进行了分析,而后将 RGB 图像,沿着逆 ISP 通路,直接生成 RAW 图,文章做者指出,这样构造的训练数据,更加贴近真实场景拍摄的数据,利用这些数据训练的模型,会获得更好的降噪效果。web

RAW Image Pipeline

如今的手机或者单反,都力图在图像中将真实世界还原地和人眼感知的同样,为了达到这个目的,须要将 sensor 获取的 RAW 图,进行一系列的变化处理,这个过程通常称为 ISP,这篇文章也是对 ISP 中的每一个流程进行分析,而且力图找到每一个变换的逆变换,若是从 RAW 图到最终的 RGB 图的每一步变换都已知,那么理论上来讲,应该存在一个相应的逆变换,能将 RGB 图变换回 RAW 图, 这样就达到了将 RGB 图构形成相应的 RAW 图,从而进行训练网络训练的目的。算法

Shot and Read Noise

首先,降噪通常来讲在 ISP 中都是比较重要的一个环节,降噪的前提是对噪声模型要有一个准确的估计,虽说图像中的噪声模型通常是比较复杂,可是在 RAW 域中,噪声的分布仍是有规律可循的,噪声在 RAW 域中主要有两大类,一类是 shot noise, 一类是 read noise,shot noise 主要和环境光照有关,read noise 主要和 sensor 中的电路系统有关,shot noise 通常是知足泊松分布的,而 read noise 通常是知足高斯分布的,这篇文章将这两种噪声结合在一块儿,而且假设 RAW 图的像素值知足以下的分布:数据库

y N ( μ = x , σ 2 = λ r e a d + λ s h o t x ) y \sim \mathcal{N}(\mu = x, \sigma^2 = \lambda_{read} + \lambda_{shot}x) 网络

其中,参数 λ r e a d , λ s h o t \lambda_{read}, \lambda_{shot} 由 sensor 的数字增益和模拟增益决定,对于给定的数字增益 g d g_d 和模拟增益 g a g_a ,以及固定的 sensor 读出电路的方差 σ r 2 \sigma_{r}^2 ,咱们能够获得以下的关系:app

λ r e a d = g d 2 σ r 2 λ s h o t = g d g a \lambda_{read} = g_{d}^2 \sigma_{r}^2 \quad \lambda_{shot} = g_d g_a 机器学习

数字增益和模拟增益,通常是由 ISO 以及用户选择的曝光参数来肯定的。svg

构造数据的时候,须要选择参数来模拟噪声,这篇文章将参数 λ r e a d , λ s h o t \lambda_{read}, \lambda_{shot} 写成某种分布的形式,

log ( λ s h o t ) U ( a = log ( 0.0001 ) , b = log ( 0.012 ) ) log ( λ r e a d ) log ( λ s h o t ) N ( μ = 2.18 log ( λ s h o t ) + 1.2 , σ = 2.6 ) \log(\lambda_{shot}) \sim \mathcal{U}(a=\log(0.0001), b=\log(0.012)) \\ \log(\lambda_{read}) | \log(\lambda_{shot}) \sim \mathcal{N} (\mu = 2.18 \log(\lambda_{shot}) + 1.2, \sigma = 2.6 )

从上面的分布中,抽取参数,进而构造噪声。

Demosaicing

ISP 流程中,去马赛克也是一个重要环节,由于绝大多数的 sensor 都是 Bayer 模式的,因此每一个像素在 RAW 图上只有一个通道,通常来讲,是按照 R, G, G, B 的方式排列,为了获得彩色图像,须要对 RAW 图进行去马赛克的操做,因此马赛克的逆操做,就是一个降采样的过程,这个相对来讲比较简单,就是对每一个通道进行降采样。

Digital Gain

ISP 中,会有一个数字增益,对总体的图像亮度乘以一个 gain 值,以提高图像的总体亮度,这个增益在不一样的相机 ISP 中,值会不同,很难找到普适规律,文章做者认为能够寻找一个全局的 scale 值来代替这个 gain 值,假设图像的像素值服从以下的指数分布:

p ( x ; λ ) = λ e λ x p(x; \lambda) = \lambda e^{-\lambda x}

λ \lambda 的最大似然估计,就等于样本均值的倒数,文章统计了一些数据集,定下了一个 gain 值为 1.25,那么其倒数为 0.8,不过为了体现必定的鲁棒性,文章没有用一个定值,而是利用了一个高斯分布,均值为 0.8, 方差为 0.1,对这个分布进行采样,最后获得的 scale 值范围在 [ 0.5 , 1.1 ] [0.5, 1.1] 之间。

White Balance

白平衡也是 ISP 流程中比较重要的一个环节,sensor 记录的是环境的照度,人类视觉通过漫长的进化,对环境的光线感知有一套本身的适应系统,为了让最后的成像能符合人眼的感知,通常须要作一个白平衡校订,简单来讲就是 R,G,B 三个通道分别乘以不一样的 gain 值,不过通常 G 通道 gain 值 为 1,因此主要是看R,B 通道的概念值,通常相机系统的白平衡也是很难估计的,这为构造数据也带来了调整,不过文章提到所用的数据库记录了白平衡的 gain 值,文章用到的数据库,其 R 通道的gain值范围是 [ 1.9 , 2.4 ] [1.9, 2.4] ,B 通道的 gain 值是 [ 1.5 , 1.9 ] [1.5, 1.9] , 构造数据的时候,从 digital gain 和白平衡 gain 值进行采样,将二者的乘积做为逆向变换的系数,不过做者发现,这样设置的参数通常乘积都小于 1,这样致使构造的数据都是不饱和的,不符合实际,文章做者构造了一个函数,以模拟饱和截断,

α ( x ) = ( max ( x t , 0 ) 1 t ) 2 f ( x , g ) = max ( x g , ( 1 α ( x ) ) ( x g ) + α ( x ) x ) \alpha(x) = \left( \frac{\max(x-t, 0)}{1-t} \right)^2 \\ f(x, g) = \max \left( \frac{x}{g}, (1-\alpha(x))(\frac{x}{g}) + \alpha(x)x \right)

其中 t = 0.9 t=0.9 ,从上式能够看到,当 $ x \leq t $ 的时候, f ( x , g ) = x g f(x, g) = \frac{x}{g} ,当 x = 1 x = 1 的时候, f ( 1 , g ) = 1 f(1, g) = 1

Color Correction

色彩校订,就是将 RAW-RGB 变成 sRGB 的过程,通常都是经过一个 3 × 3 3 \times 3 的矩阵来实现的,文章也是基于数据库提供的 CCM 来实现的。

Gamma Compression

gamma 校订,就是一个非线性的变换的过程,由于人眼视觉对暗区的对比度变化比较敏感,因此通常会有一个对暗区像素提高的过程,文章里用到的 gamma 变换是一个标准的变换式:

Γ ( x ) = max ( x , ϵ ) 1 / 2.2 \Gamma(x) = \max(x, \epsilon )^{1/2.2}

那么构造训练数据,就是应用一个反变换:

Γ 1 ( y ) = max ( y , ϵ ) 2.2 \Gamma^{-1}(y) = \max(y, \epsilon)^{2.2}

Tone Mapping

tone mapping 算法,就是进一步调整图像的对比度,通常 ISP 里面,都会用到比较复杂的 tone mapping 算法,这篇文章作了一个简单 tone mapping 算法,其逆变换也会相对简单:

S ( x ) = 3 x 2 2 x 3 S 1 ( y ) = 1 2 sin ( sin 1 ( 1 2 y ) 3 ) S(x) = 3x^2 - 2x^3 \\ S^{-1}(y) = \frac{1}{2} - \sin \left( \frac{\sin^{-1}(1 - 2y)}{3} \right)

到这一步的时候,ISP 里面的主要步骤都已经作了,那么构造数据的时候,就是将上面的过程反过来走一遍,以下图所示:

在这里插入图片描述
文章指出,因为 RAW 图最终要通过 ISP 获得 sRGB 图像,因此 RAW 图通过降噪以后,也会通过 ISP,最终才和 ground truth 的 sRGB 进行比较,简单来讲,这个模型不是在 RAW 域进行比较的,而是在 sRGB 域进行 loss 比较的。

RAW 域的降噪模型是典型的 U 型网络结构,不过输入除了 RAW 图的四个通道以外,还带有噪声估计的图,以下所示:

在这里插入图片描述

文章里面提到,用到的是 MIR Flickr extended dataset,预留了 5% 作 validation,5% 作 test,剩下的都用来训练了,为了减小其它的 artifacts,文章对图像先作了一个高斯模糊加 2X 的下采样,而后再进行数据的构造。

最后做者也在 Github 上发布了本身的仿真代码,有兴趣的能够去看看:

https://github.com/google-research/google-research/tree/master/unprocessing