1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > cv2.imread读取图像结果none_PyTorch 42.图像操作

cv2.imread读取图像结果none_PyTorch 42.图像操作

时间:2024-04-07 16:29:51

相关推荐

cv2.imread读取图像结果none_PyTorch 42.图像操作

本文转载自:

知乎用户​

1. 读取训练集

pytorch读取训练集是非常便捷的,只需要使用到2个类:

(1)torch.utils.data.Dataset

(2)torch.utils.data.DataLoader

常用数据集的读取

1、torchvision.datasets的使用

对于常用数据集,可以使用torchvision.datasets直接进行读取。torchvision.dataset是torch.utils.data.Dataset的实现

该包提供了以下数据集的读取

MNISTCOCO (Captioning and Detection)LSUN ClassificationImageFolderImagenet-12CIFAR10 and CIFAR100STL10

下面以cifar10为例:

import

2、实例化torch.utils.data.DataLoader

mytransform

下面就可以进行读取数据的显示,以进行简单测试是否读取成功:

for

注意这里的transforms.ToTensor()函数:

将numpy的ndarray或PIL.Image读的图片转换成形状为(C,H,W)的Tensor格式,且/255归一化到[0,1.0]之间。通道的具体顺序与cv2读的还是PIL.Image读的图片有关系:

cv2:(B,G,R)

PIL.Image:(R,G,B)

import

输出结果 :

自定义标签数据集的读取

1、实现torch.utils.data.Dataset

假设我们有一个标签test_images.txt,内容如下:

对应的图像位于images目录下。

首先要继承torch.utils.data.Dataset类,完成图像及标签的读取。

import

2、实例化torch.utils.data.DataLoader

mytransform

2. 图像基本操作

为了方便进行数据的操作,pytorch团队提供了一个torchvision.transforms包,我们可以用transforms进行以下操作:

PIL.Image/numpy.ndarray与Tensor的相互转化;归一化;对PIL.Image进行裁剪、缩放等操作。

通常,在使用torchvision.transforms,我们通常使用pose将transforms组合在一起。

PIL.Image/numpy.ndarray与Tensor的相互转换

PIL.Image/numpy.ndarray转化为Tensor,常常用在训练模型阶段的数据读取,而Tensor转化为PIL.Image/numpy.ndarray则用在验证模型阶段的数据输出。

我们可以使用 transforms.ToTensor() 将PIL.Image/numpy.ndarray数据转化为torch.FloadTensor,并归一化到[0, 1.0]:

取值范围为[0, 255]的PIL.Image,转换成形状为[C, H, W],取值范围是[0, 1.0]的torch.FloadTensor。形状为[H, W, C]的numpy.ndarray,转换成形状为[C, H, W],取值范围是[0, 1.0]的torch.FloadTensor。

而transforms.ToPILImage则是将Tensor转化为PIL.Image。如果,我们要将Tensor转化为numpy,只需要使用.numpy()即可。如下:

img_path

转化方法

归一化

归一化对神经网络的训练是非常重要的,那么我们如何归一化到[-1.0, -1.0]呢?只需要将上面的transform1改为如下所示:

transform2

(1)pose就是将transforms组合在一起;

(2)transforms.Normalize使用如下公式进行归一化:

channel=(channel-mean)/std

这样一来,我们的数据中的每个值就变成了[-1,1]的数了。

PIL.Image的缩放裁剪等操作

此外,transforms还提供了裁剪,缩放等操作,以便进行数据增强。下面就看一个随机裁剪的例子,这个例子中,仍然使用 Compose 将 transforms 组合在一起,如下:

# transforms.RandomCrop()

3. 模型的搭建保存加载

使用pytorch进行网络模型的搭建、保存与加载,是非常快速、方便的、妙不可言的。

搭建ConvNet

所有的网络都要继承torch.nn.Module,然后在构造函数中使用torch.nn中的提供的接口定义layer的属性,最后,在forward函数中将各个layer连接起来。

下面,以LeNet为例:

class

这样一来,我们就搭建好了网络模型,是不是很简洁明了呢?此外,还可以使用torch.nn.Sequential,更方便进行模块化的定义,如下:

class

Module有很多属性,可以查看权重、参数等等;如下:

net

那么,如何进行参数初始化呢?使用 torch.nn.init ,如下:

def

保存ConvNet

使用torch.save()对网络结构和模型参数的保存,有两种保存方式:

保存整个神经网络的的结构信息和模型参数信息,save的对象是网络net;保存神经网络的训练模型参数,save的对象是net.state_dict()。

torch

加载ConvNet

对应上面两种保存方式,重载方式也有两种。

对应第一种完整网络结构信息,重载的时候通过torch.load(‘.pth’)直接初始化新的神经网络对象即可。对应第二种只保存模型参数信息,需要首先导入对应的网络,通过net.load_state_dict(torch.load('.pth'))完成模型参数的重载。

在网络比较大的时候,第一种方法会花费较多的时间,所占的存储空间也比较大。

# 保存和加载整个模型

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。