CVPR2023 | 提升图像去噪网络的泛化性,港科大上海AILab提出 MaskedDenoising,已开源!

作者 | 顾津锦
首发 | AIWalker
链接 | https://mp.weixin.qq.com/s/o4D4mNM3jL6sYuhUC6VgoQ

当前深度去噪网络存在泛化能力差的情况,例如,当训练集噪声类型和测试集噪声类型不一致时,模型的性能会大打折扣。作者认为其原因在于网络倾向于过度拟合训练噪声,而没有学习图像自身的内在结构。为了解决这个问题,作者提出了一种遮盖图像训练的策略(masked image training)。其核心思想是在训练过程中对输入图像进行大比例的随机遮盖,迫使网络学习重构被遮盖的内容,增强对图像本身分布的建模能力,从而对未见过的噪声类型也有好的去噪效果。

  • 论文链接:https://arxiv.org/abs/2303.13132
  • 代码链接:https://github.com/haoyuc/MaskedDenoising

图像去噪中的泛化性问题

但是,现有的深度学习去噪方法存在一个关键问题——泛化能力差。大多数方法都是在高斯噪声上训练和测试的。当遇到训练过程中未见过的噪声时,这些方法的效果会急剧下降。因为深度网络很容易过拟合训练数据,普通的学习方式使得网络仅仅学会如何去除高斯噪声,未学会图像的内在结构。

文章 Figure 1 主要说明了当前深度学习去噪模型的泛化问题:
当我们使用高斯噪声(σ=15)训练SwinIR模型,在同样的高斯噪声(σ=15)测试时,SwinIR可以很好去除噪声,效果优秀。
但当测试噪声为复杂的mixture noise时,SwinIR的去噪效果大幅下降,基本失效。
而作者提出的遮挡训练方法即使也是在高斯噪声(σ=15)上训练,但对mixture noise去噪效果仍然可以,泛化能力明显更强。

传统的训练方式是在过拟合训练集噪声

作者做了一个实验来直观地反映当前深度学习去噪模型的工作原理。他们使用免疫组化学图像训练了一个SwinIR模型,这类图像与自然图像非常不同。但加入的是相同的高斯噪声。模型通过拟合图像+噪声的数据集学会了去噪。然后他们测试这个模型在普通自然图像上的去噪效果,结果仍旧有高效的去噪能力。这说明模型是靠识别噪声本身来起去噪作用的,而不是真正理解图像内容。只要是训练过程中见过的噪声类型,不管图像是什么,模型都可以去除。这样就解释了为什么这类模型泛化能力较差,测试噪声一变模型就失效了。

而作者提出的遮挡训练方法可以让模型学会理解和重构图像内容,不仅依赖噪声特征,从而获得更好的泛化能力。这个实验简单直观地反映了现有模型的工作机制和局限性,也支持了遮挡训练可能带来的优势。

作者的分析认为,现有方法之所以泛化能力差,是因为模型仅仅过拟合了训练噪声,而没有真正学习图像的内在结构。所以需要通过改进训练策略,让模型学习重构图像内容,而不是仅仅识别并移除噪声模式。

因此,这篇论文要解决的核心问题是:
如何提高深度学习去噪模型的泛化能力,使其不仅能去除训练使用的噪声类型,还能够很好地处理其他未知的噪声,适应更广泛的场景。

Masked Training

整体网络架构基于了Swin Transformer。
作者提出了一种 masked training 的方法来提高模型的泛化能力。
主要包含两个方面:

  • Input Mask

在特征提取之后, 会对输入图像进行随机大比例遮盖(input mask),比如遮盖75%~85%的像素。这将构造一个非常具有挑战性的图像修复问题,迫使模型学习重构被遮盖的图像内容,而不能简单依靠检测并移除噪声模式。

  • Attention Mask

在self-attention层也进行类似的随机遮盖。这是为了减轻训练和测试的不一致性。由于 input mask 只在训练使用, 测试时的输入是完整的图像。因此我们使用attention mask 可以平衡这一差异。

训练过程中,模型需要在大量信息被移除的情况下,依靠图像的内在结构去重构内容。这样可以减少模型对训练噪声的过拟合,增强对图像本身分布的建模能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3 展示了我们提议的 mask-and-complete 的训练策略。每一组图片左侧是 mask 后的效果,右侧是重建后的效果。可以看到,即使有大量的像素被遮罩,模型仍然可以在一定程度上重建输入。

实验结果

视觉效果

