【深度学习】 - 作业7: 图像超分辨率重建

news2025/1/18 6:46:45

课程链接: 清华大学驭风计划

代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com)


驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算机语言(刘知远教授) 以及数据结构与算法(邓俊辉教授)。本人是综合成绩第一名,除了数据结构与算法其他单科均为第一名。代码和报告均为本人自己实现,由于篇幅限制,只展示任务布置以及关键代码,如果需要报告或者代码可以私聊博主



机器学习部分授课老师为胡晓林教授,主要主要通过介绍回归模型,多层感知机,CNN,优化器,图像分割,RNN & LSTM 以及生成式模型入门深度学习


有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~



任务介绍

1. 任务简介

本次案例将使用生成对抗网络来实现4倍图像超分辨任务,输入一张低分辨率图像,生成器会生成一张4倍超分辨率的图像,如图1所示。生成对抗网络选用SRGAN结构 [1] 。本案例训练集使用DIV2K数据集 [2] ,包含有800张2K左右高分辨率的图像和800张对应的低分辨率图像;测试集使用DIV2K验证集 [2] 、Set5、Set14、B100、Urban100五个数据集,分别包括高分辨率图像和对应的低分辨率图像。训练集和测试集中的所有低分辨图像都是由高分辨率图像下采样得到,下采样方法为使用Matlab中的resize函数,scale factor为0.25,其余为默认参数(双三次插值)…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fgrwyhBC-1684513665932)(image/hw7/1684513090747.png)]


本案例使用 PSNR 与 SSIM 两个评价指标来衡量生成的高分辨率图像的质量,但指标的高低并不能直接反应图像质量的好坏,因此最终结果评价会加入人工评价,具体见第 4 部分的要求。



2. 方法描述

本案例涉及到两种内容损失函数,第一种为图像像素空间的MSE损失,第二种为图像特征空间的MSE损失。

像素空间的MSE损失表示为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VuQRqGu-1684513665933)(image/hw7/1684513382436.png)]


而特征空间的MSE损失如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MwegnFmQ-1684513665935)(image/hw7/1684513357823.png)]


除此之外还有对抗损失函数损失

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thAULTZM-1684513665936)(image/hw7/1684513288622.png)]



3. 参考程序

本案例提供了部分代码供使用,各程序简介如下:

create_data_lists.py : 下载好训练集和测试集后,根据提供的数据集地址来生成案例训练测试所需要的 csv 文件。

datasets.py : 定义符合 pytorch 标准的 Dataset 类,供读入数据,注意训练阶段每张图片采样了 100 个 patch 来扩充训练集。

imresize.py : 用 python 实现了 matlab resize 函数,用于图像下采样。目前python 第三方包中尚未有能得到与 matlab resize 函数一样结果的函数。

solver.py : 定义了一个 epoch 的训练过程。

models.py : 定义 SRGAN 模型结构,需要自行实现。

train.ipynb : 用于训练的 jupyter 文件,其中超参数需要自行调节,训练过程中可以看到模型损失的变化,每个 epoch 训练后都会进行模型保存。

test.ipynb : 加载指定的训练好的模型文件,在 5 个测试集上进行测试,计算并报告各个数据集上的 PSNR 和 SSIM 指标数值。

super_resolution.ipynb : 加载指定的训练好的模型文件,针对单个图片进行 4倍超分辨,并对结果进行可视化。

utils.py : 定义了一些可能会用到的函数,如图像数值格式转换等。

环境要求:python 包 pytorch, torchvision, numpy, csv, PIL, matplotlib, easydict,tqdm 等。

使用说明

  1. 下载训练集和测试集[5],更改 create_data_lists.py 中数据集存放的位置,指定输出文件夹,运行该文件生成案例所需的 csv 文件;
  2. 按照 SRGAN 网络结构完成 models.py;
  3. 运行 train.ipynb 训练网络,现在的训练模式为初始化生成器和判别器后,对生成器和判别器进行交替更新。这样的训练模式只能得到一个表现很差的模型。案例要求自行设计训练模式,如加入生成器的预训练等[4],更改 solver.py 和 train.ipynb 训练出一个性能好的模型;
  4. 运行 test.ipynb 对训练的模型进行测试,现在是对 5 个测试集进行 PSNR和 SSIM 的计算。其中包含了 DIV2K 数据集中的验证集,这个验证集也可以作为训练时用于调整参数的验证集(如需验证请自行修改 train.ipynb实现,不做要求);
  5. 模型训练好之后运行 super_resolution.ipynb 生成供人工测评的图片。

