图像降噪之Cycle ISP: Real Image Restoration via Improved Data Synthesis

1. 简介

谷歌去年发表了一篇文章:Unprocessing Images for Learned Raw Denoising,是关于如何构造逼近真实的数据来进行降噪的,在去年的文章里,研究者们主要是模拟了 ISP 中从 RAW 图到 sRGB 的过程,然后将 ISP 的过程逆转过来,从 sRGB 到 RAW,然后再在 RAW 域上添加噪声,从而构造出符合真实场景的噪声数据。

今年谷歌又发表了一篇类似的文章,还是关于如何构造真实的仿真数据来做图像恢复,看来谷歌在构造数据这块已经做了很多的研究了,今年这篇文章叫 Cycle ISP, 核心思想还是基于 ISP 流程,去年的文章是一步一步通过各种算法模块,将 ISP 中的降噪,白平衡,gamma 变换,tone mapping 等串起来,今年的这篇文章直接用网络进行了端到端的模拟,不过与一般的端到端方式不同的是,这篇文章采样了一个循环的方式,从 sRGB 到 RAW 图,然后再从 RAW 图回到 sRGB, 所以这个框架称为 Cycle ISP, 有循环轮回的感觉。

2. 网络结构

在这里插入图片描述
整个CycleISP框架包括四个部分:

  1. RGB2RAW:将sRGB图转为RAW图;
  2. RAW2RGB:将RAW图转为sRGB图;
  3. Color Correction:用于辅助的颜色恢复网络,提供准确的颜色注意机制(explicit color attention)用于RAW2RGB正确地恢复RGB图;
  4. Noise Injection:在训练CycleISP时设置为OFF,在需要生成噪声数据时设置为ON。

CycleISP的训练分为两步:

  1. 分别单独训练RGB2RAW和RAW2RGB;
  2. 将RGB2RAW和RAW2RGB一起进行joint finetune。

2.1 RGB2RAW 分支

RGB2RAW分支的目的在于要“反转/逆向”相机的ISP效果,而且优点在于这一网络不需要任何的相机参数。

这个模块,完成 RGB2RAW 的变换,给定一张 RGB 图像, I r g b ∈ R H × W × 3 \mathbf{I}_{rgb} \in R^{H \times W \times 3} IrgbRH×W×3,先借助常规的卷积网络,得到多个 feature map,然后再利用多个 recursive residual groups (RRGs) 进一步进行特征提取,整个过程可以表示为:

T 0 ​ = M 0 ( I r g b ​ ) T_0 ​ =M_0 (I rgb ​ ) T0=M0(Irgb)
T d ​ = R R G N ​ ( . . . R R G 1 ( T 0 ) ) T_d ​ =RRG_N ​ (...RRG_1 (T_0)) Td=RRGN(...RRG1(T0))

后面再接一个卷积层,得到 3 个通道的 feature map,最后再做一个 Bayer 模式的采样,得到输出的 RAW 图:

I r a w ​ = f b a y e r ​ ( M 1 ​ ( T d ) ) I_{raw} ​ =f_{bayer} ​ (M_1 ​ (T_d)) Iraw=fbayer(M1(Td))

这个模块,主要是利用 L 1 L_1 L1 loss 来进行训练:
在这里插入图片描述
I r a w \mathbf{I}_{raw} Iraw 表示 RAW 图的 ground truth。

2.2 RAW2RGB 分支

RAW2RGB 分支,实现 RAW 图到 RAG 的转换,这个分支,首先将 RAW 图拆成 RGGB 四个通道,每个通道的分辨率都下降了一倍,从 H × W H \times W H×W 变成了 H 2 × W 2 × 4 \frac{H}{2} \times \frac{W}{2} \times 4 2H×2W×4,然后类似 RGB2RAW, 先用一个卷积层将 4 个通道变成多个 feature map,然后再经过多个 RRG 模块,得到多个等大的 feature map,整个过程如下所示:
T d ′ = R R G K − 1 ​ ( . . . R R G 1 ​ ( M 2 ​ ( P a c k ( I r a w ​ ) ) ) ) T_d ′=RRG_{K−1} ​ (...RRG_1 ​ (M_2 ​ (Pack(I _{raw} ​ )))) Td=RRGK1(...RRG1(M2(Pack(Iraw))))
不过这里需要注意的一点是,这里的 I r a w \mathbf{I}_{raw} Iraw 是相机原始的 RAW 图,不是 RGB2RAW 的输出,因为这两个 branch 是分开独立训练的。

