【传知代码】自监督高效图像去噪(论文复现)
前言:在数字化时代,图像已成为我们生活、工作和学习的重要组成部分。然而,随着图像获取方式的多样化,图像质量问题也逐渐凸显出来。噪声,作为影响图像质量的关键因素之一,不仅会降低图像的视觉效果,还可能影响图像分析、处理和识别的准确性。因此,图像去噪技术一直是计算机视觉领域的研究热点。
本文所涉及所有资源均在传知代码平台可获取
目录
概述
演示效果
核心代码
写在最后
概述
随着深度学习的发展,各种图像去噪方法的性能不断提升。然而,目前的工作大多需要高昂的计算成本或对噪声模型的假设。为解决这个问题,该论文提出了一种自监督学习方法。该方法使用一个简单的两层卷积神经网络和噪声到噪声损失(Noise to Noise Loss),在只使用一张测试图像作为训练样本的情况下,实现了低成本高质量的图像去噪,本文复现一篇 论文 相关内容,该论文提出的方法主要包含三个部分:成对下采样、残差损失、一致性损失。
该成对下采样器将原始图像下采样为长宽只有原先一半的子图。具体地,其通过将图像分割为大小为 2 × 2 的非重叠补丁,并将每个补丁的对角线像素取平均值并分配给第一个子图,然后将反对角线像素取平均值并分配给第二个子图像。该成对下采样器的示意图如下所示:

在非自监督的情况下,损失函数一般采用噪声图像与干净图像之间平方差的形式:

在自监督的情况下,没有干净图像作为训练目标,则可以将两张噪声图像子图互为训练目标,即噪声到噪声损失:

基于噪声独立性假设,可以证明这两种损失的期望值相同。
考虑到残差损失只使用了噪声图像子图训练模型,而测试时需要整张噪声图像作为输入,为了使网络对子图的噪声估计与对原图的噪声估计保持一致,作者还引入了一个一致性损失函数:

总的损失如下所示:

演示效果
进入工作目录。如果是Linux系统,请使用如下命令:
unzip Image_Denoising.zip
cd Image_Denoising
代码的运行环境可通过如下命令进行配置:
pip install -r requirements.txt
如果希望在本地运行程序,请运行如下命令:
python main.py
如果希望在线部署,请运行如下命令:
python main-flask.py
如果希望使用自己的文件路径或改动其他实验设置,请在文件config.json中修改对应参数。以下是参数含义对照表:
| 参数名 | 含义 |
|---|---|
| image | 输入的原始图像路径,默认为"dog.jpg",即我提供的样例 |
| learning_rate | 学习率 |
| epoch_count | 训练轮数 |
| step_size | 学习率衰减周期 |
| gamma | 学习率衰减比 |
| degree | 噪声程度,默认为0.2,范围是0~1 |
| max_bytes | 输入文件大小限制,默认为10240,即10KB,仅用于在线部署限制输入 |
配置环境并运行main.py脚本,效果如下:

