对于深度学习来讲,送入模型训练的数据的质量能直接决定最终结果能否达到预期,因此,数据预处理是训练出好的深度模型中重要且关键的一个环节。这里以之前的博客“关于肺部医学影像数据集”中的COVID-CT数据集作为处理对象,进行数据预处理操作。
1.关于数据集读取
在进行数据集读取之前,需要清楚被读取的数据类型是什么,不同类型的数据对应不同的读取方式,选择合理的数据集读取方式往往会使后续工作变得更高效、有序。
CSV文件:CSV(Comma-Separated Values)是一种简单的文件格式,用于存储文本、数值等类型的数据,该类型的文件内数据以“,”进行分隔。CSV文件具有简单易编辑、数据兼容性好、资源占用低等优点。对该类型的数据进行处理,可以利用pandas进行读取。
txt文件:txt文档即文本文档,是常见的一种文件格式,主要用于存储文本(即文字)信息。
图片文件:图片文件是深度学习数据集中最常见的数据类型,常见的图片格式有jpg、png、gif、psd、tif、bmp等。这里以COVID-CT数据集中的数据为例,其中的CT数据集为png格式,可以利用OpenCV或PIL进行读取。这里列举一种以PIL进行读取的例子。
class MyCTDataset(Dataset):
def __init__(self, mode, data_dir, rng_seed=510, train_split=0.8):
'''
:param mode: 定义训练数据类型,train,test
:param data_dir: 数据的存放地址
:param rng_seed:random number generator_seed,随机数生成器的种子数
:param train_split:划分值,用来划分训练集和测试集
'''
self.mode = mode
self.data_dir = data_dir
self.rng_seed = rng_seed
self.train_split = train_split
self.image_info = self._get_image_info()
def __getitem__(self, item):
path_img, labels = self.image_info[item]
img = Image.open(path_img).convert('RGB')
img = train_transform(img)
return img, labels
def __len__(self):
if len(self.image_info) == 0:
raise Exception("\ndata_dir:{} is a empty dir!".format(self.data_dir))
return len(self.image_info)
def _get_image_info(self):
img_names = os.listdir(self.data_dir)
img_names = list(filter(lambda x: x.endswith('.png'), img_names))
random.seed(self.rng_seed)
random.shuffle(img_names)
img_labels = [0 if n.startswith('label') else 1 for n in img_names] #二分类问题,因此这里是非1即0的打标签
train_split_idx = int(len(img_labels) * self.train_split)
if self.mode == "train":
image_set = img_names[:train_split_idx]
label_set = img_labels[:train_split_idx]
elif self.mode == "test":
image_set = img_names[train_split_idx:]
label_set = img_labels[train_split_idx:]
path_img_set = [os.path.join(self.data_dir, n) for n in image_set]
img_info = [(n, l) for n, l in zip(path_img_set, label_set)]
return img_info
if __name__=="__main__":
train_data = MyCTDataset(mode="train", data_dir='...')
上述三种类型的文档是在深度学习过程中所能遇到的常见数据类型,关于数据读取的具体程序网上已有很多好的范例程序。
2.关于数据增强
数据增强(Data Augmentation)的实质是在未改变原始图像特征内容的基础上对图像数量的扩充,从而避免因图像不足而导致的模型过拟合与泛化性差等缺陷,在小型图像数据集上进行训练时尤其有效。常见的数据增强方法有:
旋转(rotation),翻转(flip),尺寸变换(scale),对比度变换(contrast),噪声变换(noise),颜色变换(color)等。
推荐链接:https://blog.csdn.net/qq_54641516/article/details/126981414
总结
以上就是今天要讲的内容,本文介绍了数据预处理的相关内容,希望能够帮助到你。如有错误,请及时指出,我们一起进步!Be hunger, keep learning!