Начало работы с Mask R-CNN для сегментации образца

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

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

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

Обучающие данные

Чтобы обучить Mask R-CNN, вам нужны следующие данные.

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

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

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

RGB image of a street scene with vehicles and pedestrians

Ограничительные рамки с основной истиной

Ограничивающие прямоугольники для объектов в изображениях RGB, определенных как матрица <reservedrangesplaceholder4>-by-4, со строками в формате [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0> ]).

Для примера, 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

Предварительная обработка данных

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

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

Для получения дополнительной информации смотрите Datastores for Глубокое Обучение (Deep Learning Toolbox).

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

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

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

Сетевая архитектура Mask R-CNN

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

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

Эта схема показывает измененную сеть Faster R-CNN слева и маскирующую ветвь справа.

Обучите маску R-CNN Network

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

  • Считайте данные для текущего мини-пакета, используя next (Deep Learning Toolbox) функция.

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

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

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

Пример настройки Mask R-CNN с помощью параллельной обработки графический процессор см. в Multiclass Instance Segmentation с использованием Mask R-CNN.

Ссылки

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

[2] Brostow, Gabriel J., Julien Fauqueur, and Roberto Cipolla. Semantic Object Classes in Video: A High-Definition Ground Truth Database (неопр.) (недоступная ссылка). Pattern Recognition Letters 30, № 2 (январь 2009): 88-97. https://doi.org/10.1016/j.patrec.2008.04.005.

См. также

Приложения

Функции

Объекты

Похожие примеры

Подробнее о

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