segnetLayers

Создайте слои SegNet для семантической сегментации

Синтаксис

lgraph = segnetLayers(imageSize,numClasses,model)
lgraph = segnetLayers(imageSize,numClasses,encoderDepth)
lgraph = segnetLayers(imageSize,numClasses,encoderDepth,Name,Value)

Описание

пример

lgraph = segnetLayers(imageSize,numClasses,model) возвращает слои SegNet, lgraph, который предварительно инициализируется со слоями и весами от предварительно обученного model.

SegNet является сверточной нейронной сетью для семантической сегментации изображений. Сеть использует pixelClassificationLayer, чтобы предсказать категориальную метку для каждого пикселя во входном изображении.

Используйте segnetLayers, чтобы создать сетевую архитектуру для SegNet. Необходимо обучить сеть с помощью функции Deep Learning Toolbox™ trainNetwork.

lgraph = segnetLayers(imageSize,numClasses,encoderDepth) возвращается неинициализированные слои SegNet сконфигурировали использование заданной глубины энкодера.

lgraph = segnetLayers(imageSize,numClasses,encoderDepth,Name,Value) возвращает слой SegNet с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

Загрузите учебные изображения и пиксельные метки.

dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');
imageDir = fullfile(dataSetDir,'trainingImages');
labelDir = fullfile(dataSetDir,'trainingLabels');

Создайте datastore изображений, содержащий учебные изображения.

imds = imageDatastore(imageDir);

Задайте имена классов и их связанную метку IDs.

classNames = ["triangle", "background"];
labelIDs   = [255 0];

Создайте пиксельный datastore метки, содержащий заземляющие пиксельные метки истины для учебных изображений.

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

Слои Create SegNet.

imageSize = [32 32];
numClasses = 2;
lgraph = segnetLayers(imageSize,numClasses,2)
lgraph = 
  LayerGraph with properties:

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]

Создайте пиксельный datastore метки изображений для того, чтобы обучить семантическую сеть сегментации.

pximds = pixelLabelImageDatastore(imds,pxds);

Настройте опции обучения.

options = trainingOptions('sgdm','InitialLearnRate',1e-3, ...
      'MaxEpochs',20,'VerboseFrequency',10);

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

net = trainNetwork(pximds,lgraph,options)
Training on single CPU.
Initializing input data normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:01 |       39.69% |       0.7640 |          0.0010 |
|      10 |          10 |       00:00:14 |       49.87% |       0.7390 |          0.0010 |
|      20 |          20 |       00:00:29 |       66.56% |       0.6911 |          0.0010 |
|========================================================================================|
net = 
  DAGNetwork with properties:

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]

Отобразите сеть.

plot(lgraph)

Создайте слои SegNet с глубиной энкодера/декодера 4.

imageSize = [480 640 3];
numClasses = 5;
encoderDepth = 4;
lgraph = segnetLayers(imageSize,numClasses,encoderDepth)
lgraph = 
  LayerGraph with properties:

         Layers: [59x1 nnet.cnn.layer.Layer]
    Connections: [66x2 table]

Сеть Display.

figure
plot(lgraph)

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

свернуть все

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

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

  • Вектор с 3 элементами в формате [height, width, depth]. depth является количеством каналов изображений. Установите depth на 3 для изображений RGB, 1 для полутоновых изображений, или к количеству каналов для многоспектральных и гиперспектральных изображений.

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

Модель предварительно обученной сети, заданная как 'vgg16' или 'vgg19'. Эти модели имеют глубину энкодера 5.

Глубина энкодера, заданная как положительное целое число.

SegNet состоит из энкодера и соответствующей подсети декодера. Глубина этих сетей определяет число раз, входное изображение субдискретизируется или сверхдискретизировано, когда это обрабатывается. Сеть энкодера субдискретизирует входное изображение фактором 2D, где D является значением encoderDepth. Сеть декодера сверхдискретизировала сеть энкодера, выведенную фактором 2D.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'NumConvolutionLayers',1

Количество сверточных слоев в каждом разделе энкодера и декодера, заданном как положительное целое число или вектор положительных целых чисел.

NumConvolutionLayersОписание
скалярТо же количество слоев используется для всех разделов энкодера и декодера.
векторk th элемент NumConvolutionLayers является количеством слоев свертки в k th раздел энкодера и соответствующий раздел декодера. Типичные значения находятся в области значений [1, 3].

Количество вывода образовывает канал для каждого раздела в сети энкодера SegNet, заданной как положительное целое число или вектор положительных целых чисел. segnetLayers определяет номер выходных каналов в декодере, чтобы совпадать с соответствующим разделом энкодера.

NumOutputChannelsОписание
скалярТо же количество выходных каналов используется для всех разделов энкодера и декодера.
векторk th элемент NumOutputChannels является количеством выходных каналов k th раздел энкодера и соответствующий раздел декодера.

Сверточный размер фильтра слоя, заданный как положительное нечетное целое число или вектор - строка с 2 элементами из положительных нечетных целых чисел. Типичные значения находятся в области значений [3, 7].

FilterSizeОписание
скалярФильтр является квадратным.
Вектор - строка с 2 элементами

Фильтр имеет размер [height width].

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

свернуть все

Слои, которые представляют архитектуру сети SegNet, возвратились как объект layerGraph.

Советы

  • Разделы в подсетях энкодера и декодера SegNet составлены из сверточной, пакетной нормализации и слоев ReLU.

  • Все сверточные слои сконфигурированы таким образом, что срок смещения фиксируется, чтобы обнулить.

  • Веса слоя Convolution в подсетях энкодера и декодера инициализируются с помощью метода инициализации веса 'MSRA'. Для моделей 'vgg16' или 'vgg19' только подсеть декодера инициализируется с помощью MSRA. [1]

  • Сети, произведенные segnetLayers, поддерживают генерацию кода графического процессора для глубокого обучения, если они обучены с trainNetwork. Смотрите Генерацию кода Глубокого обучения (Deep Learning Toolbox) для деталей и примеров.

Ссылки

[1] Он, K., С. Чжан, С. Жэнь и J. Sun. "Копаясь глубоко в выпрямителях: превышение производительности Человеческого Уровня на классификации ImageNet". Продолжения международной конференции IEEE по вопросам компьютерного зрения. 2015, 1026–1034.

[2] Badrinarayanan, V., А. Кендалл и Р. Сиполла. "Segnet: Глубокая Сверточная Архитектура Декодера Энкодера для Сегментации Изображений". arXiv. Предварительно распечатайте arXiv: 1511.0051, 2015.

Введенный в R2017b