Noise2Noise(2018):无监督去噪方法
1、研究背景与动机
1)传统去噪的常识:要有“干净图”教模型学
- 一张“脏苹果 🍎”(带泥的照片)
- 一张“干净苹果 🍎”(擦亮后的照片)
- 干净的图像往往根本拿不到!(比如低光环境、医学扫描、天文观测)
- 想采集“干净样本”太难、太贵、太慢。
2)核心问题:没有干净图,还能去噪吗?
“如果你从没见过干净图,你怎么知道什么是噪声?”
- 模型必须学“从噪声 → 干净”的映射;
- 没有干净标签,模型就没法计算损失函数(Loss),自然无法学习。
3)Noise2Noise 的颠覆思路:
“我不需要干净图,只要两张带噪的图就够了!”
- 第一次拍:光线不稳,出现一些随机亮点;
- 第二次拍:同样的猫,同样的姿势,但亮点换了地方。
- 模型看不见“干净猫”,但能看到两只“带不同噪声的猫”;
- 它学会预测“另一张猫图的样子”,
- 而唯一不变的部分就是——猫自己。
“我们不教模型什么是‘干净’,只让它在两个‘脏样本’之间学会忽略脏的部分。”
4)背后的直觉原理(形象理解)
- 你在听朋友讲笑话,他口吃两次,但笑话内容是一样的。
- 你的大脑自动忽略“噪声(口吃)”,只保留“有意义的部分(笑点)”。
- Noise2Noise 就是让神经网络学会这种“重复听两遍,自动忽略随机误差”的能力。
5)为什么这很重要?
需要大量成对的(干净,带噪)训练数据。
- “我只需要噪声样本,不用干净标签也能训练。”
- 这极大降低了数据采集门槛。
- 在真实世界(比如医疗图像、显微镜、生物成像、低光摄影)中非常实用。
6)它带来的研究动机与启示
- 让深度学习从“监督”走向“自我监督”: 模型可以从噪声中学结构,不再依赖“理想干净图”。
- 推动了后续一系列无监督方法: Noise2Void、Noise2Self、Blind-Spot Network、Self2Self 等都是从这里发展出来的。
- 揭示噪声学习的统计本质: 不是“看谁干净”,而是“看谁不变”——稳定的部分就是信号。
✍️ 一句话总结
Noise2Noise 的动机是: “既然噪声是随机的、真实内容是稳定的,那我就让模型自己从两个噪声中找出‘共同的真相’。”
2、核心创新点
Noise2Noise 的革命性在于——它证明了: 即使训练时从没见过干净图,也能学会去噪。
核心创新点一:用“噪声当标签”也能学!
🔍 传统做法:
💡 Noise2Noise 的神操作:
- 因为两张图的内容相同,只是噪声不同;
- 模型会自动忽略那些随机差异(噪声),
- 逼近的其实是这两张图的共同部分,也就是真实干净图像的期望值!
核心创新点二:数学上可证明“学噪声=学干净”
简单逻辑:
- 假设每张观测图 y=x+n, 噪声 n 的期望是 0(即噪声“平均值为零”)。
- 目标是最小化均方误差 (MSE):
- Loss = E[(f(y₁) - y₂)^2]
- 在数学期望意义下,这个最小化问题与E[(f(y₁) - x)^2]是完全等价的。
核心创新点三:从“监督学习”跨向“无监督学习”的桥梁
“没有干净标签,深度学习就学不了去噪。”
核心创新点四:通用性强,不限于高斯噪声
- 他们实验了多种噪声类型: 高斯噪声、泊松噪声、蒙特卡洛渲染噪声、文本损坏、MRI 扫描噪声等。
- 都能实现接近有监督训练的去噪效果。
- 说明这种思想不是特例,而是普适原理。
核心创新点五:简单到极致的实现方式
- 不改网络结构:任何常规 CNN、UNet、ResNet 都能直接用。
- 只改训练标签:把“干净图”换成“另一张噪声图”。
- 训练和推理完全一样,推理时依旧输入单张噪声图。
3、模型的网络结构
一、整体架构:一个标准的“卷积式图像复原网络”
🔹 输入:
- 带噪图像 y1(比如:有随机亮点、斑点或模糊的图)
🔹 网络结构:
输入噪声图 (y₁)
↓
[卷积层 × N] → 提取局部特征
↓
[下采样 + 编码部分] → 学习全局结构
↓
[上采样 + 解码部分] → 重建图像
↓
输出预测图 (ŷ)
- 每一层都在做“提取特征 → 去除噪声 → 保留细节”的工作。
- 你可以把它想成一个**“自动修图工”**: 每一层都试着更清晰地还原图像,最后输出“更干净的版本”。
网络就像一支“多层滤镜”的修图笔,每一层把不同尺度的噪声擦掉一点,最后叠加起来,画面就干净了。
二、关键区别:训练数据的“双噪声输入输出”机制
输入:噪声图 y
输出:干净图 x
Loss: (ŷ - x)²
输入:噪声图 y₁
输出:另一张噪声图 y₂
Loss: (ŷ - y₂)²
- 拍同一个场景两次,第一次 ISO=3200,第二次 ISO=3200,但噪声分布不一样;
- 或者在渲染任务中,两次 Monte Carlo 采样得到不同噪声的结果。
模型在看两张“同样的照片但脏点不同”的图,学会忽略这些不一致的脏点,只保留它们的共同部分——也就是干净的内容。
三、网络的具体实现细节(论文中示例)
应用场景
| 使用的网络结构
| 特点
|
图像去噪(自然图像)
| U-Net
| 编解码结构,能处理细节与全局信息
|
Monte Carlo 渲染去噪
| ConvNet(ResNet风格)
| 连续卷积层提特征
|
文本恢复、MRI重建
| 特定任务网络
| 针对性调整输入通道与激活函数
|
- 编码部分(Encoder):
- 连续 3×3 卷积 + ReLU 激活;
- 2×2 最大池化(下采样);
- 多层堆叠(捕获不同尺度的噪声模式)。
- 解码部分(Decoder):
- 反卷积(上采样);
- skip connection(跳连到对称层);
- 输出最终特征图。
- 最后一层输出与输入同尺寸, 输出通道 = 输入通道(灰度=1,彩色=3)。
四、训练机制:损失函数与优化策略
- 损失函数:均方误差 (MSE)
- L=E[(f(y1)−y2)2]
- 优化器:Adam
- 学习率:1e-3 到 1e-4
- 批量大小:4~16
- 数据增强:随机裁剪、翻转、旋转
它训练时的所有超参数都跟普通去噪网络差不多,唯一变化的是 —— 训练目标换成了“另一张噪声图”。
🔁 五、推理阶段(Inference):
- 测试时只需一张噪声图 y;
- 网络预测输出 x^=f(y), 直接就是去噪后的图像;
- 不需要配对或额外噪声样本。
模型已经从“双噪声训练”中学会了“忽略噪声的模式”, 所以面对新图,只要看一眼就能分辨出什么是“真实”,什么是“脏的”。
对比维度
| 传统去噪(DnCNN等)
| Noise2Noise
|
输入
| 一张噪声图
| 一张噪声图
|
标签
| 干净图像
| 另一张噪声图
|
网络结构
| CNN/U-Net
| CNN/U-Net(不变)
|
核心创新
| 架构与正则化
| 训练方式(数据标签)
|
理论基础
| 有监督学习
| 无监督统计学习
|
实验表现
| 去噪效果好
| 去噪效果几乎相同甚至更鲁棒
|
🌟 六、形象总结
可以把 Noise2Noise 看成这样一个过程:
👩🏫 “老师给你两张带脏点的卷子,让你自己找出题目的真正答案。”网络学会了:哪些细节是恒定的,哪些是随机的。最后,它掌握的不是“去除噪声的规则”,而是“从随机里找出不变的本质”。
模型的核心不足与缺陷
一、前提条件太理想:要求“噪声要独立”
两张带噪图像的噪声必须是独立的、零均值的。
- 噪声不能带有固定的偏移(比如相机曝光偏差);
- 两次采样之间噪声必须不同(独立)。
- 如果噪声是相关的(例如压缩伪影、条纹噪声、固定模式噪声), 模型就分不清什么是噪声、什么是真实结构。
- 这种情况下训练会失败,甚至会“学坏”图像。
二、需要“噪声成对图”,仍不是真正的无监督
- 很多时候我们只有一张图,没法拍两张;
- 有些动态场景(比如人脸、动物)即使拍两张,也对不齐;
- 在医学图像或天文图像里,获取成对噪声样本的代价仍然很高。
它不需要“干净答案”, 但仍然需要“两份脏答案”。 这虽然比以前省事,但还不够“自由”。
三、假设的“噪声期望为零”不总成立
- 摄像头的亮度漂移;
- 感光元件的固定模式;
- 医学图像中某些方向性的伪影;
- 夜景照片的非均匀亮度噪声。
像你每次听别人讲故事,他都带点口音。 听多了,你反而把口音当成了“正确发音”。
四、对噪声分布敏感,泛化性有限
- 训练时的噪声分布(比如高斯或泊松)和测试时不一样时,性能会急剧下降;
- 在真实世界中,噪声通常是复杂的混合类型,模型无法很好适应。
模型在实验室里学的是“白噪声”(干净的沙沙声), 但现实中的噪声像“工地噪声”或“压缩噪声”——完全不一样。
五、仍然容易过度平滑、损失细节
- 噪声较强;
- 图像细节密集;
- 数据不够丰富时。
- MSE 损失函数倾向于“平均化”结果;
- 网络会选择“最保险”的方式——输出平滑结果,牺牲局部锐度。
模型宁可把“草地的草叶”抹成绿色平面,也不敢冒险保留可能是“噪声”的尖刺。
六、无法处理结构性或非随机噪声
- JPEG 压缩产生的方块;
- 条纹纹理;
- 高频重复伪影;
- 传感器固定条纹;
- 视频噪声中随时间相关的干扰。
它能听懂两次“随机口吃”的话,但听不懂“机械重复卡顿”的机器人说话。
七、训练成本依旧较高
你不再需要“完美的答案卷”,但仍得准备“两份错不同的作业卷”才能教学生。