exponenta event banner

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)

Загрузите изображения набора данных треугольника с помощью хранилища данных изображения. Хранилище данных содержит 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);
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-элементный вектор в формате [высота, ширина].

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

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

Базовая сеть, указанная как resnet18 (инструментарий глубокого обучения), resnet50 (инструментарий глубокого обучения), mobilenetv2 (инструментарий глубокого обучения), xception (инструментарий глубокого обучения), или inceptionresnetv2 (инструментарий глубокого обучения). Необходимо установить соответствующую сетевую надстройку.

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

свернуть все

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

Алгоритмы

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

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

Ссылки

[1] Чен, Л., Я. Чжу, Г. Папандреу, Ф. Шрофф и Х. Адам. «Кодер-декодер с Atrous Separable сверткой для сегментации семантического изображения». Компьютерное зрение - ECCV 2018, 833-851. Муник, Германия: ECCV, 2018.

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

.

См. также

Объекты

Функции

Представлен в R2019b