segnetLayers

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

Описание

пример

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]
     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}

Создайте пиксельный 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.81% |       0.7661 |          0.0010 |
|      10 |          10 |       00:00:14 |       49.22% |       0.7373 |          0.0010 |
|      20 |          20 |       00:00:27 |       65.83% |       0.6916 |          0.0010 |
|========================================================================================|
net = 
  DAGNetwork with properties:

         Layers: [31x1 nnet.cnn.layer.Layer]
    Connections: [34x2 table]
     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}

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

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]
     InputNames: {'inputImage'}
    OutputNames: {'pixelLabels'}

Сеть 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 имя аргумента и 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