主要内容

segnetLayers

为语义分割创建SegNet层

描述

例子

lgraph= segnetLayers (图象尺寸numClasses模型返回SegNet层,lgraph,它使用来自预训练对象的层和权值进行预初始化模型

SegNet是一种用于语义图像分割的卷积神经网络。网络使用pixelClassificationLayer预测输入图像中每个像素的分类标签。

使用segnetLayers为SegNet创建网络架构。您必须使用深度学习工具箱™功能来训练网络trainNetwork(深度学习工具箱)

lgraph= segnetLayers (图象尺寸numClassesencoderDepth返回使用指定编码器深度配置的未初始化的SegNet层。

lgraph= segnetLayers (图象尺寸numClassesencoderDepth名称,值返回一个SegNet层,其中包含一个或多个指定的附加选项名称,值对参数。

例子

全部折叠

加载训练图像和像素标签。

dataSetDir = fullfile(toolboxdir)“愿景”),“visiondata”“triangleImages”);imageDir = fullfile(dataSetDir,“trainingImages”);labelDir = fullfile(dataSetDir,“trainingLabels”);

创建一个包含训练图像的图像数据存储。

imds = imageDatastore(imageDir);

定义类名及其相关的标签id。

classNames = [“三角形”“背景”];labelIDs = [255 0];

创建一个像素标签数据存储,保存训练图像的地面真实像素标签。

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

创建SegNet层。

imageSize = [32 32];numClasses = 2;lgraph = segnetLayers(imageSize,numClasses,2)
lgraph =具有属性的LayerGraph: Layers: [31x1 nnet.cnn.layer.Layer] Connections: [34x2 table] InputNames: {'inputImage'} OutputNames: {'pixelLabels'}

结合图像和像素标签数据,训练一个语义分割网络。

Ds = combine(imds,pxds);

设置培训选项。

options = trainingOptions(“个”“InitialLearnRate”1 e - 3,...“MaxEpochs”, 20岁,“VerboseFrequency”10);

训练网络。

net = trainNetwork(ds,lgraph,options)
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 | 00:00:04 | 39.86% | 0.7677 | 0.0010 | | 10 | | 00:00:26 | 49.56% | 0.7378 | 0.0010 | | 20 | 20 | 00:00:48 | 64.52% | 0.6948 | 0.0010 ||========================================================================================| 培训完成:马克思时代完成。
net = DAGNetwork属性:Layers: [31x1 nnet.cnn.layer.Layer] Connections: [34x2 table] InputNames: {'inputImage'} OutputNames: {'pixelLabels'}

显示网络。

情节(lgraph)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

创建编码器/解码器深度为4的SegNet层。

imageSize = [480 640 3];numClasses = 5;encoderDepth = 4;lgraph = segnetLayers(imageSize,numClasses,encoderDepth)
lgraph =具有属性的LayerGraph: Layers: [59x1 nnet.cnn.layer.Layer] Connections: [66x2 table] InputNames: {'inputImage'} OutputNames: {'pixelLabels'}

显示网络。

图绘制(lgraph)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

输入参数

全部折叠

网络输入图像大小,指定为:

  • 格式为[高度宽度]。

  • 格式为[高度宽度深度]。深度是图像通道的数量。集深度3.对于RGB图像,1对于灰度图像,或对多光谱和高光谱图像的通道数。

语义段中的类数,指定为大于1的整数。

预训练的网络模型,指定为“vgg16”“vgg19”.这些型号的编码器深度为5。当你使用“vgg16”模型,你必须指定RGB输入。方法可以将灰度图像转换为RGBim2gray函数。

编码器深度,指定为正整数。

SegNet由编码器和相应的解码器子网络组成。这些网络的深度决定了输入图像在处理过程中被下采样或上采样的次数。编码器网络对输入图像进行2倍的采样D,在那里D的值encoderDepth.解码器网络对编码器网络输出的采样提高了2倍D

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:“NumConvolutionLayers”,1

每个编码器和解码器部分中的卷积层数,指定为正整数或正整数的向量。

NumConvolutionLayers 描述
标量 所有编码器和解码器部分使用相同数量的层。
向量 k的第Th元素NumConvolutionLayers卷积层的个数是k编码器部分和相应的解码器部分。典型值在[1,3]的范围内。

SegNet编码器网络中每个部分的输出通道数,指定为正整数或正整数的向量。segnetLayers设置解码器中的输出通道数以匹配相应的编码器部分。

NumOutputChannels 描述
标量 所有编码器和解码器部分使用相同数量的输出通道。
向量 k的第Th元素NumOutputChannels输出通道的数量是多少k编码器部分和相应的解码器部分。

卷积层过滤器大小,指定为正奇数整数或正奇数整数的2元素行向量。典型值在[3,7]的范围内。

FilterSize 描述
标量 过滤器是方形的。
二元行向量

过滤器的尺寸为[高度宽度]。

输出参数

全部折叠

表示SegNet网络体系结构的层,返回为layerGraph(深度学习工具箱)对象。

提示

  • SegNet编码器和解码器子网络中的部分由卷积层、批处理归一化层和ReLU层组成。

  • 所有卷积层的配置都使偏差项固定为零。

  • 编码器和解码器子网络中的卷积层权值使用'同行的权重初始化方法。为“vgg16”“vgg19”模型,只有解码器子网络使用MSRA初始化。[1]

  • segnetLayers训练后支持GPU代码生成进行深度学习trainNetwork(深度学习工具箱).看到深度学习代码生成(深度学习工具箱)了解详细信息和示例。

参考文献

[1]何凯,张旭,任硕,孙杰。深入研究整流器:在ImageNet分类上超越人类水平的性能。IEEE计算机视觉国际会议论文集.2015年,1026 - 1034。

Badrinarayanan, V., A. Kendall和R. Cipolla。Segnet:一种用于图像分割的深度卷积编码器-解码器架构。arXiv.预印本arXiv: 1511.0051, 2015。

扩展功能

版本历史

在R2017b中引入

Baidu
map