超分辨重建——SRGAN网络训练自己数据集与推理测试(详细图文教程)

本文主要是介绍超分辨重建——SRGAN网络训练自己数据集与推理测试(详细图文教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》

😊总结不易,多多支持呀🌹感谢您的点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖


在这里插入图片描述

目录

  • 一、SRGAN网络
    • 1.1 标题
    • 1.2 作者
    • 1.3 发表时间
    • 1.4 摘要
    • 1.5 主要内容
      • 1.5.1 生成对抗网络架构
      • 1.5.2 损失函数
      • 1.5.3 实验结果
    • 1.6 论文总结
  • 二、源码包准备
  • 三、环境准备
    • 3.1 报错:AttributeError: module 'torch' has no attribute 'compile'
    • 3.2 报错:RuntimeError: Windows not yet supported for torch.compile
  • 四、数据集准备
  • 五、训练
    • 5.1 预训练权重下载
    • 5.2 配置文件参数修改
    • 5.3 启动训练
    • 5.4 实时可视化训练过程损失函数走势
    • 5.5 训练结果
  • 六、测试
    • 6.1 测试配置文件修改
    • 6.2 启动测试
  • 七、推理速度
    • 7.1 GPU
    • 7.2 CPU
  • 八、超分效果展示
  • 九、总结

一、SRGAN网络

1.1 标题

“Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network”

1.2 作者

Christian Ledig, Lucas Theis, Ferenc Huszár, Jose Caballero, Andrew Cunningham, Alejandro Acosta, Andrew Aitken, Alykhan Tejani, Johannes Totz, Zehan Wang, Wenzhe Shi

1.3 发表时间

2017年

1.4 摘要

SRGAN通过利用生成对抗网络(GAN)来实现单图像超分辨率重建。传统的方法如基于均方误差(MSE)的优化通常会导致图像平滑且缺乏细节,而SRGAN通过引入感知损失函数(perceptual loss),使得重建的图像不仅在像素级别上更接近高分辨率图像,而且在感知质量上也更加接近真实图像。

1.5 主要内容

1.5.1 生成对抗网络架构

生成器(Generator):采用残差网络(ResNet)结构,能够有效地学习从低分辨率图像到高分辨率图像的映射。
判别器(Discriminator):判别器的任务是区分生成的高分辨率图像和真实的高分辨率图像。通过对抗训练,生成器能够学习生成更加逼真的图像。

1.5.2 损失函数

内容损失(Content Loss):利用VGG网络提取的特征来计算生成图像和真实图像之间的差异。
对抗损失(Adversarial Loss):来自GAN的对抗训练,使得生成器能够骗过判别器,从而生成更加逼真的图像。
感知损失(Perceptual Loss):

感知损失结合内容损失和对抗损失,旨在提高重建图像的感知质量,使其在视觉上更接近真实图像。

1.5.3 实验结果

SRGAN在多种数据集上进行了测试,结果表明,与传统方法(如基于MSE的方法)相比,SRGAN生成的图像在感知质量上有显著提升。在用户研究中,SRGAN生成的图像被评为更接近真实图像。

1.6 论文总结

SRGAN通过生成对抗网络和感知损失函数的结合,显著提升了单图像超分辨率重建的效果。该方法不仅在像素级别上达到了更高的精度,同时在视觉感知上也大幅提升,生成的图像更加逼真,细节更加丰富。

二、源码包准备

本配套教程源码包中已经下载好了测试模型和预训练模型,部分训练集和测试集。源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:超分辨率重建SRGAN。获取下载链接。

Pytorch版的官网源码包地址:SRGAN

论文地址:论文

三、环境准备

下面是我自己训练和测试的环境,仅供参考,其它版本也行。

在这里插入图片描述

3.1 报错:AttributeError: module ‘torch’ has no attribute ‘compile’

该报错是因为yTorch 版本不支持 torch.compile 方法。这种方法是在 PyTorch 2.0 版本中引入的,而我使用的Pytorch为1.12版本

在windows电脑上我安装了2.0.1版Pytorch,继续报错。

3.2 报错:RuntimeError: Windows not yet supported for torch.compile

安装了2.0.1版本Pytorch,见下:

在这里插入图片描述

报错见下:

在这里插入图片描述

报错原因:在 PyTorch 2.0 中,torch.compile 目前不支持在 Windows 上运行。

解决办法:网络训练过程不加速,把compile关闭,具体见下:

在这里插入图片描述

关闭后,后续训练和测试,我继续在之前Pytotch1.12.1版本上操作。

解决该问题还有中方式使用 torch.jit.trace 替代torch.compile,后续没调试。

四、数据集准备

直接运行代码会自动下载数据集,某些情况下会下载中断,而且很慢,可以把数据集下载链接拷贝到迅雷中,速度较快,找数据集链接的方法见下,原论文中的数据集下载链接为:https://huggingface.co/datasets/goodfellowliu/SRGAN_ImageNet/resolve/main/SRGAN_ImageNet.zip

在这里插入图片描述

数据集下载好后,先通过split_images.py脚本将各种分辨率的图像裁剪为统一尺寸图片并保存到指定路径中。关于split_images.py脚本的具体用法,以及数据集的样子参考另外一篇博文:高分辨率图像分割成大小均匀图像

测试集的路径见下:

在这里插入图片描述

五、训练

源码中有net网络和gan网络,我主要讲解gan网络的训练和测试,net网络的训练和测试类同。源码中有2倍,4倍,8倍超分,本教程主要讲解4倍超分,其它超分类同。

5.1 预训练权重下载

直接运行脚本,代码也会自动下载预训练模型,如果自动下载出了问题,去下面文件中找到预训练模型下载链接:

在这里插入图片描述

自己下载的模型权重文件,存放到results\pretrained_models路径中:

在这里插入图片描述

5.2 配置文件参数修改

下面是常用参数,其它参数学生根据自己情况自行修改。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.3 启动训练

gan网络训练的主脚本为train_gan.py,在此脚本中修改训练用的配置文件路径,见下:

在这里插入图片描述
直接运行train_gan.py脚本开始训练:

在这里插入图片描述

部分训练过程见下:

在这里插入图片描述

5.4 实时可视化训练过程损失函数走势

在终端使用下面命令启动tensorboard实时可视化训练过程损失函数走势:

tensorboard --logdir=samples/logs/SRGAN_x4-SRGAN_ImageNet --port 6007

在这里插入图片描述

具体的可视化走势图见下:

在这里插入图片描述

5.5 训练结果

训练过程的模型权重文件自动保存到results\SRGAN_x4-SRGAN_ImageNet路径下:

在这里插入图片描述

训练过程中每一轮的模型权重文件保存到samples\SRGAN_x4-SRGAN_ImageNet路径下:

在这里插入图片描述

六、测试

6.1 测试配置文件修改

下面参数学者根据自己情况调整修改。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.2 启动测试

在这里插入图片描述

将上面required设置为False后,直接运行test.py脚本:

在这里插入图片描述

输出的评价指标如下:

在这里插入图片描述

测试结果保存到result_images\SRGAN_x4-SRGAN_ImageNet-Set14路径下:

在这里插入图片描述

七、推理速度

7.1 GPU

GPU测试环境:Nvidia GeForce RTX 3050。

120*90图像超分4倍 GPU平均推理时间:7.69ms/fps。

在这里插入图片描述

7.2 CPU

12th Gen Intel® Core™ i7-12700H 2.30 GHz。

下面是120*90图像超分4倍,CPU平均推理时间:302.31ms/fps。

在这里插入图片描述

八、超分效果展示

下面左图为bicubic上采样4倍,中间为原图,右图为SRGAN网络超分4倍结果图。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、总结

以上就是超分辨重建SRGAN网络训练自己数据集与推理测试详细过程,超分效果与我超分专栏里的其他网络做对比。

感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

这篇关于超分辨重建——SRGAN网络训练自己数据集与推理测试(详细图文教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028107

相关文章

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本