exponenta event banner

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

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

imds = imageDatastore(imageDir);

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

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

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

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

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

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-элементный вектор в формате [высота, ширина].

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

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

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

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

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

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

Укажите дополнительные пары, разделенные запятыми 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-элементный вектор строки

Фильтр имеет размер [ширина высоты ].

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

свернуть все

Уровни, представляющие сетевую архитектуру SegNet, возвращаемые в виде layerGraph(Панель инструментов глубокого обучения).

Совет

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

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

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

  • Сети, производимые segnetLayers поддержка генерации кода GPU для глубокого обучения после обучения с помощью trainNetwork (инструментарий глубокого обучения). Подробные сведения и примеры см. в разделе Создание кода глубокого обучения (панель инструментов глубокого обучения).

Ссылки

[1] Он, К., X. Zhang, С. Рен и Дж. Сун. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». Материалы Международной конференции IEEE по компьютерному зрению. 2015, 1026–1034.

[2] Бадринараянан, В., А. Кендалл и Р. Чиполла. «Segnet: архитектура глубокого сверточного кодера-декодера для сегментации изображений». arXiv. Препринт arXiv: 1511.0051, 2015.

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

.

См. также

Объекты

Функции

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