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)

Загрузите треугольные изображения набора данных с помощью 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)

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

свернуть все

Сетевой входной размер изображения в виде a:

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

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

Количество классов для сети, чтобы классифицировать в виде целого числа, больше, чем 1.

Основная сеть в виде resnet18, resnet50, mobilenetv2, xception, или inceptionresnetv2. Необходимо установить соответствующее сетевое дополнение.

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

свернуть все

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

Алгоритмы

  • Когда вы используете любого xception или mobilenetv2 основные сети, чтобы создать DeepLab v3 + сеть, глубина отделимые свертки используются в подсетях декодера и atrous пространственном объединении пирамиды (ASPP). Для всех других основных сетей используются слои свертки.

  • Эта реализация DeepLab v3 + не включает глобальный средний слой объединения в ASPP.

Ссылки

[1] Чен, L., И. Чжу, Г. Папандреу, Ф. Шрофф и Х. Адам. "Декодер энкодера с отделимой сверткой Atrous для семантической сегментации изображений". Компьютерное зрение — ECCV 2018, 833-851. Munic, Германия: ECCV (2018).

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

Введенный в R2019b