超分辨率第一章-SRCNN
第一个超分辨率模型-SRCNN (SISR),2014年提出
参考网址:【超分辨率】【深度学习】SRCNN pytorch代码(附详细注释和数据集)_srcnn代码-CSDN博客
模型位置:F:\Github下载\SRCNN_Pytorch_1.0-master
一.模型介绍
1 | #运行程序 |
SRCNN(2014年Dong等人提出,前端上采样框架 )
- 先将图片下采样预处理得到低分辨率图像
- 再利用双三次插值法将图片放大到目标分辨率(基于插值的上采样方法)
- 再用卷积核大小分别为 9×9、1×1、5×5的三个卷积层,分别进行特征提取,拟合 LR-HR 图像对之间的非线性映射以及将网络模型的输出结果进行重建,得到最后的高分辨率图像
- 图示:
二.数据集
以img-91作为训练集,Set5作为测试集。
三.模型搭建
1 | class SRCNN(nn.Module): |
四.模型训练
1.调用库
1 | import argparse #argparse用于编写用户友好的命令行接口。程序通过定义它期望从命令行接收的参数,然后 argparse 会自动从 sys.argv 解析出那些参数。这允许你的程序更加灵活和可配置 |
2.命令行参数设定
1 | #初始参数设定,argparse是Python标准库中的一个模块,用于编写用户友好的命令行接口。程序定义了它期望从命令行接收的参数,然后argparse会自动从sys.argv解析出那些参数。 |
3.加载数据集并进行预处理
1 | #预处理训练集 |
4.设置训练参数
1 | cudnn.benchmark = True #开启cudnn的benchmark模式,用于加速计算。但请注意,这可能会导致每次运行程序时,前馈计算的结果有细微差异,因为cudnn会寻找最优的卷积算法。 |
5.模型训练与验证
1 | for epoch in range(args.num_epochs): |
五.模型测试
1 | #运行程序 |
1.命令行参数设定
1 | parser = argparse.ArgumentParser() |
2.加载预训练权重
1 | cudnn.benchmark = True |
3.双三次插值(BICUBIC)调整图片尺寸
1 | model.eval() |
4.调整色彩空间并进行超分辨率重建
- 将调整后的图像从RGB色彩空间转换到YCbCr色彩空间,并仅对Y分量进行超分辨率重建(SRCNN等模型通常只处理亮度分量)。
- YCbCr是一种色彩空间,其中Y代表亮度分量(Luminance),Cb和Cr代表蓝色和红色的色度分量(Chrominance)。YCbCr色彩空间是YUV色彩空间的一种变种,广泛应用于视频压缩和图像处理中。
1 | image = np.array(image).astype(np.float32)# 将图像转换为numpy数组,并转换为float32类型 |
5.使用模型进行重建
1 | with torch.no_grad():# 关闭梯度计算,进行前向传播 |
6.结果
六.以单幅低分辨率图像实现超分辨率
1 | #将单幅低分辨率图像以原尺寸规模进行超分辨率处理 |
- 个人评价:该模型实现效果很差。若不提供原始高分辨率图像,几乎不能将低分辨率图像变为高分辨率图像。