Mask R-CNN框架 目的:检测图像中的对象object(bounding box),同时为每个实例生成高质量的分割mask(框中哪个像素属于物体,哪个像素属于背景)
- 第一阶段(RPN):通过RPN网络提取候选框(哪些区域可能是物体)
- 第二阶段:对于选取出来的候选框,通过RoIAlign或者RoIPooling操作得到固定大小的feature map(包括当前物体的一些信息),通过feature map来预测类别或者bounding box以及mask(mask只对正样本做)
Mask R-CNN主要组件 Region Proposal Network(区域建议网络) 目的:图片通过backbone得到feature map,在feature map上预测哪些地方有可能出现proposal
主要步骤:采用滑窗机制,在feature map每个点去预测多个anchor,通常根据不同长宽比设置9个anchor,然后计算anchor相对每个点代表的物体(或者包围的物体)的一个偏移量(x,y,w,h),为4k coordinates。同时预测每个proposal是正样本和负样本的分数为多少,所以为2k scores。
具体实现细节参考NIPS2015发表的文章Faster R-CNN:https://proceedings.neurips.cc/paper/2015/file/14bfa6bb14875e45bba028a21ed38046-Paper.pdf
Feature Pyramid Network(特征金字塔网络) 用resnet101层网络提取特征。得到不同尺度的特征 从低分辨率往高分辨做渐进式的融合,使得每一层的feature
- 一方面融合了更高的视觉信息
- 一方面融合了多尺度的特征
小物体在高分辨率做,大物体在低分辨率上做 因为小物体可能本身为32×32,变成低分辨率可能变成1个pixel,就无法检测了。 最后做预测,但是Mask R-CNN其实可以不在FPN上面做,可以直接在backbone的最后面预测就行了
具体实现细节参考CVPR2017发表的文章: https://openaccess.thecvf.com/content_cvpr_2017/papers/Lin_Feature_Pyramid_Networks_CVPR_2017_paper.pdf
Head Architecture(头部结构) 目的:mask分支怎么加到检测的分支上 不使用FPN的时候,怎么做mask生成 把RoIAlign出来的feature map(7×7×1024),通过一直输入,到res5得到feature map(7×7×2048)
- 如果是做分类和回归:通过average pooling
- 如果是做mask生成:通过反卷积(上采样)得到更高分辨率的feature map,然后预测80类的mask(coco数据)
mask分支对应的ground true是怎么生成的?
对于proposal,跟ground truth的bounding boxes找一个IoU最大的bounding boxes 在分割的时候,把proposal对应的ground truth的mask做一个变换,当作proposal在mask分支的ground truth
首先RoIAlign(本质就是双线性插值)通过两次卷积conv,输出为(7×7或者14×14),上采样成28×28,两种方法:
- resize到原始ground true mask的大小
- 将原始的mask resize成28×28,mask可能超过框,我们通过框把mask做截取,然后再resize成28×28
|