SRCNN超分辨率Pytorch实现,代码逐行讲解,附源码

VIPSRCNN超分辨率Pytorch实现,代码逐行讲解,附源码
超分辨率,就是把低分辨率(LR, Low Resolution)图片放大为高分辨率(HR, High Resolution)的过程。通过CNN将图像Y 的特征提取出来存到向量中。用一层的CNN以及ReLU去将图像Y 变成一堆堆向量,即feature map。把提取到的特征进一步做非线性映射,加大网络深度,提高网络复杂性。结合了前面得到的补丁来产生最终的高分辨率图像。实验步骤。
开通可读全文 ·3w 人阅读
最低0.47元/天 解锁文章

目录

0.图像超分辨率

1.SRCNN介绍

训练过程

损失函数

 个人对SRCNN训练过程的理解

2.实验常见问题和部分解读

1. torch.utils.data.dataloader中DataLoader函数的用法

2.SRCNN图像颜色空间转换原因以及方法?

3. model.parameters()与model.state_dict()的区别

4. .item()函数的用法?

5.最后的测试过程步骤?

6.argparse的使用以及定义

7.unsqueeze与squeeze的使用 

1.unsqueeze用法:在数组原来维度索引i之间增加一个维度

2.Squeeze用法:挤压掉tensor数据中维度特征数为1的维度

8.对Python之if __name__ == ‘__main__‘的理解。

9.自定义数据集步骤?

3.Code部分解读

model.py

dataset.py

prepare.py(制作自定义的训练和验证的h5格式的数据集)

train.py(训练SRCNN模型,得到最优参数)

utils.py(工具包)

test.py

4.实验结果展示


基本知识:像素、图像大小、图像分辨率

像素是组成所有数字图像的彩色方块,图像大小是图像宽度和高度的像素数量。而图像分辨率则是用来度量数字图像的质量,是每英寸图像内有多少个像素点,分辨率的单位为 PPI,通常叫做像素每英寸。图像分辨率可以用来改变图像的清晰度,也可以根据图像大小来控制图像打印的大小。

0.图像超分辨率

现有主流的图像超分辨率的方法通常可以分为2种:基于图像插值和基于深度学习的方法

图像的超分辨率从图像角度可以分为单张图像的超分辨率(Single Image Super Resolution,SISR)和多帧图像的超分辨率(Multi-frame Super Resolution,VSR)。我们从单张图像的超分辩开始学习。单张图像超分问题实际上是一个逆问题,一张低分辨率的图像有很多张的高分辨率的图像与其对应,所以我们要有一个准确的高分辨率图像作为先验知识进行规范化约束。
 

图像超分辨率: 根据图像先验知识,单图像超分辨率算法可分为四种类型:预测模型、基于边缘的方法、图像统计方法和基于面片(或基于实例)的方法。大多数SR算法侧重于灰度或单通道图像超分辨率。对于彩色图像,大多数方法首先将问题转换到不同的颜色空间(YCbCr或YUV),并且SR仅应用于亮度通道。

本文提到的SRCNN具有以下优点:采用CNN,直接学习低分辨率和高分辨率图像之间的端到端映射。此外,图像块的提取和聚集也是在卷积层计算,所以也参与了优化。在本文中,整个SR的pipeline完全是通过学习获得的,几乎没有预/后处理。

单帧图像的超分辨率(SR),旨在从单帧低分辨率图像中恢复高分辨率图像,是计算机视觉中的一个经典问题。解决有难度,因为对于任何给定的低分辨率像素,都存在多种解决方案。换句话说,这是一个难以确定的 inverse 问题,其解决方案不是唯一的。通常是通过强先验知识来约束解的空间。为了学习先验知识,当前大多采用基于实例(example)的策略。可以基于同一图像样本的内部结构的学习, 也可以从外部的低分辨率和高分辨率样本对中学习映射函数 。基于外部实例的方法可以被制定为通用的图像超分辨率,也可以根据所提供的训练样本,设计成适合特定领域的任务,如人脸幻觉。
基于稀疏编码(SC)基于外部实例的SR代表方法之一。主要有以下步骤:首先,从输入图像中裁剪出重叠的图像块,并进行预处理(去平均值和归一化)。然后,这些图像块被一个低分辨率的字典编码,得到稀疏系数,然后被传入高分辨率字典,用于重建高分辨率图像块。重叠的重建图像块被汇总(例如,通过加权平均)以产生最终输出。这些方法特别注意学习和优化字典或建立有效的映射函数。

