В этом примере показано, как создать и обучить простую семантическую сеть сегментации с помощью Deep Network Designer.
Семантическая сегментация описывает процесс связывания каждого пикселя изображения с меткой класса (например, цветок, человек, дорога, небо, океан или автомобиль). Приложения для семантической сегментации включают сегментацию дорог для автономного вождения и сегментацию раковых клеток для медицинской диагностики. Дополнительные сведения см. в разделе Начало работы с семантической сегментацией с помощью глубокого обучения (панель инструментов компьютерного зрения).
Для обучения сети семантической сегментации нужна коллекция изображений и соответствующая ей коллекция изображений с метками пикселей. Изображение с меткой пикселя - это изображение, где каждое значение пикселя представляет категориальную метку этого пикселя. В этом примере для иллюстрации используется простой набор данных из изображений треугольников 32 на 32. С помощью программы Image Labeler (Computer Vision Toolbox) можно в интерактивном режиме маркировать пикселы и экспортировать данные меток для приложений компьютерного зрения. Дополнительные сведения о создании учебных данных для приложений семантической сегментации см. в разделе Пиксели меток для семантической сегментации (панель инструментов компьютерного зрения).
Загрузите данные обучения.
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 можно создавать, редактировать и обучать сети глубокого обучения. Приостановите работу в пустой сети и нажмите кнопку Создать.
Создайте семантическую сеть сегментации, перетащив слои из библиотеки слоев на панель «Конструктор».
Соедините слои в следующем порядке:
imageInputLayer с InputSize установить в значение 32,32,1
convolution2dLayer с FilterSize установить в значение 3,3, NumFilters установить в значение 64, и Padding установить в значение 1,1,1,1
reluLayer
maxPooling2dLayer с PoolSize установить в значение 2,2, Stride установить в значение 2,2, и Padding установить в значение 0,0,0,0
convolution2dLayer с FilterSize установить в значение 3,3, NumFilters установить в значение 64, и Padding установить в значение 1,1,1,1
reluLayer
transposedConv2dLayer с FilterSize установить в значение 4,4, NumFilters установить в значение 64, Stride установить в значение 2,2, and Cropping установить в значение 1,1,1,1
convolution2dLayer с FilterSize установить в значение 1,1, NumFilters установить в значение 2, и Padding установить в значение 0,0,0,0
softmaxLayer
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
];Эта сеть представляет собой простую семантическую сеть сегментации, основанную на схеме понижающей дискретизации и повышающей дискретизации. Дополнительные сведения о построении семантической сети сегментации см. в разделе Создание семантической сети сегментации (Computer Vision Toolbox).
Чтобы импортировать хранилище данных обучения, на вкладке Данные выберите Импорт данных > Импорт хранилища данных. Выберите 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 + см. раздел Семантическая сегментация с глубоким обучением (Computer Vision Toolbox).
Конструктор глубоких сетей | trainingOptions | deeplabv3plusLayers (Панель инструментов компьютерного зрения) | Image Labeler (Панель инструментов компьютерного зрения) | pixelClassificationLayer (Панель инструментов компьютерного зрения) | pixelLabelDatastore (Панель инструментов компьютерного зрения) | segnetLayers (Панель инструментов компьютерного зрения) | semanticseg (Панель инструментов компьютерного зрения) | unetLayers (Панель инструментов компьютерного зрения) | labeloverlay(Панель инструментов обработки изображений)