[深度学习笔记(4)]数据预处理

        对于深度学习来讲,送入模型训练的数据的质量能直接决定最终结果能否达到预期,因此,数据预处理是训练出好的深度模型中重要且关键的一个环节。这里以之前的博客“关于肺部医学影像数据集”中的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='...')

上述三种类型的文档是在深度学习过程中所能遇到的常见数据类型,关于数据读取的具体程序网上已有很多好的范例程序。

推荐链接:机器学习/深度学习中常见数据集加载(读取)方法_读取数据集_gailj的博客-CSDN博客数据集有不同的类型,例如图像、文本、二进制、文件夹等等格式,用何种方法去加载这些数据,以及加载数据后的数据类型是什么(tensor、array、dataframe等等)?这里总结一下常见种类的数据集读取函数。文本文件:CSV、TSV、Json、TxtCSV文件是逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本);TSV 是Tab-separated values的缩写,即制表符分隔值,与...https://blog.csdn.net/gailj/article/details/122142929

2.关于数据增强

数据增强(Data Augmentation)的实质是在未改变原始图像特征内容的基础上对图像数量的扩充,从而避免因图像不足而导致的模型过拟合与泛化性差等缺陷,在小型图像数据集上进行训练时尤其有效。常见的数据增强方法有:

旋转(rotation),翻转(flip),尺寸变换(scale),对比度变换(contrast),噪声变换(noise),颜色变换(color)等。

推荐链接:https://blog.csdn.net/qq_54641516/article/details/126981414


总结

        以上就是今天要讲的内容,本文介绍了数据预处理的相关内容,希望能够帮助到你。如有错误,请及时指出,我们一起进步!Be hunger, keep learning!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
肺部CT图像分割是医学图像处理领域的重要应用之一,其目的是将CT图像中的肺部区域从其他区域分离出来。在Python中,可以使用以下步骤进行肺部CT图像分割: 1. 导入必要的库和模块,如numpy、matplotlib、OpenCV等。 2. 读取CT图像。可以使用OpenCV中的imread函数或者其他第三方库来读取图像。 3. 对图像进行预处理。可以进行去噪、平滑、灰度化等操作。 4. 对预处理后的图像进行分割。可以使用阈值分割、边缘检测、分水岭算法等方法。 5. 对分割后的图像进行后处理。可以进行形态学操作、连通区域分析等操作,以便得到更准确的分割结果。 6. 显示分割结果。可以使用matplotlib等库来显示分割后的图像。 具体实现过程可以参考以下示例代码: ```python import cv2 import numpy as np import matplotlib.pyplot as plt # 读取CT图像 img = cv2.imread('lung.jpg') # 预处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) _, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # 分割 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3) sure_bg = cv2.dilate(opening, kernel, iterations=3) dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5) _, sure_fg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0) sure_fg = np.uint8(sure_fg) unknown = cv2.subtract(sure_bg, sure_fg) _, markers = cv2.connectedComponents(sure_fg) markers += 1 markers[unknown == 255] = 0 markers = cv2.watershed(img, markers) img[markers == -1] = [255, 0, 0] # 显示结果 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() ``` 其中,`lung.jpg`是待分割的CT图像文件。在该示例中,使用了OTSU阈值分割、形态学开运算、距离变换、分水岭算法等方法进行分割,最终得到了肺部区域分割结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值