4. 要求和建议

 完成 models.py 文件,可参考原论文[1];

 调节 train.ipynb 中的超参数,使网络结构与原论文保持一致。运行 train.ipynb使案例可以跑通基础模式的训练;

 设计生成器和判别器的训练方式,可参考[4]中的训练方式,修改 solver.py 和train.ipynb 训练出性能更好的模型;

 运行 test.ipynb 对模型在 5 个测试集上进行测试,记录 PSNR 与 SSIM 结果;

 运行 super_resolution.ipynb,为 Set5 测试集中的每一张低分辨图片生成相应的高分辨图片,保留结果供人工评价;

 完成一个实验报告,内容包括生成器和判别器的训练方式说明、模型最佳参数和对应的测试集结果、Set5 测试集图片生成结果、自己所做的尝试和改进;

 提交所有的代码文件,注意 jupyter 文件保留结果,请不要提交模型文件;

 禁止任何形式的抄袭,借鉴开源程序务必加以说明。



报告


核心代码

生成器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ElWE3eEL-1684513665936)(image/hw7/1684513551487.png)]

判别器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CU4CSZjQ-1684513665937)(image/hw7/1684513524158.png)]



结果

对比了SRGAN 和SRGAN+的性能对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rEagHWM-1684513665938)(image/hw7/1684513575483.png)]

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

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

相关文章

Linux网络编程—Day10

Linux服务器程序规范 Linux服务器程序一般以后台进程形式运行。后台进程又称守护进程。它没有控制终端,因而也不会意外接收到用户输入。 守护进程的父进程通常是init进程(PID为1的进程);Linux服务器程序通常有一套日志系统&#…

Android 11.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

1.前言 在android11.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析…

chatgpt赋能Python-python_dill

Python dill - 更高效,更强大的对象序列化工具 在Python编程中,对象序列化是一个非常常见的操作,它将Python对象转换为可以存储或传输的格式。Python默认提供了pickle模块来实现序列化,但是pickle存在一些限制,比如无…

usb摄像头驱动-core层usb设备的注册

usb摄像头驱动-core层driver.c 文章目录 usb摄像头驱动-core层driver.cusb_bus_typeusb_device_matchusb_uevent usb_register_driver 在ubuntu中接入罗技c920摄像头打印的信息如下: 在内核中,/driver/usb/core/driver.c 文件扮演了 USB 核心驱动程序管…

复现ms17-010漏洞

复现ms17-010 复现条件环境操作效果 让我们来看看“hkl”在干嘛 复现 条件 1.靶机必须为win8以下。 2.靶机必须同攻击机处于相同网段(即倒数第二位相同)。 3.靶机的445端口必须要开启。 环境 虚拟机kali为攻击机,win7虚拟机为靶机。 kali…

SELECT LAST_INSERT_ID()自增主键冲突或者为0问题

