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');

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

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

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

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

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

net = trainNetwork(tds,lgraph,opts);
Training on single GPU.
Initializing input data normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |       34.79% |       0.9817 |          0.0100 |
|       2 |          50 |       00:00:23 |       99.02% |       0.0261 |          0.0100 |
|       3 |          75 |       00:00:31 |       99.16% |       0.0211 |          0.0100 |
|========================================================================================|

Считайте тестовое изображение.

I = imread('triangleTest.jpg');

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

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

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

C = semanticseg(I,net);

Отобразите результаты.

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

Вспомогательные Функции

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

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

свернуть все

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

  • Вектор с 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 пространственном объединении пирамиды (ASPP). Для всех других основных сетей используются слои свертки.

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

Ссылки

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

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

Введенный в R2019b