В этом примере показано, как использовать предварительно обученный алгоритм семантической сегментации для сегментации неба и дороги в изображении и использовать этот алгоритм для автоматизации маркировки истинности земли в приложении Ground Truth Labeler.
Для разработки автоматизированных алгоритмов вождения и оценки их эффективности необходимы достоверные данные. Однако создание и ведение разнообразного и высококачественного набора аннотированных данных о вождении требует значительных усилий. Приложение Ground Truth Labeler делает этот процесс простым и эффективным. Это приложение включает функции для аннотирования объектов в виде прямоугольников, линий или меток пикселов. Маркировка пикселей - это процесс, в котором каждому пикселю изображения присваивается класс или категория, которые затем могут использоваться для обучения алгоритма сегментации на уровне пикселей. Хотя приложение можно использовать для ручной маркировки всех данных, этот процесс требует значительного количества времени и ресурсов, особенно для маркировки пикселей. В качестве альтернативы приложение также предоставляет структуру для включения алгоритмов для расширения и автоматизации процесса маркировки. Созданные алгоритмы можно использовать для автоматической маркировки целых наборов данных, а затем завершить более эффективным и коротким шагом ручной проверки. Можно также отредактировать результаты этапа автоматизации, чтобы учесть сложные сценарии, которые алгоритм мог пропустить.
В этом примере будут выполнены следующие действия:
Используйте предварительно подготовленный алгоритм сегментации для сегментации пикселов, относящихся к категориям «Road» и «Sky».
Создайте алгоритм автоматизации, который можно использовать в приложении Ground Truth Labeler для автоматической маркировки пикселов дороги и неба.
Эти базовые истинные данные можно затем использовать для обучения новой сети семантической сегментации или переподготовки существующей.
Сначала создайте алгоритм семантической сегментации, который сегментирует пикселы дороги и неба в изображении. Пример семантической сегментации с использованием глубокого обучения описывает, как обучить сеть глубокого обучения семантической сегментации. Эта сеть была обучена предсказывать 11 классов семантических меток, включая «Road» и «Sky». Производительность этих сетей зависит от их универсальности. Применение сетей к ситуациям, с которыми они не сталкивались во время обучения, может привести к результатам субпарабара. Итеративное внедрение пользовательских данных обучения в процесс обучения может повысить эффективность работы сети с аналогичными наборами данных.
Загрузите сеть, которая была предварительно подготовлена в наборе данных CamVid [1] [2] из Кембриджского университета.
pretrainedURL = 'https://www.mathworks.com/supportfiles/vision/data/segnetVGG16CamVid.mat'; pretrainedFolder = fullfile(tempdir,'pretrainedSegNet'); pretrainedSegNet = fullfile(pretrainedFolder,'segnetVGG16CamVid.mat'); if ~exist(pretrainedSegNet,'file') if ~exist(pretrainedFolder,'dir') mkdir(pretrainedFolder); end disp('Downloading pretrained SegNet (107 MB)...'); websave(pretrainedSegNet,pretrainedURL); end
Downloading pretrained SegNet (107 MB)...
Сегментируйте изображение и отобразите его.
% Load the semantic segmentation network data = load(pretrainedSegNet); % Load a test image from drivingdata roadSequenceData = fullfile(toolboxdir('driving'), 'drivingdata', 'roadSequence'); I = imread(fullfile(roadSequenceData, 'f00000.png')); % Run the network on the image automatedLabels = semanticseg(I, data.net); % Display the labels overlaid on the image, choosing relevant categories figure, imshow(labeloverlay(I, automatedLabels, 'IncludedLabels', ["Sky", "Road"]));