1.SRCNN介绍

SRCNN= super resolution (超分辨率)+ CNN(卷积神经网络)

超分辨率,就是把低分辨率(LR, Low Resolution)图片放大为高分辨率(HR, High Resolution)的过程。

图像特征提取层:通过CNN将图像Y 的特征提取出来存到向量中。用一层的CNN以及ReLU去将图像Y 变成一堆堆向量,即feature map。

非线性映射层:把提取到的特征进一步做非线性映射,加大网络深度,提高网络复杂性。

重建层:结合了前面得到的补丁来产生最终的高分辨率图像。借鉴了传统超分的纯插值方法(图像局部平均化)

前面两个操作,卷积会减小图像大小,因此需要上采样恢复图像,上采样可以理解为反卷积(本质上也是卷积)

实验步骤

  1. 输入LR图像X,经双三次(bicubic)插值,被放大成目标尺寸(如放大至2倍、3倍、4倍),得到Y ,即低分辨率图像(Low-resolution image)
  2. 通过三层卷积网络拟合非线性映射
  3. 输出HR图像结果F ( Y ) 

注解:

  1. Y:输入图像经过预处理(双三次插值)得到的图像,我们仍将Y 当作是低分辨率图像,但它的size要比输入图像要大。
  2. F ( Y ) :网络最后输出的图像,我们的目标就是通过优化F(Y)和Ground-Truth(就是x,原高分辨率图像)之间的loss来学会这个函数F (⋅) 。
  3. X:高分辨率图像,即Ground-Truth,它和Y的size是相同的。
  4. 图像被转化为 YCbCr 色彩空间,尽管该网络只使用亮度通道(Y)。然后,网络的输出合并已插值的 CbCr 通道,输出最终彩色图像。我们选择这一步骤是因为我们感兴趣的不是颜色变化(存储在 CbCr 通道中的信息)而只是其亮度(Y 通道);根本原因在于相较于色差,人类视觉对亮度变化更为敏感。

训练过程

图片引用:超分辨 :SRCNN_超分辨 srcnn_今晚打佬虎的博客-CSDN博客

1.降低分辨率:

2.切割图片,补丁之间有重复

3.训练模型,学习低分辨率 → to→ 高分辨率的映射关系

损失函数

训练目标:最小化模型输出得到的 F(Y;θ)(得到的超分辨率图像)和 X(原高分辨率图像)像素差的均方误差。

 损失哈数:MES(均方误差),选择MSE作为损失函数的一个重要原因是MSE的格式和我们图像失真评价指标PSNR很像

 F(Y;θ):得到的超分辨率图像          X:原高分辨率图像

激活函数:Relu

PSRN:峰值信噪比,是一种评价图像的客观标准,它具有局限性,一般是用于最大值信号和背景噪音之间的一个工程项目。

MSE与PSNR公式对比:

        

 这里的MSE是原图像(语音)与处理图像(语音)之间均方误差。

SSIM(另外一种衡量结果的参数)

 个人对SRCNN训练过程的理解

        1.构建训练集,含有低分辨率图像和高分辨图像,其中图像需要将其从RGB图像转为YCBCR图像,并且对图像进行分割为小块进行存储,高分辨率图像为未下采样前的图像,低分辨率图像为下采样,上采样后的图像。

      2.构建SRCNN模型,即三层卷积模型,设置MES为损失函数,因为MES与评价图像客观指标PSNR计算相似,即最大化PSNR。设置其余常见的神经网络参数(学习率,Batch_size,num-epochs等)。

      3.训练模型SRCNN,即学习低分辨率图像到高分辨率图像的映射关系。根据不同参数的不同PSRN值,保留最大PSNR值对应的模型参数。

