本文主要是介绍旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
论文:ECCV 2020
代码:https://github.com/MegEngine/PMRID
文章目录
- 1. Motivation
- 2. Contribution
- 3. Methods
- 3.1 噪声建模&参数估计
- 3.2 k-Sigma变换
- 3.3 移动端友好的网络结构
- 4. Experiments
- 5. Comments
1. Motivation
业内周知,基于深度学习的去噪算法在效果上已经甩传统算法几条街了,但是由于模型计算量太大和设备算力不够等因素导致落地困难。为了解决上述问题,旷视的这篇论文提出了一个轻量级的、高效的神经网络去噪模型,能够在移动设备上流畅运行,并且能够获取高质量的去噪结果。
2. Contribution
- 提出了一种噪声估计和构造合成数据用于训练传感器特定的去噪神经网络的系统方法;
- 提出了一种新颖的k-Sigma变换,将不同ISO下的噪声图像映射到ISO不变的信号-噪声空间。在该空间中能够训练一个单一的小网络来处理具有不同噪声水平的图像,而不是针对每个ISO单独训练一个小网络或者训练一个能够覆盖所有ISO的大网络;
- 提出了一种用于高效去噪的移动端友好的网络结构。
3. Methods
3.1 噪声建模&参数估计
在噪声建模部分,作者首先回顾了入射光子到数字信号的转换过程,该过程包含多个阶段,每个阶段都会引入特定的噪声。
考虑一个没有噪声的理想系统,光子到数字信号的转换可以由一个简单的线性模型表示: x ∗ = g α μ ∗ (1) x^*=g\alpha\mu^*\tag{1} x∗=gαμ∗(1)其中, μ ∗ \mu^* μ∗为探测器接收到的期望光子数,即不考虑光的量子性质; α \alpha α为量子效率,其定义为光电探测器等设备将其受光表面接收到的光子转换为电子-空穴对的百分比,即量子效率等于光生电子除以入射光子数,通常用QE(quantum efficiency)表示; g g g为模拟增益。
考虑各个阶段引入噪声的情况下,转换过程如下 x = g ( α μ + n d ) + n r (2) x=g(\alpha\mu+n_d)+n_r\tag{2} x=g(αμ+nd)+nr(2) μ \mu μ为探测器实际接收到的光子数,服从泊松分布: μ ∼ P ( μ ∗ ) (3) \mu\sim\mathcal{P}(\mu^*)\tag{3} μ∼P(μ∗)(3)另外,根据Poisson-Gaussion噪声模型,可以假设 n d ∼ N ( 0 , σ d 2 ) n_d\sim\mathcal{N}(0, \sigma_d^2) nd∼N(0,σd2), n r ∼ N ( 0 , σ r 2 ) n_r\sim\mathcal{N}(0, \sigma_r^2) nr∼N(0,σr2)
结合公式 (1)~(3),有: x ∼ ( g α ) P ( x ∗ g α ) + N ( 0 , g 2 σ d 2 + σ r 2 ) (4) x\sim(g\alpha)\mathcal{P}(\frac{x^*}{g\alpha})+\mathcal{N}(0,g^2\sigma_d^2+\sigma_r^2)\tag{4} x∼(gα)P(gαx∗)+N(0,g2σd2+σr2)(4)
形式上与Poisson-Gaussion噪声模型是一致的。令 k = g α k=g\alpha k=gα, σ 2 = g 2 σ d 2 + σ r 2 \sigma^2=g^2\sigma_d^2+\sigma_r^2 σ2=g2σd2+σr2,则有: x ∼ k P ( x ∗ k ) + N ( 0 , σ 2 ) (5) x\sim k\mathcal{P}(\frac{x^*}{k})+\mathcal{N}(0,\sigma^2)\tag{5} x∼kP(kx∗)+N(0,σ2)(5)可以看到, k k k和 σ 2 \sigma^2 σ2都与模拟增益 g g g有关,即都是由ISO决定的。
建立的噪声模型需要估计参数 k k k和 σ 2 \sigma^2 σ2 ,这里采用的是经典的光子转移曲线,即均值-方差曲线:
论文中通过采集多张灰阶卡的方式计算均值和方差:
Reno-10x在不同ISO设置下 k k k和 σ 2 \sigma^2 σ2参数标定的结果:
获取ISO- k k k和ISO- σ 2 \sigma^2 σ2的关系后,可以很容易地计算出任何ISO设置下的噪声参数,因此合成噪声数据时可选的ISO是连续而非离散的。
3.2 k-Sigma变换
在实际应用中,相机会根据场景照度自动调整ISO,因此在训练去噪网络时需要考虑不同的噪声水平。通常会训练单个网络来覆盖宽泛的ISO,这对网络的学习能力有一定的要求,需要一个大网络才能hold住。为了让小网络具备与大网络相当的去噪能力,作者提出了k-Sigma变换,将网络的输入噪声图像与ISO解耦,降低映射复杂度。
作者这里定义了一个k-Sigma变换,经过变换后网络的输入(即带噪声图像)和输出(即干净图像)之间的映射仅由高斯分布即可表示,并且与ISO无关,对于网络来说拟合难度大大降低。
3.3 移动端友好的网络结构
ISO独立去噪pipline:原始噪声图像先进行k-sigma变换,输入网络中去噪,输出再做一个逆变换得到最终的去噪图像。在训练阶段,计算逆变换后的去噪图像与无噪声图像的MAE作为loss。
作者也设计了一个轻量级的网络,为了降低计算量,只在输入和输出阶段使用正常卷积,其他层都使用深度可分离卷积。
4. Experiments
训练集的构造方式:基于SID的干净图像,从建立的噪声模型中采样噪声,加在干净图像上得到噪声图像。
训练设置:随机裁剪1024x1024的patch,使用BayerAug进行随机翻转,然后打包成512x512x4,随机调整亮度和对比度。
从实验结果中可以看到,基于k-sigma变换的方法在不同ISO下都表现良好。
5. Comments
亮点:通过k-sigma变换降低数据映射复杂度,小网络的去噪效果就能媲美在普通数据上训练的大网络
局限:k-sigma变换依赖于Poisson-Gaussion噪声模型,低光环境下大概率不适用。
这篇关于旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!