传统与AI融合:视频去噪的权衡之术
一、引言
在视频处理和编辑领域,去噪是提升画质的关键步骤。本文将带您探索一种创新方法——RFCVD(Robust, Fast, and Controllable Video Denoiser),它巧妙地结合了传统算法与深度学习的优势,实现高效、稳定且可控的视频去噪。
相关参考资料如下:
[1]. RFCVD论文地址
[2]. RFCVD在线演示
二、研究背景
专业视频编辑不仅追求高质量去噪效果,还要求处理快速以避免打断工作流,同时希望去噪算法具有可控性(有时保留一定噪声,反而提升视觉效果或有利于过渡平滑)。传统方法虽快速稳定,但需人工调参且依赖专业经验。而深度学习方法去噪能力更强,因此基于深度学习的视频去噪已成为主流研究方向,但仍存在以下几个方面不足:
- 泛化能力差:训练数据与真实数据的存在域差异,真实视频噪声更为复杂,现有模型难以应对未见过的噪声模式。
- 计算效率低:多数方法需逐帧处理,重复分析噪声,存在计算冗余,处理效率不高。
- 缺乏可控性:无法灵活调整去噪强度以适应视频创作的需求。
当下主流思路要么用复杂方法来监督模型,要么用复杂流程来模拟噪声,要么设计不易过拟合的策略,或者多手段结合使用。
而作者另辟蹊径,提出了一种神经网络+传统降噪算法相结合的方法,优势互补,较好地兼顾了降噪质量、处理速度和效果可控性。与纯NN(neural network)的方案架构对比如下图所示。
一句话概括本方案:将传统去噪流程转为可微分形式,用NN模型来动态预测最优参数,将参数配置给经典去噪算法,实现降噪处理。
文章中与多种NN算法对比,RFCVD的降噪效果和运行效率均为领先。
三、技术细节
视频去噪本质上可分为两步:分析噪声和去除噪声。
而作者认为视频里的噪声形态并非时刻在变,同时处理会使得每帧都在重复运行噪声分析过程,存在计算冗余。因此,作者采用了先分析后去除的两步式处理过程,具体方案如下图所示。
3.1 Noise Profiling(噪声分析)
噪声分析部分相对简单,即根据锚帧(anchor frame)数据,用超网络(hypernetwork)来预测去噪器的参数noise profile θ \theta θ。(也就是图中绿色虚线块部分)
其中Hypernetworks是一种通过一个网络(称为超网络)生成另一个网络权重的技术。这种动态生成目标网络参数的方式,正好契合了作者的想法。超网络仅需定期分析一次锚帧,其结果可作为该时段视频的噪声参数,避免了逐帧重复分析噪声。
💡如何选择“Hypernetworks”?
作者认为,需要理解图像内容才能更好地区分噪声和细节,超网络得包含low-level图像处理和high-level语义分析的混合能力。因此,采用了预训练的ConvNeXt作为Backbone B加上一个随机初始化的MLP,并通过NPA实现稳定训练。且表示该Backbone的作用非常重要。
💡为什么要接“MLP”?
引入MLP 的作用是将 ConvNeXt 提取的特征映射到目标网络所需的权重参数(即噪声参数
θ
θ
θ),同时不用再训练ConvNeXt了,只需微调MLP即可。
💡为什么要用“NPA”?
NPA (Non-Proportional Parametrization) 是一种用于稳定超网络训练的技术。其主要思路就是将目标参数分解为两部分:
- 初始权重 θ 0 θ^0 θ0:是固定或可学习的初始参数,通常是从预训练目标模型中提取。
- 残差 Δ θ Δθ Δθ:是由超网络动态生成的权重调整量。
目标网络的最终权重可以表示为: ** θ = θ 0 + Δ θ θ=θ^0+Δθ θ=θ0+Δθ。**这样超网络只需学习 Δ θ Δθ Δθ 就行,由于 Δ θ Δθ Δθ 的幅度较小(相对于 θ 0 θ^0 θ0),使得超网络的训练更加平稳,避免了直接预测大规模权重时可能出现的剧烈波动,能够更好地收敛,提高模型的鲁棒性和泛化性能。
💡锚帧怎么选?
作者希望这个选择是无关紧要的,也就是任意一帧都可以。为了达到这个目的,本方案始终选择视频的第一帧作为锚帧,然后使用一致性损失来约束,使得锚帧预测结果 **
Δ
θ
Δθ
Δθ和其他任意相邻帧的预测结果
Δ
θ
i
Δθ_i
Δθi**是一致的。
L cstsy = ∥ Δ θ − Δ θ i ∥ 2 \mathcal{L}_{\text {cstsy }}=\left\|\Delta \theta-\Delta \theta_{i}\right\|_{2} Lcstsy =∥Δθ−Δθi∥2
3.2 Denosing the Video(噪声去除)
本文的去噪器采用了维纳滤波器(时域)和双边拉普拉斯金字塔滤波器(空域),其关键参数也就是时域去噪参数 σ 2 σ^2 σ2和空域去噪参数( σ d σ_d σd , σ r σ_r σr) 。
💡
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ)的作用是什么?
理论上,超网络可以直接预测那几个噪声参数,但亮区和暗区、边缘和平坦的处理强度肯定要有差异。于是作者引入了一个小型神经网络
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ)来预测这种空间差异性,相当于为每个pixel生成了一组去噪参数(
σ
2
σ^2
σ2,
σ
d
σ_d
σd ,
σ
r
σ_r
σr)。
💡为什么不直接用超网络生成pixel级的参数?
因为noise profile可以认为相对固定,无需实时分析。但视频内容、运动物体亮度和边缘是动态变化的,需要逐帧分析。所以上一步的超网络其实生成的是
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ)的权重系数。
💡
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ)的输入输出
首先利用目标帧的前两帧和后两帧进行多帧对齐,作者采用了SpyNet来计算光流(用1/4的原始分辨率),然后基于光流信息做多帧对齐。对齐后的多帧数据送给
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ),同时输入多帧数据的梯度和对应的掩码图,梯度由Sobel滤波计算得到,而掩码图则是注明对齐后哪些部分是有效像素区。最终
P
(
⋅
;
θ
)
P(⋅;θ)
P(⋅;θ)同时输出一个二维时域去噪参数map和两个二维空域去噪参数map(均为原始分辨率)。
💡去噪过程
具体去噪过程也可分为两步:
- 利用时域去噪map和多帧对齐数据,对目标帧做维纳滤波处理,得到时域去噪后的目标帧。
- 对时域去噪后的目标帧做双边拉普拉斯金字塔滤波,进行空域去噪,得到最终去噪结果。
为了提高可控性,两步去噪操作都是亮度和色度通道分开做的,这样总共有六个参数可以控制。作者尝试对单个参数加简单的权重系数做调整,发现效果挺明显,因此就定了六个调参控件。
3.3 Augmentation Pipeline
数据集制作部分,作者采用了典型的有监督数据制作方式,对高质量无噪数据添加各种退化。并发现时域压缩退化很重要(也就是H.264这类编码操作),使得噪声在时间上具有了相关性。
实际操作:无噪数据选自REDS dataset,加上不同水平的white Gaussian噪声,然后用H.264做编解码。
作者表明该方案效果很好,实验中也重训了其他对比模型,都在CRVD benchmark上取得了相比原预训练参数更好的结果。(测试图中带了后标记的为重训版本)
3.4 实现细节
除了预训练的ConvNeXt,其他部分网络结构较为简单,没有特殊设计,可看原文或者自己搭都行。输入采用了512x512的patch。
损失函数如下,包括了时域重构损失和空域重构损失,还需加上之前提到的参数一致性损失。
L r e c = ∥ I T − I G T ∥ 2 + ∑ l = 1 3 ∥ I l S T − I l G T ∥ 2 \mathcal{L}_{rec} = \lVert I^{\mathrm{T}} - I^{\mathrm{GT}} \rVert_{2} + \sum_{l = 1}^{3} \lVert I_{l}^{\mathrm{ST}} - I_{l}^{\mathrm{GT}} \rVert_{2} Lrec=∥IT−IGT∥2+l=1∑3∥IlST−IlGT∥2
L t o t a l = L r e c + L cstsy \mathcal{L}_{total} = \mathcal{L}_{rec} + \mathcal{L}_{\text {cstsy }} Ltotal=Lrec+Lcstsy
其中 I T I^{\mathrm{T}} IT为时域去噪结果, I l S T I_{l}^{\mathrm{ST}} IlST为金字塔空域去噪结果,共三层。
四、实验论证
4.1 定量实验
针对真实和合成这两个类型的数据来测试评估。
- 真实数据采用了CRVD benchmark,用ISP算法将raw转成了sRGB;
- 合成数据采用了REDS的验证样本,用两种方式做退化,与训练阶段的退化类型不同。(用于验证去噪模型对于数据域差异的适应性)
指标用了PSNR,SSIM和LPIPS。(说实话,这些客观指标仅供参考。对于实际应用任务而言价值不是很大)
运行帧率方面采用了一块3090GPU的运行结果来对比。直接上结果!
- 实验表明,本方案定量指标基本都是最佳,且运行速度比第二名快4倍。(原因归结为采用了经典降噪技术,过拟合风险低,有助于处理未见过的噪声模式)
- 本方案提出的数据制作思路有助于提升其他模型的视频去噪能力,重训后指标均有提升。
4.2 定性实验
作者联系了一些创意制作的专业人士,他们分享了部分去噪困难的视频素材。文中针对这些素材做了对比测试,效果下图所示。
作者也给出了在线演示地址,感兴趣的朋友可以去感受下实际效果,详细对比各方案的优劣势。
博主认为RFCVD去噪效果是不错的,没有局部瑕疵或处理不均匀问题,但边缘和纹理损失也同样明显,高饱和度下色噪去除能力也相对有限。另外感觉对比实验可以再全面一些,比如跟经典算法NLM、BM3D的对比,看看是否在去噪和保边缘保细节上有优势。
4.3 消融实验
这部分主要论证了参数一致性损失,空间变化,梯度输入和掩码输入,backbone B和NPA的必要性。
从消融实验结果上看,backbone B和考虑空间变化的策略对结果相对更重要一些。
4.4 局限性
最后作者也给出了本研究的局限性
- 本方案的效果并非极限,根据应用数据微调后,能进一步改进。
- 在有噪声先验的情况下,深度学习方案均能取得比本方案更好的结果,如果配置了已知的noise profile,运行效率也能更快。
- 当前主流的推理模式对于网络参数动态化的支持度不够,都是以参数固定化模式实现推理的,这样更容易做加速。
五、总结
最后做一下回顾和总结
作者认为在现今以ML为主流技术的时代,传统去噪技术仍非常重要,具有鲁棒性、快速性和可控制性这三方面优势。于是提出了AI+传统的融合性方案,即用模型估计参数,传统算法实现去噪。
可以就记住以下两点,可能会对大家在去噪领域的学习研究或开发工作有些帮助和启发。
- 提出了高效去噪框架,将噪声分析和去噪分离,避免反复计算noise profile。
- 提出了简单有效的退化pipeline,保证了噪声是时间相关的。可用于其他模型上的重训,能够有一定改进作用。
六、思考
关于方案:
- 整体方案是有一定创新性的。但这种AI+传统的处理范式并非首创,几年前就有类似思路,例如《Learning Controllable ISP for Image Enhancement》。
- 目前经典算法在效率与可控性上确实具有不可替代性,很多端侧应用仍以传统算法为主,但效果上限确实不如NN方案。在需要权衡效果和效率的情况下,这种联合思路确实是一种不错的过渡方案。
关于噪声:
- 作者在局限性上提到了噪声先验问题,RGB图像数据经过ISP和Codec之后的噪声模式确实多样,因此很难有好的先验。但在RAW域上,仅有Sensor噪声,其模式相对简单,有条件的话推荐优先在RAW域上做去噪,这样更合理,效果更佳。
关于网络结构:
- 超网络预训练部分的网络结构应该很有多可选性,并非仅限ConvNeXt,不过文中未给出其他结构的对比结果。
感谢阅读,欢迎留言或私信,一起探讨和交流。
如需转载本文,请注明作者及文章来源 (附上原文链接),并保留此段版权声明。