问题 数据库为mysql; mapper.xml文件为mybatis-generator自动生成的; 连接池使用DruidDataSource; 最终生成的insertSelective如下: 出现问题: 主键冲突:[WMyBatisTraceInterceptor:54][com.mysql.jdbc.…

如何定位OOM

造成OOM的原因 定位OOM 针对第一和第二种情况需要定位OOM 系统已经挂了: 通过堆dump文件定位。 当JVM发生OOM时,自动生成DUMP文件: -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${目录} java -Xms10M -Xmx10M -XX:HeapDumpOnOutOfMemo…

c#中的json数据

JSON数据 数据传输的语言,用于前后端数据交互的语言,注意xml的区别。 json和xml的区别 xml:可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。 json:(JavaScript Object Notation, JS 对象简谱) 是…

昆仲被投企业「鲲游光电」近期完成新一轮数亿元融资,继续致力于探索前沿光电子领域产品与创新应用|昆仲·链

鲲游光电(North Ocean Photonics)是专注于晶圆级光学、光集成领域的高科技企业,总部位于中国上海。依托自身深厚的技术积累、高精度的制造工艺,鲲游光电通过融合集成光学与集成电路的创新思路,致力于探索前沿光子、光电子领域的实现与创新应用…

MyBatis环境搭建配置、增删改查操作、分页、事务操作、动态SQL、缓存机制、注解开发

MyBatis 文章目录 MyBatisXML语言简介用途各部分注解声明元素属性注释CDATA转义字符 搭建环境读取实体类创建实体与映射关系的文件 配置MyBatis创建工具类接口实现 Mybatis工作流程增删改查指定映射规则指定构造方法字段名称带下划线处理条件查询插入数据复杂查询和事务一对多查…

Codeforces Round 860 (Div. 2)

A Showstopper 题意:给你两个长度为n的数组a和b,每次操作你可以互换a[i]与b[i],问最终能否满足 思路:若a[i]>b[i],我们就进行操作。这样数组b元素都是较大的, 一定比不操作更优。最后判断是否满足条件…

Python中的异常处理机制

什么是异常与异常处理 异常就是错误 异常会导致程序崩溃并停止运行 能监控并捕获到异常&#xff0c;将异常部位的程序进行修理使得程序继续正常运行 异常的语法结构 try:<代码块1> 被try关键字检查并保护的业务代码except <异常的类型>:<代码块2> # 代码…

Mybatis源码细节探究:sqlSessionFactory.openSession()这个方法到底发生了什么?

给自己的每日一句 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽…

【笔记】【Javascript】浅面了解原型和原型链

前言 原型和原型链是学习前端必备知识笔记中有些个人理解后整理的笔记&#xff0c;可能有所偏差&#xff0c;也恳请读者帮忙指出&#xff0c;谢谢。 免责声明 为了方便&#xff0c;本文中使用的部分图片来自于网络&#xff0c;如有侵权,请联系博主进行删除&#xff0c;感谢其…

C++ 二分查找法 LeetCode:704. 二分查找

class Solution { public:int search(vector<int>& nums, int target) {int length nums.size();//计算容器长度int left 0;//0int right length-1;//5int middle 0;/*while(left<right){middle (leftright)/2;//middle (leftright)>>1;if(nums[middl…

mysql子查询嵌套

目录 前言 一、实际需求解决 1.方式1&#xff1a;自连接 2.方式2&#xff1a;子查询 二、单行子查询 1.操作符子查询 三、相关子查询 四、自定义语句 五、子查询的问题 1.空值问题 2.非法使用子查询 六、多行子查询 七、聚合函数的嵌套使用 八、多行子查询空值问题…

Python爬虫实战——获取指定博主所有专栏链接及博文链接

Python爬虫实战——获取指定博主所有专栏链接及博文链接 0. 前言1. 第三方库的安装2. 代码3. 演示效果 0. 前言 本节学习使用爬虫来爬取指定csdn用户的所有专栏下的文章 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Python解释器版…

带你学C带你飞-P16拾遗

自增运算符 #include <stdio.h> int main() {int i5,j;j i;printf("i%d,j%d",i,j);i5;ji;printf("i%d,j%d",i,j); }i:先使用i的值&#xff0c;再对i自身进行加一 i&#xff1a;先对i自身加一&#xff0c;再赋值给j 逗号运算符 条件运算符 三目运…

【Linux】冯诺依曼体系结构、操作系统概念、进程概念

文章目录 前言一、冯诺依曼体系结构1.简介冯诺依曼体系2.CPU3.存储器3.IO&#xff08;输入输出&#xff09;4.总结 二、操作系统&#xff08;OS&#xff09;1.操作系统是什么&#xff1f;2.为什么有操作系统&#xff1f;&#xff08;功能&#xff09;3.操作系统如何实现功能&am…

MySQL之触发器相关操作

1. 概念 触发器&#xff0c;就是⼀种特殊的存储过程。触发器和存储过程⼀样是⼀个能够完成特定功能、存储 在数据库服务器上的SQL⽚段&#xff0c;但是触发器⽆需调⽤&#xff0c;当对数据表中的数据执⾏DML操作时 ⾃动触发这个SQL⽚段的执⾏&#xff0c;⽆需⼿动调⽤。 在MyS…