图像去噪——PMRID训练自己数据集及推理测试(详细图文教程)

目录

  • 一、源码包准备
  • 二、数据集准备
    • 2.1 提取数据集名称
    • 2.2 .txt报错问题
      • 2.2.1 正确格式
      • 2.2.2 错误格式
  • 三、修改配置参数
  • 四、训练及保存模型权重
    • 4.1 训练
    • 4.2 保存模型权重文件
  • 五、模型推理测试
    • 5.1 导入测试集
    • 5.2 测试
    • 5.3 测试结果
      • 5.3.1 测试场景1
      • 5.3.2 测试场景2
    • 5.4 推理速度
      • 5.4.1 CPU推理
      • 5.4.2 GPU推理
  • 六、总结

一、源码包准备

RMRID最原始的版本是MegEngine框架的,后有了Pytorch版本,本教程主要是Pytorch版本的。

官网MegEngine版本源码:PMRID(MegEngine)

官网Pytorch版本源码:PMRID(Pytorch)

论文地址:论文

我自己提供的源码包是在官网基础上修改过的,其中有一些我添加的代码,我提供的源码包链接为:网盘源码包 ,提取码:he6m

我提供的源码包下载并解压后的文件内容如下:
在这里插入图片描述

二、数据集准备

数据集有很多,看自己需要哪个数据集,官网提到的Kaggle数据集下载链接为:Kaggle

打开网址后直接下载即可,如下:

在这里插入图片描述
如果你想用.RAW格式的原始数据训练,在读入数据这一部分,得修改代码,读入.RAW格式数据的代码如下,关于读取.RAW格式数据和.dng格式数据的方法,查看另外一篇博文读取.RAW数据和.dng数据

在这里插入图片描述

如果数据集是.jpg,.png,.bmp等格式的8bit数据,则保持默认即可,如下:

在这里插入图片描述

2.1 提取数据集名称

在提供的脚本文件中,通过generate_list_sidd.py,将含噪图像名称和真实无噪图像名称提取到一个.txt文件中,如下:

在这里插入图片描述

从生成好的train_list_sidd.txt文件中随机剪切一部分到其它两个文件Sony_val_list.txt和Sony_test_list.txt中,作为验证集和测试集,如下:

在这里插入图片描述

2.2 .txt报错问题

上一步骤中提取图片名称到.txt文件中,注意.txt文件中最后一行的空行一定要删除,不然就会报错,如下:

2.2.1 正确格式

在这里插入图片描述

2.2.2 错误格式

在这里插入图片描述

三、修改配置参数

可以修改的超参数如下

训练轮数:epoch
训练批次大小:batch_size
学习率:learning_rate
使用GPU或CPU:device
日志文件路径:logs_path
模型保存路径:params_path
训练集路径:train_list_path
验证集路径:value_list_path
是否加载预训练权重文件:is_load_pretrained
预训练训中路径:pretrained_path

源码包中具体修改的地方如下,在mian.py脚本中:

在这里插入图片描述

四、训练及保存模型权重

4.1 训练

修改好上面参数后就可以开始训练了,训练前先打开训练命令,如下:

在这里插入图片描述

运行脚本main.py后就开始训练了,如下:

在这里插入图片描述

4.2 保存模型权重文件

训练过程中会将每个epoch的模型权重文件保存在params路径下,如下:

在这里插入图片描述
模型大小为3.98M

五、模型推理测试

训练好后,进行推理前先打开测试命令,如下:

在这里插入图片描述

5.1 导入测试集

由于代码架构设计,验证集的对应的变量名和测试集对应的变量名是一个,所以直接将测试集路径替换掉验证集路径,如下:

在这里插入图片描述

5.2 测试

修改好上面参数后,运行脚本main.py,会在output路径中生成测试结果:

在这里插入图片描述

5.3 测试结果

5.3.1 测试场景1

左侧为原始含噪图像,右侧为模型测试结果

在这里插入图片描述

5.3.2 测试场景2

在这里插入图片描述

5.4 推理速度

5.4.1 CPU推理

