В этом примере показано, как создать и обучить простую сеть семантической сегментации использование Deep Network Designer.
Семантическая сегментация описывает процесс соединения каждого пикселя изображения с меткой класса (такой как цветок, человек, дорога, небо, океан или автомобиль). Приложения для семантической сегментации включают сегментацию дорог для автономного управления автомобилем и сегментацию раковой клетки для медицинского диагностирования. Чтобы узнать больше, смотрите Начало работы с Семантической Сегментацией Используя Глубокое обучение (Computer Vision Toolbox).
Чтобы обучить сеть семантической сегментации, вам нужны набор изображений и его соответствующий набор помеченных пикселем изображений. Помеченное пикселем изображение является изображением, где каждое пиксельное значение представляет категориальную метку того пикселя. Этот пример использует простой набор данных 32 32 изображений треугольников в целях рисунка. Можно интерактивно помечать пиксели и экспортировать данные о метке для приложений компьютерного зрения с помощью Image Labeler (Computer Vision Toolbox). Для получения дополнительной информации о создании обучающих данных для приложений семантической сегментации смотрите, Маркируют Pixels for Semantic Segmentation (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);
Объедините datastore изображений и пиксельный datastore метки в CombinedDatastore объект с помощью combine функция. Объединенный datastore обеспечивает четность между парой изображений в базовых хранилищах данных.
cds = combine(imds,pxds);
Открытый Deep Network Designer.
deepNetworkDesigner
В Deep Network Designer можно создать, отредактировать и обучить нейронные сети для глубокого обучения. Сделайте паузу в Пустой Сети и нажмите New.
Создайте сеть семантической сегментации путем перетаскивания слоев от Библиотеки Слоя до панели Разработчика.
Соедините слои в этом порядке:
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).
Чтобы импортировать учебный datastore, на вкладке Data, выбирают Import Data> Import Datastore. Выберите CombinedDatastore объект cds как обучающие данные. Для данных о валидации выберите None. Импортируйте обучающие данные путем нажатия на Import.
Deep Network Designer отображает предварительный просмотр импортированных данных о семантической сегментации. Предварительный просмотр отображает учебные изображения и пиксельные метки основной истины. Сеть требует входных изображений (слева) и возвращает классификацию для каждого пикселя или как треугольник или как фон (справа).

Установите опции обучения и обучите сеть.
На вкладке Training нажмите Training Options. Установите InitialLearnRate на 0.001, MaxEpochs к 100, и MiniBatchSize к 64. Установите опции обучения путем нажатия на Close.

Обучите сеть путем нажатия на Train.

Если обучение завершено, нажмите Export, чтобы экспортировать обучивший сеть в рабочую область. Обучивший сеть хранится в переменной trainedNetwork_1.
Сделайте предсказания с помощью тестовых данных и обучившего сеть.
Сегментируйте тестовое изображение с помощью semanticseg. Отобразите метки по изображению при помощи labeloverlay функция.
imgTest = imread('triangleTest.jpg');
testSeg = semanticseg(imgTest,trainedNetwork_1);
testImageSeg = labeloverlay(imgTest,testSeg);Отобразите результаты.
figure imshow(testImageSeg)

Сеть успешно помечает треугольники в тестовом изображении.
Сеть семантической сегментации, обученная в этом примере, очень проста. Чтобы создать более комплексные сети семантической сегментации, можно использовать функции Computer Vision Toolbox segnetLayers (Computer Vision Toolbox), deeplabv3plusLayers (Computer Vision Toolbox) и unetLayers (Computer Vision Toolbox). Для примера, показывающего, как использовать deeplabv3plusLayers функция, чтобы создать DeepLab v3 + сеть, смотрите Семантическую Сегментацию С Глубоким обучением (Computer Vision Toolbox).
Deep Network Designer | Image Labeler (Computer Vision Toolbox) | pixelLabelDatastore (Computer Vision Toolbox) | semanticseg (Computer Vision Toolbox) | labeloverlay (Image Processing Toolbox) | pixelClassificationLayer (Computer Vision Toolbox) | trainingOptions | deeplabv3plusLayers (Computer Vision Toolbox) | segnetLayers (Computer Vision Toolbox) | unetLayers (Computer Vision Toolbox)