034、从合成到真实:Real-ESRGAN的高阶退化模型与盲超分实战

📅 2026/7/3 9:42:30
034、从合成到真实:Real-ESRGAN的高阶退化模型与盲超分实战
034、从合成到真实Real-ESRGAN的高阶退化模型与盲超分实战一、从一次真实调试说起去年帮一个安防客户做监控视频增强他们提供的低分辨率图像里有压缩噪声、运动模糊、传感器噪声甚至还有雨滴痕迹。我第一反应是拿ESRGAN直接上结果输出图像虽然纹理清晰了但噪声被放大成了伪影模糊区域出现了奇怪的振铃。客户看了一眼说“这还不如不处理”。那一刻我意识到传统超分模型在“干净”的合成数据上表现再好到了真实场景也是白搭。真实世界的退化过程远比双三次下采样复杂——压缩、模糊、噪声、传感器响应、甚至大气扰动这些因素叠加在一起构成了一个高阶退化空间。Real-ESRGAN正是为了解决这个问题而生的。二、高阶退化模型别把退化想简单了传统超分模型通常假设低分辨率图像是通过一个简单的下采样过程得到的比如LR (HR ⊗ k) ↓s n其中k是模糊核↓s是下采样n是噪声。这个模型太理想了。真实场景中退化往往是多个过程的组合先有传感器噪声再有光学模糊然后经过压缩编码最后还可能被传输过程中的丢包影响。Real-ESRGAN的高阶退化模型把退化过程拆成了两个阶段第一阶段模糊 噪声 下采样第二阶段压缩 噪声 下采样这里踩过坑很多人以为两个阶段是顺序执行的其实它们是随机组合的。每个阶段内部的模糊核、噪声类型、压缩参数都是随机采样的。这样做的目的是覆盖尽可能多的真实退化模式。具体实现时模糊核从各向同性高斯核、各向异性高斯核、广义高斯核中随机选择。噪声包括高斯噪声、泊松噪声、以及它们的混合。压缩则模拟JPEG压缩的块效应。别这样写不要把所有退化参数都固定死比如模糊核大小固定为7x7噪声标准差固定为0.05。这样生成的训练数据太单一模型学不到泛化能力。应该让每个参数在一个范围内随机采样。三、Real-ESRGAN的网络结构不是简单的ESRGAN换皮很多人以为Real-ESRGAN就是把ESRGAN的训练数据换成更复杂的退化模型然后重新训练。这是误解。Real-ESRGAN在生成器和判别器上都做了针对性改进。生成器方面保留了RRDBResidual-in-Residual Dense Block的基本结构但做了两个关键改动在RRDB内部加入了像素级特征调制Pixel-level Feature Modulation让网络能够根据输入图像的退化程度自适应调整特征响应。这个机制类似于SFTSpatial Feature Transform但更轻量。去掉了批量归一化BN层。原因很简单BN在训练时依赖batch统计量而真实场景中单张图像的退化模式可能和训练batch的统计分布不一致。这里踩过坑——我一开始保留了BN结果在测试时发现输出图像的色彩分布不稳定去掉BN后问题解决。判别器方面采用了U-Net结构的判别器而不是传统的PatchGAN。U-Net判别器能够输出像素级的真伪概率图这样生成器可以更精细地优化局部纹理。别这样写不要用全局判别器它只关注整体图像是否真实对局部细节的监督不够。四、训练策略那些容易忽略的细节Real-ESRGAN的训练分为两个阶段第一阶段只用L1损失和感知损失训练生成器不涉及对抗训练。这一步的目的是让网络先学会基本的超分能力避免对抗训练初期的不稳定性。我一般训练50k个迭代。第二阶段加入对抗损失和GAN损失同时使用判别器。这里有个关键点——对抗损失的权重不能太大否则生成器会过度优化纹理细节导致伪影。我通常把对抗损失权重设为0.1感知损失权重设为1.0。训练数据生成时退化参数的采样范围需要精心设计。比如模糊核大小在3x3到23x23之间随机噪声标准差在0到0.2之间随机。这里踩过坑一开始我把模糊核范围设得太大最大到41x41结果模型学到的模糊核过于平滑丢失了高频细节。五、实战用Real-ESRGAN处理真实监控图像假设我们有一段监控视频帧率低、分辨率只有320x240而且有明显的压缩噪声和运动模糊。直接上Real-ESRGAN的预训练模型效果已经不错但针对这个场景还能进一步优化。第一步分析退化模式。观察几帧图像发现压缩噪声是块状的运动模糊是水平方向的。这说明JPEG压缩和水平运动模糊是主要的退化因素。第二步调整退化参数。在训练数据生成时把模糊核的采样偏向水平方向压缩质量因子设低一些比如30-50。别这样写不要把所有退化参数都调成固定值应该保持随机性只是调整概率分布。第三步微调模型。用目标场景的少量真实低分辨率图像不需要对应的高分辨率图像进行微调。这里用到了Real-ESRGAN的“无监督微调”技巧——只使用低分辨率图像通过自监督损失如循环一致性损失来适应目标域。第四步后处理。输出图像可能会有轻微的过锐化可以用一个轻量的高斯滤波器做平滑或者用CLAHE做对比度增强。六、个人经验性建议不要迷信预训练模型。Real-ESRGAN的官方预训练模型在通用场景下表现不错但针对特定退化模式如老照片的划痕、监控视频的压缩噪声微调是必须的。微调时用少量真实数据就能看到明显提升。退化模型的复杂度要适中。太简单的退化模型比如只有模糊和噪声会让模型在真实场景中失效太复杂的退化模型比如加入几十种退化会让训练不稳定模型学不到有效特征。我通常用5-8种退化类型每种类型内部参数随机。注意计算资源。Real-ESRGAN的生成器有16个RRDB参数量约16M在1080p图像上推理需要几秒。如果对实时性有要求可以考虑用轻量版本如Real-ESRGAN-Lite或者用ONNX Runtime加速。评估指标要选对。PSNR和SSIM在真实场景中往往和主观感受不一致。我建议用NIQE、BRISQUE等无参考图像质量评估指标或者直接做用户调研。有一次我优化模型后PSNR下降了0.3dB但用户反馈图像更清晰了。别忘了处理边界效应。Real-ESRGAN在图像边界处容易出现伪影因为卷积操作在边界处缺乏足够的上下文信息。我通常会在推理前对图像做镜像填充mirror padding推理后再裁剪掉填充部分。最后说一句超分重建不是万能的。如果输入图像的分辨率太低比如低于64x64或者退化太严重比如被严重压缩成马赛克任何模型都很难恢复出有意义的细节。这时候要考虑的是图像修复inpainting或生成式方法而不是超分。