我测试的电脑为i7-12700H 2.3GHz,测试图片大小为256*256,CPU上测试的平均推理时间为40ms,部分如下:

在这里插入图片描述

5.4.2 GPU推理

GPU上的平均推理时间为:6ms,部分如下:

在这里插入图片描述

六、总结

以上就是使用PMRID训练自己数据集及推理测试的详细图文教程,由于推理速度达不到要求,后续我没有再继续研究,且本方法要结合相机的iso参数生成噪声训练集才能达到效果最好,不同学者的训练测试结果有所不同是正常的。

后续有研究更深入的学者欢迎一起讨论学习。

总结不易,多多支持,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jsp+servlet+图书交流平台 有filter过滤器

在线图书推荐与交流平台 随着数字化的进展和人们对持续学习的追求,在线资源变得越来越受欢迎。对于众多读者来说,找到合适的书籍和与其他读者交流阅读体验是非常有价值的。为了满足这一需求,我们提出了一个在线图书推荐与交流平台的设计。此…

千梦网创:赚钱就是服侍好双爹

“爹啊,我没钱用啦,给我啃一下。” 想赚钱,最快的方式就是啃爹。 不管你做什么项目,同行永远都是我们的爹。 跟着爹走,有吃有喝不用愁。 跟着老爹走,蛋花汤里加骨头。 小时候父亲总是把我们高高的举过…

查询mysql服务器当前时区设置、session当前时区设置

使用命令SELECT global.time_zone;可以查询mysql服务器的当前时区设置,例如: 使用命令SELECT session.time_zone;可以查询session的当前时区设置,例如:

Vue 3 开发中遇到的问题及解决方案(fix bug)

开发环境:mac系统,node版本: 16.15.0 版本兼容问题 vite v3.2.4 building for development... hasInjectionContext is not exported by node_modules/pinia/node_modules/vue-demi/lib/index.mjs, imported by node_modules/pinia/dist/pini…

【算法题】冠亚军排名,奖牌榜排名(js)

解法&#xff1a; function solution(lines) {const list [];for (let i 0; i < lines.length; i) {const line lines[i];const [country, gold, silver, bronze] line.split(" ");list.push({country,gold: gold - 0,silver: silver - 0,bronze: bronze - 0…

Java 数据结构篇-用数组、堆实现优先级队列

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 优先级队列说明 2.0 用数组实现优先级队列 3.0 无序数组实现优先级队列 3.1 无序数组实现优先级队列 - 入队列 offer(E value) 3.2 无序数组实现优先级队列 - 出…

RocketMQ可视化工具 打包遇到的yarn intall 问题

文章目录 RocketMQ可视化工具1.github上下载2.修改参数3.运行4.打包5.出错6.解决7.重试8.再解决9.很奇怪运行没错&#xff0c;但是测试错啦10.不想深究&#xff0c;直接跳过测试11.展示成功 RocketMQ可视化工具 1.github上下载 下载地址 https://github.com/apache/rocketmq-…

深度学习的目标检测算法综述

信息记录材料 2022年10月 第23卷第10期 【摘要】目标检测是深度学习的一个重要应用&#xff0c;目前在智能驾驶、工业检测相关领域都获得应用&#xff0c;具有重要的现实意义。本文对基于深度学习目标检测算法原理和应用情况进行简述&#xff0c;首先介绍结合区域提取和卷积神经…

Corona最新渲染器Corona11详解,附送下载地址

近日&#xff0c;Corona进行了大版本更新&#xff0c;发布了最新的Corona11。这次更新&#xff0c;包含众多新功能和新修复&#xff0c;借助 Corona 11 用户可将作品提升到更高的创作水准&#xff0c;更真实可感的视觉水平。 那么更新了那些呢&#xff1f;一起来看看吧&#x…

深度学习学习顺序梳理

https://www.bilibili.com/video/BV1to4y1G7xq/?spm_id_from333.999.0.0&vd_source9607a6d9d829b667f8f0ccaaaa142fcb 1.吴恩达机器学习课程 已学完&#xff0c;时间较久了&#xff0c;后续可以重新听一遍&#xff0c;整理一下笔记 2. 白板推导读西瓜书 统计学习方法看…

