Как использовать модель Mask RCNN для сегментации объекта изображения?

искусственный интеллект GitHub Архитектура WeChat

Обнаружение объектов и сегментация сущностей

Обнаружение объектов является важным направлением исследований в области компьютерного зрения и распознавания образов, в основном для определения наличия интересующего объекта на изображении, а также для его обнаружения и точного определения местоположения. Традиционный процесс обнаружения целей использует скользящее окно для выбора области, затем использует SIFT, HOG и другие методы для извлечения признаков и, наконец, использует SVM и Adaboost для определения категории. Однако основными проблемами, с которыми сталкиваются традиционные методы обнаружения целей, являются: низкая надежность выделения признаков, невозможность отразить изменения в освещении, разнообразный фон и т. д., выбор нецелевой области, высокая временная сложность и избыточные окна. Модели обнаружения целей, основанные на глубоком обучении, включают Faster RCNN, Yolo и Yolo2, SSD и т. д. Примеры применения обнаружения целей для объектов на изображениях:

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

Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)

Кайминг Хе и др. предложили сетевую структуру Mask RCNN в 2017 году, которая в основном используется для обнаружения объектов и сегментации объектов, и выиграли конкурс COCO 2016. Основная идея этой статьи состоит в том, чтобы расширить структуру обнаружения целей Faster RCNN и добавить ветку Mask для определения категории каждого пикселя в целевом кадре.Сетевая архитектура выглядит следующим образом:

В этой статье в основном объясняется, как применять модель MaskRCNN для достижения эффекта Color Splash (мастер цвета), а технические моменты модели Mask RCNN включают обучающие данные, магистральную сеть, генерацию предложения региона, ROIAlign, функции маски на основе сети FCN и Расчет функции потери маски.

Пример применения маски RCNN

В этом разделе в основном представлено применение модели Mask RCNN для достижения эффекта Color Splash (мастер цвета), определения части шара на цветном изображении и сохранения этой части в цвете; но преобразование других частей изображения в оттенки серого, исходная картина выглядит следующим образом:

Преобразованное изображение выглядит так:

Основная идея этого приложения: подготовить обучающие данные, отмеченные воздушными шарами; выполнить обучение Mask RCNN; после обучения выполнить вывод на тестовом изображении, чтобы найти маску маски части воздушного шара; использовать API open cv для удаления не воздушные шары на изображении Часть изображения преобразуется в черно-белое.

1. Подготовка обучающих данных. Сначала загрузите помеченные обучающие данные с https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip. Структура данных выглядит следующим образом, среди которых ***.jpg — исходное изображение, а via_region_data.json — файл аннотации к изображению.

__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__train/
   ---image1.jpg
   ---image2.jpg
   ---***.jpg
   ---via_region_data.json
val/
   ---image1.jpg
   ---image2.jpg
   ---***.jpg
   ---via_region_data.json__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__

Формат содержимого файла аннотации следующий: область аннотации на картинке — это многоугольник, а all_points_x и all_points_y — координаты x и y каждой вершины многоугольника соответственно.

__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__# Loadannotations
# { 'filename':'28503151_5b5b7ec140_b.jpg',
#   'regions': {
#       '0': {
#           'region_attributes': {},
#           'shape_attributes': {
#               'all_points_x': [...],
#               'all_points_y': [...],
#               'name': 'polygon'}},
#       ... more regions ...
#   },
#   'size': 100202
# }__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__

2. Обучение модели: загрузите код MaskRCNN с https://github.com/matterport/Mask_RCNN.git, который является открытым исходным кодом компании Matterport, и модель в основном реализована с помощью keras и API tensorflow. Код основной функции для обучения модели в этом приложении — Mask_RCNN/samples/balloon/balloon.py.Выполните следующий код для обучения модели: python balloon.py train --dataset=/path/to/balloon/dataset В этом приложении обучение модели Основные параметры конфигурации:

