exponenta event banner

Начало работы с маской R-CNN для сегментации экземпляров

Сегментация экземпляра - это расширенный тип обнаружения объекта, который генерирует карту сегментации для каждого обнаруженного экземпляра объекта. Сегментация экземпляров рассматривает отдельные объекты как отдельные объекты независимо от класса объектов. Напротив, семантическая сегментация учитывает все объекты того же класса, что и принадлежащие к одному объекту.

Существует несколько алгоритмов глубокого обучения для выполнения сегментации экземпляра. Одним из популярных алгоритмов является Mask R-CNN, который расширяется в сети Faster R-CNN для выполнения сегментации на уровне пикселей на обнаруженных объектах [1]. Алгоритм Mask R-CNN может вместить несколько классов и перекрывающихся объектов.

Пример, показывающий, как обучить маску R-CNN, см. в разделе Сегментация экземпляра с использованием маски R-CNN Deep Learning.

Данные обучения

Для обучения маски R-CNN необходимы следующие данные.

ДанныеОписание
Изображение RGB

Образы RGB, которые служат сетевыми входами, заданными как H-by-W-by-3 числовые массивы.

Например, этот образец изображения RGB является измененным изображением из набора данных CamVid [2], который был отредактирован для удаления личной идентифицируемой информации.

RGB image of a street scene with vehicles and pedestrians

Ограничивающие рамки «земля-истина»

Ограничивающие рамки для объектов в RGB-изображениях, заданные как матрица NumObjects-by-4, со строками в формате [x y w h]).

Например, bboxes переменная показывает ограничивающие рамки шести объектов в образце изображения RGB.

bboxes =

   394   442    36   101
   436   457    32    88
   619   293   209   281
   460   441   210   234
   862   375   190   314
   816   271   235   305

Метки экземпляров

Метка каждого экземпляра, заданная как NumObjects-by-1 строковый вектор или массив NumObjects-by-1 ячеек символьных векторов.)

Например, labels переменная показывает метки шести объектов в образце изображения RGB.

labels =

  6×1 cell array

    {'Person' }
    {'Person' }
    {'Vehicle'}
    {'Vehicle'}
    {'Vehicle'}
    {'Vehicle'}

Маски экземпляров

Маски для экземпляров объектов. Данные маски поставляются в двух форматах:

  • Двоичные маски, заданные как логический массив размера H-by-W-by-NumObjects. Каждая маска - это сегментация одного экземпляра изображения.

  • Координаты полигона, заданные как массив ячеек NumObjects-by-2. Каждая строка массива содержит координаты (x, y) многоугольника вдоль границы одного экземпляра изображения.

    Для сети Mask R-CNN требуются двоичные маски, а не многоугольные координаты. Чтобы преобразовать координаты многоугольника в двоичные маски, используйте poly2mask функция. poly2mask устанавливает пикселы, находящиеся внутри полигона, в 1 и устанавливает пикселы вне полигона в 0. Этот код показывает, как преобразовать координаты полигонов в masks_polygon переменная для двоичных масок размера h-by-w-by-numObjects.

    denseMasks = false([h,w,numObjects]);
    for i = 1:numObjects
        denseMasks(:,:,i) = poly2mask(masks_polygon{i}(:,1),masks_polygon{i}(:,2),h,w);
    end

Например, этот монтаж показывает двоичные маски шести объектов в образце изображения RGB.

Six binary masks showing the segmentation of two pedestrians and four vehicles

Визуализация данных обучения

Чтобы отобразить маски экземпляра поверх изображения, используйте insertObjectMask. Можно задать цветовую карту, чтобы каждый экземпляр отображался в разных цветах. В этом примере кода показано отображение масок экземпляра в masks по образу RGB в im с использованием переменной lines цветовая карта.

imOverlay = insertObjectMask(im,masks,'Color',lines(numObjects));
imshow(imOverlay);

Each pedestrian and vehicle has a unique falsecolor hue over the RGB image

Чтобы показать ограничивающие рамки с метками поверх изображения, используйте команду showShape функция. В этом примере кода показано, как показывать помеченные прямоугольные фигуры с размером ограничивающей рамки и данными о положении в bboxes данные переменной и метки в labels переменная.