当你打开终端并输入命令时会发生什么?(上)

哈喽大家好&#xff0c;我是咸鱼 参加过校招面试的小伙伴们肯定对下面这道面试题很熟悉&#xff1a;“当你在浏览器输入一段网址后会发生什么&#xff1f;”。这道面试题可以说是很经典了&#xff0c;因为其涉及大量网络协议&#xff0c;可以非常直观的看出小伙伴们对计算机网…

光栅化渲染:光栅化算法实现

光栅化是将图元转换为二维图像的过程。 该图像的每个点都包含颜色和深度等信息。 因此&#xff0c;对图元进行光栅化由两部分组成。 第一个是确定窗口坐标中整数网格的哪些方格被图元占据。 第二个是为每个这样的方块分配颜色和深度值。 &#xff08;OpenGL 规范&#xff09; N…

C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit

系列文章目录 C11&14新标准——Variadic templates&#xff08;数量不定的模板参数&#xff09; C11&14新标准——Uniform Initialization&#xff08;统一初始化&#xff09;、Initializer_list&#xff08;初始化列表&#xff09;、explicit 文章目录 系列文章目录1…

Unity_使用FairyGUI搭建登录页面

Unity_使用FairyGUI搭建登录页面 1. 使用FairyGUI准备一个UI界面&#xff0c;例如&#xff1a;以下登录 2. 发布导出&#xff08;发布路径设置为Unity的Asset下任何路径&#xff09; 3. Unity编辑器安装FairyGUI包资源&#xff08;在资源商店找见并存储为我的资源&#xff0c;…

管理的五大过程和十大知识领域

PMBOK五大过程组是什么&#xff1f; PMBOK五大过程组是&#xff1a;启动过程、规划过程、执行过程、监控过程、收尾过程。 各用一句话概括项目管理知识体系五大过程组&#xff1a; 1、启动过程组&#xff1a;作用是设定项目目标&#xff0c;让项目团队有事可做&#xff1b; 2、…

TIGRE: a MATLAB-GPU toolbox for CBCT image reconstruction

TIGRE: 用于CBCT图像重建的MATLAB-GPU工具箱 论文链接&#xff1a;https://iopscience.iop.org/article/10.1088/2057-1976/2/5/055010 项目链接&#xff1a;https://github.com/CERN/TIGRE Abstract 本文介绍了基于层析迭代GPU的重建(TIGRE)工具箱&#xff0c;这是一个用于…

因光而遇·领杭设计,Yeelight易来设计师梦享会在杭州成功举办

12月13日&#xff0c;Yeelight易来设计师梦享会“因光而遇领杭设计”在杭州举办。本次活动邀请《梦想改造家》设计师朱晓鸣参与&#xff0c;与众多易来照明设计师进行了深入对话&#xff0c;分享前沿的设计理念&#xff0c;探讨智能灯光在家装设计中的应用。 易来品牌总监李田…

算法:最长公共前缀(横向扫描和纵向扫描)

横向扫描 时间复杂度 O(m * n)&#xff0c;空间复杂度O(1) /*** param {string[]} strs* return {string}*/ var longestCommonPrefix function(strs) {// 先把第一个字符串拿出来let str strs[0]// 用 startsWith 检查数组中每个字符串是否以当前字符串为前缀while(!strs.e…

高精度电压源的作用是什么

高精度电压源是一种用于提供稳定和精确电压输出的电子设备。它们在实验室研究、工业生产和医疗器械等各种应用中发挥着重要作用。下面西安安泰来为大家详细介绍高精度电压源的作用和用途等内容。 一、高精度电压源的作用 提供准确的电压值&#xff1a;高精度电压源可以提供非常…

银河麒麟重置密码

桌面版银河麒麟重置密码 1.选择界面按e 出现银河麒麟系统选择的页面&#xff0c;我们点击键盘上的“e”键&#xff0c;进入电脑启动项编辑页 2.编辑启动页 在启动项编辑页面&#xff0c;我们将光标移动到linux这一行的最后&#xff0c;然后输入“init/bin/bash consoletty0”…