deeplabv3plusLayers

Создайте сверточную нейронную сеть DeepLab v3 + для сегментации семантических изображений

Описание

пример

layerGraph = deeplabv3plusLayers(imageSize,numClasses,network) возвращает слой DeepLab v3 + с заданной базовой сетью, количеством классов и размером изображений.

layerGraph = deeplabv3plusLayers(___,'DownsamplingFactor',value) дополнительно устанавливает коэффициент понижающей дискретизации (выходной шаг) [1] равным любому из 8 или 16. Коэффициент понижающей дискретизации устанавливает величину, которую секция энкодера DeepLav v3 + понижает входное изображение.

Примеры

свернуть все

Создайте сеть DeepLab v3 + на основе ResNet-18.

imageSize = [480 640 3];
numClasses = 5;
network = 'resnet18';
lgraph = deeplabv3plusLayers(imageSize,numClasses,network, ...
             'DownsamplingFactor',16);

Отображение сети.

analyzeNetwork(lgraph)

Загрузите изображения набора данных треугольника с помощью image datastore. Datastore содержит 200 полутоновых изображений случайных треугольников. Каждое изображение 32 на 32.

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

Загрузите пиксельные метки набора данных треугольника с помощью хранилища datastore метки пикселя.

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

Создайте сеть DeepLab v3 +.

imageSize = [256 256];
numClasses = numel(classNames);
lgraph = deeplabv3plusLayers(imageSize,numClasses,'resnet18');

Объедините изображение и данные о пиксельных метках для обучения. Установите размер выхода изображения равным размеру входа сети, чтобы автоматически изменить размер изображений во время обучения.

pximds = pixelLabelImageDatastore(imds,pxds,'OutputSize',imageSize,...
    'ColorPreprocessing','gray2rgb');

Задайте опции обучения. Уменьшите размер мини-пакета, чтобы уменьшить использование памяти.

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

Обучите сеть.

net = trainNetwork(pximds,lgraph,opts);
Training on single CPU.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:08 |       57.31% |       0.7145 |          0.0100 |
|       2 |          50 |       00:06:05 |       99.23% |       0.0198 |          0.0100 |
|       3 |          75 |       00:09:05 |       99.12% |       0.0214 |          0.0100 |
|========================================================================================|

Чтение тестового изображения.

I = imread('triangleTest.jpg');

Измените размер тестового изображения на множитель, равный размеру входного изображения, разделенному на 32, так что треугольники в тестовом изображении будут примерно равны размеру треугольников во время обучения.

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

Сегментируйте изображение.

C = semanticseg(I,net);

Отображение результатов.

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

Входные параметры

свернуть все

Размер входного изображения сети, заданный как:

  • Вектор с 2 элементами в формате [height, width].

  • 3-элементный вектор в формате [height, width, 3]. Третий элемент, 3, соответствует RGB.

Количество классов для классификации сети, заданное как целое число, больше 1.

Базовая сеть, заданная как resnet18 (Deep Learning Toolbox), resnet50 (Deep Learning Toolbox), mobilenetv2 (Deep Learning Toolbox), xception (Deep Learning Toolbox), или inceptionresnetv2 (Deep Learning Toolbox). Необходимо установить соответствующее сетевое дополнение.

Выходные аргументы

свернуть все

Сеть DeepLab v3 +, возвращенная как сверточная нейронная сеть для сегментации семантических изображений. Сеть использует архитектуру энкодера-декодера, расширенные свертки и пропуск подключений к изображениям сегментов. Вы должны использовать trainNetwork (Deep Learning Toolbox) функция (требует Deep Learning Toolbox™) для обучения сети, прежде чем использовать сеть для семантической сегментации.

Алгоритмы

  • Когда вы используете либо xception (Deep Learning Toolbox) или mobilenetv2 (Deep Learning Toolbox) базовые сети для создания сети DeepLab v3 +, разделяемые по глубине свертки используются в atrous spatial pyramid uling (ASPP) и decoder subnetworks. Для всех других базовых сетей используются слои свертки.

  • Эта реализация 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 (неопр.) (недоступная ссылка)». Компьютерное зрение - ECCV 2018, 833-851. Munic, Германия: ECCV, 2018.

Расширенные возможности

.
Введенный в R2019b