pytorch读取图像,pytorch读取数据集

  pytorch读取图像,pytorch读取数据集

  PyTorch使用教程PyTorch数据读取前言PyTorch作为一款深度学习框架,已经帮助我们实现了很多很多的功能了,包括数据的读取和转换了,那么这一章节就介绍一下PyTorch内置的数据读取模块吧

  模块介绍熊猫用于方便操作含有字符串的表文件,如csvzipfile python内置的文件解压包cv2用于图片处理的模块,读入的图片模块为新罕布什尔州班戈市用于图片的操作库,比如随机裁剪、缩放、模糊等等,可用于数据的增广,但也不仅限于内置的图片操作,也可以自行进行图片数据的操作,这章也会讲解torch.utils.data.Dataset torch内置的对象类型torch.utils.data.DataLoader和资料组配合使用可以实现数据的加速读取和随机读取等等功能导入活力文件#解压将熊猫作为pd #导入操作数据导入操作系统#操作文件或文件夹导入cv2 #图像操作库将matplotlib.pyplot作为工厂编号导入图像展示库从torch.utils.data导入数据集# PyTorch内置对象从参考导入转换#图像增广转换库PyTorch内置进口火炬初步读取数据数据下载到此处

  我们先初步编写一个脚本来实现图片的展示

  # 解压文件到指定目录def unzip_file(根路径,文件名):full_path=os.path.join(根路径,文件名)file=zipfile .zip文件(完整路径)file.extractall(根路径)unzip_file(根路径,zip _文件名)#读入战斗支援车文件脸_地标=PD。read _ CSV(OS。路径。join(提取路径,csv文件名))#熊猫读出的数据如想要操作索引使用ILO cimage _ name=face _ landmarks。iloc[:0]landmarks=face _ landmarks。iloc[:1:]#展示def show_face(extract_path,image_file,face _ landmark):PLT。即时消息显示(PLT。im read(OS。路径。join(extract _ path,image_file))、cmap= gray )point _ x=face _ landmark。to _ numpy()[0:2]point _ y=face _ landmark。to _ numpy()[1:2]PLT。scatter(point _ x,point _ y,c=r ,s=6) show_face(extract_path,image_name.iloc[1

  使用内置库来实现实现我的数据集使用内置库是我们的代码更加的规范,并且可读性也大大增加

  继承数据集,需要我们实现的有两个地方:

  实现__len__返回数据的长度,实例化调用len()时返回__getitem__给定数据的索引返回对应索引的数据如:一个[0]转换数据的额外操作时调用class face Dataset(数据集):def _ _ init _ _(self,extract_path,csv_filename,transform=None):super(人脸数据集,self)._ _ init _ _()self。提取路径=提取路径自身。CSV _文件名=CSV _文件名自身。变换=变换自我。脸_地标=PD。read _ CSV(OS。路径。join(extract _ path,CSV _ filename))def _ _ len _ _(self):return len(self。face _ landmarks)def _ _ getitem _ _(self,idx):image _ name=self。脸_地标。iloc[idx,0]landmark=self。脸_地标。国际劳工组织理事会.astype( float 32 )point _ x=地标。to _ numpy()[0:2]point _ y=地标。to _ numpy()[1:2]image=PLT。im read(OS。路径。加入(自我。extract _ path,image _ name))sample={ image :image, point_x:point_x, point_y:point_y}如果自我改造不为无:样本=自身。转换(示例)返回样本测试功能是否正常

  face _ dataset=face数据集(提取路径,CSV _文件名)sample=face _ dataset[0]PLT。im show(样本[ image ],cmap= gray )PLT。scatter(样本[ point _ x ],样本[point_y],c=r ,s=2)plt.title(face )

  实现自己的数据处理模块内置的在火炬视觉。转换模块下,由于我们的数据结构不能满足内置模块的要求,我们就必须自己实现

  图片的缩放,由于缩放后人脸的标注位置也应该发生对应的变化,所以要自己实现对应的变化

  class Rescale(object):def _ _ init _ _(self,out _ size):assert is instance(out _ size,tuple)或is instance(out _ size,int), out size isinstance int或元组自身。out _ size=out _ size def _ _ call _ _(self,sample): image,point_x,point_y=sample[image],sample[point_x],sample[point_y] new_h,new _ w=self。out _ size如果是实例(自身。out _ size,tuple) else (self将数据转换为火炬认识的数据格式因此,就必须转换为张量

  注意:cv2和绘制精美的图表读出的图片默认的形状为世界卫生组织,而火炬默认接受的是北中国高速公路因此使用转移转换维度,火炬转换多维度使用排列

  类到张量(对象):def _ _ call _ _(self,sample): image,point_x,point_y=sample[image],sample[point_x],sample[ point _ y ]new _ image=image。转置((2,0,1))return { image :torch。from _ numpy(new _ image), point _ x :torch。from _ numpy(point _ x), point _ y :火炬。from _ numpy(point _ y)}测试

  转换=转换Compose([Rescale((1024,512)),ToTensor()])face _ dataset=face dataset(extract _ path,csv_filename,transform=transform)sample=face _ dataset[0]PLT。即时消息显示(示例[ image ]).permute((1,2,0)),cmap= gray )PLT。scatter(样本[ point _ x ],样本[point_y],c=r ,s=2)plt.title(face )

  使用火炬内置的装货设备加速读取数据data _ loader=data _ loader:print(I[ image ])中I得数据加载器(face _ dataset,batch_size=4,shuffle=True,num _ workers=0).形状)打破火炬。大小([4,3,1024,512])注意:windows环境尽量不使用工人数量会发生报错

  总结这节使用内置的数据读取模块,帮助我们规范代码,也帮助我们简化代码,加速读取数据也可以加速训练,数据的增广可以大大的增加我们的训练精度,所以本节也是训练中比较重要环节

  上节回归PyTorch使用教程-超详细PyTorch实现手写数字识别器

  预习PyTorch使用教程-迁移学习

pytorch读取图像,pytorch读取数据集