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
如今的手机或者单反,都力图在图像中将真实世界还原地和人眼感知的同样,为了达到这个目的,须要将 sensor 获取的 RAW 图,进行一系列的变化处理,这个过程通常称为 ISP,这篇文章也是对 ISP 中的每一个流程进行分析,而且力图找到每一个变换的逆变换,若是从 RAW 图到最终的 RGB 图的每一步变换都已知,那么理论上来讲,应该存在一个相应的逆变换,能将 RGB 图变换回 RAW 图, 这样就达到了将 RGB 图构形成相应的 RAW 图,从而进行训练网络训练的目的。算法
首先,降噪通常来讲在 ISP 中都是比较重要的一个环节,降噪的前提是对噪声模型要有一个准确的估计,虽说图像中的噪声模型通常是比较复杂,可是在 RAW 域中,噪声的分布仍是有规律可循的,噪声在 RAW 域中主要有两大类,一类是 shot noise, 一类是 read noise,shot noise 主要和环境光照有关,read noise 主要和 sensor 中的电路系统有关,shot noise 通常是知足泊松分布的,而 read noise 通常是知足高斯分布的,这篇文章将这两种噪声结合在一块儿,而且假设 RAW 图的像素值知足以下的分布:数据库
网络
其中,参数 由 sensor 的数字增益和模拟增益决定,对于给定的数字增益 和模拟增益 ,以及固定的 sensor 读出电路的方差 ,咱们能够获得以下的关系:app
机器学习
数字增益和模拟增益,通常是由 ISO 以及用户选择的曝光参数来肯定的。svg
构造数据的时候,须要选择参数来模拟噪声,这篇文章将参数 写成某种分布的形式,
从上面的分布中,抽取参数,进而构造噪声。
ISP 流程中,去马赛克也是一个重要环节,由于绝大多数的 sensor 都是 Bayer 模式的,因此每一个像素在 RAW 图上只有一个通道,通常来讲,是按照 R, G, G, B 的方式排列,为了获得彩色图像,须要对 RAW 图进行去马赛克的操做,因此马赛克的逆操做,就是一个降采样的过程,这个相对来讲比较简单,就是对每一个通道进行降采样。
ISP 中,会有一个数字增益,对总体的图像亮度乘以一个 gain 值,以提高图像的总体亮度,这个增益在不一样的相机 ISP 中,值会不同,很难找到普适规律,文章做者认为能够寻找一个全局的 scale 值来代替这个 gain 值,假设图像的像素值服从以下的指数分布:
对 的最大似然估计,就等于样本均值的倒数,文章统计了一些数据集,定下了一个 gain 值为 1.25,那么其倒数为 0.8,不过为了体现必定的鲁棒性,文章没有用一个定值,而是利用了一个高斯分布,均值为 0.8, 方差为 0.1,对这个分布进行采样,最后获得的 scale 值范围在 之间。
白平衡也是 ISP 流程中比较重要的一个环节,sensor 记录的是环境的照度,人类视觉通过漫长的进化,对环境的光线感知有一套本身的适应系统,为了让最后的成像能符合人眼的感知,通常须要作一个白平衡校订,简单来讲就是 R,G,B 三个通道分别乘以不一样的 gain 值,不过通常 G 通道 gain 值 为 1,因此主要是看R,B 通道的概念值,通常相机系统的白平衡也是很难估计的,这为构造数据也带来了调整,不过文章提到所用的数据库记录了白平衡的 gain 值,文章用到的数据库,其 R 通道的gain值范围是 ,B 通道的 gain 值是 , 构造数据的时候,从 digital gain 和白平衡 gain 值进行采样,将二者的乘积做为逆向变换的系数,不过做者发现,这样设置的参数通常乘积都小于 1,这样致使构造的数据都是不饱和的,不符合实际,文章做者构造了一个函数,以模拟饱和截断,
其中 ,从上式能够看到,当 $ x \leq t $ 的时候, ,当 的时候,
色彩校订,就是将 RAW-RGB 变成 sRGB 的过程,通常都是经过一个 的矩阵来实现的,文章也是基于数据库提供的 CCM 来实现的。
gamma 校订,就是一个非线性的变换的过程,由于人眼视觉对暗区的对比度变化比较敏感,因此通常会有一个对暗区像素提高的过程,文章里用到的 gamma 变换是一个标准的变换式:
那么构造训练数据,就是应用一个反变换:
tone mapping 算法,就是进一步调整图像的对比度,通常 ISP 里面,都会用到比较复杂的 tone mapping 算法,这篇文章作了一个简单 tone mapping 算法,其逆变换也会相对简单:
到这一步的时候,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