Выходные данные сети представлены в MATLAB в виде категориальной матрицы. Перечисленные категории включают в себя все категории, на которых обучена сеть семантической сегментации, а не только категории, присутствующие в выходных данных. Эта информация также доступна из самого сетевого объекта.
data.net.Layers(end).ClassNames
% List categories of pixels labeled
categories(automatedLabels)ans = 11×1 cell
{'Sky' }
{'Building' }
{'Pole' }
{'Road' }
{'Pavement' }
{'Tree' }
{'SignSymbol'}
{'Fence' }
{'Car' }
{'Pedestrian'}
{'Bicyclist' }
% The blue overlay indicates the 'Sky' category, and the green overlay % indicates 'Road'.
Включение этого алгоритма семантической сегментации в процесс автоматизации приложения путем создания класса, наследующего от абстрактного базового класса vision.labeler.AutomationAlgorithm. Этот базовый класс определяет API, используемый приложением для настройки и запуска алгоритма. Приложение Ground Truth Labeler предоставляет удобный способ получения начального шаблона класса автоматизации. Дополнительные сведения см. в разделе Создание алгоритма автоматизации для маркировки. RoadAndSkySegmentation основан на этом шаблоне и предоставляет готовый к использованию класс автоматизации для сегментации меток пикселей.
Первый набор свойств в RoadAndSkySegmentation класс задает имя алгоритма, предоставляет его краткое описание и дает указания по его использованию.
properties(Constant)
%Name
% Character vector specifying name of algorithm.
Name = 'RoadAndSkySegmentation'
%Description
% Character vector specifying short description of algorithm.
Description = 'This algorithm uses semanticseg with a pretrained network to annotate roads and sky'
%UserDirections
% Cell array of character vectors specifying directions for
% algorithm users to follow in order to use algorithm.
UserDirections = {...
['Automation algorithms are a way to automate manual labeling ' ...
'tasks. This AutomationAlgorithm automatically creates pixel ', ...
'labels for road and sky.'], ...
['Review and Modify: Review automated labels over the interval ', ...
'using playback controls. Modify/delete/add ROIs that were not ' ...
'satisfactorily automated at this stage. If the results are ' ...
'satisfactory, click Accept to accept the automated labels.'], ...
['Accept/Cancel: If results of automation are satisfactory, ' ...
'click Accept to accept all automated labels and return to ' ...
'manual labeling. If results of automation are not ' ...
'satisfactory, click Cancel to return to manual labeling ' ...
'without saving automated labels.']};
end
Следующий раздел RoadAndSkySegmentation задает пользовательские свойства, необходимые для основного алгоритма. PretrainedNetwork свойство содержит предварительно подготовленную сеть. AllCategories содержит имена трех категорий.
properties
% PretrainedNetwork saves the SeriesNetwork object that does the semantic
% segmentation.
PretrainedNetwork
% Categories holds the default 'background', 'road', and 'sky'
% categorical types.
AllCategories = {'background'};
% Store names for 'road' and 'sky'.
RoadName
SkyName
end
checkLabelDefinition, первый метод, определенный в RoadAndSkySegmentation , проверяет, что только метки типа PixelLabel включены для автоматизации. PixelLabel является единственным типом, необходимым для семантической сегментации.
function TF = checkLabelDefinition(~, labelDef)
isValid = false;
if (strcmpi(labelDef.Name, 'road') && labelDef.Type == labelType.PixelLabel)
isValid = true;
algObj.RoadName = labelDef.Name;
algObj.AllCategories{end+1} = labelDef.Name;
elseif (strcmpi(labelDef.Name, 'sky') && labelDef.Type == labelType.PixelLabel)
isValid = true;
algObj.SkyName = labelDef.Name;
algObj.AllCategories{end+1} = labelDef.Name;
elseif(labelDef.Type == labelType.PixelLabel)
isValid = true;
end
end
Следующий набор функций управляет выполнением алгоритма. vision.labeler.AutomationAlgorithm класс включает интерфейс, содержащий такие методы, как 'initialize', 'run', и 'terminate' для простой настройки и запуска автоматизации. initialize заполняет начальное состояние алгоритма на основе существующих меток в приложении. RoadAndSkySegmentation класс, initialize функция была настроена для загрузки предварительно обученной сети семантической сегментации из tempdir и сохраните его в PretrainedNetwork собственность.
function initialize(algObj, ~, ~)
% Point to tempdir where pretrainedSegNet was downloaded.
pretrainedFolder = fullfile(tempdir,'pretrainedSegNet');
pretrainedSegNet = fullfile(pretrainedFolder,'segnetVGG16CamVid.mat');
data = load(pretrainedSegNet);
% Store the network in the 'PretrainedNetwork' property of this object.
algObj.PretrainedNetwork = data.net;
end
Далее, run функция определяет основной алгоритм семантической сегментации этого класса автоматизации. run вызывается для каждого видеокадра и ожидает, что класс автоматизации вернет набор меток. run функция в RoadAndSkySegmentation содержит логику, введенную ранее для создания категориальной матрицы пиксельных меток, соответствующих «Road» и «Sky». Это может быть распространено на любые категории, в которых обучается сеть, и ограничено этими двумя только для иллюстрации.
function autoLabels = run(algObj, I)
% Setup categorical matrix with categories including road and
% sky
autoLabels = categorical(zeros(size(I,1), size(I,2)),0:2,algObj.AllCategories,'Ordinal',true);
pixelCat = semanticseg(I, this.PretrainedNetwork);
if ~isempty(pixelCat)
% Add the selected label at the bounding box position(s)
autoLabels(pixelCat == "Road") = algObj.RoadName;
autoLabels(pixelCat == "Sky") = algObj.SkyName;
end
end
Этот алгоритм не требует никакой очистки, поэтому terminate функция пуста.
Свойства и методы, описанные в предыдущем разделе, реализованы в RoadAndSkySegmentation файл класса алгоритма автоматизации. Чтобы использовать этот класс в приложении:
Создание структуры папок +vision/+labeler требуется в текущей папке и скопируйте в нее класс автоматизации.
mkdir('+vision/+labeler');
copyfile('RoadAndSkySegmentation.m','+vision/+labeler');
Откройте окно groundTruthLabeler с пользовательскими данными для наклейки. В целях иллюстрации откройте окно caltech_cordova1.avi видео.
groundTruthLabeler caltech_cordova1.avi
На левой панели нажмите кнопку Define new ROI label и определите две метки ROI с именами. Road и Sky, типа Pixel label как показано.

