主要内容

pixelLabelImageDatastore

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

描述

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

创建

描述

例子

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

pximds= pixelLabelImageDatastore (洛桑国际管理发展学院pxds返回一个基于输入图像数据存储和像素标签数据存储对象的数据存储。洛桑国际管理发展学院是一个ImageDatastore表示对网络训练输入的对象。pxds是一个PixellabeldAtastore.对象,该对象表示所需的网络输出。

pximds= pixelLabelImageDatastore (___名称,价值另外使用名称 - 值对设置DispatchInBackgroundoutputsizeMode.属性。对于2-D数据,还可以使用名称-值对指定ColorPreprocessingDataAugmentation,OutputSize增强属性。您可以指定多个名称值对。将每个属性名称括在引号中。

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

输入参数

全部展开

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

图像集合,指定为ImageDatastore对象。

像素的集合标记图像,指定为aPixellabeldAtastore.对象。对象中包含的每个图像的像素标记图像洛桑国际管理发展学院输入对象。

属性

全部展开

此属性是只读的。

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

此属性是只读的。

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

此属性是只读的。

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

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

ColorPreprocessing属性对于3-D数据不受支持。万博1manbetx要对三维数据进行彩色通道预处理,请使用变换函数。

用于输入图像的预处理,指定为imageDataAugmenter(深度学习工具箱)对象或者“没有”.当DataAugmentation“没有”,对输入图像不进行预处理。训练数据可以在训练过程中实时增强。

DataAugmentation属性对于3-D数据不受支持。万博1manbetx要对三维数据进行预处理,请使用变换函数。

在培训,预测和分类期间,在后台调度观测,指定为真正的.要使用后台调度,您必须拥有并行计算工具箱™。如果DispatchInBackground真正的然后你就有了并行计算工具箱pixelLabelImageDatastore异步读取补丁,添加噪音,并队列补丁对。

在每批中返回的观察数。默认值等于ReadSize图像数据存储洛桑国际管理发展学院.的值可以更改小匹匹匹匹配只有在创建数据存储后才可以。用于训练、预测或分类小匹匹匹匹配属性设置为中定义的迷你批处理大小trainingOptions(深度学习工具箱)

此属性是只读的。

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

此属性是只读的。

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

OutputSize属性对于3-D数据不受支持。万博1manbetx要设置3-D数据的输出大小,请使用变换函数。

方法,用于调整输出图像的大小,指定为下列方法之一。此属性仅在设置时应用OutputSize而不是[]

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

  • “centercrop”-从训练图像的中心进行裁剪。作物大小与产量大小相同。

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

数据类型:字符|字符串

对象的功能

结合 合并来自多个数据存储的数据
countEachLabel 计数像素或盒标签的出现次数
hasdata 确定是否可以读取数据
partitionByIndex 分区pixelLabelImageDatastore根据索引
预览 预览数据存储中的数据子集
从数据存储中读取数据
readall 读取数据存储中的所有数据
readByIndex 读取由index指定的数据pixelLabelImageDatastore
重置 将数据存储重置为初始状态
洗牌 返回DataStore的Shuffled版本
变换 变换数据存储

例子

全部收缩

加载训练数据。

dataSetDir = fullfile (toolboxdir (“愿景”),“visiondata”“triangleImages”);imageDir = fullfile (dataSetDir,“trainingImages”);labeldir = fullfile(datasetdir,“trainingLabels”);

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

imd = imageDatastore (imageDir);

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

一会= [“三角形”“背景”];标签id = [255 0];一会,pxds = pixelLabelDatastore (labelDir 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 (filterSize,numFilters,“填充”(1) reluLayer) maxPooling2dLayer (2,“步”(2) convolution2dLayer filterSize numFilters,“填充”(1) reluLayer) transposedConv2dLayer (4 numFilters“步”2,“种植”1);numClasses convolution2dLayer(1日);pixelClassificationLayer softmaxLayer () ()];

设置培训选项。

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

组合图像和像素标签数据存储进行培训。

pxds trainingData =结合(imd);

培训网络。

网= trainNetwork (trainingData层,选择);
单CPU培训。初始化输入数据归一化。| ========================================================================================|时代|迭代|经过时间的时间迷你批量|迷你批量|基础学习| | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:00 | 58.11% | 1.3458 | 0.0010 | | 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,“trainingImages”);labeldir = fullfile(datasetdir,“trainingLabels”);

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

imd = imageDatastore (imageDir);

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

一会= [“三角形”“背景”];标签id = [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目的利用增强数据对网络进行训练。

pxds plimds = pixelLabelImageDatastore (imd,“DataAugmentation”增量)
plimds = pixellabelimagedataStore与属性:{200x1 cell} pixellabeldata:{200x1 cell} classNames:dataAugmentation:[1x1 imagedataAugmenter] colorpreprocessing:'none'输出显示:[]输出inalutizeMode:'调整大小'minibatchsize:1 numobservation:200Disparctinbackground:0

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

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

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

负载培训数据

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

dataFolder = fullfile (toolboxdir (“愿景”),“visiondata”“triangleImages”);imagefoldertrain = fullfile(datafolder,“trainingImages”);labelFolderTrain = fullfile (dataFolder,“trainingLabels”);

创建一个imageDatastore的图像。

imdstrain = imageageataStore(imagefoldertrain);

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

一会= [“三角形”“背景”];标签= [255 0];pxdsTrain = pixelLabelDatastore (labelFolderTrain、类名、标签)
pxdsTrain = PixelLabelDatastore with properties: Files: {200x1 cell} ClassNames: {2x1 cell} ReadSize: 1 ReadFcn: @readDatastoreImage AlternateFileSystemRoots: {}

创建语义分割网络

这个例子使用了一个基于扩展卷积的简单语义分割网络。

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

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

大多数像素标签用于背景。此类不平衡偏见了学习过程,支持主导类。要解决此问题,请使用类加权来平衡类。您可以使用多种方法来计算类权重。一种常用方法是逆频加权,其中类权重是类频率的倒数。该方法增加了所代表的类别的重量。使用逆频加权计算类重量。

numberPixels =总和(tbl.PixelCount);频率=(资源。PixelCount / numberPixels;classWeights = 1 ./频率;

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

inputSize = [32 32 1];filterSize = 3;numFilters = 32;numClasses =元素个数(类名);[imageInputLayer(inputSize)]卷积2dlayer (filterSize,numFilters,)“DilationFactor”,1,“填充”“相同”)BatchnormalizationLayer Rufulayer Convolution2dlayer(过滤,NumFilters,“DilationFactor”2,“填充”“相同”)BatchnormalizationLayer Rufulayer Convolution2dlayer(过滤,NumFilters,“DilationFactor”4“填充”“相同”) batchNormalizationLayer reluLayer卷积2dlayer (1,numClasses) softmaxLayer pixelClassificationLayer('课程'一会,'classweight'classWeights)];

列车网络的

指定培训选项。

选择= trainingOptions (“个”...“MaxEpochs”, 100,...“MiniBatchSize”,64,...'italllearnrate'1 e - 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 = imageDatastore (imageFolderTest);labelFolderTest = fullfile (dataFolder,“testLabels”);pxdsTest = pixelLabelDatastore (labelFolderTest、类名、标签);

使用测试数据和培训的网络进行预测。

pxdspred = semanticseg(Indstest,net,“MiniBatchSize”32岁的“WriteLocation”, tempdir);
运行的语义分割网络  ------------------------------------- * 100张图片处理。

评估预测精度使用evaluateSemanticSegmentation

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

有关评估语义分段网络的更多信息,请参阅evaluateSemanticSegmentation

段新形象

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

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

图中包含一个轴对象。axis对象包含一个image类型的对象。

使用分割测试图像semanticseg并显示结果使用labeloverlay

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

图中包含一个轴对象。axis对象包含一个image类型的对象。

提示

  • pixelLabelDatastorepxdsimageDatastore洛桑国际管理发展学院存储位于词典订单中的文件夹中的文件。例如,如果您有12个文件名为“file1.jpg”“file2.jpg”、……“file11.jpg”,“file12.jpg”,则文件按以下顺序存储:

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

    如果文件的顺序pxds洛桑国际管理发展学院是不一样的,那么当您使用apixelLabelImageDatastore.如果发生这种情况,请重命名像素标签文件,以便它们具有正确的顺序。例如,重命名“file1.jpg”、……'file9.jpg'“file01.jpg”,......,“file09.jpg”

  • 从数据中提取语义分割数据groundTruth对象生成的贴标签机视频,可以使用pixelLabelTrainingData函数。

介绍了R2018a