Mask RCNN 模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mask RCNN 模型相关的知识,希望对你有一定的参考价值。

参考技术A Faster RCNN使用CNN提取图像特征,然后使用region proposal network(RPN)去提取出ROI [ROI(region of interest),感兴趣区域。],然后使用ROI pooling将这些ROI全部变成固定尺寸,再喂给全连接层进行Bounding box回归和分类预测。

得到用来预测的feature map:图片在输入网络后,依次经过一系列卷积+ReLU得到的51×39×256维feature map,准备后续用来选取proposal。

生成Anchors:anchor是固定尺寸的bbox。具体作法是:把feature map每个点映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同的尺寸和比例的anchor。
虽然anchors是基于卷积特征图定义的,但最终的 anchors是相对于原始图片的。

根据输入image,将ROI映射到feature map对应位置;
将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);(例如2x2)
对每个sections进行max pooling操作;

FPN结构中包括自下而上,自上而下和横向连接三个部分,如下图所示。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息,在特征学习中算是一把利器了。

Mask R-CNN 扩展自 Faster R-CNN,由同一作者在去年提出。Faster R-CNN 是一个流行的目标检测框架,Mask R-CNN 将其扩展为实例分割框架。

这是一个标准的卷积神经网络(通常来说是 ResNet50 和 ResNet101),作为特征提取器。底层检测的是低级特征(边缘和角等),较高层检测的是更高级的特征(汽车、人、天空等)。

region proposal的xywh通常是小数,但是为了方便操作会把它整数化。
将整数化后的边界区域平均分割成 k x k 个单元,对每一个单元的边界进行整数化。经过上述两次整数化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题”.

为了解决这个问题,ROI Align方法取消整数化操作,保留了小数,使用以上介绍的双线性插值的方法获得坐标为浮点数的像素点上的图像数值。但在实际操作中,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后进行池化,而是重新进行设计。

下面通过一个例子来讲解ROI Align操作。如下图所示,虚线部分表示feature map,实线表示ROI,这里将ROI切分成2x2的单元格。如果采样点数是4,那我们首先将每个单元格子均分成四个小方格(如红色线所示),每个小方格中心就是采样点。这些采样点的坐标通常是浮点数,所以需要对采样点像素进行双线性插值(如四个箭头所示),就可以得到该像素点的值了。然后对每个单元格内的四个采样点进行maxpooling,就可以得到最终的ROIAlign的结果。

Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow

参考:
https://zhuanlan.zhihu.com/p/37998710

以上是关于Mask RCNN 模型的主要内容,如果未能解决你的问题,请参考以下文章

使用detectron中mask_rcnn模型进行预测

Tensorflow v1 对象检测 api mask_rcnn_inception_v2_coco 模型批量推理

对于 Mask RCNN 模型,较小的图像对 OpenCV 中的推理时间几乎没有影响

如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?

『计算机视觉』Mask-RCNN_训练网络其三:model准备

如何使用 mask-RCNN 在 python 中计算(x,y)(质心)和掩码的宽度和高度?