exponenta event banner

Создание простой семантической сети сегментации в конструкторе глубоких сетей

В этом примере показано, как создать и обучить простую семантическую сеть сегментации с помощью Deep Network Designer.

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

Предварительные данные обучения

Для обучения сети семантической сегментации нужна коллекция изображений и соответствующая ей коллекция изображений с метками пикселей. Изображение с меткой пикселя - это изображение, где каждое значение пикселя представляет категориальную метку этого пикселя. В этом примере для иллюстрации используется простой набор данных из изображений треугольников 32 на 32. С помощью программы Image Labeler можно в интерактивном режиме маркировать пикселы и экспортировать данные меток для приложений компьютерного зрения. Дополнительные сведения о создании учебных данных для приложений семантической сегментации см. в разделе Пиксели меток для семантической сегментации.

Загрузите данные обучения.

dataFolder  = fullfile(toolboxdir('vision'), ...
'visiondata','triangleImages');

imageDir = fullfile(dataFolder,'trainingImages');
labelDir = fullfile(dataFolder,'trainingLabels');

Создание ImageDatastore содержащий изображения.

imds = imageDatastore(imageDir);

Создать PixelLabelDatastore содержит метки нулевых пикселей истинности. Этот набор данных имеет два класса: "triangle" и "background".

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

pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

Объединение хранилища данных изображения и хранилища данных метки пикселя в CombinedDatastore с использованием combine функция. Объединенное хранилище данных поддерживает четность между двумя изображениями в базовых хранилищах данных.

cds = combine(imds,pxds);

Построить сеть

Откройте конструктор глубоких сетей.

deepNetworkDesigner

В Deep Network Designer можно создавать, редактировать и обучать сети глубокого обучения. Приостановите работу в пустой сети и нажмите кнопку Создать.

Создайте семантическую сеть сегментации, перетащив слои из библиотеки слоев на панель «Конструктор».

Соедините слои в следующем порядке:

  1. imageInputLayer с InputSize установить в значение 32,32,1

  2. convolution2dLayer с FilterSize установить в значение 3,3, NumFilters установить в значение 64, и Padding установить в значение 1,1,1,1

  3. reluLayer

  4. maxPooling2dLayer с PoolSize установить в значение 2,2, Stride установить в значение 2,2, и Padding установить в значение 0,0,0,0

  5. convolution2dLayer с FilterSize установить в значение 3,3, NumFilters установить в значение 64, и Padding установить в значение 1,1,1,1

  6. reluLayer

  7. transposedConv2dLayer с FilterSize установить в значение 4,4, NumFilters установить в значение 64, Stride установить в значение 2,2, and Cropping установить в значение 1,1,1,1

  8. convolution2dLayer с FilterSize установить в значение 1,1, NumFilters установить в значение 2, и Padding установить в значение 0,0,0,0

  9. softmaxLayer

  10. pixelClassificationLayer

Можно также создать эту сеть в командной строке, а затем импортировать сеть в Deep Network Designer с помощью deepNetworkDesigner(layers).

layers = [
    imageInputLayer([32 32 1])
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    maxPooling2dLayer([2,2],'Stride',[2,2])
    convolution2dLayer([3,3],64,'Padding',[1,1,1,1])
    reluLayer
    transposedConv2dLayer([4,4],64,'Stride',[2,2],'Cropping',[1,1,1,1])
    convolution2dLayer([1,1],2)
    softmaxLayer
    pixelClassificationLayer
    ];

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

Импорт данных

Чтобы импортировать хранилище данных обучения, на вкладке Данные выберите Импорт данных > Импорт хранилища данных. Выберите CombinedDatastore объект cds в качестве данных обучения. Для данных проверки выберите None. Импортируйте данные обучения, щелкнув Импорт.

Deep Network Designer отображает предварительный просмотр импортированных семантических данных сегментации. При предварительном просмотре отображаются обучающие изображения и метки пикселей истинности земли. Сеть требует входных изображений (слева) и возвращает классификацию для каждого пикселя как треугольника или фона (справа).

Железнодорожная сеть

Установите параметры обучения и обучите сеть.

На вкладке Обучение щелкните Параметры обучения. Установить значение InitureLearnRate в 0.001, MaxEpochs to 100и MiniBatchSize в 64. Задайте параметры обучения, нажав Закрыть.

Обучите сеть, нажав кнопку Train.

После завершения обучения щелкните Экспорт (Export), чтобы экспортировать обученную сеть в рабочую область. Обученная сеть хранится в переменной trainedNetwork_1.

Тестовая сеть

Составление прогнозов с использованием тестовых данных и обученной сети.

Сегментировать тестовый образ с помощью semanticseg. Отображение меток над изображением с помощью labeloverlay функция.

imgTest = imread('triangleTest.jpg');
testSeg = semanticseg(imgTest,trainedNetwork_1);
testImageSeg = labeloverlay(imgTest,testSeg);

Просмотрите результаты.

figure
imshow(testImageSeg)

Сеть успешно помечает треугольники на тестовом изображении.

Обучаемая в этом примере семантическая сегментационная сеть очень проста. Для создания более сложных сетей семантической сегментации можно использовать функции панели инструментов Computer Vision segnetLayers, deeplabv3plusLayers, и unetLayers. Для примера, показывающего, как использовать deeplabv3plusLayers для создания сети DeepLab v3 + см. раздел Семантическая сегментация с глубоким обучением.