论文总结:Rethinking Reconstruction and Denoising in the Dark
CVPR 2025 文章
一、研究背景
1.1 RAW 和 RGB 的区别
RAW 图像是传感器直接捕获的原始数据,通常以 Bayer 阵列形式存储,未经任何 ISP 处理。每个像素仅记录单一颜色通道的强度值,保留了最原始的感光信息。
本文指出,相比于 RGB 域,RAW 域的处理在低光条件下具有显著优势:
- 保留未压缩的传感器数据:RAW 数据避免了 ISP 流水线中的不可逆失真,为重建与去噪提供了更丰富、更真实的信号基础。
- 避免噪声放大与伪影:RGB 图像在 ISP 过程中可能引入噪声放大、色彩失真与压缩伪影,而 RAW 数据则保持噪声的自然分布,便于建模与去除。
- 支持端到端优化:在 RAW 域中,去噪与重建可以在统一的信号空间中进行联合优化,避免任务间的信息断层与误差累积。
- 更适合深度学习模型:RAW 数据的线性特性与完整信息使得深度学习模型能够更有效地学习噪声分布、色彩映射与细节恢复之间的复杂关系。
[图片]
1.2 相关研究
目前解决 RAW 处理的有三种范式:
- 传统方法:直接通过 ISP 通道,纯数学计算,无法根据照片调整。在低光图像上会出现大量的噪点以及失真。这样生成的 RGB 图像再进行低照度处理,会固有地遭受图像信号处理 (ISP) 管道引起的不可逆失真,例如噪声放大和压缩伪影,这给学习和优化带来了额外的挑战。
- D or R 单任务方法:把去噪和重建当作两个不同的任务,但是该方法无法同时实现去噪和重建,往往忽略了这些任务之间的相互作用,从而产生残留噪声、颜色不正确等固有问题。
- D for R 多任务方法:把去噪当作重建的前提操作。这会出现一个问题:噪点去掉有利于颜色恢复,颜色信息也能帮助区分什么是噪点,它们的内部应该是相通的,忽略掉这种关系会导致训练结果不是最优,并且导致两个功能无法区分。经典的方法如 MCR 和 DNF。
- MCR:在近乎全黑的环境下,颜色信息已经极其微弱且不可信,不应执着于从一开始就采集有瑕疵的彩色信号。它首先提出一个算法将原始的、带拜耳滤镜的 RAW 数据,模拟重构成仿佛由一个没有拜耳滤镜的单色(灰度)传感器所捕获的数据用来获取结构信息,然后拿着学习到的结构信息注入到重建里面。
[图片]
- DNF:创新在于它显式地将重建任务分解为两个子问题,并让它们相互作用。它将网络分为两部分:去噪和重建。去噪是作为辅助网络,去噪模块生成了一个噪声分布先验,然后注入重建网络,整体实现的是用去噪指导重建。
[图片]
1.3 论文的创新方式
D for R 多任务策略。它整体有点像上边提到的 DNF,不过 DNF 更像一种总分总的结构,CANS 更像一种分总分的结构。它首先设计了一个类似知识库的模块,在这里面添加了色彩感知和纹理感知模块,用来学习图片中的色彩和纹理信息,然后把这些信息分到两个轻量的头上:去噪头和重建头,它们从知识库学习提取到的色彩信息和纹理信息进行处理。
二、模型架构
2.1 色彩和感知模块架构
[图片]
2.1.1 GCP 全局色度感知器
如图,它由归一化和 GCPA 组成,下面主要讲解一下 GCPA:
它首先经过 1x1 的卷积融合通道信息和 3x3 的深度卷积融合周围信息,并生成 Q、K、V。其中 Q、K 进行 pooling 池化,将 [C, H, W] 的特征图池化为 [C, H/s, W/s],降低了计算的复杂度的同时,聚合了色彩的信息,然后进行矩阵的乘法和 softmax 计算注意力权重,再与 V 相乘计算出来全局色彩上下文调制后的特征。他和普通的注意力计算不一样,就是图片最右侧 O((HW)^2) 降至 O(HW * (HW/s^2))。
为什么 GCP 能够实现只提取色彩特征而不提取纹理特征:
- 数据的输入:在 RAW 中,色彩与空间信息是'解耦'的:每个像素点只记录一种颜色(红、绿或蓝)的亮度。相邻像素记录的是不同颜色的信息。这种结构使得'颜色'信息天然分布在通道维度上,而'纹理'需要组合多个相邻的不同颜色像素才能形成。
- 池化的存在:池化会破坏纹理信息,让一块部分直接融合,所以就不会有纹理信息,但又能保存色彩信息。
- 损失函数:总损失 L_total = L_denoise + L_reconstruct。当提取色彩特征的时候会获得更好的提升,所以模型会将整个模块往色彩方面训练。
2.1.2 RDE 纹理细节提取器
它首先使用一个 7x7 的空洞卷积,获取全局感受野并且获得提取细节纹理,然后进行归一化,然后连接一个门控函数。门控函数进去之后把特征送入两条路线,一条线性变换一条非线性变换,最后提升重要部分。
7x7 深度可分离大核空洞卷积:
- 大核:提供了宽广的感受野,能够捕捉更大范围的上下文,这对于判断一个点是孤立噪声还是连续边缘的一部分至关重要。
- 空洞:在扩大感受野的同时,不增加参数量或丢失分辨率,保持了计算效率。
- 深度可分离:将空间滤波与通道混合分离,极大减少计算量。这一步初步聚合了跨区域的细节信息。
[图片]
2.2 全局结构
论文中并没有提到全局架构,只提了一下是由 U 形网络构成,然后根据代码把全局结构画了一下。
[图片]
U 形网络部分被称为 Backbone(骨干网络),它就相当于是专家库,另外两个任务头就从这里面获取相关知识进行学习处理。之所以要有这个专家库,是因为专家库里面有色彩信息和纹理信息,它对两个任务都有好处。
2.3 学习目标(损失计算)
[图片]
(1) 参数结构
- θ_b(主干参数):模型绝大部分的'大脑',负责从 RAW 输入 x 中提取统一特征空间。它是所有计算的核心。
- θ_m(重建头参数) 与 θ_n(去噪头参数):两个轻量的'专业工具'。它们以 θ_b 的输出作为输入。
(2) 优化目标
优化器同时最小化去噪损失(L_den)和重建损失(L_rec)。这是一个多目标优化问题。网络无法使两个损失都达到单独训练时的最小值,但可以通过调整 (θ_b, θ_m, θ_n) 来寻找一个最优解——即在此点上,降低任何一个损失都会导致另一个损失上升。
(3) '动态分配资源'的机制
资源分配不是由一个外部控制器完成的,而是通过反向传播的梯度流自动、隐式实现的。在反向传播时,L_den 和 L_rec 产生的梯度会汇聚到共享主干 θ_b。
- 如果当前批次数据噪声特别严重,L_den 的梯度会更强,迫使 θ_b 更侧重于学习有利于噪声分离的特征。
- 如果当前批次数据色彩失真严重,L_rec 的梯度会占主导,引导 θ_b 强化色彩感知能力。
2.4 CANS++
CANS++ 相当于在原来的 CANS 上两任务头之间用交叉注意力建立连接。它实际上就是拿骨干网络生成 K、V,再拿两个任务头生成他们独特的 Q,然后进行注意力计算,最后训练出两个任务头。它的设计主要是每一次循环练完的参数会更新骨干网络,骨干网络又能生成 KV 和他们再次联系,从而就能使两个任务头能够进行互相的联系,这个任务头能从骨干获取上一轮另一个任务头产生的信息。
论文中没有给出完整流程图,根据代码绘制的一份。
[图片]
它实际上就是比普通的 CANS 加了一个交叉联系。
三、模型结果
[图片]
[图片]
[图片]
[图片]
四、个人总结以及想法
这篇论文主要是提出了一个新范式,就是骨干 + 轻量化任务头。在最开始我一直不理解它跟端到端模型有什么区别,因为它一直在提自己比单任务串联好,后来参考了相关资料,说这个论文本质上是一个新思想,它依赖的是设计来提升模型,而之前的 Retinexformer 和 Restormer 更像是依赖一个模型然后黑箱计算,直接得到结果。
这篇论文本质上还是在主要训练 Backbone,无论是 CANS 还是 CANS++,它本质上就是训练出来一个更聪明、只是更全面的专家来帮助后边任务完成结果。所以当在论文中有提到去掉某一个任务头只执行单任务也可以得到很好的结果,因为骨干网络被训练的很好很完善。
对于这篇论文,我的想法有把 Restormer 里面直接用通道计算注意力会不会整体计算量更小,再结合该模型每个任务头可拆卸这一特点,有没有可能出来一个更轻量化的模型。同时 Retinex 里面把图片分为光照分量和反射分量,有点类似于我在上边提到的 MCR,不过我想训练好一个 Retinex 分离光照分量和反射分量,然后让后模型直接从反射分量学习模型结构,色彩感知 GCP 和光照分量结合,不过这样感觉整个网络计算量会很大很复杂。
同时我认为论文提出这个骨干网络和多任务的交叉注意力是个很好的地方,我们可以训练出一个足够全能的专家网络,让他进行一些更多更全面的任务,这在高级视觉任务里面挺常见,如目标检测分割,所以我认为这一类高级视觉任务的某些思想应该在低级视觉任务中会有很好的效果,不过目前没啥想法,或许以后会有。


