论文解读: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

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