主要内容

在深网设计师中训练简单的语义分割网络

此示例显示了如何使用Deep Network Designer创建和训练简单的语义分割网络。

语义分割描述了将图像的每个像素与类标签关联的过程(例如,,,,,,,,,,,,天空,,,,海洋, 或者)。语义分割的应用包括自动驾驶的道路分割和用于医学诊断的癌细胞分割。要了解更多,请参阅使用深度学习开始使用语义细分

预处理培训数据

要训​​练语义分割网络,您需要图像的集合及其相应的像素标记图像集合。像素标记的图像是一个图像,其中每个像素值代表该像素的分类标签。本示例使用三角形的32×32图像的简单数据集用于说明目的。您可以交互式标签像素并使用计算机视觉应用程序导出标签数据图像标签。有关为语义细分应用创建培训数据的更多信息,请参见标签语义分割的像素

加载培训数据。

datafolder = fullfile(toolboxDir(toolboxDir)('想象'),...'VisionData',,,,“三角形图”);ImageDir = fullfile(datafolder,“训练图”);labeldir = fullfile(datafolder,“训练标签”);

创建一个成像包含图像。

imds = imagedatastore(ImageDir);

创建一个Pixellabeldatastore包含地面真象像素标签。该数据集有两个类:“三角形”“背景”

classNames = [“三角形”,,,,“背景”];labelids = [255 0];pxds = pixellabeldatastore(labeldir,classNames,labelids);

将图像数据存储和像素标签数据存储组合到一个组合的datastore对象使用结合功能。一个组合的数据存储在基础数据存储中的一对图像之间保持均等。

cds = combine(imds,pxds);

构建网络

打开深网设计师。

DeepNetworkDesigner

在Deep Network Designer中,您可以构建,编辑和培训深度学习网络。暂停空白网络然后单击新的

通过从图层库设计师窗格。

按以下顺序连接图层:

  1. ImageInputlayer输入设置32,32,1

  2. 卷积2Dlayer过滤设置3,3,,,,数字设置64, 和填充设置1,1,1,1

  3. Relulayer

  4. maxpooling2dlayer泳池大小设置2,2,,,,大步设置2,2, 和填充设置0,0,0,0

  5. 卷积2Dlayer过滤设置3,3,,,,数字设置64, 和填充设置1,1,1,1

  6. Relulayer

  7. transposedconv2dlayer过滤设置4,4,,,,数字设置64,,,,大步设置2,2,,,,和种植设置1,1,1,1

  8. 卷积2Dlayer过滤设置1,1,,,,数字设置2, 和填充设置0,0,0,0

  9. SoftMaxlayer

  10. PixelClassificationLayer

您还可以在命令行中创建此网络,然后使用网络将网络导入到深层网络设计器中DeepNetworkDesigner(层)

layers = [imageInputlayer([32 32 1])卷积2Dlayer([3,3],64,'填充',[1,1,1,1])relulayer maxpooling2dlayer([2,2],,“大步”,[2,2])卷积2Dlayer([3,3],64,,,'填充',[1,1,1,1])relulayer transposedconv2dlayer([4,4],64,“大步”,[2,2],“种植”,[1,1,1,1])卷积2Dlayer([1,1],2)SoftMaxlayer PixelClassificationLayer];

该网络是一个基于下采样和上采样设计的简单语义分割网络。有关构建语义分割网络的更多信息,请参见创建语义细分网络

导入数据

要导入培训数据存储数据选项卡,选择导入数据>导入数据存储。选择组合的datastore目的CD作为培训数据。对于验证数据,选择没有任何。单击导入培训数据进口

Deep Network Designer显示导入的语义分割数据的预览。预览显示训练图像和地面真象像素标签。该网络需要输入图像(左),并将每个像素的分类返回为三角形或背景(右)。

火车网络

设置培训选项并培训网络。

训练选项卡,单击培训选项。放初始learternrate0.001,,,,Maxepochs100, 和MinibatchSize64。点击设置培训选项关闭

单击训练网络火车

培训完成后,单击出口将训练有素的网络导出到工作区。训练有素的网络存储在变量中Trainednetwork_1

测试网络

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

使用semanticseg。通过使用图像显示标签Labeloverlay功能。

imgtest = imread('triangletest.jpg');testSeg = semanticseg(imgtest,trainednetwork_1);tistimageseg = labeloverlay(imgtest,testseg);

显示结果。

图IMShow(Testimageseg)

该网络成功将测试图像中的三角形标记。

在此示例中训练的语义分割网络非常简单。要构建更复杂的语义分割网络,您可以使用计算机视觉工具箱功能segnetlayers,,,,deeplabv3pluslayers, 和未扎layerers。为了显示如何使用deeplabv3pluslayers创建DeepLab V3+网络的功能,请参阅深度学习语义细分