segnetLayers

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

Описание

пример

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

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

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

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'}

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

ds = combine(imds,pxds);

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

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

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

net = trainNetwork(ds,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:02 |       39.70% |       0.7665 |          0.0010 |
|      10 |          10 |       00:00:18 |       50.17% |       0.7384 |          0.0010 |
|      20 |          20 |       00:00:34 |       66.13% |       0.6920 |          0.0010 |
|========================================================================================|
Training finished: Max epochs completed.
net = 
  DAGNetwork with properties:

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

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

plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

Создайте слои 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)

Figure contains an axes object. The axes object contains an object of type graphplot.

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

свернуть все

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

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

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

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

Модель предварительно обученной сети в виде 'vgg16' или 'vgg19'. Эти модели имеют глубину энкодера 5. Когда вы используете 'vgg16' модель, необходимо задать входные параметры RGB. Можно преобразовать полутоновые изображения в RGB с помощью im2gray функция.

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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 Объект (Deep Learning Toolbox).

Советы

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

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

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

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

Ссылки

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

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

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

Введенный в R2017b