Figure 8 展示了不同去噪算法在各种未出现在训练中的噪声下的视觉效果。
测试噪声类型包括Spatially correlated Gaussian、Speckle noise和Salt-and-pepper noise,都不属于训练使用的高斯噪声。
对比算法包括DnCNN、RIDNet、RNAN、SwinIR、Restormer等当前主流算法。

结果显示这些对比算法完全失效,无法有效去除测试噪声,图像效果很差。
而作者提出的遮挡训练方法在所有的测试噪声下都获得了很好的去噪视觉效果。
这直观地反映了作者方法相比其他算法在泛化性上的明显提高。
尤其是在其他方法完全失败的情况下,遮挡训练仍能有效去噪,突出了方法的优势。
这验证了遮挡训练可以减少对训练噪声的依赖,提高模型对复杂未知噪声的适应性。

性能指标

图 11 是性能数值对比,作者测试了 4 种不同的噪声类型,并且每一种噪声都测试了不同的噪声 level 。深蓝色的是使用 masked training 的方法。

可以看到,使用 masked training 的方法在训练集外的噪声类别上的性能要远优于其他方法,并且随着噪声 level 的增加,性能优势也更加明显。
说明这样的方法在训练集和测试机噪声区别越大的情况下,会有更大的优势。

Mask 比例的权衡

当然,由于使用了 mask,这无疑会对训练集噪声上的性能造成影响。因此,在训练集上的性能和在未见过的测试机噪声上的性能是一种权衡。

图 7 展示了在不同的 input mask 比例时,模型在训练集噪声(高斯 15)和训练集外的噪声(Speckle, Mixture noise)上的性能。
可以看到,在掩码比率为75%之前,训练噪声的性能下降并不明显。而在 mask 比例为 50%左右时,就已经体现出较高的性能。
而在训练集之外的噪声上的性能提升大于在训练集上的性能损失。

较小的比率不足以使网络学习到图像的分布,因为更多的噪声模式被保留下来。较大的比率提高了模型的泛化能力,因为模型更加关注重构。但与此同时,一些图像细节可能会丢失。

分析

训练曲线

图13展示了遮挡训练模型和基准模型的训练曲线,用来分析训练过程。
每一行对应了一种噪声类别;第一列和第二列分别是 PSNR 和 SSIM 指标。
而每一个子图中 x 轴对应了训练的 iteration(K)。

  • baseline 模型(没有使用 Masked training)的性能在训练一开始就达到了峰值,然后随着训练越久会逐渐下降,说明在峰值之后,模型就已经在过拟合训练集噪声,从而导致在其他噪声类别上的泛化能力越来越差。
  • Masked training 模型在三种噪声上的性能曲线都是缓慢上升的,且最终效果优于基准模型,说明泛化能力更强,没有过拟合。

不同噪声的特征分布

我们在不同噪声类型下可视化了深度特征的分布,如图15所示。我们可以看到:

  • baseline 模型中,不同噪声类型下的特征分布明显偏离彼此。
  • 而对于经过 masked training 的模型,不同噪声类型下的深度特征分布彼此接近。

这从侧面印证了 masked training 的模型的泛化能力以及有效的原因。

局限性和未来方向

正如文章中所提到的,能够让这个方法发挥出优势需要找到合适的场景,因此训练集和测试集的选择比较重要。
具体来说,

  • 训练集和测试集的区别越大,就越能体现优势
  • 训练集的退化分布越有限,也越能体现优势