2.实验常见问题和部分解读

1. torch.utils.data.dataloader中DataLoader函数的用法

通过查阅资料,翻阅代码实例得到DataLoader()函数参数意义如下:

 1.dataset (Dataset) :决定数据从哪读取或者从何读取;

 2. batch_size (python:int, optional) : 每次处理的数据集大小(默认为1)

 3. shuffle (bool, optional) :每一个 epoch是否为乱序 (default: False);

 4. num_workers (python:int, optional) : 多少个进程读取数据(默认为0);

 5. pin_memory(bool, optional) : 如果为True会将数据放置到GPU上去(默认为false)

 6. drop_last (bool, optional) :当样本数不能被batchsize整除时,最后一批数据是否舍弃(default: False)

Eg:shuffle(bool,optional)表示传入的参数类型为bool类型,并且该参数shuffle是可选参数。

2.SRCNN图像颜色空间转换原因以及方法?

       选择YCbCr的原因:因为我们感兴趣的不是颜色变化(存储在 CbCr 通道中的信息)而只是其亮度(Y 通道);根本原因在于相较于色差,人类视觉对亮度变化更为敏感。

Y only和YCbCr区别:

       ①Y only:基线方法,是一个单通道网络(c=1),只在亮度上进行了训练。对Cb、Cr通道采用双三次插值进行了扩展。②YCbCr:在YCbCr空间的三个通道上进行训练

       代码中三个转换函数:

       1. convert_rgb_to_y(img)

   

VIP 超分辨率重建SRCNN 这里主要讲深度学习用在超分辨率重建上的开山之作SRCNN超分辨率技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都有重要的应用价值。SR可分为两类:从多张低分辨率图像重建出高分辨率图像和从单张低分辨率图像重建出高分辨率图像。基于深度学习的SR,主要是基于单张低分辨率的重建方法,即Single Image Super- 开通可读全文·2.1w 阅读·2 点赞·32 收藏 阅读全文

相关推荐

超分辨率重建经典算法 SRCNN

总结一下,SRCNN是一种经典的超分辨率重建算法,它利用深度卷积神经网络来实现图像的超分辨率重建。通过深度学习的方法,SRCNN在提高图像质量和细节方面取得了很好的效果,为超分辨率重建任务开辟了新的方向。在预训练阶段,模型通过大量的低分辨率和对应的高分辨率图像对进行训练,以学习特征的表示能力。SRCNN是一种基于深度学习的超分辨率重建算法,它通过训练一个深度卷积神经网络来实现图像的超分辨率重建。该函数接受输入图像的形状作为参数,并返回一个包含卷积层、非线性映射层和重建层的顺序模型。表示任意大小的图像,

LxtCoder的博客 1082

SRCNN图像超分辨率Pytorch代码

# SRCNN超分辨率Pytorch代码 1. 复现SRCNN,使用三层卷积层,kernel size分别为9,1,5; 2. 包含数据集,并包含在该数据集上训练6000epoch的模型pth文件; 3. 包含训练和推理代码,可以使用已经训练好的代码直接推理。

超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等

本专栏研究领域为【超分辨率重建】,涵盖图像超分、视频超分,实时超分,4K修复等方面。主要内容包括主流算法模型的论文精读、论文复现、毕业设计、涨点手段、调参技巧、论文写作、应用落地等方面。算法模型从SRCNN开始更新至今,一般是一篇论文精读对应一篇论文复现。论文精读详解理论,归化繁为简,归纳核心,积累词句,培养阅读论文和论文写作能力。论文复现依托Pytorch代码实现完整的模型训练流程,总结调参方法,记录碰到的bug,论文插图可视化,培养读写代码能力、做实验的能力、以及应用落地能力。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 3万+

SRCNN单幅图像超分辨率翻译

Learning a Deep Convolutional Network for Image Super-Resolution

超分算法之SRCNN

