主要内容

PixellabelimagedAtastore.

用于语义分割网络的数据存储

描述

使用PixellabelimagedAtastore.创建一个数据存储,用于使用深度学习训练语义分割网络。

创建

描述

例子

pximds= pixelLabelImageDatastore (gTruth的)返回一个数据存储,用于根据输入训练语义分割网络groundTruth对象或数组groundTruth对象。使用输出PixellabelimagedAtastore.对象,使用深度学习工具箱™函数trainNetwork(深度学习工具箱)培训卷积神经网络进行语义分割。

pximds= pixelLabelImageDatastore (IMDS.PXDS.的)基于输入图像数据存储返回数据存储和像素标签数据存储对象。IMDS.是一个ImageageAtastore.对象,表示对网络的训练输入。PXDS.是一个PixelLabelDatastore对象,该对象表示所需的网络输出。

pximds= pixelLabelImageDatastore (___名称,值的)另外,使用名称-值对来设置DispatchInBackgroundOutputSizeMode属性。对于2-D数据,还可以使用名称-值对指定ColorPreprocessingDataAugmentation,OutputSize增加属性。可以指定多个名称-值对。将每个属性名用引号括起来。

例如,pixelLabelImageDatastore (gTruth PatchesPerImage, 40)创建像素标签图像数据存储,随机生成40个补丁从每个地面真理对象gTruth

输入参数

全部展开

地面真实数据,指定为groundTruth对象或数组groundTruth对象。每个groundTruth对象包含有关数据源、标签定义列表以及一组基础真值标签的所有已标记标签的信息。

图像集合,指定为ImageageAtastore.目的。

像素标记图像的集合,指定为PixelLabelDatastore目的。该对象包含用于包含在的每个图像的像素标记的图像IMDS.输入对象。

属性

全部展开

此属性是只读的。

用作地面真实图像来源的图像文件名,指定为字符向量或字符向量的单元数组。

此属性是只读的。

像素标签数据文件名称,用作地面真值标签图像的源,指定为字符或字符单元格数组。

此属性是只读的。

类名,指定为字符向量的单元格数组。

二维数据的彩色通道预处理,指定为'没有任何'“gray2rgb”,或“rgb2gray”.当您需要数据源创建的图像数据必须仅为颜色或灰度,但训练集同时包含这两种情况时,可以使用此属性。假设您需要训练一个需要彩色图像的网络,但是您的一些训练图像是灰度的。集ColorPreprocessing“gray2rgb”复制输入图像集中的灰度图像的颜色通道。使用“gray2rgb”选项创建M.——- - - - - -N.-By-3输出图像。

ColorPreprocessing属性对于3-D数据不受支持。金宝app要对三维数据进行彩色通道预处理,请使用变换功能。

用于输入图像的预处理,指定为ImagedataAugmenter.(深度学习工具箱)对象或'没有任何'.什么时候DataAugmentation'没有任何',没有将预处理应用于输入图像。培训数据可以在培训期间实时增强。

DataAugmentation属性对于3-D数据不受支持。金宝app要预处理3-D数据,请使用变换功能。

在训练、预测和分类过程中在背景中调度观测数据,指定为错误的真正的.要使用后台调度,必须具有并行计算工具箱™。如果DispatchInBackground真正的然后你就有了并行计算工具箱PixellabelimagedAtastore.异步读取修补程序,添加噪声,并队列补丁对。

在每批中返回的观察数。默认值等于ReadSize图像数据存储IMDS..的值可以更改MiniBatchSize只有创建数据存储后才会。用于培训,预测或分类,MiniBatchSize属性设置为中定义的迷你批处理大小trainingOptions(深度学习工具箱)

此属性是只读的。

去噪图像数据存储中的观测总数。观察的次数等于一个训练时期的长度。

此属性是只读的。

输出图像的大小,指定为两个正整数的向量。第一个元素指定输出图像中的行数,第二个元素指定列数。当你指定OutputSize,根据需要调整图像尺寸。默认情况下,此属性为空,这意味着未调整图像。

OutputSize属性对于3-D数据不受支持。金宝app要设置3-D数据的输出大小,请使用变换功能。

