• 【 医学影像| 数据预处理】


    【知识点】

    数据读取和预处理/2代码归一化处理方式×2、裁剪/旋转/翻转、中心裁剪完整案例

    归一化处理×2:

    【数据增强】

    关于torchvision.transforms和compose

     from torchvision import transforms ->进入transform 定义了很多class的工具箱

    关于compose:

    函数说明:torchvision.transforms是pytorch中的图像预处理包,一般用Compose把多个步骤整合到一起,transforms中的函数(link给出了)

    Python图像库PIL(Python Image Library)是python的第三方图像处理库,但由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。

     transforms.Compose()使用:torchvision是pytorch的一个图形库,服务于PyTorch深度学习框架,主要用来构建计算机视觉模型。torchvision.transforms主要用于常见的图形变换。

    torchvision的构成如下:
    torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
    torchvision.models: 包含常用的模型结构(含预训练模型)如AlexNet、VGG、ResNet等
    torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;

    torchvision.utils: 其他的一些有用的方法。

    举列了一些常见操作

    class torchvision.transforms.CenterCrop(size) 将给定的PIL.Image进行中心切割,得到给定的size,size可以是tuple,(target_height, target_width)。size也可以是一个Integer,在这种情况下,切出来的图片的形状是正方形

     class torchvision.transforms.RandomCrop(size, padding=0) 切割中心点的位置随机选取。size可以是tuple也可以是Integer。

     class torchvision.transforms.RandomHorizontalFlip 随机水平翻转给定的PIL.Image,概率为0.5。即:一半的概率翻转,一半的概率不翻转。 

    class torchvision.transforms.RandomSizedCrop(size, interpolation=2) 先将给定的PIL.Image随机切,然后再resize成给定的size大小。 

    class torchvision.transforms.Pad(padding, fill=0) 将给定的PIL.Image的所有边用给定的pad value填充

    padding:要填充多少像素 fill:用什么值填充

    eg1.

    1. from torchvision import transforms
    2. from PIL import Image
    3. padding_img = transforms.Pad(padding=10, fill=0)
    4. img = Image.open('test.jpg')
    5. print(type(img))
    6. print(img.size)
    7. padded_img=padding(img)
    8. print(type(padded_img))
    9. print(padded_img.size)

    Compose()类的主要作用是串联多个图片变换的操作,会将transforms列表里面的transform操作进行遍历。Compose里面的参数实际上就是个列表,而这个列表里面的元素就是你想要执行的transform操作。

    给了一个具体的例子,及单步代码jupyter过程化(每一个步骤处理完的图像也给哦):

    1. transforms.Compose([transforms.RandomResizedCrop(224),
    2. transforms.RandomHorizontalFlip(),
    3. transforms.ToTensor(),
    4. transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])

    transforms.RandomResizedCrop(224)将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小;(即先随机采集,然后对裁剪得到的图像缩放为同一大小),默认scale=(0.08, 1.0)该操作的含义在于:即使只是该物体的一部分,我们也认为这是该类物体;

    transforms.RandomHorizontalFlip() 以给定的概率随机水平旋转给定的PIL的图像,默认0.5

    transforms.ToTensor() 将给定图像转为Tensor

    transforms.Normalize() 归一化处理

    1. from PIL import Image
    2. # 操作1
    3. img = Image.open("./demo.jpg")
    4. print("原图大小:",img.size)
    5. data1 = transforms.RandomResizedCrop(224)(img)
    6. print("随机裁剪后图片大小:",data1.size)
    7. data2 = transforms.RandomResizedCrop(224)(img)
    8. data1 = transforms.RandomResizedCrop(224)(img)
    9. plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
    10. plt.subplot(2,2,2),plt.imshow(data1),plt.title("转换后的图1")
    11. plt.subplot(2,2,3),plt.imshow(data2),plt.title("转换后的图2")
    12. plt.subplot(2,2,4),plt.imshow(data3),plt.title("转换后的图3")
    13. plt.show()
    14. # 操作2
    15. img = Image.open("./demo.jpg")
    16. img1 = transforms.RandomHorizontalFlip()(img)
    17. img2 = transforms.RandomHorizontalFlip()(img)
    18. img3 = transforms.RandomHorizontalFlip()(img)
    19. plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
    20. plt.subplot(2,2,2), plt.imshow(img1), plt.title("变换后的图1")
    21. plt.subplot(2,2,3), plt.imshow(img2), plt.title("变换后的图2")
    22. plt.subplot(2,2,4), plt.imshow(img3), plt.title("变换后的图3")
    23. plt.show()
    24. # 操作3、4
    25. img = Image.open("./demo.jpg")
    26. img = transforms.ToTensor()(img)
    27. img = transforms.Normalize(mean=[0.5,0.5,0.5], std=[0.5,0.5,0.5])(img)
    28. print(img)

    plt.subplot(m,n,p) #要生成m行n列,这是第p个图plt.subplot('行','列','编号')

    c

    c

    c

    c

    c

    c

    对分割的一些理解:基于深度学习来做医学图像处理,主要的工作集中在了数据预处理部分:深入理解医学图像的格式和特点;设计合适的图像预处理操作增强目标特征;将原始格式的数据处理为适合深度学习模型输入的格式。这三点也是从自然图像处理转到医学图像处理过程中最困难的三点。        模型的区别并不会对基于深度学习的医学图像分割产生太大的影响。换句话说,对于自然图像分割很优秀的网络模型,完全可以直接迁移到医学图像上来(反之亦然),效果如何只能训完看看了(如非常著名的FCN、SegNet、U-Net等,特别是U-Net最初就是在MICCAI上发表的)。当然,如果要高效的设计训练模型,还是要结合数据特点(如待分割对象的尺寸范围、2D还是3D等等)进行网络设计。AutoDL技术2019年效果突出Neural Architecture Search: A Survey),估计以后网络模型设计难以恰饭。

    医学影像数据集:

    Challenges - Grand Challenge (grand-challenge.org)

    Introduction - Grand Challenge (grand-challenge.org)

    【代码】

    待阅读:

    在Pytorch中灵活载入部分权重

    pytorch中自定义dataset读取数据:讲述如何对自己的数据集进行训练集以及验证集的划分,并通过自定义的dataset去读取并打包成一个个batch数据。

    手把手跑通第一个PyTorch神经网络

    手把手

    快速上手

    自定义dataset

    pytorch如何训练自己的图片数据集

    使用PyTorch中的Dataset与DataLoader构建自己的数据集

    读取CSV数据文件-封装后-数据分批

    个人记录:

    分割Pipeline

  • 相关阅读:
    Flink系列文档-(YY01)-初识Flink
    OpenGL入门(五)之Matrix矩阵操作和坐标系统
    java--自增自减运算符
    paddlenlp:社交网络中多模态虚假媒体内容核查(特征篇)
    7.22 SpringBoot项目实战【收藏 和 取消收藏】
    Spring-注解开发管理第三方Bean
    高斯模糊的细枝末节
    [含毕业设计论文+PPT+源码等]ssm校友录网站+Java后台管理系统|前后分离VUE
    关于A-level选课的6个建议
    Excel之数据透视&NotePad之列编辑
  • 原文地址:https://blog.csdn.net/sinat_40759442/article/details/128091723