论文解读:Unprocessing Images for Learned Raw Denoising

2023-12-05 11:32

本文主要是介绍论文解读:Unprocessing Images for Learned Raw Denoising,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unprocessing Images for Learned Raw Denoising

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

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

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

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) yN(μ=x,σ2=λread+λshotx)

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

λ 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 λread=gd2σr2λshot=gdga

数字增益和模拟增益,一般是由 ISO 以及用户选择的曝光参数来确定的。

构造数据的时候,需要选择参数来模拟噪声,这篇文章将参数 λ r e a d , λ s h o t \lambda_{read}, \lambda_{shot} λread,λ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 ) log(λshot)U(a=log(0.0001),b=log(0.012))log(λread)log(λshot)N(μ=2.18log(λshot)+1.2,σ=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} p(x;λ)=λeλx

λ \lambda λ 的最大似然估计,就等于样本均值的倒数,文章统计了一些数据集,定下了一个 gain 值为 1.25,那么其倒数为 0.8,不过为了体现一定的鲁棒性,文章没有用一个定值,而是利用了一个高斯分布,均值为 0.8, 方差为 0.1,对这个分布进行采样,最后得到的 scale 值范围在 [ 0.5 , 1.1 ] [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] [1.9,2.4],B 通道的 gain 值是 [ 1.5 , 1.9 ] [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) α(x)=(1tmax(xt,0))2f(x,g)=max(gx,(1α(x))(gx)+α(x)x)

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

Color Correction

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

Gamma Compression

gamma 校正,就是一个非线性的变换的过程,因为人眼视觉对暗区的对比度变化比较敏感,所以一般会有一个对暗区像素提升的过程,文章里用到的 gamma 变换是一个标准的变换式:

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

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

Γ − 1 ( y ) = max ⁡ ( y , ϵ ) 2.2 \Gamma^{-1}(y) = \max(y, \epsilon)^{2.2} Γ1(y)=max(y,ϵ)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) S(x)=3x22x3S1(y)=21sin(3sin1(12y))

到这一步的时候,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

这篇关于论文解读:Unprocessing Images for Learned Raw Denoising的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457391

相关文章

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super