__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__# 每次迭代GPU上训练的图片数量,如果gpu显存为12GB,一般可同时训练2个图片
IMAGES_PER_GPU = 2

# 目标检测的类别数量,包含背景色
NUM_CLASSES = 1 + 1 # 背景 + 气球

# 每个epoch的训练迭代次数
STEPS_PER_EPOCH = 100

# 目标检测出来的最小置信度
DETECTION_MIN_CONFIDENCE = 0.9
模型推理及效果展示:

#首先设定推理的图片数量,如下所示:
class InferenceConfig(config.__class__):
    GPU_COUNT = 1
IMAGES_PER_GPU = 1
config = InferenceConfig()

#然后创建Inferencemodel:
model = modellib.MaskRCNN(mode="inference",model_dir=MODEL_DIR,config=config)

#加载模型权重
model.load_weights(weights_path, by_name=True)

#执行目标检测
results = model.detect([image], verbose=1)

#显示检测结果
visualize.display_instances(image, r['rois'], r['masks'],r['class_ids'],
                           dataset.class_names, r['scores'], ax=ax,
                           title="Predictions")__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__

__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__ #显示colorsplash效果
splash =balloon.color_splash(image, r['masks'])
display_images([splash], cols=1)__Mon May 07 2018 14:16:28 GMT+0800 (CST)____Mon May 07 2018 14:16:28 GMT+0800 (CST)__

Ключевая технология Mask RCNN

Mask RCNN – это сетевая структура, основанная на Faster RCNN. После базовой функциональной сети добавляется полностью сверточная подсеть сегментации по маске. Исходные задачи классификации и обнаружения регрессии стали задачами обнаружения классификации, регрессии и сегментации. В этом разделе в основном представлены ключевые технологии Mask RCNN, включая обучающие данные, структуру сети Faster RCNN, магистральную сеть, региональное предложение, ROIAlign, функцию маски на основе сети FCN и функцию потери маски.

  • данные тренировки:

Сеть Faster RCNN в основном используется для прогнозирования положения и категории ограничивающей рамки, поэтому обучающие данные в основном содержат информацию о категории и информацию о положении ограничивающей рамки. Следующее:

(x1,y1,x2,y2)----balloon

Маска RCNN также должна предсказывать категорию, к которой принадлежит каждый пиксель в ограничительной рамке, поэтому ей также нужна соответствующая информация о маске, которую необходимо пометить полигонами, как показано ниже:

(x1,x2,x3,...)(y1,y2,y3,...) ----воздушный шар

Информация о маске каждого пикселя изображения обычно представлена ​​0,1, где 0 представляет цвет фона, а 1 представляет значение маски соответствующего пикселя. Обычно [высота, ширина] представляются двумерной бинарной матрицей, а матрица маски может быть сгенерирована с помощью API open cv. На следующем рисунке показан пример рендеринга соответствующей маски:

  • Более быстрая структура сети RCNN

В 2016 году, основываясь на идеях SPP и Fast RCNN, Shaoqing Ren, Kaiming He, Ross Girshick предложили новую структуру сети Faster RCNN. Сетевая структура объединяет сети региональных предложений (RPN) и Fast RCNN в сквозную сеть, что повышает скорость и точность обнаружения объектов. Faster RCNN — это сеть обнаружения целей, основанная на регионах-кандидатах.Макроархитектура сети показана на следующем рисунке:

Входное изображение сначала предоставляется общему модулю сверточных признаков. С одной стороны, он предоставляет информацию об извлечении признаков сети RPN, а с другой стороны, он продолжает распространяться вперед для создания карт признаков для модели ROI Pooling.

Для карты входных объектов сети RPN привязки и соответствующая информация о функциях генерируются методом скользящего окна, а затем генерируются региональное предложение и региональная оценка, а метод немаксимального подавления используется для региональной оценки для получения предлагаемая область, которая используется для слоя объединения ROI. Для карт объектов и регионов, полученных из двух вышеперечисленных частей, рекомендуется одновременно ввести слой объединения ROI, чтобы извлечь функции соответствующих регионов. Для получения информации об объектах предлагаемой области выведите оценку классификации и ограничительную рамку после регрессии.

  • магистральная сеть

