这个例子展示了如何使用deepnetworkdesigner创建和训练一个简单的语义分段网络。
语义分割描述了将图像的每个像素与类别标签(例如花,人,路,天,大海或车)。语义分割的应用包括用于自动驾驶的道路分割和用于医疗诊断的癌细胞分割。想要了解更多,请看使用深度学习开始语义分割(计算机视觉工具箱).
要训练一个语义分割网络,需要一组图像及其对应的像素标记图像集合。像素标记图像是指每个像素值代表该像素的分类标签的图像。为了进行说明,本例使用了一个简单的32 × 32三角形图像数据集。您可以交互式地标签像素和导出标签数据的计算机视觉应用程序使用图片标识(计算机视觉工具箱). 有关为语义分段应用程序创建培训数据的更多信息,请参阅用于语义分割的标记像素(计算机视觉工具箱).
加载训练数据。
dataFolder=fullfile(toolboxdir(“愿景”),...“视觉数据”,“triangleImages”); imageDir=fullfile(数据文件夹,“培训图像”);labelDir = fullfile (dataFolder,“培训标签”);
创建一个图像数据存储
包含图像。
imds=图像数据存储(imageDir);
创建一个PixelLabelDatastore
包含地面真实像素标签。此数据集有两类:“三角形”
和“背景”
.
一会= [“三角形”,“背景”]; labelIDs=[255 0];pxds=像素标签数据存储(标签、类名、标签);
将图像数据存储和像素标签数据存储合并为一个组合数据存储
使用结合
组合数据存储在底层数据存储中维护图像对之间的奇偶校验。
cds=联合收割机(imds、pxds);
打开深层网络设计器。
deepNetworkDesigner
在Deep Network Designer中,您可以构建、编辑和培训深度学习网络。请暂停空白的网络点击新.
创建一个语义分割网络通过拖动层从图层库到设计师窗格。
按以下顺序连接图层:
图像输入层
具有InputSize
着手32,32,1
convolution2dLayer
具有FilterSize
着手3,3
,NumFilters
着手64
,衬料
着手1, 1, 1, 1
雷卢耶
maxPooling2dLayer
具有PoolSize
着手2,2
,大步走
着手2,2
,衬料
着手0, 0, 0, 0
convolution2dLayer
具有FilterSize
着手3,3
,NumFilters
着手64
,衬料
着手1, 1, 1, 1
雷卢耶
transposedConv2dLayer
具有FilterSize
着手4,4
,NumFilters
着手64
,大步走
着手2,2
,种植
着手1, 1, 1, 1
convolution2dLayer
具有FilterSize
着手1,1
,NumFilters
着手2.
,衬料
着手0, 0, 0, 0
软MaxLayer
像素分类层
您还可以在命令行中创建此网络,然后使用将网络导入到Deep network Designer中deepNetworkDesigner(层)
.
层=[imageInputLayer([32 32 1])卷积层([3,3],64,“填充”,[1,1,1,1])reluLayer MaxPoolig2DLayer([2,2],“大步走”,[2,2])卷积2层([3,3],64,“填充”,[1,1,1,1])reluLayer transposedConv2dLayer([4,4],64,“大步走”(2, 2),“种植”,[1,1,1,1])卷积2dlayer ([1,1],2) softmaxLayer pixelClassificationLayer];
该网络是基于下采样和上采样设计的简单语义分段网络。有关构造语义分段网络的更多信息,请参阅创建一个语义分割网络(计算机视觉工具箱).
要导入训练数据存储,请在数据选项卡,选择导入数据>导入数据存储. 选择组合数据存储
对象光盘
作为培训数据。对于验证数据,选择没有一个
.通过单击导入培训数据进口.
Deep Network Designer显示导入语义分段数据的预览。预览显示训练图像和地面真实像素标签。网络需要输入图像(左)并返回每个像素的分类,如三角形或背景(右)。
设置培训选项,培训网络。
上训练选项卡,单击培训方案.集InitialLearnRate到0.001
,MaxEpochs到One hundred.
,MiniBatchSize到64
.通过单击设置培训选项关.
通过单击来训练网络火车.
一旦培训完成,点击出口将经过训练的网络导出到工作区。经过训练的网络存储在变量中trainedNetwork_1
.
利用测试数据和训练好的网络进行预测。
使用以下方法分割测试图像:语义词组
.控件在图像上显示标签拉贝洛弗雷
作用
imgTest=imread(‘triangleTest.jpg’);testSeg = semanticseg (imgTest trainedNetwork_1);testImageSeg = labeloverlay (imgTest testSeg);
显示结果。
图imshow (testImageSeg)
网络成功地标记了测试图像中的三角形。
本例中训练的语义分割网络非常简单。要构造更复杂的语义分割网络,可以使用计算机视觉工具箱功能segnetLayers
(计算机视觉工具箱),deeplabv3plusLayers
(计算机视觉工具箱),无误者
(计算机视觉工具箱)。有关如何使用的示例deeplabv3plusLayers
函数创建DeepLab v3+网络,请参见基于深度学习的语义切分(计算机视觉工具箱).
深层网络设计师|图片标识(计算机视觉工具箱)|pixelLabelDatastore
(计算机视觉工具箱)|语义词组
(计算机视觉工具箱)|拉贝洛弗雷
(图像处理工具箱)|像素分类层
(计算机视觉工具箱)|trainingOptions
|deeplabv3plusLayers
(计算机视觉工具箱)|segnetLayers
(计算机视觉工具箱)|无误者
(计算机视觉工具箱)