主要内容

本页采用了机器翻译。点击此处可查看英文原文。

deeplabv3plus

创建用于语义分割的 DeepLab v3+ 卷积神经网络

自 R2024a 起

说明

deepLabNetwork = deeplabv3plus(imageSize,numClasses,network) 返回一个 DeepLab v3+ 层,其基础网络、类别数量和图像尺寸均按指定值设置。

示例

deepLabNetwork = deeplabv3plus(___,DownsamplingFactor=value) 还会将下采样因子(输出步长)[1] 设置为 816。下采样因子用于设定 DeepLab v3+ 的编码器模块对输入图像进行下采样的程度。

示例

全部折叠

基于 ResNet-18 构建一个 DeepLab v3+ 神经网络。

imageSize = [480 640 3];
numClasses = 5;
network = "resnet18";
net = deeplabv3plus(imageSize,numClasses,network, ...
             DownsamplingFactor=16);

显示网络。

analyzeNetwork(net)

使用图像数据存储加载三角形数据集的图像。该数据集包含 200 张随机三角形的灰度图像。每个图像的尺寸为 32×32。

dataSetDir = fullfile(toolboxdir("vision"),"visiondata","triangleImages");
imageDir = fullfile(dataSetDir,"trainingImages");
imds = imageDatastore(imageDir);

使用像素标签数据存储加载三角形数据集的像素标签。

labelDir = fullfile(dataSetDir, "trainingLabels");
classNames = ["triangle","background"];
labelIDs   = [255 0];
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

创建一个 DeepLab v3+ 神经网络。

imageSize = [256 256];
numClasses = numel(classNames);
net = deeplabv3plus(imageSize,numClasses,"resnet18");

将图像和像素标签数据合并用于训练,并对训练图像应用预处理变换以调整其尺寸。

cds = combine(imds,pxds);
tds = transform(cds, @(data)preprocessTrainingData(data,imageSize));

指定训练选项。减小小批量大小以减少内存占用。

opts = trainingOptions("sgdm",...
    MiniBatchSize=8,...
    MaxEpochs=3);

训练网络。

net = trainnet(tds,net,"crossentropy",opts);
    Iteration    Epoch    TimeElapsed    LearnRate    TrainingLoss
    _________    _____    ___________    _________    ____________
            1        1       00:00:04         0.01         0.93844
           50        2       00:04:09         0.01        0.033749
           75        3       00:05:35         0.01        0.026353
Training stopped: Max epochs completed

读取一个测试图像。

I = imread("triangleTest.jpg");

将测试图像按输入图像尺寸除以 32 的倍数进行缩放,以便测试图像中的三角形大小大致与训练期间的三角形大小相当。

I = imresize(I,Scale=imageSize./32);

对图像进行分割。

C = semanticseg(I,net);

显示结果。

B = labeloverlay(I,C);
figure
imshow(B)

Figure contains an axes object. The axes object contains an object of type image.

支持函数

function data = preprocessTrainingData(data, imageSize)
% Resize the training image and associated pixel label image.
data{1} = imresize(data{1},imageSize);
data{2} = imresize(data{2},imageSize);

% Convert grayscale input image into RGB for use with ResNet-18, which
% requires RGB image input.
data{1} = repmat(data{1},1,1,3);
end

输入参数

全部折叠

网络输入图像尺寸,指定为一张 RGB 图像。图像可以采用以下任一格式。

  • 格式为 [height width] 的 2 元素向量。

  • 格式为 [height width, 3] 的 3 元素向量。

如果您将 imageSize 指定为一个包含 2 个元素的向量 [height width],网络将自动将 [height width 3] 作为 RGB 图像的输入尺寸。在将灰度图像输入神经网络之前,必须先将其转换为 RGB 格式。

网络用于分类的类别数量,指定为大于 1 的整数。

基网络,指定为以下选项之一:

  • "resnet18" - 基础网络是一个 ResNet-18 网络。

  • "resnet50" - 基础网络是一个 ResNet-50 网络。

  • "mobilenetv2" - 基础网络是 MobileNet-v2 网络。

  • "xception" - 基础网络是一个 Xception 网络。

  • "inceptionresnetv2" - 基础网络是一个 Inception-ResNet-v2 网络。

要指定每种基础网络类型,必须安装相应的网络附加功能。如需进一步了解这些网络,请参阅预训练的深度神经网络 (Deep Learning Toolbox)

输出参量

全部折叠

DeepLab v3+ 神经网络,作为 dlnetwork (Deep Learning Toolbox) 对象返回,用于语义分割。该网络采用编码器-解码器架构、扩张卷积和跳跃连接来对图像进行分割。在将该网络用于语义分割之前,必须先使用 trainnet (Deep Learning Toolbox) 函数(需要 Deep Learning Toolbox™)对网络进行训练。

算法

  • 当您使用 xception (Deep Learning Toolbox)mobilenetv2 (Deep Learning Toolbox) 基础网络构建 DeepLab v3+ 网络时,在孔状空间金字塔池化 (ASPP) 和解码器子网络中会使用深度可分离卷积。对于所有其他基础网络,均采用卷积层。

  • 此 DeepLab v3+ 实现方案未在 ASPP 中包含全局平均池化层。

参考

[1] Chen, L., Y. Zhu, G. Papandreou, F. Schroff, and H. Adam. "Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation." Computer Vision — ECCV 2018, 833-851. Munic, Germany: ECCV, 2018.

扩展功能

全部展开

版本历史记录

在 R2024a 中推出

另请参阅

对象

函数