用于调整输出图像的方法,指定为以下之一。此属性仅在您设置时适用OutputSize到以外的价值[]

  • “调整”-缩放图像以适应输出大小。有关更多信息,请参见imresize

  • “centercrop”- 从训练形象的中心拍摄作物。裁剪与输出大小相同。

  • “randcrop”- 从训练图像中拍摄随机作物。随机裁剪的大小与输出大小相同。

数据类型:字符|字符串

对象功能

结合 将数据与多个数据存储组合
countEachLabel 计数像素或盒标签的出现次数
哈迪塔 确定数据是否可用读取
PartitionByIndex. 分区PixellabelimagedAtastore.根据指数
预览 预览数据存储中的数据子集
从数据存储中读取数据
读物 读取数据存储中的所有数据
readByIndex 读取由索引指定的数据PixellabelimagedAtastore.
重置 将数据存储重置为初始状态
洗牌 返回打乱的数据存储版本
变换 转换数据存储

例子

全部折叠

加载训练数据。

dataSetDir = fullfile (toolboxdir ('想象'),“visiondata”“triangleImages”);imageDir = fullfile (dataSetDir,'培训码');labelDir = fullfile (dataSetDir,“trainingLabels”);

为映像创建一个映像数据存储。

IMDS = ImageageAtastore(Imagedir);

创建一个pixelLabelDatastore对于地面真值像素标签。

一会= [“三角形”“背景”];labelids = [255 0];pxds = pixellabeldataStore(Labeldir,ClassNames,LabelIds);

可视化训练图像和地面真实像素标签。

我=读(imd);C =阅读(pxds);I = imresize (5);L = imresize (uint8 (C {1}), 5);imshowpair (L,我'剪辑'的)

创建一个语义分割网络。该网络采用了一个简单的基于下采样和上采样设计的语义分割网络。

numfilters = 64;filterSize = 3;numclasses = 2;图层= [imageInputlayer([32 32 1])卷积2dlayer(过滤,numfilters,“填充”(1) reluLayer) maxPooling2dLayer (2,'走吧',2)卷积2dlayer(过滤,numfilters,“填充”(1) reluLayer) transposedConv2dLayer (4 numFilters'走吧'2,“种植”1);numClasses convolution2dLayer(1日);pixelClassificationLayer softmaxLayer () ()];

设置培训选项。

选择= trainingOptions (“个”...“InitialLearnRate”1 e - 3,...“MaxEpochs”,100,...“MiniBatchSize”,64);

结合图像和像素标签数据存储进行训练。

pxds trainingData =结合(imd);

训练网络。

网= trainNetwork (trainingData层,选择);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 |就是| | 1.3458 | 0.0010 58.11%||17 |50 |00:00:12 | 97.30% | 0.0924 | 0.0010 | | 34 | 100 | 00:00:24 | 98.09% | 0.0575 | 0.0010 | | 50 | 150 | 00:00:37 | 98.56% | 0.0424 | 0.0010 | | 67 | 200 | 00:00:49 | 98.48% | 0.0435 | 0.0010 | | 84 | 250 | 00:01:02 | 98.66% | 0.0363 | 0.0010 | | 100 | 300 | 00:01:14 | 98.90% | 0.0310 | 0.0010 | |========================================================================================| Training finished: Reached final iteration.

读取并显示测试图像。

testImage = imread (“triangleTest.jpg”);imshow (testImage)

对测试图像进行分割并显示结果。

C = semanticseg (testImage,净);B = labeloverlay (testImage C);imshow (B)

配置像素标签图像数据存储以在训练时增强数据。

加载训练图像和像素标签。

dataSetDir = fullfile (toolboxdir ('想象'),“visiondata”“triangleImages”);imageDir = fullfile (dataSetDir,'培训码');labelDir = fullfile (dataSetDir,“trainingLabels”);

创建一个imageDatastore对象来保持训练图像。

IMDS = ImageageAtastore(Imagedir);

定义类名及其关联的标签id。

一会= [“三角形”“背景”];labelids = [255 0];

创建一个pixelLabelDatastore对象保存训练图像的ground truth像素标签。