因此,如何将这样的训练方法能够在更多更广泛的场景下同样发挥出优势,是一个非常有意义的未来研究方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现极限学习机分类模型(ELMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 极限学习机(ELMClassifier)算法是一种基于单隐层前馈神经网络(SLFN…

【C语言】操作符相关知识点

移位操作符 << 左移操作符 >>右移操作符 左移操作符 移位规则&#xff1a; 左边抛弃、右边补0 右移操作符 移位规则&#xff1a; 首先右移运算分两种&#xff1a; 1.逻辑移位 左边用0填充&#xff0c;右边丢弃 2.算术移位 左边用原该值的符号位填充&#xff0c;…

上门服务小程序|上门服务系统成品功能包含哪些?

随着移动互联网的快速发展&#xff0c;上门服务小程序成为了一种创新的家政服务模式。它不仅为用户带来了极大的便利&#xff0c;还能在提高服务效率和质量方面发挥作用。通过上门服务小程序&#xff0c;用户可以轻松预约按摩或理疗服务&#xff0c;无需繁琐操作&#xff0c;只…

knife4j生产环境禁止打开页面

Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案&#xff0c;官网地址&#xff1a;Knife4j 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j 考虑到安全性问题&#xff0c;在实际服务部署到生产环境后就需要禁用到swagger页面的展示&#xff0c;这个时候只需…

类和对象(1)(至尊详解版)

相信对于大家而言&#xff0c;对于类和对象都会是一头雾水吧&#xff01;什么是类&#xff1f;或者你有对象吗&#xff1f;那么本期的内容呢&#xff1f;就由我来为大家再次增加对于它们的理解&#xff0c;由于水平上的原因&#xff0c;可能会存在不当之处&#xff0c;敬请读者…

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念&#x1f3a7;面试题✒️1.2static的特性&#x1f3a7;1.3思考&#x1f3a7; 2.友元2.1什么是友元&#xff1f;&#x1f3a7;2.2两种友元关系&#xff1a;&#x1f3a7; 1.static成员 1.1概念&#x1f3a7; &#x1f50e; static关键字用于声明类…

Jmeter性能测试 -1

之前讲的Jmeter算不上是性能测试&#xff0c;只是用Jmeter做接口测试。现在我们开始进入实际的性能测试。开始前你应该对Jmeter有了一定的了解&#xff0c;把前面Jmeter内容看一遍应该可以入门了。 Jmeter与locust locust除了可以做接口的性能测试以外&#xff0c;做性能测试…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

树莓派(Raspberry Pi)常见的各种引脚介绍

本文将为您详细讲解树莓派&#xff08;Raspberry Pi&#xff09;常见的各种引脚&#xff0c;以及它们的特点、区别和优势。树莓派是一款非常受欢迎的单板计算机&#xff0c;它拥有多个 GPIO&#xff08;通用输入输出&#xff09;引脚&#xff0c;这些引脚可以用于各种电子项目和…

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

金智维售前总监屈文浩,将出席“ISIG-RPA超级自动化产业发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

问题:前端获取long型数值精度丢失,后面几位都为0

文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样&#xff0c;仔细看 data 的第17位之后 分析 该字段类型是long类型问题&#xff1a;前端接收到数据后&#xff0c;发现精度丢失&#xff0c;当返回的结果超过17位的时候&#xff0c;后面的全…

通知:T3学员领取资料391-395

各位T3学员∶本周VBA技术资料增加391-395讲&#xff0c;看到通知后联络我&#xff08;微&#xff1a;VBA6337&#xff09;免费领取资料。成果来之不易&#xff0c;您更新后请说声谢谢&#xff0c;感恩我的成果。 MF391&#xff1a;选择同颜色的单元格 MF392&#xff1a;连接范…

图文并茂的讲清楚Linux零拷贝技术

今天我们来聊一聊Linux零拷贝技术&#xff0c;今天我们以一个比较有代表性的技术sendfile系统调用为切入点&#xff0c;详细介绍一下零拷贝技术的原理。 1.零拷贝技术简介 Linux零拷贝技术是一种优化数据传输的技术&#xff0c;它可以减少数据在内核态和用户态之间的拷贝次数&…

图论入门题题解

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题_脑子不好的小菜鸟的博客-CSDN博客 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 拓扑排序 / 家谱…

寄存器(CPU工作原理)

文章目录 寄存器(CPU工作原理)1. 通用寄存器2. 字在寄存器中的存储3. 几条汇编指令4. 物理地址5. 16位结构的CPU6. 8086CPU给出物理地址的方法7. 段的概念8. 段寄存器9 . CS和IP10. 修改CS、IP的指令11. 代码段 寄存器(CPU工作原理) 一个典型的CPU由运算器、控制器、寄存器等器…

【好书推荐-第十期】《AI绘画教程:Midjourney使用方法与技巧从入门到精通》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

005-事件捕获、冒泡事件委托

事件捕获、冒泡&事件委托 1、事件捕获与冒泡2、事件冒泡示例3、阻止事件冒泡4、阻止事件默认行为5、事件委托6、事件委托优点 1、事件捕获与冒泡 2、事件冒泡示例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /…

VUE Element例子学习

参考:【前端】VueElement UI案例&#xff1a;通用后台管理系统-项目总结_vue elementui 管理系统-CSDN博客 之前参考的el-admin-web太复杂了&#xff0c;不是纯净的demo. 所以找了一圈资料&#xff0c;找到了这个博客&#xff0c;很合适&#xff0c;有例子的代码&#xff0c;…

【redis】模拟抢红包

1.使用的数据结构 思路是需要将指定数量的红包提前压栈&#xff0c;然后当用户来“抢红包”的时候&#xff0c;将红包取出来。 规定每个用户只能抢一次&#xff0c;并且最小金额是1块钱。 选择redis中的list结构模拟。 2.模拟发红包。 GetMapping("/give-red-packets&…