Приложения Image Labeler, Video Labeler и Ground Truth Labeler (Automated Driving Toolbox) позволяют маркировать изображения с помощью различных интерактивных инструментов рисования. Используйте эти метки для создания достоверных данных для алгоритмов настройки.
Можно рисовать многоугольные фигуры вокруг объектов в изображении или видеокадре и использовать многоугольники для маркировки объектов. Можно также связать метки многоугольников друг с другом, что позволит пометить отдельные объекты как образцы того же класса. Экспортированные метки полигонов сохраняют порядок стека многоугольников между определениями меток и совместимы с форматом основной истины, требуемым:
Семантические сети сегментации с использованием H -by W матрицы меток. Использование многоугольников поддерживает порядок создания или переупорядочения меток (с помощью Send to Back
и Bring to Front
опции). Семантическая сегментация требует пиксельной карты изображения с метками. Для этого необходимо сплющить метки (потеря слоистого порядка меток). Представьте, что деление непрозрачности всех многоугольников максимальным и сохранение всех заполненных областей в виде матрицы меток.
Сети сегментации образцов с использованием H -by- W -by- NumObjects маскирующего стека.
Необработанные многоугольники в массиве ячеек NumObjects -by-1, где каждая камера содержит M -by-2 точки.
В этом примере вы загружаете изображение, создаете метки информации только для чтения полигонов, изменяете настройки, связанные с полигонами чертежей, и постпроцессируете экспортированные данные объекта основной истины, чтобы использовать их для сетей обучения сегментации образца и семантической сегментации.
Можно загрузить изображения, хранящиеся в datastore, из папки или загрузить предыдущий сеанс маркера. Изображения должны быть считываемыми imread
. В этом примере вы загружаете данные, которые содержат ряд транспортных средств, включая катера, танкер и самолет.
Используйте этот процесс для программной загрузки изображений из datastore:
Создайте datastore из папки изображений. Например, если у вас была папка с именем «boats», которая содержала изображения, можно создать datastore изображений с этим кодом.
imageFolder = fullfile(toolboxdir('vision'),'visiondata','boats'); imds = imageDatastore(imageFolder);
Загрузите datastore в Image Labeler:
imageLabeler(imds);
Также можно загрузить папку изображений непосредственно в Image Labeler:
imageFolder = fullfile(toolboxdir('vision'),'visiondata','boats'); imageLabeler(imageFolder);
Щелкните Import, чтобы загрузить изображения или нажмите Open Session, чтобы открыть сохраненный сеанс.
Создайте полигонные метки для парусников, танкеров и самолетов.
На панели ROI Labels слева нажмите Label.
Выберите Polygon
пометьте тип и назовите его Sailboat
.
Вы можете изменить цвет метки, щелкнув на цвете предварительного просмотра.
Нажмите OK.
Метка Sailboat появится на панели ROI Labels.
Повторите шаги с 1 по 4, чтобы создать Tanker метку и Airplane метку. Можно переместить метку в списке, щелкнув влево и перетащив метку вверх или вниз.
Выберите метку Sailboat, а затем с помощью мыши нарисуйте многоугольник ROI вокруг каждой из парусников.
Выберите метку Tanker и нарисуйте многоугольник ROI вокруг танкера.
Выберите метку Airplane и нарисуйте многоугольник ROI вокруг самолета.
Существует несколько способов изменить внешний вид меток информация только для чтения. Можно также задать stacking order для экспортированной основной истины. Порядок размещения указывает, находится ли объект перед или за другим объектом, и требуется для того, чтобы разрешить перекрывающиеся области, чтобы создать семантическую карту меток.
На следующих шагах необходимо изменить цвет метки, задать внешний вид имен меток во время маркировки, изменить непрозрачность меток, просмотреть образцы класса меток и задать порядок размещения.
Чтобы изменить цвет метки ROI самолета, щелкните правой кнопкой мыши по Airplane
пометить на панели ROI Labels и выбрать Edit Label. Щелкните предпросмотр цвета и выберите цвет.
Чтобы показать имена меток информация только для чтения во время маркировки, выберите Always из меню Show ROI Labels в разделе View.
Чтобы увеличить непрозрачность метки, используйте ползунок Polygon в разделе Label Opacity. Увеличение непрозрачности помогает распознать, какие метки находятся перед или позади других меток в сцене.
Метка танкера перед этикеткой парусника, но она должна быть позади нее. Положение влияет на порядок размещения в экспортированных основных истинах. Чтобы изменить порядок размещения, щелкните правой кнопкой мыши по метке информации только для чтения танкера в сцене и выберите Send To Back.
Чтобы просмотреть образцы меток информация только для чтения, выберите By Instance
из раскрывающегося меню ROI Color в разделе View.
Экспортировать маркированные достоверные данные можно нажав Export и выбрав To Workspace. Назовите файл MAT достоверных данных gTruth
.
Можно использовать экспортированную, маркированную основную истину для обучения сети сегментации образцов или семантической сети сегментации.
Выполните следующие шаги, чтобы обработать данные многоугольника для семантической сегментации или сегментации образца.
Шаг | Описание | Процедура |
---|---|---|
1 - отображение достоверных данных | Экспортированный объект основная истина содержит данные для пяти объектов и трех определений. | Введите >> gTruth gTruth = groundTruth with properties: DataSource: [1×1 groundTruthDataSource] LabelDefinitions: [3×5 table] LabelData: [1×3 table] |
2 - Получите многоугольники | Свойство LabelData группирует данные по имени метки. The | Тип >> gTruth.LabelData ans = 1×3 table Sailboat Tanker Airplane __________ __________ __________ {3×1 cell} {1×1 cell} {1×1 cell} |
3 - Многоугольник основной истины данных | Парусник и танкер перекрываются. Эта информация (относительное упорядоченное расположение пикселей) теряется в этом формате. Используйте | Используйте >> out = gatherLabelData(gTruth,[labelType.Polygon],'GroupLabelData','LabelType') out = 1×1 cell array {1×1 table} Отображение содержимого таблицы. >> out{1}.PolygonData ans = 1×1 cell array {5×2 cell} |
4 - Просмотр достоверных данных по порядку глубин | Содержимое | Отобразите многоугольник данные. >> out{1}.PolygonData{1} ans = 5×2 cell array {12×2 double} {'Airplane'} { 6×2 double} {'Sailboat'} { 7×2 double} {'Sailboat'} {13×2 double} {'Sailboat'} { 9×2 double} {'Tanker' } |
Шаг | Описание | Процедура |
---|---|---|
1 - Создайте карту идентификаторов меток | Создайте карту, связывающую имена классов с идентификаторами классов. |
classNames = {'Airplane','Sailboat','Tanker'}; classIds = 1:numel(classNames); labelIDMap = containers.Map(classNames,classIds); |
2 - Извлечение многоугольников | Извлеките из многоугольника координаты многоугольника и метки структуры output. |
polygons = out{1}.PolygonData{1}(:,1); polygonLabels = out{1}.PolygonData{1}(:,2); |
3 - Сплющить многоугольники к семантической карте сегментации | Преобразуйте имена меток в идентификаторы. Преобразуйте координаты многоугольника в семантическую карту сегментации. |
polygonLabelIDs = cellfun(@(x)labelIDMap(x),polygonLabels); imageSize = [645 916]; % size(boats_im) outputIm = poly2label(polygons,polygonLabelIDs,imageSize); |
Шаг | Описание | Процедура |
---|---|---|
Предварительно выделите маску стека для сегментации образца | Предварительно выделите стек маски высотой и шириной, равными размерностям изображения, и глубину канала так же, как и количество многоугольников. |
polygons = out{1}.PolygonData{1}(:,1); numPolygons = size(polygons,1); imageSize = [645 916]; % size(boats_im) maskStack = false([imageSize(1:2) numPolygons]); |
Преобразуйте многоугольники в маски экземпляров | Преобразуйте каждый многоугольник в отдельную маску и вставьте его в стек маски. |
for i = 1:numPolygons maskStack(:,:,i) = poly2mask(polygons{i}(:,1), ... polygons{i}(:,2),imageSize(1),imageSize(2)); end |
groundTruth
| groundTruthMultisignal
(Automated Driving Toolbox)