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

【知识点】

数据读取和预处理/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.

from torchvision import transforms
from PIL import Image

padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')
 
print(type(img))
print(img.size)
 
padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)

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

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

transforms.Compose([transforms.RandomResizedCrop(224),
 		    transforms.RandomHorizontalFlip(),
                    transforms.ToTensor(),
                    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() 归一化处理

from PIL import Image
# 操作1
img = Image.open("./demo.jpg")
print("原图大小:",img.size)
data1 = transforms.RandomResizedCrop(224)(img)
print("随机裁剪后图片大小:",data1.size)
data2 = transforms.RandomResizedCrop(224)(img)
data1 = transforms.RandomResizedCrop(224)(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2),plt.imshow(data1),plt.title("转换后的图1")
plt.subplot(2,2,3),plt.imshow(data2),plt.title("转换后的图2")
plt.subplot(2,2,4),plt.imshow(data3),plt.title("转换后的图3")
plt.show()
# 操作2
img = Image.open("./demo.jpg")
img1 = transforms.RandomHorizontalFlip()(img)
img2 = transforms.RandomHorizontalFlip()(img)
img3 = transforms.RandomHorizontalFlip()(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2), plt.imshow(img1), plt.title("变换后的图1")
plt.subplot(2,2,3), plt.imshow(img2), plt.title("变换后的图2")
plt.subplot(2,2,4), plt.imshow(img3), plt.title("变换后的图3")
plt.show()
# 操作3、4
img = Image.open("./demo.jpg")
img = transforms.ToTensor()(img)
img = transforms.Normalize(mean=[0.5,0.5,0.5], std=[0.5,0.5,0.5])(img)
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

猜你喜欢

转载自blog.csdn.net/sinat_40759442/article/details/128091723
今日推荐