【免费下载链接】SCUNet-color-real-gan-fp32
盲降噪(Blind Denoising) 是指不需要你告诉它“噪点有多强”的智能降噪技术。SCUNet-color-real-gan-fp32 就是一个专为 Apple Silicon 打造的盲降噪模型——SCUNet 真实噪声去噪的对抗训练(real-gan)变体,MLX fp32 精度,17,946,072 参数(约 71.8 MB)。你不需要估计噪声水平 σ,也没有降噪力度旋钮,一次前向传播,零配置,就能对真实照片完成去噪。
🤔 为什么传统去噪模型需要“噪声参数”?
真实照片的噪声,既不均匀、也难以测量:
- 同一张图,不同 ISO 噪声强度完全不同;
- 不同厂商、不同传感器的噪声分布特性各不相同;
- Bayer 插值、机内锐化还会混入非高斯伪影。
而依赖参数的降噪模型,恰恰卡在这一步:
| 模型 | 噪声参数处理方式 | 现实照片中的问题 |
|---|---|---|
| DRUNet | 需要把噪声水平 σ 作为模型输入 | 还得先"猜准"σ,猜错就翻车 |
| NAFNet / Restormer / FFTformer | 把退化方式硬编码进权重 | 换一种传感器就泛化吃紧 |
| SCUNet | 不接收任何噪声参数 | 一次前向传播,无从调错 |
README.md 中一句话点破了要害:真实照片的噪声水平从没有人测量过——没有 σ 可估,自然也不存在"调参调错"的风险。
🔍 SCUNet 如何做到"盲"?随机退化训练
SCUNet(Practical Blind Denoising via Swin-Conv-UNet and Data Synthesis,Zhang et al.)的核心思路:
- 随机退化训练——训练时不断合成各种强度、各种类型的噪声,让网络被迫学会"对所有噪声都管用"的去噪方法,而不是针对某个固定噪声;
- Swin-Conv-UNet 架构——
ConvTransBlock把通道拆成卷积路径与移位窗口注意力路径再融合; - 推理时一次前向传播直接出干净图。
于是 σ 估计、力度旋钮、传感器标定,全都不需要了。这也是为什么 MLX 端的 SCUNetRestorePackage 直接声明 supportsStrength: false——"没有旋钮"就是盲降噪的契约。
🧩 架构彩蛋:窗口注意力让分块处理"几乎免费"
SCUNet 的注意力严格局限在 8×8 小窗口内(W / SW 交替),这意味着大照片可以分块处理,几乎不损失精度。README.md 给出的实测(512² 图、256 分块、64 重叠,对比整图参考):
| 重叠量 | PSNR(对比整图参考) | 接缝/内部梯度比 |
|---|---|---|
| 0 | 58.32 dB | 1.08× |
| 64 | 71.60 dB | 1.00× |
梯度比 1.00× 意味着块边界在统计上与普通图像内容无法区分——大照片也能轻松跑。唯一的注意事项:分块几何必须 64 对齐,否则窗口相位在相邻块间错位,会留下羽化都救不掉的接缝。(全局注意力的 Restormer 可就没有这么好运了。)
📊 实测:在真实传感器噪声上,盲降噪到底行不行?
作者在 NIND 数据集(CC0,DSLR 级相机)上做了严格实测:5 场景 × 4 档 ISO,锁定快门补偿曝光,768² 中心裁剪,以 ISO 100 为参考(数据见 README.md):
| 模型 | ISO 1600 | ISO 6400 | ISO 25600 |
|---|---|---|---|
| 未处理原图 | 34.87 | 29.90 | 23.91 |
| SCUNet real-psnr | 36.39(+1.52) | 34.95(+5.06) | 32.28(+8.38) |
| Restormer realDenoise | 36.38(+1.51) | 34.78(+4.89) | 31.58(+7.67) |
| SCUNet real-gan(本模型) | 34.89(+0.02) | 33.60(+3.70) | 31.40(+7.49) |
| DRUNet(逐行最优 σ) | 37.36(+2.48) | 34.47(+4.58) | 30.74(+6.83) |
| NAFNet-SIDD-width64 | 33.39(-1.48) | 31.99(+2.09) | 29.38(+5.48) |
三个值得记住的结论:
- 噪声越大,盲降噪越吃香:real-psnr 对 Restormer 的领先从 +0.01 dB 一路扩大到 +0.70 dB,与"随机退化训练"的设计目标完全吻合;
- 有参模型赢了,但代价是前提:DRUNet 在 ISO 1600 夺冠,前提是你"恰好知道"σ;σ 调错时它得 -2.73 dB,比不去噪还差;
- 训练分布外是照妖镜:NAFNet 在手机传感器上训练,面对 DSLR 级硬件垫底且在低 ISO 下比原图更糟——这正是随机退化训练要修复的失败模式。
🎨 本模型是 real-gan 感知版:它"擅长"什么?
本仓库的权重是 对抗训练(adversarial)检查点,属于 SCUNet 的 real-gan 变体:
- ✅ 更锐利、纹理更可信,会在保真模型保持平滑的地方"脑补"出合理纹理,看观感更讨喜——上游作者自己的 demo 也更偏爱它;
- ⚠️ 代价是相对 real-psnr 掉 0.88–1.50 dB PSNR,且在 ISO 1600 上几乎是 no-op(+0.02 dB)——它本质是"感知模式",不是默认项;
- 🎯 结论:给"直接看着舒服"的场景用,不适合需要与参考图比分的评测场景。
🍎 在 Apple Silicon 上:一次调用,零配置
MLX 版本完成了 540 个张量(NHWC fp32)的完整转换,权重文件见 model.safetensors。转换过程中踩过不少"形状相同但语义不同"的坑(转置卷积 (I,O,kH,kW) → MLX 布局需按 (1,2,3,0) 转置、relative_position_params 预排布存储、QKV 头切分并非直觉三分),仓库 README 均有记录。
Swift 端的使用几乎就是"加载 → 前向"两步:
import SCUNetMLXCore
let model = SCUNet() // config=[4]*7
try model.loadWeights(from: weightsURL)
let clean = model.denoiseTiled(imageNHWC) // NHWC RGB in [0,1]
没有 σ 可估、没有力度可调、没有旋钮可拧错——这就是盲降噪的完整体验。
🧭 选型速查:何时用 SCUNet?
| 你的需求 | 推荐 |
|---|---|
| 要最大保真度(可对标参考图打分) | SCUNet real-psnr |
| 要更好观感、直接查看 | SCUNet real-gan(即本仓库) |
| 真实照片、不想调任何参数 | SCUNet 全家桶(盲降噪零配置) |
| 受控环境、σ 已知且可调 | DRUNet 这类有参模型 |
📚 小结与资料
盲降噪用"随机退化训练"换来了"零参数":SCUNet-color-real-gan-fp32 以 17.9M 参数的紧凑体量,在 Apple Silicon 上提供免调参的真实照片去噪,噪声越重优势越明显。本仓库权重以 MIT 协议发布,模型代码 Apache-2.0。
- 模型权重:model.safetensors
- 模型说明、架构笔记与实测数据:README.md
【免费下载链接】SCUNet-color-real-gan-fp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