核心代码
这段代码实现了一个用于图像去噪的神经网络模型的训练过程,主要包括以下几个部分:
1)下采样函数 diag_sample:该函数用于将输入的图像下采样成两张长宽只有原先一半的子图。首先将输入图像分割成2x2的补丁,然后对每个补丁提取出对角线元素平均值作为第一个子图,提取出反对角线元素平均值作为第二个子图。
2)噪声估计网络 NoisePredictor:这是一个用于估计图像噪声的神经网络模型。它包括若干个卷积层和激活函数,最终输出与输入图像通道数相同的图像,用于表示估计的图像噪声。
3)训练函数 train_once:该函数用于对噪声估计网络进行一轮训练。在训练过程中,通过下采样函数得到噪声图像的子图,然后利用噪声估计网络估计子图的干净图像,计算残差损失和一致性损失,并根据总损失进行梯度反向传播和模型参数更新。
4)加噪函数 add_noise:该函数接受一个图像和噪声程度,输出加入噪声后的图像。在这里使用了正态分布生成随机噪声,并将噪声加到输入图像上,最后通过 clip 函数将像素值限制在 0 到 1 之间。
这些部分共同构成了图像去噪神经网络模型的训练流程,代码如下:
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as npdef diag_sample(image):'''下采样函数,输入图像,输出两张长宽只有原先一半的子图'''# 分割成2x2的补丁height = int(image.shape[2] / 2)width = int(image.shape[3] / 2)image_patch = image[:, :, 0: height * 2, 0: width * 2].view(image.shape[0], image.shape[1], height, 2, width, 2).permute(0, 1, 2, 4, 3, 5)# 对角线元素取平均作为第一个子图image_sub1 = (image_patch[:, :, :, :, 0, 0] +image_patch[:, :, :, :, 1, 1]) / 2# 反对角线元素取平均作为第二个子图image_sub2 = (image_patch[:, :, :, :, 0, 1] +image_patch[:, :, :, :, 1, 0]) / 2return image_sub1, image_sub2class NoisePredictor(nn.Module):'''噪声估计网络,输入图像,输出估计的图像噪声'''def __init__(self, channels=3):super(NoisePredictor, self).__init__()self.net = nn.Sequential(nn.Conv2d(channels, 52, 3, padding=1),nn.LeakyReLU(negative_slope=0.2, inplace=True),nn.Conv2d(52, 52, 3, padding = 1),nn.LeakyReLU(negative_slope=0.2, inplace=True),nn.Conv2d(52, channels, 1))def forward(self, x):return self.net(x)def train_once(image_noise, model, optimizer):'''对模型进行一轮训练'''# 用于计算差方和mse_loss = nn.MSELoss(reduction='sum')model.train()optimizer.zero_grad()# 生成噪声的子图image_noise_s1, image_noise_s2 = diag_sample(image_noise)# 估计噪声图像子图的干净图像image_s1_clean = image_noise_s1 - model(image_noise_s1)image_s2_clean = image_noise_s2 - model(image_noise_s2)# 估计噪声图像的干净图像image_clean = image_noise - model(image_noise)# 生成噪声图像的干净图像的子图image_clean_s1, image_clean_s2 = diag_sample(image_clean)# 残差损失loss_res = (mse_loss(image_s1_clean, image_noise_s2) + mse_loss(image_s2_clean, image_noise_s1)) / 2# 一致性损失loss_con = (mse_loss(image_s1_clean, image_clean_s1) + mse_loss(image_s2_clean, image_clean_s2)) / 2# 总损失loss = loss_res + loss_con# 梯度反向传播loss.backward()# 更新模型参数optimizer.step()def add_noise(image, degree):'''输入图像和噪声程度(0~1),输出加入噪声的图像'''noise = np.random.normal(0, degree, image.shape)noisy_image = np.clip(image + noise, 0, 1)return noisy_image
写在最后
在探索自监督高效图像去噪的旅程中,我们见证了技术的飞速进步与无限潜力。通过深度学习技术的赋能,自监督学习在图像去噪领域展现出了卓越的成效。这种方法不仅避免了大量标记数据的依赖,还通过内部生成的信息进行训练,大幅提高了模型的学习效率和泛化能力,随着技术的不断发展和优化,我们有理由相信自监督高效图像去噪将在更多领域展现出其独特的价值。我们期待看到更多创新性的研究和应用,让这项技术为人类社会带来更多的福祉和进步。在这个充满挑战和机遇的时代,让我们共同期待并见证这一技术的美好未来。
详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。
【传知科技】关注有礼 公众号、抖音号、视频号