pxds = pixelLabelDatastore(labelDir, classNames, labelid);

创建一个ImagedataAugmenter.对象随机旋转和镜像图像数据。

增量= imageDataAugmenter (“RandRotation”-10年[10],“RandXReflection”,真正的)
RandXReflection: 1 RandYReflection: 0 randyrotation: [-10 10] RandScale: [1 1] RandXScale: [1 1] RandYScale: [1 1] RandXShear: [0 0] RandYShear: [0 0] RandXTranslation: [0 0] RandYTranslation: [0 0] RandXTranslation: [0 0]

创建一个PixellabelimagedAtastore.目的利用增强数据对网络进行训练。

plimds = pixellabelimagedataStore(IMDS,PXD,'dataaugmentation',增强者)
plimds = pixelLabelImageDatastore with properties: Images: {200x1 cell} PixelLabelData: {200x1 cell} ClassNames: {2x1 cell} DataAugmentation: [1x1 imageDataAugmenter] ColorPreprocessing: 'none' OutputSize: [] OutputSizeMode: 'resize' MiniBatchSize: 1 NumObservations: 200 DispatchInBackground: 0

使用扩展卷积训练语义分割网络。

语义分割网络对图像中的每个像素进行分类,从而对图像进行分类。语义分割的应用包括用于自动驾驶的道路分割和用于医疗诊断的癌细胞分割。想要了解更多,请看使用深度学习开始语义分割

像DeepLab[1]这样的语义分割网络广泛使用扩张卷积(也称为atrous卷积),因为它们可以增加层的接受域(层可以看到的输入区域),而不增加参数或计算的数量。

负荷训练数据

该示例使用一个简单的32 × 32三角形图像数据集进行说明。数据集包括相应的像素标签地面真值数据。使用imageDatastore和一个pixelLabelDatastore

dataFolder = fullfile (toolboxdir ('想象'),“visiondata”“triangleImages”);imageFolderTrain = fullfile (dataFolder,'培训码');labelFolderTrain = fullfile (dataFolder,“trainingLabels”);

创建一个imageDatastore对于图像。

imdsTrain = imageDatastore (imageFolderTrain);

创建一个pixelLabelDatastore对于地面真值像素标签。

一会= [“三角形”“背景”];标签= [255 0];pxdsTrain = pixelLabelDatastore (labelFolderTrain、类名、标签)
pxdstrain = pixellabeldataStore with属性:文件:{200x1 cell} classNames:{2x1 Cell} ReadSize:1 ReadFCN:@ReadDataStoreImage externateFileSystemroots:{}

创建语义分割网络

此示例使用基于扩张卷积的简单语义分段网络。

为训练数据创建一个数据源,并获取每个标签的像素计数。

ds =结合(imdsTrain pxdsTrain);台= countEachLabel (pxdsTrain)
TBL =2×3表名字PixelCount ImagePixelCount  ______________ __________ _______________ {' 三角形的}10326 2.048 e + 05年{‘背景’}1.9447 e + 05年2.048 e + 05

大多数像素标签用于背景。这种阶级失衡使学习过程偏向于主导阶级。要解决这个问题,可以使用类权重来平衡类。可以使用几种方法来计算类权重。一种常见的方法是逆频率加权,其中类权重是类频率的倒数。这个方法增加了给予未表示的类的权重。使用反频率加权计算类别权重。

numberpixels = sum(tbl.pixelcount);频率= tbl.pixelcount / numberpixels;Classweights = 1 ./频率;

通过使用具有与输入图像大小相对应的输入大小的图像输入层创建像素分类网络。接下来,指定三个块的卷积、批处理归一化和ReLU层。对于每个卷积层,指定32个3 × 3滤波器,增加膨胀因子,并通过设置填充输入,使其与输出相同大小“填充”选项“相同”.要对像素进行分类,需要包含一个卷积层K.1比1卷积,在哪里K.是类的数量,然后是softmax层和一个PixelclassificationLayer.用相反的类权重。

inputSize = [32 32 1];filterSize = 3;numFilters = 32;numClasses =元素个数(类名);[imageInputLayer(inputSize)]卷积2dlayer (filterSize,numFilters,)“DilationFactor”, 1“填充”“相同”) batchNormalizationLayer reluLayer卷积2dlayer (filterSize,numFilters,“DilationFactor”2,“填充”“相同”) batchNormalizationLayer reluLayer卷积2dlayer (filterSize,numFilters,“DilationFactor”4“填充”“相同”) batchNormalizationLayer reluLayer卷积2dlayer (1,numClasses) softmaxLayer pixelClassificationLayer(“类”一会,“ClassWeights”classWeights)];

