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