相关文章:
【传知代码】自监督高效图像去噪(论文复现)
前言:在数字化时代,图像已成为我们生活、工作和学习的重要组成部分。然而,随着图像获取方式的多样化,图像质量问题也逐渐凸显出来。噪声,作为影响图像质量的关键因素之一,不仅会降低图像的视觉效果…...
linnux上安装php zip(ZipArchive)、libzip扩展
安装顺序: 安装zip(ZipArchive),需要先安装libzip扩展 安装libzip,需要先安装cmake 按照cmake、libzip、zip的先后顺序安装 下面的命令都是Linux命令 1、安装cmake 确认是否已安装 cmake --version cmake官网 未安装…...
油封制品中各种橡胶材料的差异
在机械系统中,油封起着关键的作用,其主要功能是防止润滑剂泄漏和污染物进入。油封的性能很大程度上取决于所用的橡胶材料。不同的橡胶化合物各有其独特的特性、优点和应用场景。本文将详细探讨油封制品中各种橡胶材料的差异,重点分析其特性、…...
梳理清楚的echarts地图下钻和标点信息组件
效果图 说明 默认数据没有就是全国地图, $bus.off("onresize")是地图容器变化刷新地图适配的,可以你们自己写 getEchartsFontSize是适配字体大小的,getEchartsFontSize(0.12) 12 mapScatter是base64图片就是图上那个标点的底图 Ge…...
【busybox记录】【shell指令】readlink
目录 内容来源: 【GUN】【readlink】指令介绍 【busybox】【readlink】指令介绍 【linux】【readlink】指令介绍 使用示例: 打印符号链接或规范文件名的值 - 默认输出 打印符号链接或规范文件名的值 - 打印规范文件的全路径 打印符号链接或规范文…...
C++之vector
1、标准库的vector类型 2、vector对象的初始化 3、vector常用成员函数 #include <vector> #include <algorithm> #include <iostream> using namespace std;typedef vector<int> INTVEC;// 普通方法 //void showVec(const INTVEC& vec) // 这边如…...
【简单介绍下idm有那些优势】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
MyBatis系统学习 - 使用Mybatis完成查询单条,多条数据,模糊查询,动态设置表名,获取自增主键
上篇博客我们围绕Mybatis链接数据库进行了相关概述,并对Mybatis的配置文件进行详细的描述,本篇博客也是建立在上篇博客之上进行的,在上面博客搭建的框架基础上,我们对MyBatis实现简单的增删改查操作进行重点概述,在MyB…...
Generative Action Description Prompts for Skeleton-based Action Recognition
标题:基于骨架的动作识别的生成动作描述提示 源文链接:https://openaccess.thecvf.com/content/ICCV2023/papers/Xiang_Generative_Action_Description_Prompts_for_Skeleton-based_Action_Recognition_ICCV_2023_paper.pdfhttps://openaccess.thecvf.c…...
动手学深度学习(Pytorch版)代码实践 -深度学习基础-02线性回归基础版
02线性回归基础版 主要内容 数据生成:使用线性模型 ( y X*w b ) 加上噪声生成人造数据集。数据读取:通过小批量读取数据集来实现批量梯度下降,打乱数据顺序并逐批返回特征和标签。模型参数初始化:随机初始化权重和偏置&#x…...
信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用
更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填;除特 殊说明外,判断题 1.5 分,选择题 3 分) 源码 #in…...
期权具体怎么交易详细的操作流程?
期权就是股票,唯一区别标的物上证指数,会看大盘吧,交易两个方向认购做多,认沽做空,双向t0交易,期权具体交易流程可以理解选择方向多和空,选开仓的合约,买入开仓和平仓没了࿰…...
系统架构设计师【第3章】: 信息系统基础知识 (核心总结)
文章目录 3.1 信息系统概述3.1.1 信息系统的定义3.1.2 信息系统的发展3.1.3 信息系统的分类3.1.4 信息系统的生命周期3.1.5 信息系统建设原则3.1.6 信息系统开发方法 3.2 业务处理系统(TPS)3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能 …...
Linux 驱动设备匹配过程
一、Linux 驱动-总线-设备模型 1、驱动分层 Linux内核需要兼容多个平台,不同平台的寄存器设计不同导致操作方法不同,故内核提出分层思想,抽象出与硬件无关的软件层作为核心层来管理下层驱动,各厂商根据自己的硬件编写驱动…...
游戏子弹类python设计与实现详解
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、子弹类设计思路 1. 属性定义 2. 方法设计 三、子弹类实现详解 1. 定义子弹…...
Python基础学习笔记(六)——列表
目录 一、一维列表的介绍和创建二、序列的基本操作1. 索引的查询与返回2. 切片3. 序列加 三、元素的增删改1. 添加元素2. 删除元素3. 更改元素 四、排序五、列表生成式 一、一维列表的介绍和创建 列表(list),也称数组,是一种有序、…...
帝国CMS跳过选择会员类型直接注册方法
国CMS因允许多用户组注册,所以在注册页面会有一个选择注册用户组的界面,即使网站只用了一个用户组也会出现。 如果想去掉这个页面,直接进入注册页面,那么可按以下办法修改 打开 e/class/user.php 文件 查找: $chan…...
【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
黑马es数据同步mq解决方案
方式一:同步调用 优点:实现简单,粗暴 缺点:业务耦合度高 方式二:异步通知 优点:低耦含,实现难度一般 缺点:依赖mq的可靠性 方式三:监听binlog 优点:完全解除服务间耦合 缺点:开启binlog增加数据库负担、实现复杂度高 利用MQ实现mysql与elastics…...
通过LLM多轮对话生成单元测试用例
通过LLM多轮对话生成单元测试用例 代码 在采用 随机生成pytorch算子测试序列且保证算子参数合法 这种方法之前,曾通过本文的方法生成算子组合测试用例。目前所测LLM生成的代码均会出现BUG,且多次交互后仍不能解决.也许随着LLM的更新,这个问题会得到解决.记录备用。 代码 impo…...
数据获取指南
教程:数据获取指南 作者:太虚野老 目录 说明: 3 数据获取指南 4 计划:创建和填充示例表 4 基础数据检索 4 过滤和排序结果 6 处理多表(JOIN)和函数 7 SELECT 语句修饰符 8 说明: 1.MariaDB版本:10.11.14 2.开发工具:dbeaver(版本25.3.0) 3.操作系统:debian12…...
【Perplexity PubMed医学搜索实战指南】:3大颠覆性技巧让临床研究效率提升300%
更多请点击: https://intelliparadigm.com 第一章:Perplexity PubMed医学搜索实战指南概述 Perplexity AI 作为新一代推理型搜索引擎,其“学术模式”深度集成 PubMed 元数据与语义理解能力,可显著提升临床研究者、循证医学实践者…...
积分、微分、指数和对数运算放大电路基础知识及Multisim电路仿真
目录 2.5 积分运算放大电路 2.5.1 积分运算放大电路基础知识 一、电路结构 二、核心原理与公式 三、关键特性 四、典型应用场景 2.5.2 积分运算放大电路Multisim电路仿真 2.5.2.1 输入方波 2.5.2.2 输入三角波 2.5.2.3 输入正弦波 2.6 微分运算放大电路 2.6.1 微分…...
AI编程助手集成飞书MCP:零依赖单文件实现工作流自动化
1. 项目概述:连接AI编程助手与飞书工作流 如果你和我一样,每天的工作流都离不开飞书(Lark)——写文档、拉群沟通、排会议日程、更新多维表格,然后在IDE和浏览器之间来回切换,那么你一定会对这个项目感兴趣…...
Serverless平台为何总让人“又爱又恨”?揭秘Lovable设计的3层情感化架构(开发者体验×运维韧性×业务敏捷)
更多请点击: https://intelliparadigm.com 第一章:Serverless平台为何总让人“又爱又恨”? Serverless 架构在现代云原生开发中已成为主流选择,它承诺“无需管理服务器”,让开发者专注业务逻辑。然而,在真…...
DLP Pico技术与近眼显示系统设计解析
1. DLP Pico技术解析:微镜阵列如何重塑显示未来 在2014年,德州仪器(TI)推出了一项颠覆性的显示技术——基于DLP TRP架构的Pico芯片组。这项技术的核心是一块布满微小铝镜的芯片,每个微镜尺寸仅5.4微米,比人类头发直径的十分之一还…...
医疗AI数据偏见:从耳镜图像分类看模型泛化陷阱与实战避坑指南
1. 项目概述与核心挑战作为一名在医疗AI领域摸爬滚打了十多年的从业者,我见过太多“实验室里天花乱坠,临床上寸步难行”的模型。最近,我和团队深入剖析了一项关于利用人工智能(AI)进行中耳炎耳镜图像分类的研究&#x…...
iPaaS平台推荐——五款产品能力与适用场景观察
在数字化转型加速推进的当下,iPaaS(集成平台即服务)正成为企业打通数据孤岛、连接应用生态的核心基础设施。面对市场上类型各异的集成平台,如何根据自身需求选择合适的解决方案,成为众多企业关注的重点。本文基于公开资…...
macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南
macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS设计的开源桌面歌词显示工具…...
2026金铲铲之战电脑版模拟器实测:选对模拟器轻松上分
一、实测前提说明作为拥有三年游玩经验的金铲铲之战老弈士,从手机端切换到电脑端游玩后,大屏在阵容运营、棋子对位、选秀博弈上的优势十分突出:手机小屏不仅看不清棋子星级、装备细节,频繁触屏操作还容易误触卖错棋子、放错站位&a…...
