编辑:Happy
首发:AIWalker
Paper:https://arxiv.org/abs/2103.15061
code:https://github.com/yzxing87/Invertible-ISP
本文是港科大陈启峰老师团队在ISP方面的工作,已中CVPR2021。针对传统ISP中的信息损失且难以从sRGB进行RAW数据重建的问题,我们设计了一种可逆图像信号处理方案(InvISP),它对RGB渲染与RAW重建进行联合优化。受益于所提方案的可逆性,我们可以直接从sRGB数据重建真实RAW数据且不会造成额外内存开销。所提方法对于raw数据压缩、retouch以及HDR等任务均有非常好的辅助作用。
对于图像编辑与计算机视觉而言,未经处理的RAW数据是一种具有高度价值的图像格式。然而,由于RAW数据会导致保存的文件过大,用户往往只能获得处理并压缩后的sRGB图像。
为填补这一空缺,我们设计了一种可逆ISP(Invertible Image Signal Processing)方案,它可以进行sRGB图像的渲染,同时可以复原近乎完美的RAW数据。受益于所提框架的可逆性,我们可以从sRGB数据重建真实RAW数据,而非合成,且不会导致任何额外内存开销。与此同时,我们还集成了可谓分JPEG压缩模拟器,这使得所提框架可以直接从JPEG图像重建RAW数据。
在两个数码相机上的定量与定性实验表明:相比其他,本文所提方法可以得到具有更高质量的sRGB图像与重建RAW数据。
上图给出了本文所设计的可逆ISP流程示意图以及潜在应用场景。本文的主要贡献有这样几点:
在正式介绍本文方案之前,我们先来看一下传统ISP对于RAW数据重建存在的挑战。现代数码相机通过ISP(它由一系列操作构成,包含白平衡、去马赛克、降噪、颜色空间转换、色调映射等)将RAW数据渲染为人眼可感知的RGB图像。传统ISP中的每一步都需要针对特定相机进行微调,这使得逆转传统ISP极具挑战。
接下来,我们将对传统ISP中存在信息损失的模块进行分析,并针对对性的进行重设计ISP使其成为一种端到端可逆ISP。
我们的目标是:设计一种可逆、双摄函数 f : X → Y f: \mathcal{X} \rightarrow \mathcal{Y} f:X→Y用于RAW数据空间与sRGB数据空间之间的映射。我们假设RAW数据空间为 X \mathcal{X} X,sRGB数据空间为 Y \mathcal{Y} Y。为达到上述目的,经典神经网络需要两个独立网络近似 X → Y \mathcal{X} \rightarrow \mathcal{Y} X→Y与 Y → X \mathcal{Y} \rightarrow \mathcal{X} Y→X,这会导致不精确的双摄映射。
我们从另一个角度出发,采用仿射耦合层(affine coupling layers)使得单个网络可以进行双向映射。也就是说:我们采用多个可逆双摄函数 { f i } i = 0 k \{f_i\}_{i=0}^k {fi}i=0k构成了所提可逆ISP。对于观测数据x,我们可以得到目标数据y:
y = f 0 ∘ f 1 ∘ f 2 ∘ ⋯ ∘ f k ( x ) x = f k − 1 ∘ f k − 1 − 1 ∘ ⋯ ∘ f 0 − 1 ( y ) y = f_0 \circ f_1 \circ f_2 \circ \cdots \circ f_k(x) \\ x = f_k^{-1} \circ f_{k-1}^{-1} \circ \cdots \circ f_0^{-1}(y) y=f0∘f1∘f2∘⋯∘fk(x)x=fk−1∘fk−1−1∘⋯∘f0−1(y)
每个 f i f_i fi通过仿射耦合层实现,对于每个仿射耦合层,给定D维输入 m \mathbf{m} m与 d < D d
n 1 : d = m 1 : d n d + 1 : D = m d + 1 : D ⊙ e x p ( s ( m 1 : d ) ) + t ( m 1 : d ) \mathbf{n}_{1:d} = \mathbf{m}_{1:d} \\ \mathbf{n}_{d+1:D} = \mathbf{m}_{d+1:D} \odot exp(s(\mathbf{m}_{1:d})) + t(\mathbf{m}_{1:d}) n1:d=m1:dnd+1:D=md+1:D⊙exp(s(m1:d))+t(m1:d)
其中, s , t s, t s,t表示 R d ↦ D D − d R^d \mapsto D^{D-d} Rd↦DD−d的尺度与变换函数。由于两者没必要可逆,故而我们通过神经网络进行实现。正如已有研究提到:耦合层遗留某些输入通道保持不变会限制了整个架构的表达能力。为缓解该问题,我们通过如下方式对耦合层增强:
n 1 : d = m 1 : d + r ( m d + 1 : D ) \mathbf{n}_{1:d} = \mathbf{m}_{1:d} + r(\mathbf{m}_{d+1:D}) n1:d=m1:d+r(md+1:D)
逆转操作可以轻易得到,描述如下:
m d + 1 : D = ( n d + 1 : D − t ( n 1 : d ) ) ⊙ e x p ( − s ( n 1 : d ) ) m 1 : d = n 1 : d − r ( m d + 1 : D ) \mathbf{m}_{d+1:D} = (\mathbf{n}_{d+1:D} - t(\mathbf{n}_{1:d})) \odot exp(-s(\mathbf{n}_{1:d})) \\ \mathbf{m}_{1:d} = \mathbf{n}_{1:d} - r(\mathbf{m}_{d+1:D}) md+1:D=(nd+1:D−t(n1:d))⊙exp(−s(n1:d))m1:d=n1:d−r(md+1:D)
接下来,我们采用可逆 1 × 1 1\times 1 1×1卷积作为可学习置换函数为下一个仿射耦合层逆转通道顺序。
对于本文的image-to-image转换任务,我们直接学习RAW-to-RGB映射,无需对隐分布进行显示建模以稳定训练。考虑到可逆神经网络的输入与输出分辨率应当相同,我们采用去马赛克后RAW数据的双线性插值作为输入,这不会破坏RAW数据质量。
InvISP的前向过程生成sRGB图像,反向过程则旨在重建RAW数据。我们采用 L 1 L_1 L1损失进行双向训练:
L = ∥ f ( x ) − y ∥ 1 + λ ∥ f − 1 ( y ) − x ∥ 1 L = \|f(x) - y\|_1 + \lambda \| f^{-1}(y) - x \|_1 L=∥f(x)−y∥1+λ∥f−1(y)−x∥1
我们的目标是:训练一个鲁棒的可逆ISP,它可以容忍JPEG压缩导致的失真并重建精确的RAW数据。然而JPEG压缩算法是不可微分的,无法直接集成到前述所提端到端方案中。因此,我们提出一种可微分JPEG模拟器以使得所提方案与JPEG压缩鲁棒。
由于JPEG中的熵编码是无损的且位于量化之后,因此我们直接跳过该步骤仅仅模拟色彩空间变换、DCT以及量化三个步骤。为模拟DCT过程,我们计算DCT系数并将输入拆分为 8 × 8 8\times 8 8×8块,每个块乘以DCT系数得到DCT特征图。在JPEG压缩中,所提DCT图由量化表拆分并round到整数类型。由于round函数不可微分,故而我们基于傅里叶变换设计了一种可微分版round函数,描述如下:
Q ( I ) = I − 1 π ∑ k = 1 K ( − 1 ) k + 1 k s i n ( 2 π k I ) Q(I) = I - \frac{1}{\pi} \sum_{k=1}^K \frac{(-1)^{k+1}}{k} sin(2\pi kI) Q(I)=I−π1k=1∑Kk(−1)k+1sin(2πkI)
随着K的增大,上述模拟函数会逐渐逼近真实round函数,但运行时间也会同样提升。上图给出了K=10时的round过程示意图。
数据集方面:我们从MIT-Adobe FiveK中收集Canon EOS5D(777对)与Nikon D700(590对)子集制作训练与测试数据。我们对每个相机的数据按照 85 : 15 85:15 85:15比例进行划分;采用LibRaw库处理Raw数据得到sRGB图像;JPEG压缩方面,质量设为90.
上表从定量角度对比了所提方法与UPI、CycleISP等方法的性能对比。可以看到:
上图从定性角度对比了所提方法与UPI、CycleISP的可视化效果对比。可以看到:本文所提InvISP可以更好的重建RAW数据,甚至在高光区域都能很好重建。
上图从定性角度对比了所提方法与InvGrayscale、UNet的可视化效果。可以看到:InvGrayscale难以在RGB与RAW之间取得比较好的均衡;而Unet可以取得比较的RGB结果,但在RAW重建方面表现较差;本文所提方法可以重建高质量的RAW数据且不会牺牲RGB性能。
上表给出了所提方法在RAW数据压缩方面的性能对比。可以看到:相比有损DNG,所提方法可以进行更高比例的压缩。
上图给出了本文所提方法在retouch与HDR方面的应用效果。从中可以看到: