主要内容

预处理深度学习卷

读取容量数据

金宝app体积图像数据支持的文件格式包括mat文件、医学数字成像和通信(DICOM)文件和神经成像信息技术倡议(NIfTI)文件。

读取体积图像数据到ImageDatastore。读取体积像素标签数据到PixelLabelDatastore(计算机视觉工具箱)。有关更多信息,请参见用于深度学习的数据存储

的典型用法imageDatastore而且pixelLabelDatastore对于每种支持的文件格式。金宝app创建数据存储时,指定“FileExtensions”参数作为数据的文件扩展名。指定ReadFcn属性作为读取文件格式数据的函数句柄。的filepath参数指定包含图像数据的文件或文件夹的路径。对于像素标签图像,附加一会而且pixelLabelID参数指定体素标签值到类名的映射。

图像文件格式

创建图像数据存储或像素标签数据存储

volds = imageDatastore(文件路径,...“FileExtensions”“.mat”“ReadFcn”@ (x) fcn (x));pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID,...“FileExtensions”“.mat”“ReadFcn”@ (x) fcn (x));
fcn是从MAT文件中读取数据的自定义函数。例如,这段代码定义了一个函数matRead它从MAT文件的第一个变量加载卷数据。将函数保存在一个名为matRead.m

函数data = matRead(文件名)inp = load(文件名);F = fields(inp);数据= inp.(f{1});结束

单个文件中的DICOM卷

volds = imageDatastore(文件路径,...“FileExtensions”“.dcm”“ReadFcn”@ (x) dicomread (x));pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID,...“FileExtensions”“.dcm”“ReadFcn”@ (x) dicomread (x));

有关读取DICOM文件的详细信息,请参见dicomread(图像处理工具箱)

多个文件中的DICOM卷

遵循以下步骤。有关示例,请参见创建包含单文件和多文件DICOM卷的镜像数据存储(图像处理工具箱)

  • 的方法将这些文件聚合成一个单独的研究dicomCollection(图像处理工具箱)函数。

  • 方法读取研究中的DICOM数据dicomreadVolume(图像处理工具箱)函数。

  • 将每个卷写入一个MAT文件。

  • 创建ImageDatastorePixelLabelDatastore从MAT文件的收集,请遵循MAT文件的程序。

NIfTI

volds = imageDatastore(文件路径,...“FileExtensions”“.nii”“ReadFcn”@ (x) niftiread (x));pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID,...“FileExtensions”“.nii”“ReadFcn”@ (x) niftiread (x));

有关读取NIfTI文件的详细信息,请参见niftiread(图像处理工具箱)

对图像和标签数据

要关联体积图像和标签数据进行语义分割,或关联两个体积图像数据存储进行回归,请使用randomPatchExtractionDatastore(图像处理工具箱)。随机补丁提取数据存储从两个数据存储中提取相应的随机定位的补丁。补丁是一种常见的技术,用于在训练任意大的容量时防止内存耗尽。指定与网络输入大小相匹配的补丁大小,并且为了提高内存效率,补丁大小要小于卷的完整大小,例如64-by-64-by-64体素。

你也可以使用结合函数关联两个数据存储。但是,使用实例关联两个数据存储randomPatchExtractionDatastore有一些好处结合

  • randomPatchExtractionDatastore金宝app支持并行训练、多gpu训练、预取读取。属性指定并行或多gpu训练ExecutionEnvironment的名称-值参数trainingOptions。属性指定预取读取DispatchInBackground的名称-值参数trainingOptions。预取读取需要并行计算工具箱™。

  • randomPatchExtractionDatastore固有地支持补丁提取。金宝app相比之下,从CombinedDatastore,必须定义自己的将图像裁剪为补丁的函数,然后使用变换函数应用裁剪操作。

  • randomPatchExtractionDatastore可以从一个测试图像生成多个图像补丁。一对多的补丁提取有效地增加了可用的训练数据量。

预处理容量数据

深度学习通常需要对数据进行预处理和增强。例如,您可能希望规范化图像强度、增强图像对比度或添加随机仿射变换以防止过拟合。

若要预处理容量数据,请使用变换函数。变换创建数据存储的更改形式,称为底层数据存储,通过根据在自定义函数中定义的操作集转换底层数据存储读取的数据。图像处理工具箱™提供了几个功能,接受体积输入。有关函数的完整列表,请参见三维体积图像处理(图像处理工具箱)。您还可以使用MATLAB中的函数预处理体积图像®它适用于多维数组。

类返回的格式的数据底层数据存储的函数。

底层数据存储

自定义转换函数的输入格式

ImageDatastore

自定义转换函数的输入取决于ReadSize财产。

  • ReadSize为1时,变换函数必须接受整数数组。控件中的图像类型与数组的大小一致ImageDatastore。例如,灰度图像有大小——- - - - - -n,真彩色图像有大小——- - - - - -n-by-3,多光谱图像与c通道有大小——- - - - - -n——- - - - - -c

  • ReadSize大于1时,转换函数必须接受与批处理中每个图像对应的图像数据单元数组。

有关更多信息,请参见的函数ImageDatastore

PixelLabelDatastore

自定义转换函数的输入取决于ReadSize财产。

  • ReadSize为1时,变换函数必须接受一个分类矩阵。

  • ReadSize大于1时,变换函数必须接受分类矩阵的单元格数组。

有关更多信息,请参见(计算机视觉工具箱)的函数PixelLabelDatastore

RandomPatchExtractionDatastore

自定义转换函数的输入必须是一个有两列的表。

有关更多信息,请参见(图像处理工具箱)的函数RandomPatchExtractionDatastore

变换函数必须返回与网络输入大小匹配的数据。的变换函数不支持一对多观测映射。金宝app

