使用扩展卷积训练语义分割网络。
语义分割网络对图像中的每个像素进行分类,从而对图像进行分类。语义分割的应用包括用于自动驾驶的道路分割和用于医疗诊断的癌细胞分割。想要了解更多,请看使用深度学习开始语义分割(计算机视觉工具箱).
像DeepLab[1]这样的语义分割网络广泛使用扩张卷积(也称为atrous卷积),因为它们可以增加层的接受域(层可以看到的输入区域),而不增加参数或计算的数量。
该示例使用一个简单的32 × 32三角形图像数据集进行说明。数据集包括相应的像素标签地面真值数据。使用imageDatastore
和一个pixelLabelDatastore
.
dataFolder = fullfile (toolboxdir (“愿景”),“visiondata”,“triangleImages”);imageFolderTrain = fullfile (dataFolder,“trainingImages”);labelFolderTrain = fullfile (dataFolder,“trainingLabels”);
创建一个imageDatastore
的图像。
imdsTrain = imageDatastore (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 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”1 e - 3);
培训网络使用trainNetwork
.
网= trainNetwork (ds、层、期权);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习 | | | | ( hh: mm: ss) | | |丧失准确性 | |========================================================================================| | 1 | 1 | 00:00:02 | | 1.6825 | 0.0010 91.62%||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 (imdsTest净,“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)
使用分割测试图像semanticseg
并显示结果使用labeloverlay
.
C = semanticseg (imgTest,净);B = labeloverlay (imgTest C);图imshow (B)
pixelLabelDatastore
(计算机视觉工具箱)|pixelLabelImageDatastore
(计算机视觉工具箱)|semanticseg
(计算机视觉工具箱)|labeloverlay
(图像处理工具箱)|countEachLabel
(计算机视觉工具箱)|pixelClassificationLayer
(计算机视觉工具箱)|trainingOptions
|trainNetwork
|evaluateSemanticSegmentation
(计算机视觉工具箱)|convolution2dLayer