在深度网络设计器中训练简单的语义分割网络
这个例子展示了如何使用Deep network Designer创建和训练一个简单的语义分割网络。
语义分割描述了将图像的每个像素与类标签(如花,人,路,天空,海洋,或车).语义分割的应用包括用于自动驾驶的道路分割和用于医疗诊断的癌细胞分割。要了解更多信息,请参见开始使用深度学习进行语义分割(计算机视觉工具箱).
预处理训练数据
为了训练一个语义分割网络,你需要一个图像集合和它对应的像素标记图像集合。像素标记图像是一种图像,其中每个像素值代表该像素的分类标签。本示例使用了一个简单的32 * 32三角形图像数据集,用于演示。您可以交互标记像素和导出标签数据的计算机视觉应用程序使用图片标志(计算机视觉工具箱).有关为语义分割应用程序创建训练数据的更多信息,请参见标记像素进行语义分割(计算机视觉工具箱).
加载训练数据。
dataFolder = fullfile(toolboxdir(“愿景”),...“visiondata”,“triangleImages”);imageDir = fullfile(dataFolder,“trainingImages”);labelDir = fullfile(数据文件夹,“trainingLabels”);
创建一个ImageDatastore
包含图像。
imds = imageDatastore(imageDir);
创建一个PixelLabelDatastore
包含ground truth像素标签。这个数据集有两个类:“三角形”
而且“背景”
.
classNames = [“三角形”,“背景”];labelIDs = [255 0];pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);
将图像数据存储和像素标签数据存储组合成CombinedDatastore
对象使用结合
函数。组合的数据存储在底层数据存储中维护映像对之间的奇偶性。
CDS = combine(imds,pxds);
构建网络
打开深度网络设计器。
deepNetworkDesigner
在深度网络设计器中,您可以构建、编辑和训练深度学习网络。暂停上空白的网络并点击新.
创建一个语义分割网络从拖层层的图书馆到设计师窗格。
按以下顺序连接图层:
imageInputLayer
与InputSize
设置为32岁,32岁,1
convolution2dLayer
与FilterSize
设置为3, 3
,NumFilters
设置为64
,填充
设置为1, 1, 1, 1
reluLayer
maxPooling2dLayer
与PoolSize
设置为2、2
,步
设置为2、2
,填充
设置为0, 0, 0, 0
convolution2dLayer
与FilterSize
设置为3, 3
,NumFilters
设置为64
,填充
设置为1, 1, 1, 1
reluLayer
transposedConv2dLayer
与FilterSize
设置为4, 4
,NumFilters
设置为64
,步
设置为2、2
,和种植
设置为1, 1, 1, 1
convolution2dLayer
与FilterSize
设置为1, - 1
,NumFilters
设置为2
,填充
设置为0, 0, 0, 0
softmaxLayer
pixelClassificationLayer
您还可以在命令行中创建此网络,然后使用import网络到Deep network DesignerdeepNetworkDesigner(层)
.
layers = [imageInputLayer([32 32 1]) convolution2dLayer([3,3],64,“填充”,[1,1,1,1]) reluLayer maxPooling2dLayer([2,2],“步”, (2, 2)) convolution2dLayer ([3, 3], 64“填充”,[1,1,1,1]) reluLayer transposedConv2dLayer([4,4],64,“步”(2, 2),“种植”,[1,1,1,1]) convolution2dLayer([1,1],2) softmaxLayer pixelClassificationLayer];
该网络是基于下采样和上采样设计的简单语义分割网络。有关构建语义分割网络的更多信息,请参见创建一个语义分割网络(计算机视觉工具箱).
导入数据
要导入训练数据存储,请在数据选项卡上,选择导入数据>导入数据存储.选择CombinedDatastore
对象cd
作为训练数据。对于验证数据,请选择没有一个
.通过单击导入训练数据进口.
深度网络设计器显示导入的语义分割数据的预览。预览显示训练图像和ground truth像素标签。网络需要输入图像(左),并返回每个像素的三角形或背景分类(右)。
列车网络的
设置训练选项,训练网络。
在培训选项卡上,单击培训方案.集InitialLearnRate来0.001
,MaxEpochs来One hundred.
,MiniBatchSize来64
.单击,设置培训选项关闭.
通过点击训练网络火车.
培训完成后,单击出口将训练过的网络导出到工作区。训练好的网络存储在变量中trainedNetwork_1
.
测试网络
利用测试数据和训练过的网络进行预测。
分割测试图像使用semanticseg
.控件在图像上显示标签labeloverlay
函数。
imgTest = imread(“triangleTest.jpg”);testSeg = semanticseg(imgTest,trainedNetwork_1);testImageSeg = labeloverlay(imgTest,testSeg);
显示结果。
图imshow (testImageSeg)
该网络成功地标记了测试图像中的三角形。
本例中训练的语义分割网络非常简单。要构建更复杂的语义分割网络,可以使用计算机视觉工具箱功能segnetLayers
(计算机视觉工具箱),deeplabv3plusLayers
(计算机视觉工具箱),unetLayers
(计算机视觉工具箱).的示例显示如何使用deeplabv3plusLayers
函数创建DeepLab v3+网络,请参见基于深度学习的语义分割(计算机视觉工具箱).
另请参阅
深度网络设计器|图片标志(计算机视觉工具箱)|pixelLabelDatastore
(计算机视觉工具箱)|semanticseg
(计算机视觉工具箱)|labeloverlay
(图像处理工具箱)|pixelClassificationLayer
(计算机视觉工具箱)|trainingOptions
|deeplabv3plusLayers
(计算机视觉工具箱)|segnetLayers
(计算机视觉工具箱)|unetLayers
(计算机视觉工具箱)
相关的话题
- 基于深度学习的语义分割
- 开始使用深度学习进行语义分割(计算机视觉工具箱)
- 标记像素进行语义分割(计算机视觉工具箱)
- 预训练的深度神经网络
- 开始使用深度网络设计器