imshow(imOverlay)
showShape("rectangle",bboxes,"Label",labels,"Color","red");

Red rectangles labeled 'Pedestrian' and 'Vehicle' surround instances of each object

Данные предварительной обработки

Форматирование и изменение размера данных

Используйте хранилище данных для чтения данных. Хранилище данных должно возвращать данные в виде массива ячеек 1 на 4 в формате {изображения RGB, ограничивающие рамки, метки, маски}. Размер изображений, ограничивающих рамок и масок должен соответствовать входному размеру сети. Если необходимо изменить размер данных, можно использовать imresize для изменения размеров RGB-изображений и масок и bboxresize для изменения размеров ограничивающих прямоугольников.

Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения (панель инструментов глубокого обучения).

Форма мини-пакетов данных

Для обучения сети Mask R-CNN требуется индивидуальный цикл обучения. Для управления мини-пакетами наблюдений в пользовательском учебном цикле создайте minibatchqueue (Deep Learning Toolbox) объект из хранилища данных. minibatchqueue объект передает данные в dlarray Объект (Deep Learning Toolbox), обеспечивающий автоматическую дифференциацию в приложениях для глубокого обучения. Если у вас есть поддерживаемый графический процессор, то minibatchqueue объект также перемещает данные в графический процессор.

next Функция (Deep Learning Toolbox) позволяет получить следующий мини-пакет данных из minibatchqueue.

Маска сетевой архитектуры R-CNN

Сеть Mask R-CNN состоит из двух этапов. Первая - это сеть предложений по областям (RPN), которая предсказывает ограничивающие рамки предложений по объектам на основе полей привязки. Второй этап представляет собой детектор R-CNN, который уточняет эти предложения, классифицирует их и вычисляет сегментацию на уровне пикселей для этих предложений.

Модель Mask R-CNN построена на модели Faster R-CNN, которую можно создать с помощью fasterRCNNLayers. Замените уровень максимального пула ROI на roiAlignLayer это обеспечивает более точное объединение ROI на уровне субпикселей. Сеть Mask R-CNN также добавляет ветвь маски для сегментации объектов на уровне пикселей. Дополнительные сведения о более быстрой сети R-CNN см. в разделе Начало работы с R-CNN, Fast R-CNN и Faster R-CNN.

На этой схеме показана модифицированная сеть более быстрого R-CNN слева и ветвь маски справа.

Сеть R-CNN маски поезда

Обучение модели в индивидуальном цикле обучения. Для каждой итерации:

  • Считывание данных для текущего мини-пакета с помощью next (Deep Learning Toolbox).

  • Оцените градиенты модели с помощью dlfeval (Deep Learning Toolbox) и пользовательская вспомогательная функция, которая вычисляет градиенты и общие потери для пакетов данных обучения.

  • Обновление сетевых обучаемых параметров с помощью такой функции, как adamupdate (инструментарий глубокого обучения) или sgdmupdate (инструментарий глубокого обучения).

Пример выполнения сегментации экземпляра с использованием обученной маски R-CNN см. в разделе Сегментация экземпляра с использованием маски R-CNN Deep Learning. В этом примере можно дополнительно обучить маску R-CNN с помощью CPU или одного графического процессора.

Пример обучения маскирующей R-CNN с использованием параллельной обработки GPU см. в разделе Сегментация многоклассовых экземпляров с использованием маскирующей R-CNN.

Ссылки

[1] Он, Кайминг, Джорджия Гкиоксари, Петр Доллар и Росс Гиршик. «Маска R-CNN». ArXiv:1703.06870 [С], 24 января 2018 года. https://arxiv.org/pdf/1703.06870.

[2] Бростоу, Габриэль Дж., Жюльен Фокер и Роберто Чиполла. «Классы семантических объектов в видео: база данных истинности земли высокой четкости». Письма 30, № 2 (январь 2009 года): 88-97. https://doi.org/10.1016/j.patrec.2008.04.005.

См. также

Приложения

Функции

Объекты

Связанные примеры

Подробнее

Внешние веб-сайты