Магистральная сеть Mask RCNN использует сетевую структуру Resnet50/101+FPN. Перед входом в магистральную сеть исходное изображение необходимо изменить до фиксированного размера, например 1024*1024. Как показано ниже, высота или ширина меньше 1024 заполняются 0. Таким образом, входной размер изображения магистральной сети составляет [1024, 1024].

В магистральной сети ResNet50/101 используются карты функций Stage2, Stage3, Stage4 и Stage5 в ResNet, и шаг, соответствующий каждой карте признаков, равен [4, 8, 16, 32], где шаг влияет на размер изображения.Масштабирование, формула feature_size=imageSize/strideSize. Таким образом, размер карты признаков, соответствующей [Stage2, Stage3, Stage4, Stage5], составляет [256*256,128*128,64*64,32*32]. Реснет Структура сети показана на рисунке ниже, где conv2_x, conv3_x, conv4_x и conv5_x соответствуют Stage2, Stage3, Stage4 и Stage5 соответственно.

На основе карт признаков [Stage2, Stage3, Stage4, Stage5] постройте структуру FPN (сети функциональных пирамид, сеть функциональных пирамид). При обнаружении цели карта признаков низкого уровня содержит меньше информации, но карта признаков относительно велика, поэтому положение цели является точным, поэтому можно легко идентифицировать некоторые небольшие объекты; карта признаков высокого уровня богата информацией, но целевое положение относительно грубое, особенно шаг относительно. Если он большой (например, 32), маленькие объекты на изображении будут даже меньше, чем размер шага, что приведет к резкому снижению эффективности обнаружения мелких объектов. . Чтобы повысить точность обнаружения, Mask RCNN использует следующую структуру сети FPN, восходящую линию, нисходящую линию и ссылку соответствующего уровня. в Ядро свертки 1*1 используется для уменьшения количества карт признаков; 2up — это повышающая дискретизация изображения для создания карты признаков того же размера, что и верхний этап; наконец, добавляются соответствующие элементы для создания новой карты признаков.

Восходящая сетевая структура в Mask RCNN — это ResNet50/101, представленная выше, и соответствующие карты признаков — [Stage2, Stage3, Stage4, Stage5], а нисходящая сетевая структура объединяет результаты повышающей дискретизации с результатами верхний этап.Карта объектов выполняет операцию добавления элементов для создания новой карты объектов [P2, P3, P4, P5, P6], как показано ниже:

Р5 соответствует С5

P4 соответствует C4+ UpSampling2D (P5)

P3 соответствует C4+ UpSampling2D (P4)

P2 соответствует C4+ UpSampling2D (P3)

P6 соответствует MaxPooling2D (шаги = 2) (P5)

Таким образом, окончательный сгенерированный набор карт характеристик FPN будет [P2, P3, P4, P5, P6], шаг, соответствующий каждой карте характеристик, будет [4, 8, 16, 32, 64] и соответствующий размер карты характеристик. [256*256, 128*128, 64*64, 32*32, 16*16], соответствующий размер привязки [32, 64, 128, 256, 512], поэтому базовая карта признаков используется для обнаружения меньших цели, карты объектов высокого уровня используются для обнаружения более крупных объектов.

  • Region Proposal

На карте сверточных признаков операция свертки выполняется с окном 3*3. Для каждой центральной точки на карте объектов выберите k якорей с разными масштабами и соотношениями сторон. Сопоставьте исходное изображение в соответствии с масштабом и соотношением сторон, чтобы сгенерировать предложения регионов-кандидатов. Каждая точка на карте объектов генерирует код объекта, соответствующий области окна (исходная статья представляет собой низкоразмерный код объекта, соответствующий 256 измерениям). Затем выполните операцию свертки над низкоразмерным кодированием объектов и выведите 2*k классификационных признаков и 4*k регрессионных признаков, соответственно, соответствующих вероятности того, что каждый якорь каждой точки принадлежит цели, и информации о координатах соответствующего объекта. . Как показано ниже:

