目录
1. torch.utils.data.dataloader中DataLoader函数的用法
3. model.parameters()与model.state_dict()的区别
1.unsqueeze用法:在数组原来维度索引i之间增加一个维度
2.Squeeze用法:挤压掉tensor数据中维度特征数为1的维度
8.对Python之if __name__ == ‘__main__‘的理解。
prepare.py(制作自定义的训练和验证的h5格式的数据集)
基本知识:像素、图像大小、图像分辨率
像素是组成所有数字图像的彩色方块,图像大小是图像宽度和高度的像素数量。而图像分辨率则是用来度量数字图像的质量,是每英寸图像内有多少个像素点,分辨率的单位为 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。
![]()
非线性映射层:把提取到的特征进一步做非线性映射,加大网络深度,提高网络复杂性。

重建层:结合了前面得到的补丁来产生最终的高分辨率图像。借鉴了传统超分的纯插值方法(图像局部平均化)
![]()
前面两个操作,卷积会减小图像大小,因此需要上采样恢复图像,上采样可以理解为反卷积(本质上也是卷积)
实验步骤
- 输入LR图像X,经双三次(bicubic)插值,被放大成目标尺寸(如放大至2倍、3倍、4倍),得到Y ,即低分辨率图像(Low-resolution image)
- 通过三层卷积网络拟合非线性映射
- 输出HR图像结果F ( Y )
注解:
- Y:输入图像经过预处理(双三次插值)得到的图像,我们仍将Y 当作是低分辨率图像,但它的size要比输入图像要大。
- F ( Y ) :网络最后输出的图像,我们的目标就是通过优化F(Y)和Ground-Truth(就是x,原高分辨率图像)之间的loss来学会这个函数F (⋅) 。
- X:高分辨率图像,即Ground-Truth,它和Y的size是相同的。
- 图像被转化为 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)
1082




被折叠的 条评论
为什么被折叠?



