CVPR 2024图像处理技术全解析:去噪、增强、分割与恢复的新趋势

发布时间:2026/9/27 20:56:31
CVPR 2024图像处理技术全解析:去噪、增强、分割与恢复的新趋势 每年CVPR放榜之后我都习惯第一时间把图像去噪、图像增强、图像分割和图像恢复这几个方向的新论文拉出来过一遍。不是因为标题党而是这几个任务看着“传统”但每一年都在悄悄换打法。这一届尤其明显去噪不再只拼网络层数增强开始把Retinex和深度学习做深度绑定分割被交互式大模型搅了一轮恢复则几乎全员转向扩散模型。这篇文章不打算逐篇翻译论文而是把我在翻读和复现过程中的主线、套路和坑串一遍给准备入坑或做工程选型的朋友一个可以参考的索引。1. 图像去噪从“堆网络层数”到“显式模拟退化过程”1.1 真实噪声建模才是这两年去噪论文的核心议题前几年看去噪论文大家比的是谁的网络更深、感受野更大DnCNN、UNet、SwinIR一套套换着来。到了CVPR 2024最明显的变化是越来越多的工作不再把噪声简化成高斯白噪声而是老老实实回到传感器物理过程去建模。为什么会有这个转变因为高斯假设在真实场景里根本站不住脚。真实图像噪声通常由两大部分组成光子散粒噪声和读出噪声。散粒噪声服从泊松分布光越弱越明显读出噪声近似高斯分布跟传感器电路和ISO设定相关。两者叠加起来就是经典的泊松-高斯噪声模型。也就是说同一个画面在不同亮度区域噪声强度是不一样的。暗部噪声大亮部噪声小固定的高斯sigma根本描述不了这种空间变化。所以今年很多去噪工作的第一步是先做“噪声参数估计”让网络知道当前图像大概是什么退化程度再去做后续的去除。我用一个生活化类比来解释去噪就像医生开药你得先判断病情是轻感冒还是重肺炎。如果不问清噪声水平就一路卷积到底网络只能把所有图像都“平均”处理结果就是暗部没去干净、亮部被磨平。正因为如此“盲去噪”成了高频词盲的含义就是不知道噪声参数要靠网络自己估计。实操上复现这类模型时最麻烦的是数据。真实噪声图像对极难采集常见做法是用EMVA 1288标准标定传感器噪声参数再按泊松-高斯模型合成噪声。这个仿真过程直接决定模型能不能在真实照片上work。我踩过最大的坑是直接拿别人代码里的合成脚本用结果那个脚本把sigma固定成常数相当于又回到了高斯假设模型在真实夜景上效果很差。建议拿到开源代码后第一件事不是看网络结构而是看它的噪声生成器是怎么写的。1.2 自监督与扩散模型给去噪提供了两条新路线除了退化和噪参数建模这届去噪还有两条明显的新路线自监督去噪和扩散模型去噪。自监督去噪的代表是Noise2Noise和blind-spot网络这类思路。它们的核心观点是如果只有一张带噪图没有干净真值也能学。Noise2Noise需要两张同一场景不同噪声的图训练目标是从其中一张预测另一张网络只要学会“忽略随机噪声”就能保留信号。blind-spot则是把输入像素周围的信息拿来预测当前像素因为噪声是随机的周围像素推不出当前像素的噪声。这类方法最大价值在于医学影像、监控视频这些场景里你根本拿不到干净真值自监督几乎是唯一可行路线。扩散模型则是另一个方向。它通过反复加噪、去噪学习真实图像分布推理时从高斯噪声先验出发逐步恢复图像。今年的一些工作把噪声估计和扩散模型结合起来让模型在去噪的同时生成更自然的纹理。但扩散模型的毛病也很明显慢。跑一张512×512的图像如果不做采样加速可能需要十几秒甚至半分钟。工程落地时通常要搭配DDIM、DPM-Solver这类加速采样器或者做模型蒸馏。我的建议是如果任务是“尽可能恢复像素级准确度”自监督和传统CNN仍然很有竞争力如果任务是“让图像看起来自然重点关注纹理和感知质量”扩散模型更合适。两条路线不是替代关系更像是精度和自然度之间的权衡。1.3 去噪的终点不是PSNR而是下游任务有一类工作是我强烈建议工程师关注的把去噪和下游任务目标检测、OCR、人脸识别联合起来做。这类论文的思路很简单——去噪只是手段让机器能看清才是目的。单独的PSNR指标经常骗人。我试过用一个PSNR很高的去噪模型处理监控图像结果接下游行人检测时召回率反而下降了。原因也很简单PSNR优化的是像素平均误差网络宁可把纹理“磨平”来降低数值而检测器恰恰需要边缘和高频细节。你要真让检测器满意就得用检测损失去微调去噪网络让它在“保留判别信息”和“抑制噪声”之间找平衡。复现这类模型时有个细节特别容易翻车联合训练时检测头的学习率如果跟去噪主干一样大很容易把检测头带坏。我的做法是检测头用主干学习率的十分之一先冻结检测头单独训练去噪模块几个epoch再解冻一起微调。这样既保留了预训练检测模型的稳定性又能让去噪网络学到task-specific的表示。2. 图像增强Retinex换芯小波变换找到新位置2.1 经典Retinex的困惑与深度学习改造低照度增强这个方向今年出现大量“Retinex深度学习”的方案。Retinex理论本身不复杂它把图像看成光照分量和反射分量的乘积认为人眼感知的颜色取决于反射分量不受光照影响。传统算法通过估计光照图把光照除掉就得到“真实”的反射图像。但这一套在工程里很难直接用光照估计不准确会产生块状光晕反射图往往偏灰需要再调色高光区域又容易直接过曝。深度学习来了之后很多人不是抛弃Retinex而是把它当作一种“归纳偏置”塞进网络结构。比如一个分支专门估计照明图另一个分支恢复反射图中间加一些一致性约束。这样网络既不是纯黑盒又比传统算法灵活。今年进一步流行的做法是零参考增强训练时不依赖正常曝光GT对而是用一组非参考损失比如亮度有序性、颜色恒常性、曝光一致性来约束网络把暗图调亮而不过曝。我之前用Zero-DCE跑过一个低照度视频增强项目效果确实比直方图均衡自然但有一个通用问题增强后噪声也被放大。后来改成Retinex分解亮度增强去噪串联明显好很多。核心逻辑是把“增强”和“去噪”分开做别指望一个黑盒网络同时解决两件事。2.2 小波变换Python实现里的两个关键细节小波变换为什么会在图像增强里重新被提起因为它天然把图像分解成低频和高频低频代表亮度、结构高频代表边缘、噪声。你如果想做亮度增强只需要处理低频分量高频分量可以单独去噪或增强细节互不干扰。这一点比在空间域直接改像素干净得多。用Python做小波变换非常方便pywt库就够用import pywt import numpy as np # 做两层小波分解 coeffs pywt.wavedec2(img_gray, db3, level2) cA2, (cH2, cV2, cD2), (cH1, cV1, cD1) coeffs # 对低频做亮度拉伸 cA2 np.clip(cA2 * 1.2, 0, 255) # 对高频做软阈值去噪 threshold 5 for high_freq in [cH2, cV2, cD2, cH1, cV1, cD1]: high_freq[...] np.sign(high_freq) * np.maximum(np.abs(high_freq) - threshold, 0) # 重建 img_rec pywt.waverec2(coeffs, db3)这里有两点经验值得记一下。第一小波基不要随便选。Haar最简单但有明显的块状伪影自然图像推荐用db3、db4或者symlets系列它们紧支撑时频局部性好重建质量高。第二彩色图不要对R、G、B三个通道分别做小波增强否则很容易出现颜色伪影。正确做法是先转到YUV或YCrCb空间只对Y亮度通道做小波处理U、V通道只做简单的线性增益和饱和度调整。这样既保留了颜色关系又避免颜色失真。2.3 雾天/低照度增强系统的工程链路最近“基于Retinex算法的雾天/低照度图像增强复原系统”这类需求特别多我理解产品方真正需要的其实不只是一个算法而是一条完整链路。我在实际项目中通常按这个顺序搭输入分析算图像平均亮度、直方图分布判断是低照度、雾天还是正常图像。色彩空间转换把RGB转到YUV把亮度和色度分开。亮度增强低照度优先用Retinex类网络雾天优先用去雾模块暗通道先验或深度学习去雾。细节恢复与去噪对增强后的亮度通道做小波分解高频软阈值去噪低频继续做局部对比度拉伸。颜色校正白平衡、饱和度微调把灰蒙蒙的色调修正回来。后处理最后接一个CLAHE或者轻量gamma统一输出。这套链路的优点是把每个环节拆开方便定位问题。如果客户说图像偏色那多半是颜色校正没做好如果说噪点重就去调小波去噪的阈值。缺点是环节多延迟高实时性要求高的时候需要剪裁。做个简单对比你就知道怎么选型方案优点缺点直方图均衡快、简单、全局对比度提升明显容易过曝、色偏、噪声放大传统Retinex颜色恒常性较好光晕、参数敏感深度学习增强自然、细节恢复好需要数据、算力和调参小波Retinex组合细节保留好、抗噪多尺度参数多速度中等工程上我不太推荐把重型深度学习模型塞进实时链路除非用TensorRT或OpenVINO量化。离线处理则无所谓扩散模型也可以用。3. 图像分割UNet没退场提示范式与不确定性估计同时进场3.1 医学图像分割为什么UNet依然是首选骨架CVPR 2024的图像分割里医学图像分割占了很大比重而UNet依然是绕不开的骨架。乍一看很奇怪Transformer分割和SAM不是已经屠榜了吗但在医学这个小样本、标注成本极高的场景里UNet的归纳偏置太重要了。它通过跳跃连接把浅层细节和深层语义直接缝合只需要少量数据就能训练出一个可用的模型。我见过不少团队花了大力气把UNet编码器换成Swin Transformer最终效果反而更差。原因很直接Transformer在大型自然图像数据集上表现好但医学数据集经常只有几十上百例预训练权重要么不匹配域要么干脆收敛不动。这时候与其追新架构不如把nnUNet这套框架吃透。nnUNet的神奇之处在于把预处理、patch采样、训练策略、推理后处理都自动标准化了某种意义上它才是真正的SOTA。当然我并不是说UNet完全够用。对于器官分割、病灶分割等任务引入一些Transformer模块作为encoder的增强是可取的但前提是得保证预训练权重的domain接近最好在自然图像上预训练的权重基础上再做一些医学域的自监督预训练。3.2 从SAM到广告牌分割交互式与大模型蒸馏的落地思路图像分割的热词里出现了“广告牌图像分割系统”这其实是工业界一个典型场景户外广告牌检测与分割背景复杂、光照变化大、遮挡严重。原来做这类任务要标大量图训练一个专用分割模型。现在有了SAM可以先用SAM对少量标注数据做交互式标注快速生成一系列高质量mask再用这些mask作为伪标签蒸馏一个轻量分割模型。我实操下来这个流程是可行的。具体做法是拿十张左右基图片用SAM点击广告牌中心导出分割结果人工修正明显错误然后把这些mask当作ground truth去训练一个MobileNet-UNet。难点是SAM会偶尔多切出一些“像广告牌但不是广告牌”的区域因此蒸馏前要清洗伪标签比如用形态学面积过滤掉过小或过长宽比异常的连通域。同时这个场景还要重视不确定性估计。这里“蒙特卡罗方法图像分割”出现了并不是用蒙特卡罗做分割而是用蒙特卡罗Dropout来估计分割结果的不确定性。简单来说推理时打开Dropout对同一张图做多次前向统计每个像素的类别概率方差。方差大的像素就是模型没有把握的区域再配合一个高分辨率模型去复核这在户外广告牌这类纹理复杂场景里特别有用。3.3 边界损失、BP神经网络的“余热”分割的评价指标通常看mIoU但在医学任务里边界精度同样重要甚至比区域重叠更重要。比如对肿瘤边界判断不准直接影响手术规划。业界慢慢开始把Boundary Loss、Hausdorff距离损失引入训练让网络不只是追求区域重叠而是把边界对齐放进优化目标。这个问题我在实际项目中也有体会用纯Dice损失连出来的结果区域和真值重合度挺高但边缘总是多一圈或少一圈最后改成Dice边界距离损失联合训练边界明显干净了。至于BP神经网络做图像分割确实已经属于“余热”。严格来说BP网络只是多层感知机的学习算法你需要把图像切成一堆固定大小patch提取一堆手工特征再让BP网络做前景背景二分类。这种方法没有感受野概念无法利用上下文信息复杂场景根本打不过UNet。但它也不是一无是处当标注样本极少、任务又只是区分两类简单纹理时BP手工特征仍然是最容易部署的baseline。我会拿它当一个“地板模型”验证更复杂模型带来的增益是否值得额外算力。4. 图像恢复统一退化、扩散模型与评估标准的重新校准4.1 把去模糊、去雨、超分、去噪放进同一个框架图像恢复这个方向以前是各做各的超分一个模型、去雨一个模型、去模糊一个模型。现在越来越多的CVPR 2024工作开始尝试“一个框架吃多种退化”。背后的数学很直观这些任务都能写成一个退化观测方程y Hx n。H可以是模糊算子、下采样算子、雨线叠加、噪声污染n是噪声。既然本质都是“从退化图像推原图”那为什么不共用一套底层先验统一框架通常长这样输入退化图像先通过一个退化编码器提取“这是什么退化、退化程度多大”的嵌入表征再把这个表征送给主干网络让网络按不同退化类型动态调整处理策略。有的工作还会引入对比学习让不同退化类型的表征尽量分得开避免互相干扰。复现这类模型时有几个容易踩的坑。数据混合比例很关键如果训练集里超分样本占了80%去噪只占10%模型最终会严重偏科。我的经验是各任务样本量均衡或者用任务难度的自适应加权去噪这类“容易”的任务稍微降权没问题但别让它彻底消失。另外退化编码器的维度不宜过大否则很容易过拟合到某个退化类型上丢失泛化能力。4.2 扩散模型在恢复任务上的优势与代价今年图像恢复最绕不开的就是扩散模型。为什么扩散模型特别适合图像恢复因为恢复本身是个病态问题一张模糊/低分辨率的图可能对应无数张清晰原图。传统CNN用L1或L2损失去训练学到的是“所有可能原图的平均值”结果就是边缘模糊、纹理平均化。扩散模型学的是图像分布推理时在这个分布中采样能生成非常具体的细节主观上看更锐利、更自然。但扩散模型的代价我也要说清楚。第一是速度一张图需要几十次前向工程上经常要砍采样步骤、用蒸馏版本。第二是“幻觉”它能生成原图根本不存在的纹理这在医学、安防领域是很致命的。我做过一次真实场景超分模型把车牌号码的数字凭空“补”得多了几道笔画。人眼看着很清晰但其实是错的。所以在医疗或取证场景必须做额外的置信度判断。在实践中我更推荐一种混合方案先用CNN或Transformer做一次基础恢复得到一个主流正确的估计再用扩散模型做refine只修细节。这样既能获得扩散模型的自然纹理又能把幻觉风险控制在一定范围。很多今年录用的工作也走了类似路线不是简单端到端上扩散。4.3 PSNR、LPIPS与主观体验先搞清楚你要优化谁复现图像恢复论文指标是个大学问。PSNR和SSIM在像素域衡量距离计算快、用得久但与人眼感知的相关性很差。LPIPS是通过深度网络特征比较两张图的感知相似度更接近人的判断。FID则比较生成样本的分布距离通常用来衡量生成质量。我在反复对比后给你一个经验口径如果是压缩、超分这类偏保真度的任务PSNR、SSIM加LPIPS三者一起报。如果是去模糊、去雨这类视觉质量优先的任务LPIPS和主观评价更重要PSNR仅供参考。如果模型用到了扩散、GAN这类生成式目标必须加FID或用户研究否则只看像素指标会被误导。指标口径不统一的话论文之间根本没法比。比如LPIPS的backbone是AlexNet还是VGG结果完全不同FID计算时是否中心裁剪、压缩到多少分辨率也影响数值。所以我建议每个项目固定一套评估脚本统一插图范围、缩放方式、指标版本作为团队内部唯一标准。别今天用这个版本明天用那个版本最后对比结果全是噪声。5. 复现CVPR 2024图像处理方向论文的五个实操建议5.1 先抠训练细节再盯网络结构很多同学拿到论文先打开pipeline图恨不得把每个模块放大看。我反而建议先看“Implementation Details”和“Experiment Settings”。图像处理方向的论文最终效果的差异很多时候不在结构而在训练策略学习率计划、EMA、损失权重、增强策略、patch大小。我曾经复现一个增强网络照搬结构后怎么跑都差两个PP最后发现对方用了cosine learning rate和更强的随机裁剪而不是结构本身更优。建议的做法是用表格把所有关键配置抄到本地模型结构图反而可以往后放。这样一开始跑基线至少能在第一个星期内确认官方做法再谈改良。5.2 退化仿真与数据预处理多数效果差距的来源如果你复现去噪和恢复模型效果差距最大的来源几乎都是数据。不同合成退化的参数比如噪声sigma范围、模糊核大小、下采样方式bicubic还是lanczos以及训练/测试时是否统一随机种子都会让最终指标产生巨大波动。官方开源里通常有现成的退化脚本务必直接拿来用别自己另写一套。数据预处理也是一样。归一化范围是0到1还是-1到1有没有做crop和padding训练时有没有用Flip和Rotation这些都要跟官方一致。扩散模型对归一化尤其敏感输入范围不对采样速度和质量都会受影响。5.3 评估要成对看指标口径要统一图像处理方向的评估最怕“只报一个PSNR”。不同论文、不同预处理流程得出的指标没有可比性。你还要特别注意超分模型输入越低分辨率PSNR天然越高去噪模型只测小噪声数据数字会很漂亮。我觉得比较稳妥的做法是每次实验固定一套评估脚本记录每个测试样本的指标分布不要只存平均值。这样一旦某个方法在某些样本上崩了你能快速定位原因也能在写报告的时候拿出更有说服力的证据。固定随机种子和测试期间关闭数据增强是最基本的真别偷懒。5.4 算力有限时优先选可即插即用的模块大部分读者没有A100集群所以复现时别总想着端到端复现大扩散模型。我更推荐优先看那些“即插即用”的工作比如一个通道注意力模块、一个小波变换模块、一个Retinex约束项它们不改变整体架构插进已有模型里就能看到效果。这类模块的好处是训练成本低容易做消融。如果真要复现大模型先在小patch上跑通完整训练流程比如64×64输入确认数据、结构、loss都没问题再慢慢放大到128或256。不要一上来就用256训练扩散模型显存会教你做人。5.5 依赖、版本与随机种子复现时最容易翻车的三件事我至少被PyTorch版本坑过三次。同一个模型文件在PyTorch 1.12和2.0上就是不一个效果。尤其是一些Transformer算子底层实现变了结果甚至能差两个dB。所以复现的第一步永远是锁定环境固定Python版本、PyTorch版本、CUDA版本、依赖库版本最好用Docker或conda导出环境文件让别人也一样环境跑。随机种子也要固定但别以为固定了就能完全一致。CUDNN的benchmark模式、多GPU分布式训练都会引入不确定性。建议训练时设torch.backends.cudnn.deterministic True虽然会拖慢速度但换来可重复性是值得的。测试时必须固定seed和关闭dropout否则指标会跳动。6. 个人体会看似分散的方向底层共同逻辑是“先验不确定性”6.1 先验无处不在翻完这一轮CVPR 2024图像处理方向的论文我最大的体会是所有看似不同的方向底层都在干同一件事把“图像先验”做进模型里。去噪用物理噪声模型当先验增强用Retinex分解当先验分割用UNet结构和边界损失当先验恢复用扩散模型学习的数据分布当先验。谁的先验更接近真实图像谁的效果就更自然。6.2 不确定性估计会越来越重要今年让我印象深刻的另一个信号是很多论文不只是给一个预测结果还给出这个预测的置信度。MC Dropout、深度集成、贝叶斯近似这些不确定性估计方法正在从技术储备变成实际需求。尤其当模型被用于医疗、自动驾驶、广告牌检测这些高风险场景时模型“不知道自己不知道”是很危险的。做工程选型时我会优先考虑能否加上不确定度输出。6.3 技术选型先想清楚场景约束最后分享一点个人经验别把CVPR论文当成工程方案。复现新模型之前先问三个问题我有没有训练数据我的算力够不够我的场景是保精度还是保自然度如果答案不清晰那UNetRetinex小波这套经典组合也许比看似高级的扩散模型更稳。技术永远是在约束条件下的最优解而不是排行榜上的最优解。