此示例显示了如何使用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中,您可以构建,编辑和培训深度学习网络。暂停空白网络然后单击新的。
通过从图层库到设计师窗格。
按以下顺序连接图层:
ImageInputlayer
和输入
设置32,32,1
卷积2Dlayer
和过滤
设置3,3
,,,,数字
设置64
, 和填充
设置1,1,1,1
Relulayer
maxpooling2dlayer
和泳池大小
设置2,2
,,,,大步
设置2,2
, 和填充
设置0,0,0,0
卷积2Dlayer
和过滤
设置3,3
,,,,数字
设置64
, 和填充
设置1,1,1,1
Relulayer
transposedconv2dlayer
和过滤
设置4,4
,,,,数字
设置64
,,,,大步
设置2,2
,,,,和种植
设置1,1,1,1
卷积2Dlayer
和过滤
设置1,1
,,,,数字
设置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])卷积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显示导入的语义分割数据的预览。预览显示训练图像和地面真象像素标签。该网络需要输入图像(左),并将每个像素的分类返回为三角形或背景(右)。
设置培训选项并培训网络。
在训练选项卡,单击培训选项。放初始learternrate到0.001
,,,,Maxepochs到100
, 和MinibatchSize到64
。点击设置培训选项关闭。
单击训练网络火车。
培训完成后,单击出口将训练有素的网络导出到工作区。训练有素的网络存储在变量中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+网络的功能,请参阅深度学习语义细分。