2.3 颜色矫正模块

除了上面两个主要的分支,Cycle ISP 还引入了一个颜色校正模块,因为网络是基于很多不同的相机数据来训练的,而不同相机的颜色校正系数一般是不同的,所以为了统一这些数据,Cycle ISP 引入了一个颜色校正模块,这个模块是嵌入在 RAW2RGB 分支里的,color correction unit 的输入是 RGB 图像,然后经过简单的卷积以及两个 RRG,得到多个 feature map:

T c o l o r ​ = σ ( M 4 ​ ( R R G 2 ​ ( R R G 1 ​ ( M 3 ​ ( K ∗ I r g b ​ ) ) ) ) ) T_{color} ​ =σ(M_4 ​ (RRG_2 ​ (RRG_1 ​ (M_3 ​ (K∗I_{rgb} ​ ))))) Tcolor=σ(M4(RRG2(RRG1(M3(KIrgb)))))

这里* 表示卷积,K 表示高斯核,文章里用的高斯核的标准差是 12,这会带来非常强的模糊效果,从而将细节都基本去除了,只留下颜色, T c o l o r T_{color} Tcolor和前面得到的 T d ′ T_{d'} Td 做一个 residual 的操作:
其中 ⊗ \otimes 表示 Hadamard product。

最后再利用一个卷积层,以及一个上采用操作,得到三个通道的 RGB 图像:

I r g b = M u p ​ ( M 5 ​ ( R R G K ​ ( T a t t e n ​ ) ) ) I^{rgb}=M_{up} ​ (M_5 ​ (RRG_K ​ (T_{atten} ​ ))) Irgb=Mup(M5(RRGK(Tatten)))

这个分支也是利用 L 1 L_1 L1 Loss 来训练:
图片名称

2.4 RRG: Recursive Residual Group

Cycle ISP 除了常规的卷积层, 一个特别之处在于其使用了很多的 RRG 模块,每个 RRG 模块包含了 P 个 dual attention blocks (DAB) 模块,DAB 模块,通过不同的 attention 机制对特征进行选择:channel attention 和 spatial attention,整个过程可以表示为:
T D A B ​ = T i n ​ + M c ​ ( [ C A ( U ) , S A ( U ) ] ) T_{DAB} ​ =T_{in} ​ +M_c ​ ([CA(U),SA(U)]) TDAB=Tin+Mc([CA(U),SA(U)])

其中, U ∈ R H × W × C U\in R^{H \times W \times C } URH×W×C, M c M_c Mc表示 1 × 1 1 \times 1 1×1 的卷积,具体的框架示意图如下所示:
在这里插入图片描述

2.5 CycleISP联合训练

最后对两部分进行联合训练,其中RGB2RAW分支可以接受到来自RAW2RGB分支loss的梯度,更加有利于最终sRGB图像的重建。

产生噪声时,生成RAW部分的带噪数据,直接在最后的RAW上加入shot and read噪声即可。对于sRGB部分生成带噪图像,这里使用SIDD数据集finetune CycleISP,这里噪声通过真实带噪RAW减去真实干净的RAW产生,加在合成的RAW上,该部分如下图所示:

3. 合成真实噪声数据集

一旦 CycleISP 训练好,那么 CycleISP 可以很方便地构造训练数据对,并且可以同时构造 RAW 域数据或者 RGB 数据,输入一张 RGB 图,由 RGB2RAW 分支,可以得到一张 RAW 图,然后对该 RAW 图添加噪声,这样可以得到 R A W c l e a n R A W_{c l e a n} RAWclean, R A W n o i s y R A W_{n o i s y} RAWnoisy 训练数据对。

同样的,根据添加噪声的 RAW 图,由 RAW2RGB 分支,可以得到添加了噪声的 RGB 图,这样就构造了 s R G B c l e a n s R G B_{c l e a n} sRGBclean, s R G B n o i s y s R G B_{n o i s y} sRGBnoisy的训练数据对。

4. 测试

最后的测试结果如下所示:
在这里插入图片描述

5. 最后

猜你喜欢

转载自blog.csdn.net/weixin_45250844/article/details/110004942