这篇文章是2014年的一篇论文,其主要意义在于作者推出的SRCNN是深度学习在超分上开篇之作!SRCNN证明了深度学习在超分领域的应用可以超越传统的插值等办法取得较高的表现力。 参考目录: ①深度学习图像超分辨率开山之作SRCNN(一)原理分析 ②深度学习端到端超分辨率方法发展历程 SRCNN1 SRCNN简介2 SRCNN模型结构3 Loss function:4 实验4.1 setup4.2 实验结果4.2.1 performance4.2.2 runtime5 进一步研究5.1 滤波器学习情况5.2.

Ton的博客 2万+

SRCNN神经网络

SRCNN:一种用于单图像超分辨率的深度学习方法

我の博客 1万+

超分辨率算法SRCNN-Pytorch训练自己数据集+推理测试(详细图文)

对于想要入门超分技术的新手来说,SRCNN 更是绝佳的 “敲门砖”—— 它的设计思路清晰易懂,代码实现难度不高,吃透它之后,再去学习对抗网络、扩散模型等进阶算法,就能轻松上手,快速打通超分技术的任督二脉。这些方法就像 “照猫画虎”,只能勉强还原图像的大致轮廓,面对复杂场景时更是力不从心,根本无法满足实际应用的高清需求。而打破这一困境的,正是被称为超分领域 “开山鼻祖” 的 SRCNN,更让人惊喜的是,这篇经典论文的作者中,就有 AI 领域的大佬何凯明老师 —— 果然,大佬的眼光永远走在技术前沿!

weixin_46200189的博客 1535

SRCNN测试

代码、参考文章、数据集、运行命令

os_1234的博客 226

PyTorch复现SRCNN:三层卷积实现图像超分的关键细节

图像超分任务是计算机视觉中的经典问题,旨在从低分辨率图像重建出清晰的高分辨率图像。在深度学习方法普及之前,主流方案依赖稀疏编码与手工字典,流程繁琐且各环节割裂。SRCNN作为超分领域的奠基性工作,首次用三层卷积神经网络将低分辨率到高分辨率的映射建模为端到端回归问题,摆脱了手工特征设计,也为后续FSRCNN、SRGAN等模型奠定了基础。其结构虽简单,但数据退化方式、通道处理、训练尺寸与边界评估等细节直接影响PSNR指标。在视频增强、卫星遥感、医学影像等应用场景中,理解SRCNN的训练与推理流程对工程实践尤为重

weixin_42528090的博客 102

图像超分辨率重建SRCNN算法)

基于MATLAB的图像超分辨率重建程序,使用的是训练后的SRCNN方法,自带训练库。 (降积分)充字数........

pytorch实现超分经典模型SRCNN

针对小白,包运行。文件包含数据集,解压后放到D盘。在终端运行README中train或者test部分的内容。最好使用绝对路径,其中的参数num_works 8为进程数,一般电脑改为0即可。只需要4积分,四舍五入就是白送啊。包运行。有问题联系博主,看到私信会回复。

基于Pytorch与CNN的超分辨率图像重建项目实战:从SRCNN训练到pth模型部署

超分辨率图像重建(Super-Resolution)是计算机视觉中的经典任务,目标是从低分辨率输入中恢复高频细节,在视频监控、医学影像、老照片修复等场景中具有广泛需求。传统插值方法虽快但效果模糊,而基于深度学习的卷积神经网络(CNN)通过端到端学习低分辨率到高分辨率的映射,在PSNR、SSIM等客观指标上表现稳定,成为工程落地的优选方案。本文以Pytorch框架为依托,系统拆解超分项目的完整Pipeline:从DIV2K数据集的组织与预处理、随机裁剪与数据增强,到SRCNN核心网络结构的设计、亚像素卷积上采

weixin_32495691的博客 290

Pytorch小知识】torch.gather()函数的用法及在Focal Loss中的应用(详细易懂)

