主要内容

semanticseg

基于深度学习的语义图像分割

描述

例子

C= semanticseg (网络使用深度学习返回输入图像的语义分割。

C分数allScores= semanticseg(网络中每个类别标签的分类分数C.该函数在数组中返回与输入图像中的每个像素或体素对应的分数。

___= semanticseg(网络roi返回输入图像的矩形子区域的语义分割。

pxds= semanticseg (ds网络中图像集合的语义分割ds,一个数据存储对象。

该函数支持使用多个MATLAB并行计算®工人。方法启用并行计算计算机视觉工具箱参数设置对话框。

___= semanticseg(___名称,值返回带有由一个或多个名-值对参数指定的附加选项的语义分割。

例子

全部折叠

在图像上叠加分割结果并显示结果。

加载一个预先训练好的网络。

数据=负载(“triangleSegmentationNetwork”);Net = data.net
net = SeriesNetwork with properties: Layers: [10x1 nnet.cnn.layer.Layer] InputNames: {'imageinput'} OutputNames: {'classoutput'}

列出网络层。

网layers
ans = 10x1带有图层的图层数组:1“imageinput”图像输入32 x32x1图像“zerocenter”正常化2 conv_1二维卷积64 3 x3x1旋转步[1]和填充[1 1 1 1]3‘relu_1 ReLU ReLU 4“maxpool”二维最大池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]64 3 x3x64 conv_2的二维卷积运算与步幅[1]和填充[1 1 1 1]6‘relu_2 ReLU ReLU 7 transposed-conv二维卷积转置64 4 x4x64转置运算与步幅2[2]和裁剪[1 1 1 1]8 'conv_3' 2-D Convolution 2 1x1x64 convolutions with stride [1 1] and padding [0 0 0 0] 9 'softmax' Softmax softmax 10 'classoutput' Pixel Classification Layer Class weighted cross-entropy loss with classes 'triangle' and 'background'

读取并显示测试图像。

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

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

进行语义图像分割。

[C,分数]= semanticseg(I,net,“MiniBatchSize”、32);

在图像上叠加分割结果并显示结果。

B = labeloverlay(I, C);图imshow (B)

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

显示分类分数。

图imagesc(分数)轴广场colorbar

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

创建一个只有三角形的二进制蒙版。

Bw = c ==“三角形”;图imshow (BW)

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

在一组测试图像上运行语义分割,并将结果与真实数据进行比较。

加载一个预先训练好的网络。

数据=负载(“triangleSegmentationNetwork”);Net = data.net;

使用负载测试图像imageDatastore

dataDir = fullfile(toolboxdir(“愿景”),“visiondata”“triangleImages”);testImageDir = fullfile(dataDir,“testImages”);imds = imageDatastore(testImageDir)
imds = ImageDatastore属性:Files:{'…/toolbox/vision/visiondata/triangleImages/testImages/image_001.jpg';’……/工具箱/视觉/ visiondata / triangleImages / testImages / image_002.jpg”;/toolbox/vision/visiondata/triangleImages/testImages/image_003.jpg和97个}文件夹:{'…/build/matlab/toolbox/vision/visiondata/triangleImages/testImages'} AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage

加载地面真相测试标签。

testLabelDir = fullfile(dataDir,“testLabels”);classNames = [“三角形”“背景”];pixelLabelID = [255 0];pxdsTruth = pixelLabelDatastore(testLabelDir,classNames,pixelLabelID);

在所有测试图像上运行语义分割,批量大小为4。可以根据系统内存资源增加批处理大小以增加吞吐量。

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

将结果与实际情况进行比较。

metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth)
评估语义分割结果---------------------------------------- *选择的指标:全局精度,类别精度,IoU,加权IoU, BF分数。*处理了100张图像。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore  ______________ ____________ _______ ___________ ___________ 0.90624 0.95085 0.61588 0.87529 0.40652
metrics = semanticSegmentationMetrics with properties: ConfusionMatrix: [2x2 table] NormalizedConfusionMatrix: [2x2 table] DataSetMetrics: [1x5 table] ClassMetrics: [2x3 table] ImageMetrics: [100x5 table]

这个例子展示了如何定义和创建一个使用Tversky损失的自定义像素分类层。

该层可用于训练语义分割网络。要了解有关创建自定义深度学习层的详细信息,请参见定义自定义深度学习层(深度学习工具箱)

特沃斯基损失

Tversky损失是基于Tversky指数来测量两个分割图像之间的重叠[1].特沃斯基指数 “透明国际” c 在一个图像之间 Y 和相应的基本真理 T 是由

“透明国际” c 1 Y 厘米 T 厘米 1 Y 厘米 T 厘米 + α 1 Y 厘米 T c + β 1 Y c T 厘米

  • c 对应于类和 c 相当于没去上课 c

  • 的前两个维度上的元素个数是多少 Y

  • α 而且 β 是控制每个类别的假阳性和假阴性对损失的贡献的加权因素。

损失 l 除以课程的数量 C 是由

l c 1 C 1 - “透明国际” c

分类层模板

将分类层模板复制到MATLAB®的新文件中。该模板概述了分类层的结构,并包括定义层行为的函数。示例的其余部分显示如何完成tverskyPixelClassificationLayer

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer . tverskyPixelClassificationLayer属性%可选属性结束方法函数损失(层,Y, T)%层正向损失函数在这里结束结束结束

声明图层属性

默认情况下,自定义输出层具有以下属性:

  • 的名字-层名,指定为字符向量或字符串标量。要在图层图中包含此图层,必须指定一个非空的惟一层名。如果你用这个层训练一个系列网络的名字设置为,然后软件在训练时自动分配一个名字。

  • 描述-层的单行描述,指定为字符向量或字符串标量。控件中显示该层时,将显示此描述数组中。如果您没有指定层描述,那么软件将显示层类名称。

  • 类型-层的类型,指定为字符向量或字符串标量。的价值类型控件中显示该层时显示数组中。如果您没有指定层类型,那么软件将显示“分类层”“回归层”

自定义分类层还具有以下属性:

  • -输出层的类,指定为分类向量、字符串数组、字符向量的单元格数组或“汽车”.如果“汽车”,然后软件在训练时间自动设置课程。如果指定字符向量的字符串数组或单元格数组str,则软件将输出层的类设置为分类(str, str).默认值为“汽车”

如果该层没有其他属性,则可以省略属性部分。

特沃斯基损失需要一个小的常数值来防止被零除。指定属性,ε,以保持该值。它还需要两个变量属性Alpha而且β分别控制假阳性和假阴性的权重。

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer . tverskyPixelClassificationLayer属性(常量)%用于防止除零的小常数。= 1e-8;结束属性%假阳性和假阴性的默认权重系数Alpha = 0.5;Beta = 0.5;结束...结束

创建构造函数

创建构造层和初始化层属性的函数。指定创建该层所需的任何变量作为构造函数的输入。

属性的可选输入参数名的名字属性在创建时。

函数层= tverskyPixelClassificationLayer(名称,alpha, beta)% layer = tverskyPixelClassificationLayer(name)创建一个Tversky使用指定名称的%像素分类层。设置层名层。的名字=name;设置图层属性层。Alpha = Alpha;层。β=beta;设置层描述层。Description =“特沃斯基损失”结束

创建正向损失函数

创建一个名为forwardLoss这将返回由网络做出的预测和训练目标之间的加权交叉熵损失。的语法forwardLoss损失(层,Y,T),在那里Y是前一层的输出和T表示培训目标。

对于语义分割问题,的维数T尺寸匹配Y,在那里Y4-D数组的大小H——- - - - - -W——- - - - - -K——- - - - - -N,在那里K是班级的数量,和N是小批大小。

的大小Y取决于前一层的输出。为了确保Y尺寸和T,必须在输出层之前包含一个输出正确大小的层。例如,确保Y是预测分数的4-D数组K类,可以包含大小完全连接的层K或者卷积层K在输出层之前,使用一个softmax层进行过滤。

函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的Tversky损失预测Y和训练目标T。Pcnot = 1-Y;Gcnot = 1-T;TP = sum(sum(y *T,1),2);FP = sum(sum(Y.*Gcnot,1),2);FN = sum(sum(Pcnot.*T,1),2);number = TP + layer.Epsilon;denom = TP +层。Alpha*FP +层。β*FN + layer.Epsilon;计算特沃斯基指数lossTIc = 1 - number ./denom;lossTI = sum(lossTIc,3);返回平均特沃斯基指数损失N = size(Y,4);损失= sum(lossTI)/N;结束

反向损失函数

随着forwardLoss函数完全支持自动微分,不需要为反向损失创建函数。

有关支持自动微分的函数列表,请参见支持dlarray的函数列表(深度学习工具箱)

完成一层

中提供了完整的层tverskyPixelClassificationLayer.m

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer . tverskyPixelClassificationLayer这一层实现了用于训练的Tversky损失函数%语义分割网络。%的引用萨利希,赛义德·萨迪格·莫赫塞尼,德尼兹·埃尔多格穆斯和阿里·格利普尔。。Tversky损失函数用于三维图像分割卷积深度网络。”国际机械研讨会%医学影像学习。施普林格,Cham, 2017。% ----------属性(常量)%用于防止除零的小常数。= 1e-8;结束属性%假阳性和假的默认权重系数%底片Alpha = 0.5;Beta = 0.5;结束方法函数层= tverskyPixelClassificationLayer(名称,alpha, beta)% layer = tverskyPixelClassificationLayer(name, alpha, beta)创建一个Tversky%像素分类层具有指定的名称和属性alpha和beta。设置层名。层。的名字=name; layer.Alpha = alpha; layer.Beta = beta;设置层描述。层。Description =“特沃斯基损失”结束函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的Tversky损失预测Y和训练目标T。Pcnot = 1-Y;Gcnot = 1-T;TP = sum(sum(y *T,1),2);FP = sum(sum(Y.*Gcnot,1),2);FN = sum(sum(Pcnot.*T,1),2);number = TP + layer.Epsilon;denom = TP +层。Alpha*FP +层。β*FN + layer.Epsilon;计算特沃斯基指数lossTIc = 1 - number ./denom;lossTI = sum(lossTIc,3);返回平均特沃斯基指数损失。N = size(Y,4);损失= sum(lossTI)/N;结束结束结束

GPU的兼容性

所使用的MATLAB函数forwardLosstverskyPixelClassificationLayer所有的支持gpuArray输入,所以该层是GPU兼容的。

检查输出层有效性

创建该层的一个实例。

层= tverskyPixelClassificationLayer(“特沃斯基”, 0.7, 0.3);

通过使用检查层的有效性checkLayer(深度学习工具箱).将有效的输入大小指定为该层的典型输入的单个观察值的大小。该层期望H——- - - - - -W——- - - - - -K——- - - - - -N数组输入,其中K是班级的数量,和N是小批中的观察数。

numClasses = 2;validInputSize = [4 4 numClasses];validInputSize checkLayer(层,“ObservationDimension”4)
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定'CheckCodegenCompatibility'和'ObservationDimension'选项。运行nnet.checklayer.TestOutputLayerWithoutBackward ........完成nnet.checklayer.TestOutputLayerWithoutBackward __________测试总结:8通过,0失败,0不完整,2跳过。时间流逝:0.31452秒。

测试摘要报告通过、失败、不完整和跳过测试的数量。

在语义分割网络中使用自定义层

创建一个语义分割网络tverskyPixelClassificationLayer

图层= [imageInputLayer([32 32 1]) convolution2dLayer(3,64,“填充”,1) maxPooling2dLayer(2,“步”, 2) convolution2dLayer (64,“填充”,1) reluLayer转置conv2dlayer (4,64,“步”2,“种植”,1) convolution2dLayer(1,2) softmaxLayer tverskyPixelClassificationLayer(“特沃斯基”, 0.3, 0.7);

加载训练数据用于语义分割使用imageDatastore而且pixelLabelDatastore

dataSetDir = fullfile(toolboxdir(“愿景”),“visiondata”“triangleImages”);imageDir = fullfile(dataSetDir,“trainingImages”);labelDir = fullfile(dataSetDir,“trainingLabels”);imds = imageDatastore(imageDir);classNames = [“三角形”“背景”];labelIDs = [255 0];pxds = pixelLabelDatastore(labelDir, classNames, labelIDs);

使用数据存储将图像和像素标签数据关联起来结合

Ds = combine(imds,pxds);

设置训练选项,训练网络。

选项= trainingOptions(“亚当”...“InitialLearnRate”1 e - 3,...“MaxEpochs”, 100,...“LearnRateDropFactor”, 5 e 1,...“LearnRateDropPeriod”, 20岁,...“LearnRateSchedule”“分段”...“MiniBatchSize”, 50);net = trainNetwork(ds,layers,options);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 | 00:00:01 | 50.32% | 1.2933 | 0.0010 | | 13 | 50 | 00:00:20 | 98.83% | 0.0991 | 0.0010 | | 25 | 100 | 00:00:37 | 99.33% | 0.0549 | 0.0005 | | | 150 | 00:00:53 | 99.37% | 0.0465 |0.0005 | | 200 | | 00:01:07 | 99.48% | 0.0400 | 0.0003 | 63 | 250 | | 00:01:20 | 99.47% | 0.0385 | 0.0001 | 75 | 300 | | 00:01:31 | 99.54% | 0.0349 | 0.0001 | 88 | 350 | | 00:01:42 | 99.51% | 0.0353 | 6.2500 e-05 | | 100 | 400 | 00:01:53 | | 0.0331 | 6.2500 e-05 99.56%  | |========================================================================================| 培训完成:马克思时代完成。

通过对测试图像进行分割并显示分割结果来评估训练后的网络。

I = imread(“triangleTest.jpg”);[C,分数]= semanticseg(I,net);B = labeloverlay(I,C);蒙太奇({B}我)

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

参考文献

[1]萨利希,赛义德·萨迪格·莫赫塞尼,德尼兹·埃尔多格穆斯和阿里·格利普尔。“使用3D全卷积深度网络进行图像分割的Tversky损失函数。”医学影像中的机器学习国际研讨会.施普林格,Cham, 2017。

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

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

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

负荷训练数据

该示例使用一个简单的32x32三角形图像数据集进行演示。数据集包括随附的像素标签地面真相数据。加载训练数据imageDatastore和一个pixelLabelDatastore

dataFolder = fullfile(toolboxdir(“愿景”),“visiondata”“triangleImages”);imageFolderTrain = fullfile(数据文件夹,“trainingImages”);labelFolderTrain = fullfile(数据文件夹,“trainingLabels”);

创建一个imageDatastore图片。

imdsTrain = imageDatastore(imageFolderTrain);

创建一个pixelLabelDatastore对于ground truth像素标签。

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

创建语义分割网络

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

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

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

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

numberPixels = sum(tbl.PixelCount);频率= tbl。P我xelCount / numberPixels; classWeights = 1 ./ frequency;

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

inputSize = [32 32 1];filterSize = 3;numFilters = 32;numClasses = numel(classNames);图层= [imageInputLayer(inputSize) convolution2dLayer(filterSize,numFilters,“DilationFactor”,1,“填充”“相同”卷积2dlayer (filterSize,numFilters,“DilationFactor”2,“填充”“相同”卷积2dlayer (filterSize,numFilters,“DilationFactor”4“填充”“相同”batchNormalizationLayer reluLayer convolution2dLayer(1,numClasses)“类”一会,“ClassWeights”classWeights)];

列车网络的

指定培训选项。

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

使用trainNetwork

net = trainNetwork(ds,layers,options);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 | 00:00:01 | 91.62% | 1.6825 | 0.0010 | | 17 | 50 | 00:00:17 | 88.56% | 0.2393 | 0.0010 | | 100 | | 00:00:29 | 92.08% | 0.1672 | 0.0010 | | 150 | | 00:00:41 | 93.17% | 0.1472 |0.0010 | 67 | 200 | | 00:00:54 | 94.15% | 0.1313 | 0.0010 | 84 | 250 | | 00:01:06 | 94.47% | 0.1167 | 0.0010 | 100 | 300 | | 00:01:18 | | 0.1100 | 0.0010 95.04%  | |========================================================================================| 培训完成:马克思时代完成。

测试网络

加载测试数据。创建一个imageDatastore图片。创建一个pixelLabelDatastore对于ground truth像素标签。

imageFolderTest = fullfile(数据文件夹,“testImages”);imdsTest = imageDatastore(imageFolderTest);labelFolderTest = fullfile(数据文件夹,“testLabels”);pxdsTest = pixelLabelDatastore(labelFolderTest,classNames,labels);

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

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

评估预测精度evaluateSemanticSegmentation

metrics = 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,net);B = labeloverlay(imgTest,C);图imshow (B)

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

输入参数

全部折叠

输入图像,指定为下列之一。

图像类型 数据格式
单张二维灰度图像 大小的二维矩阵H——- - - - - -W
单张二维彩色图像或二维多光谱图像 三维尺寸阵列H——- - - - - -W——- - - - - -C.颜色通道的数量C3表示彩色图像。
一系列的P二维图像 大小的4-D数组H——- - - - - -W——- - - - - -C——- - - - - -P.颜色通道的数量C灰度图像为1,彩色图像为3。
具有深度的三维灰度图像D 三维尺寸阵列H——- - - - - -W——- - - - - -D
单张三维彩色图像或三维多光谱图像 大小的4-D数组H——- - - - - -W——- - - - - -D——- - - - - -C.颜色通道的数量C3表示彩色图像。
一系列的P三维图像 5-D数组大小H——- - - - - -W——- - - - - -D——- - - - - -C——- - - - - -P

输入图像也可以是gpuArray(并行计算工具箱)包含上述图像类型之一(需要并行计算工具箱™)。

数据类型:uint8|uint16|int16|||逻辑

网络,指定为SeriesNetwork(深度学习工具箱)DAGNetwork(深度学习工具箱),或dlnetwork(深度学习工具箱)对象。

感兴趣的区域,指定为下列之一。

图像类型 ROI格式
二维图像 形式为[的四元向量xy宽度高度
三维图像 形式为[的6元向量xyz宽度高度深度

该向量定义了一个矩形或立方体区域的兴趣完全包含在输入图像。感兴趣区域外的图像像素被分配为<未定义的>分类标签。如果输入图像由一系列图像组成,则semanticseg同样适用roi到系列中的所有图像。

映像的集合,指定为一个数据存储。的函数必须返回数字数组、单元格数组或表。对于有多列的单元格数组或表,函数只处理第一列。

有关更多信息,请参见用于深度学习的数据存储(深度学习工具箱)

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“ExecutionEnvironment”“图形”

返回的分段类型,指定为“分类”“双”,或“uint8”.当你指定“双”“uint8”,该函数将分割结果作为包含标签id的标签数组返回。id是整数值,对应于输入网络中使用的分类层中定义的类名。

您不能使用OutputType属性ImageDatastore对象的输入。

图像组,指定为整数。图像被分组并作为批处理一起处理。批处理用于处理大量图像集合,提高了计算效率。增加'MiniBatchSize值可以提高效率,但也会占用更多内存。

使用网络处理图像的硬件资源,指定为“汽车”“图形”,或“cpu”

ExecutionEnvironment 描述
“汽车” 如果有GPU,请使用GPU。否则请使用CPU。GPU的使用需要并行计算工具箱和CUDA®使英伟达®GPU。有关受支持的计算功能的信息,请参见GPU计算要求(并行计算工具箱)
“图形” 使用GPU。如果没有合适的GPU,该函数将返回一个错误消息。
“cpu” 使用CPU。

性能优化,指定为“汽车”墨西哥人的,或“没有”

加速度 描述
“汽车” 自动应用大量适合输入网络和硬件资源的优化。
墨西哥人的 编译并执行一个MEX函数。该选项仅在使用GPU时可用。还必须安装C/ c++编译器。有关设置说明,请参见墨西哥人设置(GPU编码器)
“没有” 禁用所有加速。

默认选项为“汽车”.如果你使用“汽车”选项,那么MATLAB不会生成MEX函数。

使用“加速”选项“汽车”而且墨西哥人的可以提供性能优势,但以增加初始运行时间为代价。具有兼容参数的后续调用速度更快。当您计划使用新的输入数据多次调用函数时,请使用性能优化。

墨西哥人的选项根据函数调用中使用的网络和参数生成并执行一个MEX函数。您可以同时拥有与单个网络关联的多个MEX功能。清除网络变量也会清除与该网络关联的任何MEX函数。

墨西哥人的选项仅在使用GPU时可用。使用GPU需要并行计算工具箱和支持CUDA的NVIDIA GPU.有关受支持的计算功能的信息,请参见GPU计算要求(并行计算工具箱).如果并行计算工具箱或合适的GPU不可用,则该函数返回一个错误。

墨西哥人的加速不支持所有层。有关受支持层的列表,请参见支持层(GPU编码器)

像素或体素被分类到的类,指定为“汽车”字符向量、字符串向量或分类向量的单元格数组。如果值是分类向量Y,则对向量的元素进行排序和排序类别(Y)

如果网络是adlnetwork(深度学习工具箱)对象,则由'指定的类数量'必须匹配网络预测输出中的通道数量。默认情况下,当'的值“汽车”,类从1到编号C,在那里C是网络输出层中的通道数。

如果网络是aSeriesNetwork(深度学习工具箱)DAGNetwork(深度学习工具箱)对象,则由'指定的类数量'必须匹配分类输出层中的类数。默认情况下,当'的值“汽车”时,使用分类输出层自动设置类。

文件夹位置,指定为松材线虫病(您当前的工作文件夹)、字符串标量或字符向量。指定的文件夹必须存在且具有写权限。

此属性仅在使用可以处理图像的数据存储时应用。

应用于输出文件名的前缀,指定为字符串标量或字符向量。镜像文件命名如下:

  • 前缀_N. png,在那里N对应于输入图像文件的索引,洛桑国际管理发展学院。文件N).

此属性仅在使用可以处理图像的数据存储时应用。

显示指定为的进度信息“真正的”“假”

此属性仅在使用可以处理图像的数据存储时应用。

运行并行计算,指定为“真正的”“假”

平行运行,设置“UseParallel”真正的或在默认情况下使用计算机视觉工具箱™首选项启用此选项。

有关更多信息,请参见并行计算工具箱支持

输出参数

全部折叠

分类标签,作为分类数组返回。分类数组将标签与输入图像中的每个像素或体素关联起来。返回的图像readall数据存储)与返回的分类矩阵一一对应readallpixelLabelDatastore).标签数组的元素对应于输入图像的像素或体素元素。如果选择一个ROI,那么标签将被限制在ROI内的区域。感兴趣区域外的图像像素和体素被分配为<未定义的>分类标签。

图像类型 分类标签格式
单张二维图像 大小的二维矩阵H——- - - - - -W.元素Cj)是分配给像素的分类标签j).
一系列的P二维图像 三维尺寸阵列H——- - - - - -W——- - - - - -P.元素Cjp)是分配给像素的分类标签jp).
单张三维图像 三维尺寸阵列H——- - - - - -W——- - - - - -D.元素Cjk)是分配给体素的分类标签jk).
一系列的P三维图像 大小的4-D数组H——- - - - - -W——- - - - - -D——- - - - - -P.元素Cjkp)是分配给体素的分类标签jkp).