Например, размер привязки, соответствующий каждой точке на карте объектов, составляет 128*128 пикселей, 256*256 пикселей, 512*512 пикселей, а соотношение сторон каждой привязки составляет 1:1, 1:2, 2:1, таким образом, карта объектов Каждая точка будет соответствовать 9 привязкам, при условии, что размер карты объектов составляет 60 * 40, поэтому карта объектов будет генерировать около 60 * 40 * 9 привязок, около 20 000. В то же время каждая точка на карте признаков соответствует регрессионным и классификационным признакам поля предложения региона 60*40*9. Для функций классификации 60*40*9 отсортируйте по баллу, а затем выберите N элементов поля регрессии, таких как первые 5000. Затем декодируйте значения блока регрессии (dy, dx, log(dh), log(dw)) в истинные координаты (y1, x1, y2, x2) ограничивающего прямоугольника. Соответствие между двумя типами координат показано в формуле в статье:

Среди них: (x_a, y_a) — координаты центральной точки соответствующего анкера, (w_a, h_a) — высота и ширина анкера. (x, y) — это координаты центральной точки области интереса, предсказанные на исходном изображении, а (w, h) — высота и ширина области интереса, предсказанные на исходном изображении. (t_x, t_y) — значения регрессии координат центральной точки соответствующей карты объектов, а (t_w, t_h) — значения регрессии высоты и ширины соответствующей карты объектов. Затем определенное количество областей ROI, например 2000, выбирают с помощью алгоритма консенсуса не максимального значения NMS. Затем рассчитайте перекрывающееся покрытие области ROI и gt_boxes, выберите количество TRAIN_ROIS_PER_IMAGE, скажем, 200 на обучение. Можно использовать следующие правила:

  • Если IoU ROI и любой целевой области является наибольшей, определяется, что якорь имеет цель.
  • Если IoU ROI и любой целевой области > 0,5, определяется, что есть цель;
  • Если IoU области интереса и любой целевой области меньше 0,5, она определяется как фон.

IoU представляет собой покрытие предсказанного блока и реального блока, и его значение равно пересечению двух блоков, деленному на объединение двух блоков. Другие ROI не участвуют в обучении. Вы также можете установить ROI_POSITIVE_RATIO=0,33, например, 33% ROI — положительные образцы, а остальные — отрицательные образцы.

  • Объединение/выравнивание ROI

Это сопоставление областей-кандидатов верхнего левого и нижнего правого углов исходного изображения с двумя соответствующими точками на карте объектов, которые могут быть сопоставлены на основе коэффициента масштабирования изображения. Сначала нормализуйте координаты ограничивающей рамки (y1, x1, y2, x2) в области интереса исходного изображения, а затем сопоставьте нормализованные координаты с координатами на карте объектов на карте объектов, создав таким образом объект. Область ROI на рисунке показана на следующем рисунке:

Поскольку размер характерной области, отображаемой ROI, отличается, нейронная сеть требует, чтобы размер функции прогнозирования категории и функции регрессии положения поля был фиксированным. В настоящее время необходимо использовать ROI Pooling для сопоставления функций регионов-кандидатов разных размеров с областями объектов фиксированного размера. Конкретную реализацию объединения ROI можно рассматривать как объединение для карты объектов области ROI, но, поскольку это не входные данные фиксированного размера, необходимо рассчитать размер каждой сетки объединения, как показано на следующем рисунке:

Объединение RoI заключается в сопоставлении области ROI исходного изображения с областью ROI карты объектов, значение сопоставления ROISize / шаг будет округлено, а пространственное смещение между функцией после максимального объединения и оригиналом ROI более очевиден. Выравнивание ROI Прямое сопоставление ROI с исходного изображения на карту объектов напрямую использует билинейную интерполяцию без округления, поэтому ошибка будет намного меньше, а точность возврата к исходному изображению после объединения также выше. Основная идея ROI Align в статье показана на следующем рисунке:

