网站关键词排名优化价格,网络游戏传奇,wordpress接入七牛云,随州网站建设优化推广渠道图片数据和标签数据准备
1.本文所用图片数据在同级文件夹中 ,文件路径为train/’ 2.标签数据在同级文件#xff0c;文件路径为train.csv 3。将标签数据提取
train_csvpd.read_csv(train.csv)创建继承类
第一步#xff0c;首先创建数据类对象 此时可以想象为单个数据单元的…图片数据和标签数据准备
1.本文所用图片数据在同级文件夹中 ,文件路径为train/’ 2.标签数据在同级文件文件路径为train.csv 3。将标签数据提取
train_csvpd.read_csv(train.csv)创建继承类
第一步首先创建数据类对象 此时可以想象为单个数据单元的创建 { 图像标签} 继承的是Dataset类 数据集类
from torch.utils.data import Dataset
from PIL import Image //从文件路径中提取图片所需要的函数class Imagedata(Dataset): //继承Dataset类def __init__(self,df,dir,transformNone): //往类里传输需要的数据必须在这定义后面初始化函数才能使用传入的数据//df表示传入的标签数据dir表示图像数据文件地址transform是图像增强的处理操作super().__init__() //声明后面操作需要用的数据self.dfdf self.dirdirself.transformtransformdef __len__(self): //模板函数没什么卵用return len(self.df)def __getitem__(self, idex): //将单个数据和标签整合到一块的初始化函数img_idself.df.iloc[idex,0] //图片的名称在df文件中标签也在df的文件中如下图为的就是提出图像数据文件中的图片否则从图片数据文件中一张一张提取出来很难名称太长imgImage.open(self.dirimg_id) //拿到了图片的整个完整地址 imgnp.array(img) //Image提取出来的为image类型需要转换为numpy数组才能存储到数据集中//上面两行也可以换为cv2.imread(dir),直接读取的数据就可以往里面存避免了数据转换labelself.df.iloc[idex,1] //从df中提取对应的标签就是同一张图像的标签由idex固定return img,label //返回整理好的单个数据单元图像标签 第二步创造好了单个数据单元对象那么需要将多个数据单元整合起来构成一个完整的数据集
先将单个数据单元实现因为上面的代码为类对象代码并没有实现
train_datasetImageDataset(dftrain_csv,dirtrain/) //df为标签文件dir表示你图像存储的文件地址得到了单个数据单元那么开始将数据整合先调用数据整合函数
from torch.utils.data import DataLoader通过数据流来整合
train_dataDataLoader(train_dataset,batch_size32) //train_dataset 为单个对象 batch_size为设置几个为一小组为后面的分组训练做准备那么最后得到的train_data就是带有图像和标签的数据集可以验证一下
for img,label in train_data:print(img,label)图像增强技术(降噪标准化)
上面没有加入图像增强代码创建数据集时候可以先将图像增强后再存入数据集增强的主要目的就是提高训练准确率标准化可以使图像在神经网络训练的更快因为图像的数据明显变小举个例子由像素[233,221,222]可以直接变为[2.33,2.21,2.22]
如下使图像增强代码用的使torchvision,每行代码都有注释
from torchvision import transformstransform_train transforms.Compose([transforms.ToTensor(), //将图像变为Tensor张量并将图像像素由255-0变为1-0压缩并将图像的维度从 (H x W x C) 转换为 (C x H x W)transforms.Pad(32, padding_modesymmetric) //表示在图像的四周各填充 32 个像素。transforms.RandomHorizontalFlip(), //以一定的概率对图像进行随机水平翻转。这有助于增加数据的多样性提高模型的泛化能力。防止拟合transforms.RandomVerticalFlip(), //以一定的概率对图像进行随机垂直翻转。同样是为了增加数据多样性transforms.RandomRotation(10), //以一定的概率对图像进行随机旋转旋转角度在 -10 到 10 度之间。增加数据的多样性transforms.Normalize((0.485, 0.456, 0.406), //指定每个通道的均值。通常是在 ImageNet 数据集上计算得到的均值。(0.229, 0.224, 0.225))]) //指定每个通道的标准差。也是在 ImageNet 数据集上计算得到的标准差。
那么在数据单元创建的时候加入以下是完整代码
from torch.utils.data import Datasetclass ImageDataset(Dataset):def __init__(self, df, dir, transformNone): super().__init__()self.df dfself.dir dirself.transform transformdef __len__(self):return len(self.df)def __getitem__(self, idx):img_id self.df.iloc[idx,0]img_path self.dir img_idimage cv2.imread(img_path) //这里用了cv2直接读取图片避免了转换numpyimage cv2.cvtColor(image, cv2.COLOR_BGR2RGB) //opencv里的数据增强label self.df.iloc[idx,1]if self.transform is not None:image self.transform(image)return image, label-----------------------图像增强技术------------------------
from torchvision import transforms
transform_train transforms.Compose([transforms.ToTensor(),transforms.Pad(32, padding_modesymmetric),transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomRotation(10),transforms.Normalize((0.485, 0.456, 0.406),(0.229, 0.224, 0.225))])
transform_test transforms.Compose([transforms.ToTensor(),transforms.Pad(32, padding_modesymmetric),transforms.Normalize((0.485, 0.456, 0.406),(0.229, 0.224, 0.225))])from torch.utils.data import DataLoader
dataset_train ImageDataset(dftrain_df, img_dirtrain/,transformtransform_train)
loader_train DataLoader(datasetdataset_train, batch_size32, shuffleTrue)