中每个分类标签的置信度得分C,返回为之间的值的数组0而且1.分数代表了对预测标签的置信度C.得分越高表明对预测标签的置信度越高。

图像类型 分数格式
单张二维图像 大小的二维矩阵H——- - - - - -W.元素分数j)为像素的分类分数j).
一系列的P二维图像 三维尺寸阵列H——- - - - - -W——- - - - - -P.元素分数jp)为像素的分类分数jp).
单张三维图像 三维尺寸阵列H——- - - - - -W——- - - - - -D.元素分数jk)为体素的分类分数jk).
一系列的P三维图像 大小的4-D数组H——- - - - - -W——- - - - - -D——- - - - - -P.元素分数jkp)为体素的分类分数jkp).

输入网络可以分类的所有标签类别的分数,作为数字数组返回。数组的格式如下表所示。l表示标签类别的总数。

图像类型 所有分数格式
单张二维图像 三维尺寸阵列H——- - - - - -W——- - - - - -l.元素allScoresj的分数像素处的标签j).
一系列的P二维图像 大小的4-D数组H——- - - - - -W——- - - - - -l——- - - - - -P.元素allScoresjp的分数像素处的标签jp).
单张三维图像 大小的4-D数组H——- - - - - -W——- - - - - -D——- - - - - -l.元素allScoresjk的分数体素上的标签jk).
一系列的P三维图像 5-D数组大小H——- - - - - -W——- - - - - -D——- - - - - -l——- - - - - -P.元素allScoresjkp的分数体素上的标签jkp).

语义分割结果,返回为pixelLabelDatastore对象。对象中包含的所有图像的语义分割结果ds输入对象。每个图像的结果被单独保存uint8PNG图像的标签矩阵。你可以使用pxds),以返回分配给图像的类别标签ds

的输出中的图像readallds的输出中的分类矩阵一一对应readallpxds).

扩展功能

版本历史

在R2017b中引入

另请参阅

功能

应用程序

对象

外部网站

Baidu
map