unetLayers

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

Синтаксис

lgraph = unetLayers(imageSize,numClasses)
lgraph = unetLayers(imageSize,numClasses,Name,Value)

Описание

пример

lgraph = unetLayers(imageSize,numClasses) возвращает сеть U-Net. unetLayers включает pixelClassificationLayer, чтобы предсказать категориальную метку для каждого пикселя во входном изображении.

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

lgraph = unetLayers(imageSize,numClasses,Name,Value)задает опции с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в кавычки. Например, unetLayer(imageSize,numClasses,'NumOutputChannels',64) дополнительно определяет номер выходных каналов к 64 для первого подраздела энкодера.

Примеры

свернуть все

Создайте слои U-Net с глубиной энкодера/декодера 3.

imageSize = [480 640 3];
numClasses = 5;
encoderDepth = 3;
lgraph = unetLayers(imageSize,numClasses,'EncoderDepth',encoderDepth)
lgraph = 
  LayerGraph with properties:

         Layers: [46x1 nnet.cnn.layer.Layer]
    Connections: [48x2 table]

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

plot(lgraph)

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

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

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

imds = imageDatastore(imageDir);

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

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

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

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

Создайте U-Net.

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

         Layers: [58×1 nnet.cnn.layer.Layer]
    Connections: [61×2 table]

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

ds = pixelLabelImageDatastore(imds,pxds);

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

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

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

net = trainNetwork(ds,lgraph,options)
Training on single CPU.
Initializing image normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:04 |        5.21% |      15.1044 |          0.0010 |
|      10 |          10 |       00:00:43 |       96.09% |       0.4845 |          0.0010 |
|      20 |          20 |       00:01:25 |       94.38% |       0.7715 |          0.0010 |
|========================================================================================|
net = 
  DAGNetwork with properties:

         Layers: [58×1 nnet.cnn.layer.Layer]
    Connections: [61×2 table]

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

свернуть все

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

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

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

Примечание

Каждый раздел энкодера имеет 2x2 maxPooling2dLayer это половины размер изображения. Высота и ширина входного изображения должны быть кратными 2D, где D является значением EncoderDepth.

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

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

Пример: 'EncoderDepth',3

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

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

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

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

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

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

свернуть все

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

Советы

  • Разделы в подсетях энкодера U-Net состоят из двух наборов сверточных и слоев ReLU, сопровождаемых 2x2 макс. объединение слоя. Подсети декодера состоят из транспонированного слоя свертки для повышающей дискретизации, сопровождаемый двумя наборами слоев ReLU и сверточных.

  • Сверточные слои в unetLayers используют дополнение 'same', которое сохраняет размер данных от входа, чтобы вывести и включает широкий набор входных размеров изображения. Исходная версия Ronneberger[1] не использует дополнение и ограничивается к меньшему набору входных размеров изображения.

  • Срок смещения всех сверточных слоев инициализируется, чтобы обнулить.

  • Веса слоя Convolution в подсетях энкодера и декодера инициализируются с помощью метода инициализации веса 'He' [2].

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

Ссылки

[1] Ronneberger, O., П. Фишер и Т. Брокс. "U-Net: Сверточные Сети для Биомедицинской Сегментации Изображений". Медицинское Вычисление Изображений и Машинное Вмешательство (MICCAI). Издание 9351, 2015, стр 234–241.

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

Введенный в R2018b

Для просмотра документации необходимо авторизоваться на сайте