28:自定义数据集的收集

1:自定义数据集

[注]每一个文件中对应弄干张相同种类但是不同状态的图片。比如:若干张不同状态小狗的图片。

(1.1)初始化

class Pokemon(Dataset):

def __int__(self,root,resize,mode):

 【注】上图中第二张图片,sorted的位置错误,应该用在sorted(os.listdir(os.path.join(root)))

 【注】os.listdir()可以将根目录下包括目录名以及文件名都列出来(注顺序是随机的)。os.path.isdir(os.path.join(root,name))判断文件名是否是目录文件名。

【注】sorted()可以对所有可迭代对象进行排序操作。sort()是针对于list的排序操作。

【注】初始化参数name2label是一个映射表(【注】其存储以字典的形式存储):将string类型的label映射成一个与之对应的编号表。例如:原始lable为[cat,dog,fish],映射成lable[0,1,2],将其对应关系以{'cat':0,'dog':1,'fish',2}字典的形式存储。

(1.2)加载数据

 if:需要的指定的csv文件不存在,得需要先对数据路径进行保存,形成指定格式(path<数据路径> lable<为int类型>)的.csv文件然后进行加载。

[注]'os.sep'为\

 最终结果生成指定类型文件的数据,数据格式为(数据,标签):

 

else :内容格式为:path(数据存储路径) lable(为int类型)的文件存在,则直接可以进行数据加载

(1.3)数据的划分:train 60%,val 20%,test 20%.

 (1.4):数据处理,将数据进行变形(以达到数据增强的目的),增强数据并且转换成可以用pytorch处理的tensor类型。

 return img,label

【注】数据的变形(增强)操作:Resize()放大缩小,RandomRotation()旋转,CenterCrop()中心裁剪,ToTenser(),Normalize()规范化将数据压缩到-1,1之间

【注】Normalize()之后,可视化会出现问题,所以要进行denormalize()

 【注】transforms.Compose{}转换器.lambda pa1:主体    左边为指定输入参数pa1,右边为lambda的主体。

【注】Python图像处理 PIL中convert(‘L’)函数原理,PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

img=img.convert()可以把图片转为指定格式的图片。https://blog.csdn.net/fanlily913/article/details/106571186详细参考该篇博客。

【注】mean=[0.485,0.456,0.406]三个值分别为R,G,B三个通道上的均值。std=[0.229,0.224,0.225]分别为R,G,B三个通道上的方差。

(1.5)通过可视化进行验证

未进行normalize()的可视化验证

进行了normalize()的可视化验证

 [注]需要开启visdom进程:python -m visdom.server

 (1.6)批量(batch)加载数据

 【注】需要导入:from torch.utils.data import Dataset,DataLoader 

2:使用如下代码也能完成数据集的加载工作

(2.1)一行代码完成数据加载

 【注】这只能完成按照比较常规的目录存储的数据

【注】当用cpu时,可以通过DataLoader(db,batch_size=,num_workers=)开启多线程。

(2.2)如何查看成员变量:自动编码的表格

 

原文地址:https://www.cnblogs.com/jiafeng1996/p/15141622.html