Пунктирная рамка на приведенном выше рисунке — это карта объектов 5*5, а прямоугольник со сплошной линией — это область ROI, сопоставленная с картой функций, и в области ROI следует выполнить операцию объединения 2*2. Сначала разделите область ROI на 2 * 2 области, всего 4; затем выберите 4 точки выборки в каждой небольшой области и значения пикселей 4 характерных точек, ближайших к точке выборки, и используйте метод интерполяции для получения каждой Значения пикселей каждой точки выборки; наконец, вычисляется MaxPooling каждой ячейки для создания карты функций 2 * 2 области ROI.

  • Функция маски на основе сети FCN

На основе FCN (полностью сверточные сети) область ROI сопоставляется с векторным слоем m * m * numclass, например 28 * 28 * 80. Структура документа следующая:

Для карты объектов области интереса фиксированного размера, сгенерированной операцией ROIAlign, после четырех операций свертки генерируется карта объектов размером 14*14; затем путем повышающей дискретизации создается карта объектов размером 28*28; наконец, размер сгенерированная операцией свертки.Это карта признаков 28*28 и глубиной 80. Вышеупомянутый процесс представляет собой полностью сверточную сеть, которая гарантирует, что каждый слой ветви маски имеет пространственную компоновку размера m * m, и нет недостатка в векторах пространственных измерений. По сравнению с полностью подключенной маской предсказания слоя FCN требует меньше параметров и может дать лучшие результаты.

  • Функция потери маски

Маска RCNN использует многозадачную функцию потерь.Функция потерь каждой области ROI состоит из трех частей: значение потери классификации ограничительной рамки, значение потери регрессии положения ограничительной рамки, значение потери части маски и значение потери классификации и положение ограничительной рамки Значение потери регрессии аналогично Faster RCNN. Каждая область ROI будет генерировать векторный слой m*m*numclass, и каждое значение в векторном слое представляет собой двоичную маску, которая равна 0 или 1. В соответствии с предсказанной классификацией текущей области ROI, предполагая k, выберите соответствующий k-й m*m слой признаков и примените его к каждому пикселю. сигмовидную функцию, а затем рассчитайте среднюю энтропию бинарных перекрестных потерь, как показано на следующем рисунке:

На приведенном выше рисунке сначала получается функция маски, которая, по прогнозам, будет классифицирована как k, а затем область маски, окруженная ограничивающей рамкой в ​​исходном изображении, сопоставляется с функцией области маски размера m * m, и, наконец, среднее двоичное значение вычисляется энтропия перекрестных потерь площади m*m.

Суммировать

В этой статье сначала представлены основы и различия между обнаружением цели и сегментацией объекта.Сегментация объекта должна определять категорию, к которой он принадлежит, в каждом пикселе. Затем было объяснено, как применять модель Mask RCNN для достижения эффекта Color Splash (мастер цвета), и проанализированы ключевые технологии Mask RCNN, включая обучающие данные, структуру сети Faster RCNN, магистральную сеть (ResNet50/101+FPN), Предложение региона, выравнивание области интереса, функция маски на основе сети FCN и функция потери маски. Пользователи могут применять архитектуру модели Mask RCNN к сценариям обнаружения связанных объектов и сегментации объектов в промышленной сфере следующим образом:

использованная литература

[1] https://github.com/matterport/Mask_RCNN
[2] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
[3] Mask R-CNN
[4] ResNet: глубокое остаточное обучение для распознавания изображений
[5] FPN: Feature Pyramid Networks for Object Detection

об авторе

У Вэй(WeChat: allawnweiwu): доктор философии, сейчас архитектор IBM. В основном занимается платформой глубокого обучения и исследованиями приложений, исследованиями и разработками в области больших данных.