中对体积数据应用随机仿射变换RandomPatchExtractionDatastore,你必须使用变换函数。的DataAugmentation属性不支持容量数据。金宝app

例子

转换镜像数据存储中的批量容量数据

这个示例展示了如何使用示例图像预处理管道转换图像数据存储中的体积数据。

指定一组保存在MAT文件中的体积图像。

Filepath = fullfile(matlabroot,“工具箱”“图片”“imdata”“mristack.mat”);文件= [filepath;filepath;filepath];

创建存储多个容量映像的映像数据存储。指定ReadSize的值大于1。指定一个自定义读函数,matRead。此函数在本示例的支持函数部分中定义。金宝app

volDS = imageDatastore(文件,FileExtensions=“.mat”...ReadSize = 3, ReadFcn = @ (x) matRead (x));

指定网络的输入大小。

inputSize = [128 128];

中的体积图像预处理volDS类中定义的自定义预处理管道preprocessVolumetricIMDS金宝app支持功能。

dsTrain = transform(volDS,@(x) preprocessVolumetricIMDS(x,inputSize));

读取一批数据。

minibatch = read(dsTrain)
minibatch =3×1单元格数组{128x128x21 uint8} {128x128x21 uint8}

金宝app支持功能

matRead函数从MAT文件的第一个变量加载卷数据。

函数data = matRead(文件名)inp = load(文件名);F = fields(inp);数据= inp.(f{1});结束

preprocessVolumetricIMDS函数对从底层图像数据存储中读取的数据执行所需的转换。因为图像数据存储的读取大小大于1,所以函数必须接受图像数据的单元格数组。函数循环遍历每个读取的图像,并根据这个预处理管道转换数据:

  • 随机旋转图像z设在。

  • 将卷大小调整为网络期望的大小。

  • 创建一个带有高斯噪声的图像的噪声版本。

  • 返回单元格数组中的图像。

函数batchOut = preprocessVolumetricIMDS(batchIn,inputSize) numRows = size(batchIn,1);batchOut = cell(numRows,1);idx = 1:numRows%随机绕z轴90度旋转imrotate = imrotate3(batchIn{idx,1},90*(randi(4)-1),[0 0 1]);将卷大小调整为网络所期望的大小imresize = imresize(imrotate,inputSize);添加归一化方差为0.01的零均值高斯噪声imnoise = imnoise(imResized,“高斯”, 0.01);返回预处理数据batchOut(idx) = {imnoise};结束结束

在随机补丁提取数据存储中转换容量数据

这个示例展示了如何使用示例图像预处理管道转换随机补丁提取数据存储中的体积数据对。

指定两组保存在MAT文件中的体积图像。每组包含5个体积图像。

Dir = fullfile(matlabroot,“工具箱”“图片”“imdata”“BrainMRILabeled”);filesVol1 = fullfile(dir,“图片”);filesVol2 = fullfile(dir,“标签”);

将每组体积图像存储在一个图像数据存储中。指定一个自定义读函数,matRead。此函数在本示例的支持函数部分中定义。金宝app使用默认值ReadSize为1。

vol1DS = imageDatastore(filesVol1,FileExtensions=“.mat”ReadFcn = @ (x) matRead (x));vol2DS = imageDatastore(filesVol2,FileExtensions=“.mat”ReadFcn = @ (x) matRead (x));

指定网络的输入大小。

inputSize = [128 128];

创建一个随机的补丁提取数据存储,从两个数据存储中提取相应的补丁。每张图像选择三个补丁。

patchVolDS = randompatchextracactiondatastore (vol1DS,vol2DS,inputSize,PatchesPerImage=3);

中的体积图像预处理patchVolDS类中定义的自定义预处理管道preprocessVolumetricPatchDS金宝app支持功能。

dsTrain = transform(patchVolDS,@(x) preprocessVolumetricPatchDS(x));

读取一批数据。

minibatch = read(dsTrain)
minibatch =15×2表InputImage ResponseImage ____________________ ___________________ {128x128x155 uint16} {128x128x155 uint16} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint16} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint16}} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint16}} {128x128x155 uint8}}{128 × 128 × 155 uint8} {128 × 128 × 155 uint16} {128 × 128 × 155 uint8} {128 × 128 × 155 uint8} {128 × 128 × 155 uint16} {128 × 128 × 155 uint8} {128 × 128 × 155 uint8} {128 × 128 × 155 uint16} {128 × 128 × 155 uint16} {128 × 128 × 155 uint16}

金宝app支持功能

matRead函数从MAT文件的第一个变量加载卷数据。

函数data = matRead(文件名)inp = load(文件名);F = fields(inp);数据= inp.(f{1});结束

preprocessVolumetricPatchDS函数对从底层随机补丁提取数据存储中读取的数据执行所需的转换。函数必须接受一个表。该函数根据这个预处理管道转换数据:

  • 随机选择五个增强之一。

  • 对表的两个列中的数据应用相同的增强。

  • 在表中返回增强图像对。

函数batchOut = preprocessVolumetricPatchDS(batchIn) numRows = size(batchIn,1);batchOut = batchIn;% 5个附加项:nil,rot90,fliplr,flipud,rot90(fliplr)augType = {@ (x) x, @rot90 @fliplr, @flipud, @ (x) rot90 (fliplr (x))};idx = 1:numRows img = batchIn{idx,1}{1};resp = batchIn{idx,2}{1};rndIdx = randi(5,1);imgag = augType{rndIdx}(img);respAug = augType{rndIdx}(respp);batchOut(idx,:) = {imgAug,respAug};结束结束

另请参阅

||(计算机视觉工具箱)|(图像处理工具箱)|

相关的例子

更多关于