目录一、项目起点把一张“脏图”尽量还原清楚二、整体设计传统算法验证 深度网络改进三、数据准备从标准图像集中构建训练样本四、先做 BM3D把传统路线跑通五、深度去噪网络让模型学习“噪声残差”六、训练流程模块化实现便于复现实验七、工程实现细节把算法流程整理成可复用项目八、测试效果指标提升之外更重要的是速度九、项目亮点轻量化、可复现、可继续扩展1. 残差学习降低了任务难度2. 深度可分离卷积减少模型开销3. SE 注意力增强特征选择能力4. 完整流程便于二次开发十、适合扩展的方向十一、项目小结有需要本项目的代码、文档、完整资源或者需要部署调试的朋友可以私信博主。一、项目起点把一张“脏图”尽量还原清楚图像去噪是一个很基础、也很容易被低估的视觉任务。手机夜景、工业相机、监控画面、医学影像、遥感图像在采集和传输过程中都会被噪声影响轻则画面颗粒感明显重则边缘、纹理和细节被淹没。这个项目围绕一个明确目标展开在尽量保留图像结构的前提下把噪声从图像中分离出来。最开始搭建方案时我没有直接把深度网络作为唯一答案而是先把传统BM3D路线做了一遍。这样做有两个好处一是可以理解经典去噪算法如何利用图像块之间的相似性二是能为后续深度学习模型提供一个比较可靠的参照。真正进入模型改进阶段后核心思路转向残差学习网络不直接预测“干净图像”而是学习噪声本身再用原始带噪图像减去预测噪声得到结果。这个思路让模型的学习目标更清晰也更适合训练深层卷积网络。图 1 残差学习图像去噪整体流程二、整体设计传统算法验证 深度网络改进项目整体分为两条线第一条线实现BM3D用它完成传统图像去噪流程和运行效率分析第二条线在DnCNN的基础上做轻量化改进引入深度可分离卷积和SE注意力机制形成一个更适合实际部署的去噪网络。两条线不是割裂的BM3D更像是基准坐标深度网络则承担性能提升和速度优化。开发框架主要围绕PyTorch展开。数据读取、图像块切分、动态加噪、模型构建、训练循环、权重保存和测试评估都做成相对清晰的流程。指标层面采用PSNR和SSIM前者反映像素级恢复误差后者更关注结构相似度。最终效果不仅看一张图好不好看还看批量测试集上的平均表现和单张图像处理耗时。图 2 数据准备与训练样本构建流程三、数据准备从标准图像集中构建训练样本数据部分使用Train400作为训练基础同时准备Set12和Set68作为测试集。Train400包含多种自然场景适合让模型学习常见纹理、边缘和结构模式。Set12图像数量不多但都是去噪任务中常用的经典图像便于观察局部细节恢复情况Set68覆盖更广适合看模型在多样图像上的平均水平。由于原始训练图像数量有限不能简单把整张图像直接丢给网络。项目采用滑动窗口方式切出大量小图像块图像块大小设置为40×40步长为10。为了让模型见到不同尺度的信息又加入1.0、0.9、0.8、0.7四种缩放比例再结合旋转、翻转等增强方式扩充样本。处理完成后训练图像块数量达到二十多万级为模型收敛提供了足够的样本基础。图 3 训练集与测试集样例展示图 4 图像块提取、多尺度处理与动态加噪过程噪声并不是提前固化到图片里而是在Dataset加载阶段动态添加。这样做的好处很明显同一个干净图像块每次进入训练流程时都可能对应不同的噪声实例相当于继续扩大了训练样本空间。项目中实现了高斯噪声、椒盐噪声、斑点噪声和泊松噪声既能用于单一噪声场景训练也能用于混合噪声鲁棒性测试。四、先做 BM3D把传统路线跑通BM3D是图像去噪领域非常经典的方法它不依赖训练数据主要利用图像的非局部自相似性。简单理解就是图像中很多局部结构会在不同位置重复出现比如纹理、边缘、建筑线条等。BM3D通过寻找相似图像块把它们堆叠起来进行协同滤波再把去噪后的图像块聚合回原图。我在项目中实现BM3D的目的不只是为了得到一个传统方法结果更重要的是形成对照。参数部分重点包括噪声水平、图像块大小、搜索窗口、最大匹配块数量、阈值系数等。运行日志里可以明显看到BM3D在单张图像上的处理时间偏长尤其图像尺寸变大时块匹配和变换滤波会消耗大量时间。这也解释了为什么传统方法在很多工程场景中会遇到实时性瓶颈。图 5 BM3D 参数配置、运行日志与效果示例从视觉效果看BM3D能够抑制大量随机噪声对规则纹理和局部结构也有一定保护能力。但在一些复杂纹理区域仍然容易出现细节被抹平的问题。这个阶段给后续网络改进提供了很清楚的方向深度模型不仅要提升PSNR和SSIM更要在处理速度上拉开差距。五、深度去噪网络让模型学习“噪声残差”深度学习部分以DnCNN为基础。这个网络的核心不是直接生成最终干净图像而是学习输入图像中的噪声残差。带噪图像输入网络后模型输出一张预测噪声图再用输入图像减去预测噪声得到恢复结果。这样的目标比直接学习完整图像更简单训练过程也更稳定。标准DnCNN的中间层大量使用3×3标准卷积。当输入和输出都是64个通道时单层参数量就比较可观多层堆叠后模型规模会迅速增加。为了让网络更轻我把中间层替换为深度可分离卷积。它把标准卷积分成两步先用Depthwise Convolution对每个通道分别做空间特征提取再用1×1 Pointwise Convolution做通道融合。这样既保留了卷积网络对局部结构的建模能力又大幅减少参数量。图 6 改进 DnCNN 去噪网络结构轻量化之后还需要解决表达能力可能下降的问题。SE注意力机制在这里发挥作用它通过全局平均池化获取每个通道的统计信息再通过两个轻量级映射层生成通道权重。重要通道被增强不重要或干扰性强的通道被抑制。对图像去噪来说不同通道可能分别响应边缘、纹理、平滑区域或噪声模式SE模块可以让网络更主动地选择有价值的特征。图 7 残差结构、深度可分离卷积与 SE 模块实现片段六、训练流程模块化实现便于复现实验代码实现上我把深度可分离卷积、SEBlock、主网络DnCNN_DS_SE分开封装。这样的结构在调试时比较省心如果只想验证轻量化卷积可以先关闭注意力模块如果需要调整通道压缩比例也可以直接修改SEBlock。训练时使用Adam优化器并配合学习率衰减策略让前期快速下降、后期稳定收敛。训练日志中可以看到初始阶段损失下降非常明显说明网络较快捕捉到了噪声的基本分布。每轮训练结束后保存权重文件方便后续选择不同阶段模型进行测试。这个过程看起来只是常规训练流程但对项目复现很关键数据生成、噪声添加、训练日志、权重保存和测试脚本必须串起来后面做对比展示才不会混乱。图 8 模型训练、权重保存与评估输出七、工程实现细节把算法流程整理成可复用项目这个项目真正花时间的地方并不只在模型结构本身。图像去噪实验很容易出现“脚本能跑但换一批图片就乱”的情况所以我在整理时把输入、训练、测试和输出都拆成相对独立的环节。数据层负责读取原图、切块和增强噪声层负责根据参数动态生成不同类型的噪声模型层只关注网络结构和前向传播评估层统一计算PSNR、SSIM和处理时间。这样的拆分可以减少后续修改时的耦合换模型、换噪声、换测试集都比较方便。在代码组织上项目没有把所有逻辑塞到一个文件里而是尽量保留清晰的功能边界。比如数据预处理脚本只负责样本生成训练脚本负责模型训练和日志输出测试脚本负责加载权重并输出指标。这样整理后后续想复现实验结果只需要按顺序准备数据、执行训练、加载模型测试即可如果只是想演示效果也可以直接跳过训练阶段使用已有权重对指定图片进行去噪。训练日志和权重保存也做了保留。很多同类项目只展示最终结果但没有保存中间过程一旦模型表现波动就很难排查问题。这里每隔一定频率打印损失变化每轮训练后保存模型权重便于回溯不同阶段的训练状态。对于课程设计、毕业设计或项目验收来说这些过程材料非常有用因为它能证明模型不是只跑出了一张效果图而是形成了完整的实验链条。展示层面我更倾向于把“带噪图、预测噪声、去噪图、指标结果”放在一起看。单独看一张恢复图容易产生主观判断而指标能补充客观评价只看指标又会忽略边缘、纹理和局部细节因此两者需要配合。实际演示时可以选择几张典型图片一张纹理复杂的一张边缘明显的一张平滑区域较多的再分别观察模型的表现。这样比单纯罗列平均值更能体现算法处理不同场景的能力。如果继续做成可交互系统前端可以设计成三步操作上传图片、选择噪声或去噪模型、查看恢复结果。后端则提供模型推理接口返回去噪图、耗时、PSNR/SSIM等结果。对于没有原始干净图的真实场景也可以保留视觉前后对比和无参考质量评价指标。这样一来项目就不再只是一个算法脚本而可以扩展成一个完整的图像增强小系统。八、测试效果指标提升之外更重要的是速度在测试阶段对Set68和Set12图像统一加入标准差为25的高斯噪声再分别计算去噪结果与原图之间的PSNR和SSIM。Set68上改进后的网络平均PSNR约为28.03 dBSSIM约为0.7760BM3D对应结果约为27.18 dB和0.7685。Set12上改进网络平均PSNR达到29.10 dBSSIM达到0.8112。指标说明网络不仅能把噪声压下来也能较好保留图像结构。速度方面差距更直观。BM3D处理同类图像往往需要几十秒到一百多秒而改进网络在CPU环境下单张图像通常只需几秒。对于后续部署来说这个差距非常关键。图像去噪如果只是离线实验速度没有那么敏感但一旦进入视频、工业检测、边缘设备或者交互式应用推理耗时就会直接决定系统能不能用。图 9 去噪指标与处理速度对比图 10 带噪图像与去噪恢复效果展示整个实现过程给我的感受是图像去噪不是简单地把画面变平滑而是在噪声抑制和细节保留之间找平衡。BM3D让我看到传统方法的稳定性和解释性改进DnCNN则体现了深度学习在速度和效果上的潜力。深度可分离卷积负责减负SE注意力负责补强残差学习负责把目标变简单这几个点组合起来形成了一个相对完整、可复现、也方便继续改造的图像去噪项目。完整资源里还包含更多训练脚本、测试结果、模型结构说明和实验输出感兴趣的朋友可以继续交流。每文一语沉淀是最佳的锻炼
基于残差学习的图像去噪:从 BM3D 到轻量化 DnCNN
发布时间:2026/6/27 8:30:14
目录一、项目起点把一张“脏图”尽量还原清楚二、整体设计传统算法验证 深度网络改进三、数据准备从标准图像集中构建训练样本四、先做 BM3D把传统路线跑通五、深度去噪网络让模型学习“噪声残差”六、训练流程模块化实现便于复现实验七、工程实现细节把算法流程整理成可复用项目八、测试效果指标提升之外更重要的是速度九、项目亮点轻量化、可复现、可继续扩展1. 残差学习降低了任务难度2. 深度可分离卷积减少模型开销3. SE 注意力增强特征选择能力4. 完整流程便于二次开发十、适合扩展的方向十一、项目小结有需要本项目的代码、文档、完整资源或者需要部署调试的朋友可以私信博主。一、项目起点把一张“脏图”尽量还原清楚图像去噪是一个很基础、也很容易被低估的视觉任务。手机夜景、工业相机、监控画面、医学影像、遥感图像在采集和传输过程中都会被噪声影响轻则画面颗粒感明显重则边缘、纹理和细节被淹没。这个项目围绕一个明确目标展开在尽量保留图像结构的前提下把噪声从图像中分离出来。最开始搭建方案时我没有直接把深度网络作为唯一答案而是先把传统BM3D路线做了一遍。这样做有两个好处一是可以理解经典去噪算法如何利用图像块之间的相似性二是能为后续深度学习模型提供一个比较可靠的参照。真正进入模型改进阶段后核心思路转向残差学习网络不直接预测“干净图像”而是学习噪声本身再用原始带噪图像减去预测噪声得到结果。这个思路让模型的学习目标更清晰也更适合训练深层卷积网络。图 1 残差学习图像去噪整体流程二、整体设计传统算法验证 深度网络改进项目整体分为两条线第一条线实现BM3D用它完成传统图像去噪流程和运行效率分析第二条线在DnCNN的基础上做轻量化改进引入深度可分离卷积和SE注意力机制形成一个更适合实际部署的去噪网络。两条线不是割裂的BM3D更像是基准坐标深度网络则承担性能提升和速度优化。开发框架主要围绕PyTorch展开。数据读取、图像块切分、动态加噪、模型构建、训练循环、权重保存和测试评估都做成相对清晰的流程。指标层面采用PSNR和SSIM前者反映像素级恢复误差后者更关注结构相似度。最终效果不仅看一张图好不好看还看批量测试集上的平均表现和单张图像处理耗时。图 2 数据准备与训练样本构建流程三、数据准备从标准图像集中构建训练样本数据部分使用Train400作为训练基础同时准备Set12和Set68作为测试集。Train400包含多种自然场景适合让模型学习常见纹理、边缘和结构模式。Set12图像数量不多但都是去噪任务中常用的经典图像便于观察局部细节恢复情况Set68覆盖更广适合看模型在多样图像上的平均水平。由于原始训练图像数量有限不能简单把整张图像直接丢给网络。项目采用滑动窗口方式切出大量小图像块图像块大小设置为40×40步长为10。为了让模型见到不同尺度的信息又加入1.0、0.9、0.8、0.7四种缩放比例再结合旋转、翻转等增强方式扩充样本。处理完成后训练图像块数量达到二十多万级为模型收敛提供了足够的样本基础。图 3 训练集与测试集样例展示图 4 图像块提取、多尺度处理与动态加噪过程噪声并不是提前固化到图片里而是在Dataset加载阶段动态添加。这样做的好处很明显同一个干净图像块每次进入训练流程时都可能对应不同的噪声实例相当于继续扩大了训练样本空间。项目中实现了高斯噪声、椒盐噪声、斑点噪声和泊松噪声既能用于单一噪声场景训练也能用于混合噪声鲁棒性测试。四、先做 BM3D把传统路线跑通BM3D是图像去噪领域非常经典的方法它不依赖训练数据主要利用图像的非局部自相似性。简单理解就是图像中很多局部结构会在不同位置重复出现比如纹理、边缘、建筑线条等。BM3D通过寻找相似图像块把它们堆叠起来进行协同滤波再把去噪后的图像块聚合回原图。我在项目中实现BM3D的目的不只是为了得到一个传统方法结果更重要的是形成对照。参数部分重点包括噪声水平、图像块大小、搜索窗口、最大匹配块数量、阈值系数等。运行日志里可以明显看到BM3D在单张图像上的处理时间偏长尤其图像尺寸变大时块匹配和变换滤波会消耗大量时间。这也解释了为什么传统方法在很多工程场景中会遇到实时性瓶颈。图 5 BM3D 参数配置、运行日志与效果示例从视觉效果看BM3D能够抑制大量随机噪声对规则纹理和局部结构也有一定保护能力。但在一些复杂纹理区域仍然容易出现细节被抹平的问题。这个阶段给后续网络改进提供了很清楚的方向深度模型不仅要提升PSNR和SSIM更要在处理速度上拉开差距。五、深度去噪网络让模型学习“噪声残差”深度学习部分以DnCNN为基础。这个网络的核心不是直接生成最终干净图像而是学习输入图像中的噪声残差。带噪图像输入网络后模型输出一张预测噪声图再用输入图像减去预测噪声得到恢复结果。这样的目标比直接学习完整图像更简单训练过程也更稳定。标准DnCNN的中间层大量使用3×3标准卷积。当输入和输出都是64个通道时单层参数量就比较可观多层堆叠后模型规模会迅速增加。为了让网络更轻我把中间层替换为深度可分离卷积。它把标准卷积分成两步先用Depthwise Convolution对每个通道分别做空间特征提取再用1×1 Pointwise Convolution做通道融合。这样既保留了卷积网络对局部结构的建模能力又大幅减少参数量。图 6 改进 DnCNN 去噪网络结构轻量化之后还需要解决表达能力可能下降的问题。SE注意力机制在这里发挥作用它通过全局平均池化获取每个通道的统计信息再通过两个轻量级映射层生成通道权重。重要通道被增强不重要或干扰性强的通道被抑制。对图像去噪来说不同通道可能分别响应边缘、纹理、平滑区域或噪声模式SE模块可以让网络更主动地选择有价值的特征。图 7 残差结构、深度可分离卷积与 SE 模块实现片段六、训练流程模块化实现便于复现实验代码实现上我把深度可分离卷积、SEBlock、主网络DnCNN_DS_SE分开封装。这样的结构在调试时比较省心如果只想验证轻量化卷积可以先关闭注意力模块如果需要调整通道压缩比例也可以直接修改SEBlock。训练时使用Adam优化器并配合学习率衰减策略让前期快速下降、后期稳定收敛。训练日志中可以看到初始阶段损失下降非常明显说明网络较快捕捉到了噪声的基本分布。每轮训练结束后保存权重文件方便后续选择不同阶段模型进行测试。这个过程看起来只是常规训练流程但对项目复现很关键数据生成、噪声添加、训练日志、权重保存和测试脚本必须串起来后面做对比展示才不会混乱。图 8 模型训练、权重保存与评估输出七、工程实现细节把算法流程整理成可复用项目这个项目真正花时间的地方并不只在模型结构本身。图像去噪实验很容易出现“脚本能跑但换一批图片就乱”的情况所以我在整理时把输入、训练、测试和输出都拆成相对独立的环节。数据层负责读取原图、切块和增强噪声层负责根据参数动态生成不同类型的噪声模型层只关注网络结构和前向传播评估层统一计算PSNR、SSIM和处理时间。这样的拆分可以减少后续修改时的耦合换模型、换噪声、换测试集都比较方便。在代码组织上项目没有把所有逻辑塞到一个文件里而是尽量保留清晰的功能边界。比如数据预处理脚本只负责样本生成训练脚本负责模型训练和日志输出测试脚本负责加载权重并输出指标。这样整理后后续想复现实验结果只需要按顺序准备数据、执行训练、加载模型测试即可如果只是想演示效果也可以直接跳过训练阶段使用已有权重对指定图片进行去噪。训练日志和权重保存也做了保留。很多同类项目只展示最终结果但没有保存中间过程一旦模型表现波动就很难排查问题。这里每隔一定频率打印损失变化每轮训练后保存模型权重便于回溯不同阶段的训练状态。对于课程设计、毕业设计或项目验收来说这些过程材料非常有用因为它能证明模型不是只跑出了一张效果图而是形成了完整的实验链条。展示层面我更倾向于把“带噪图、预测噪声、去噪图、指标结果”放在一起看。单独看一张恢复图容易产生主观判断而指标能补充客观评价只看指标又会忽略边缘、纹理和局部细节因此两者需要配合。实际演示时可以选择几张典型图片一张纹理复杂的一张边缘明显的一张平滑区域较多的再分别观察模型的表现。这样比单纯罗列平均值更能体现算法处理不同场景的能力。如果继续做成可交互系统前端可以设计成三步操作上传图片、选择噪声或去噪模型、查看恢复结果。后端则提供模型推理接口返回去噪图、耗时、PSNR/SSIM等结果。对于没有原始干净图的真实场景也可以保留视觉前后对比和无参考质量评价指标。这样一来项目就不再只是一个算法脚本而可以扩展成一个完整的图像增强小系统。八、测试效果指标提升之外更重要的是速度在测试阶段对Set68和Set12图像统一加入标准差为25的高斯噪声再分别计算去噪结果与原图之间的PSNR和SSIM。Set68上改进后的网络平均PSNR约为28.03 dBSSIM约为0.7760BM3D对应结果约为27.18 dB和0.7685。Set12上改进网络平均PSNR达到29.10 dBSSIM达到0.8112。指标说明网络不仅能把噪声压下来也能较好保留图像结构。速度方面差距更直观。BM3D处理同类图像往往需要几十秒到一百多秒而改进网络在CPU环境下单张图像通常只需几秒。对于后续部署来说这个差距非常关键。图像去噪如果只是离线实验速度没有那么敏感但一旦进入视频、工业检测、边缘设备或者交互式应用推理耗时就会直接决定系统能不能用。图 9 去噪指标与处理速度对比图 10 带噪图像与去噪恢复效果展示整个实现过程给我的感受是图像去噪不是简单地把画面变平滑而是在噪声抑制和细节保留之间找平衡。BM3D让我看到传统方法的稳定性和解释性改进DnCNN则体现了深度学习在速度和效果上的潜力。深度可分离卷积负责减负SE注意力负责补强残差学习负责把目标变简单这几个点组合起来形成了一个相对完整、可复现、也方便继续改造的图像去噪项目。完整资源里还包含更多训练脚本、测试结果、模型结构说明和实验输出感兴趣的朋友可以继续交流。每文一语沉淀是最佳的锻炼