Щелкните Алгоритм > Выбрать алгоритм > Обновить список.
Щелкните Алгоритм > RoadAndSkySegmentation. Если этот параметр не отображается, убедитесь, что текущая рабочая папка содержит папку с именем +vision/+labeler, с именем файла RoadAndSkySegmentation.m в этом.

Щелкните Автоматизировать (Automate). Откроется новая панель, отображающая направления использования алгоритма.

Щелкните Выполнить (Run). Созданный алгоритм выполняется на каждом кадре видео, сегментируя категории «Дорога» и «Небо». После завершения прогона используйте ползунок или клавиши со стрелками для прокрутки видео и проверки результата алгоритма автоматизации.

Очевидно, что области вне поля зрения камеры неправильно помечены как «Небо», а части самого эго-транспортного средства помечены как «Дорога». Эти результаты показывают, что сеть ранее не обучалась таким данным. Этот рабочий процесс позволяет вручную корректировать эти результаты, так что итеративный процесс обучения и маркировки (иногда называемый активным обучением или человеком в цикле) может быть использован для дальнейшего уточнения точности сети в пользовательских наборах данных. Результаты можно сдвинуть вручную с помощью инструмента «Кисть» на вкладке «Пикселы метки» и добавить или удалить аннотации пикселов. Другие инструменты, такие как заливка заливкой и смарт-полигоны, также доступны на вкладке «Пикселы метки» и могут использоваться при необходимости.

После получения информации о категориях меток пикселов для всего видео нажмите кнопку Принять.
Автоматизация маркировки пикселей для видео завершена. Теперь можно продолжить маркировку других объектов, представляющих интерес, сохранить сеанс или экспортировать результаты этого прогона маркировки.
В этом примере показано, как использовать предварительно обученную сеть семантической сегментации для ускорения маркировки дорожных и небесных пикселей в приложении Ground Truth Labeler с помощью AutomationAlgorithm интерфейс.
Бростоу, Габриэль Дж., Джейми Шоттон, Жюльен Фокер и Роберто Чиполла. «Сегментация и распознавание с использованием структуры из облаков точек движения». ECCV. 2008.
Бростоу, Габриэль Дж., Жюльен Фокёр и Роберто Чиполла. «Классы семантических объектов в видео: база данных истинности земли высокой четкости». Буквы распознавания образов. 2008.