这个例子展示了如何使用Deep network Designer创建和训练一个简单的语义分割网络。
语义分割描述了将图像的每个像素与类标签(例如花,人,路,天空,海洋,或车).语义分割的应用包括用于自动驾驶的道路分割和用于医疗诊断的癌细胞分割。想要了解更多,请看使用深度学习开始语义分割(计算机视觉工具箱).
要训练一个语义分割网络,需要一组图像及其对应的像素标记图像集合。像素标记图像是指每个像素值代表该像素的分类标签的图像。为了进行说明,本例使用了一个简单的32 × 32三角形图像数据集。您可以交互式地标签像素和导出标签数据的计算机视觉应用程序使用图片标志(计算机视觉工具箱).有关为语义分割应用程序创建训练数据的更多信息,请参见标记像素用于语义分割(计算机视觉工具箱).
加载训练数据。
dataFolder = fullfile (toolboxdir (“愿景”),...“visiondata”,“triangleImages”);imageDir = fullfile (dataFolder,“trainingImages”);labelDir = fullfile (dataFolder,“trainingLabels”);
创建一个ImageDatastore
包含图像。
imd = imageDatastore (imageDir);
创建一个PixelLabelDatastore
包含地面真值像素标签。这个数据集有两个类:“三角形”
和“背景”
.
一会= [“三角形”,“背景”];标签id = [255 0];一会,pxds = pixelLabelDatastore (labelDir labelIDs);
将图像数据存储和像素标签数据存储合并为CombinedDatastore
对象使用结合
函数。组合数据存储在底层数据存储中维护一对映像之间的奇偶性。
cd =结合(imd, 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
您也可以在命令行创建此网络,然后使用deepNetworkDesigner(层)
.
layers = [imageInputLayer([32 32 1]))卷积2dlayer ([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])卷积2dlayer ([1,1],2) softmaxLayer pixelClassificationLayer];
该网络是一种基于下采样和上采样设计的简单语义分割网络。有关构建语义分割网络的更多信息,请参见创建一个语义分割网络(计算机视觉工具箱).
要导入训练数据存储,请在数据选项卡上,选择导入数据>导入数据存储.选择CombinedDatastore
对象cd
作为训练数据。对于验证数据,选择没有一个
.通过单击导入培训数据进口.
深度网络设计器显示导入的语义分割数据的预览。预览显示训练图像和地面真值像素标签。该网络需要输入图像(左),并返回每个像素的分类,作为三角形或背景(右)。
设置培训选项,培训网络。
在培训选项卡上,单击培训方案.集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
(计算机视觉工具箱)