火车网络

指定培训选项。

选择= trainingOptions (“个”...“MaxEpochs”, 100,...“MiniBatchSize”,64,...“InitialLearnRate”,1E-3);

培训网络使用trainNetwork

网= trainNetwork (ds、层、期权);
单CPU训练。初始化输入数据规范化。| ======================================================================================== ||时代|迭代|经过时间的时间迷你批量|迷你批量|基础学习| | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:02 | 91.62% | 1.6825 | 0.0010 | | 17 | 50 | 00:00:28 | 88.56% | 0.2393 | 0.0010 | | 34 | 100 | 00:00:55 | 92.08% | 0.1672 | 0.0010 | | 50 | 150 | 00:01:22 | 93.17% | 0.1472 | 0.0010 | | 67 | 200 | 00:01:46 | 94.15% | 0.1313 | 0.0010 | | 84 | 250 | 00:02:08 | 94.47% | 0.1167 | 0.0010 | | 100 | 300 | 00:02:34 | 95.04% | 0.1100 | 0.0010 | |========================================================================================| Training finished: Max epochs completed.

测试网络

加载测试数据。创建一个imageDatastore对于图像。创建一个pixelLabelDatastore对于地面真值像素标签。

imageFolderTest = fullfile (dataFolder,“testImages”);imdstest = imageageataStore(imagefoldertest);labelfoldertest = fullfile(datafolder,'testlabels');pxdsTest = pixelLabelDatastore (labelFolderTest、类名、标签);

利用测试数据和训练网络进行预测。

pxdsPred = semanticseg (imdsTest净,“MiniBatchSize”32岁的'writepocation', tempdir);
运行的语义分割网络  ------------------------------------- * 100张图片处理。

使用预测精度评估预测准确性评估评估

指标= evaluateSemanticSegmentation (pxdsPred pxdsTest);
---------------------------------------- *选择指标:全局准确率,类准确率,IoU,加权IoU, BF评分。*处理100张图片。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore  ______________ ____________ _______ ___________ ___________ 0.95237 0.97352 0.72081 0.92889 0.46416

有关评估语义分割网络的更多信息,请参见评估评估

段新形象

读取并显示测试图像triangleTest.jpg

imgTest = imread (“triangleTest.jpg”);图imshow (imgTest)

图包含轴对象。轴对象包含类型图像的对象。

使用分割测试图像SemanticSeg.并使用使用Labeloverlay.

C = semanticseg (imgTest,净);B = labeloverlay (imgTest C);图imshow (B)

图包含轴对象。轴对象包含类型图像的对象。

提示

  • pixelLabelDatastorePXDS.imageDatastoreIMDS.按字典顺序存储位于文件夹中的文件。例如,如果您有12个文件名为“file1.jpg”“file2.jpg”、……“file11.jpg”,“file12.jpg”,则文件按以下顺序存储:

    “file1.jpg”“file10.jpg”“file11.jpg”“file12.jpg”“file2.jpg”“file3.jpg”...“file9.jpg”
    存储在单元格数组中的文件被读取的顺序与存储的顺序相同。

    如果文件的顺序PXDS.IMDS.是不一样的,那么当您使用aPixellabelimagedAtastore..如果出现这种情况,那么重命名像素标签文件,使它们具有正确的顺序。例如,重命名“file1.jpg”、……“file9.jpg”“file01.jpg”、……'file09.jpg'

  • 从a中提取语义分段数据groundTruth对象生成的视频贴图, 使用PixellabeltrainingData.功能。

也可以看看

职能

对象

话题

在R2018A介绍