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

Задайте имена классов и связанные с ними идентификаторы меток.

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

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

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

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

Создайте pixel label image 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 |       42.11% |       0.7662 |          0.0010 |
|      10 |          10 |       00:00:14 |       50.77% |       0.7390 |          0.0010 |
|      20 |          20 |       00:00:28 |       66.19% |       0.6918 |          0.0010 |
|========================================================================================|
net = 
  DAGNetwork with properties:

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

Отображение сети.

plot(lgraph)

Figure contains an axes. The axes 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'}

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

figure
plot(lgraph)

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

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

свернуть все

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

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

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

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

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

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

свернуть все

Слои, представляющие сетевую архитектуру SegNet, возвращаются как layerGraph (Deep Learning Toolbox) объект.

Совет

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

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

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

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

Ссылки

[1] He, K., X. Zhang, S. Ren, and J. Sun. «Delving Deep Into Rectifiers: Overpassing Human-Level Performance on ImageNet Classification». Материалы Международной конференции IEEE по компьютерному зрению. 2015, 1026–1034.

[2] Badrinarayanan, V., A. Kendall, and R. Cipolla. Segnet: Архитектура глубокого сверточного энкодера-декодера для сегментации изображений. arXiv. Препринт arXiv: 1511.0051, 2015.

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

.
Введенный в R2017b