前言:
半年前有读过对应的Faster-RCNN的论文,包括看过很多讲解,随着领域知识的不断加深,对这一经典论文的理解也更加深度,重新读关注更多细节问题,也获得了不少新的知识,原始研读文更关注论文本身的创新点,原研读文链接【Faster-RCNN】,可作为辅助参考。本博文则更关注完整流程内容细节方面的知识,希望能给大家启发。
最近在研读mask-rcnn,故而将faster-rcnn重新进行了细节上的阅读,并书写博文
mask-rcnn系列:
阅读的代码为:mask-rcnn benchmark
【github地址】
0.代码总览:【地址】
1.骨架网络【backbone.py及代码入口】
2.RPN层【粗分割的rpn.py】
3.ROI_HEAD【实现各个分支】
4.其他辅助代码杂会【其他】
完整流程概览
这是一个faster-rcnn的简单流程图,在看mask-rcnn时重新对该论文进行一个认识。全内容分为三个部分,(红框标注)特征提取部分,RPN(区域提议网路)部分,以及最后的分类和回归部分。
特征提取部分
特征提取通过基础的网络模型,最常用的是Resnet50,Resnet101。
输入:原始图片
输出:通过滑动卷积的形式输出对应的feature map(特征图)
RPN网络模型:
作用:有两个分支,分别为是否为前景物体的判断,和候选框的粗回归。
通过一个3*3卷积在特征图上进行滑动,对应每个cell(中心点),生成对应的k个anchor box(候选框),以进行后面的候选框回归以及点操作。
该部分作为全文创新点,最难搞懂,下面通过一定解释进行说明
计算量为哪些框含有物体(2k cls layer),含有物体的框偏移量有多少(4k reg layer)
这里回归出来的不是原始的坐标点(第一次为achor给定的候选框,如右所示),而是原始坐标点的偏移量(4k)
候选框生成
将生成的delta框的偏移量与anchor进行组合,生成原始的区域提议框,并进行如下操作:
- 去除背景框
- 去除分数低的框
- NMS去除非极大值框
然后生成对应ROI候选框,在特征图上进行尺度的统一化(ROIpooling操作)并进入到下一步RCNN的操作
分类和回归分支:
该部分来自RCNN,流程代码基本一致。
图源于mask-rcnn的操作,roialign应改为roipoling操作,其余基本一致
流程介绍如下:
- 通过rpn生成的roi_box已经为优质的候选区域框,于对应的feature map进行roipooling操作,
- 将尺度归一化的roi层进行特征提取,全连接分类输出三个变量,将概率和回归框的第二次偏移值进行处理
- 首先确定对应框内最高概率的类别,并将它作为分类结构,进而重新对回归框进行第三次修补,
- 后处理阶段:通过NMS,排序,删除候选框
流程细节
这是我看过最完整并且细节展示最详细的图,
根据给出的步骤细节,说明如下:
- 特征提取网络
- 找出对应的候选框
- 通过后处理,1.删除全背景的候选框 2.有前景的候选框进行nms操作 3.取出得分较高的候选框,放回到特征图中
- 通过映射的方式,将后处理后优质的ROI(候选区域)返回到特征图
- 将各个优质候选框进行尺度统一的ROIpooling操作,再进行分类和回归