文章目录官方文档中torch.gather的用法torch.gather应用总结 官方文档中torch.gather的用法 torch.gather(input, dim, index, out=None) → Tensor Gathers values along an axis specified by dim. For a 3-D tensor the output is specified by: out[i][j][k] = input[index[i][j][k]

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 19万+

Pytorch小知识】torch.roll()函数的用法及在Swin Transformer中的应用(详细易懂)

文章目录torch.roll()的官方文档函数形式及参数说明举个例子torch.roll()的应用具体步骤 torch.roll()的官方文档 函数形式及参数说明 函数形式:torch.roll(input,shifts,dims=None) 参数解释: input:输入张量 shifts:滚动的方向和长度,若为正,则向下滚动;若为负,则向上滚动。可是一个整数也可以是一个元组。(具体见下面例子) dims:张量按什么维度滚动。以二维为例,0就是按行上下或者下上(shifts为负)滚动;1就是左右或者右

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 20万+

深度学习医学影像超分辨率:从RCAN模型到MRI图像重建实战

图像超分辨率技术旨在从低分辨率图像中恢复高分辨率细节,其核心原理是通过学习低分辨率与高分辨率图像之间的映射关系。在计算机视觉领域,以卷积神经网络为代表的深度学习方法,通过端到端的训练,能够自动提取特征并实现这种复杂的非线性映射,显著超越了传统的插值算法。这项技术的工程价值在于,它能够在不升级硬件设备的前提下,通过算法提升图像质量,为后续分析提供更可靠的数据基础。在医学影像分析,特别是磁共振成像中,高质量图像对微小病灶检测、神经纤维追踪等精准医疗应用至关重要。本文以残差通道注意力网络为核心,结合感知损失等优化

weixin_30666401的博客 386

图像超分辨率实战指南:从算法演进到PyTorch实现与调优

图像重建是计算机视觉中的经典逆问题,超分辨率(SR)旨在从低分辨率(LR)图像恢复高分辨率(HR)细节,在医学影像、卫星遥感与视频增强等领域有广泛应用。深度学习通过端到端学习LR到HR的映射先验,突破了传统插值方法的极限。然而,训练数据退化假设、网络结构选择与损失函数设计直接影响重建质量。业界常用PSNR、SSIM与LPIPS等指标评估模型,其中PSNR反映像素级误差,SSIM侧重结构保真,LPIPS更贴近感知质量。本文从SRCNN到SwinIR梳理超分算法演进,介绍基于PyTorch的轻量ESPCN实现

weixin_29055699的博客 80

超分辨率SRCNN论文复现

超分辨率卷积神经网络(SRCNN)是一种经典的用于图像超分辨率重建的深度学习模型。本文使用PyTorch框架进行复现。

m0_46059481的博客 4671

SRCNN代码解读(一)-----utils.py(tf)

CNN   谈到卷积CNN卷积神经网络那么我们首先要知道它的定义,到底什么是个卷积神经网络?但凡涉及到人工智能相关领域和CNN打交道是无可避免的,因此做个简单的整理 定义 卷积神经网络(Convolutional Neural Network,CNN 或 ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络,至于说起源能追溯到哪里百度百科见。 FCN ...

weixin_44825185的博客 4850

SRCNN

1. introduction 考虑了一个卷积神经网络,它可以直接学习低分辨率和高分辨率图像之间的端到端映射。我们的方法与现有的基于外部实例的外部方法有根本的不同,因为我们的方法没有明确地学习字典[41]、[49]、[50]或流形[2]、[4]。这些都是通过隐藏层隐式地实现的。此外,斑块的提取和聚合也被表示为卷积层,因此也参与了优化。在我们的方法中,整个SR管道完全通过学习获得,很少进行预/后处理。 所提出的模型被命名为超分辨率卷积神经网络(SRCNN)1。所提出的SRCNN有几个吸引人的特性。首先,它的结

qq_45033722的博客 4457
上一篇: 基于卷积神经网络实现景区精准识别场景
下一篇: torch.utils.data.dataloader中DataLoader函数的用法
Jin、yz
博客等级 码龄6年 198粉丝 65原创
评论 57
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值