RPN的本质是 “ 基于滑窗的无类别obejct检测器 ” :
经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
RPN所在的位置:
Note:
- 只有在train时,cls+reg才能得到强监督信息(来源于ground truth)。即ground truth会告诉cls+reg结构,哪些才是真的前景,从而引导cls+reg结构学得正确区分前后景的能力;在reference阶段,就要靠cls+reg自力更生了。
- 在train阶段,会输出约2000个proposal,但只会抽取其中256个proposal来训练RPN的cls+reg结构;到了reference阶段,则直接输出最高score的300个proposal。此时由于没有了监督信息,所有RPN**并不知道这些proposal是否为前景**,整个过程只是惯性地推送一波无tag的proposal给后面的Fast R-CNN。
- RPN的运用使得region proposal的额外开销就只有一个两层网络。
展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
放大之后是这样:
庖丁解牛
RPN由以下三部分构成:
- 在 RPN头部 ,通过以下结构生成 anchor(其实就是一堆有编号有坐标的bbox):
论文中的这幅插图对应的就是 RPN头部:
(曾经以为这张图就是整个RPN,于是百思不得其解,走了不少弯路。。。)
2.在 RPN中部, 分类分支(cls) 和 边框回归分支(bbox reg) 分别对这堆anchor进行各种计算:
Note: two stage型的检测算法在RPN 之后 还会进行 再一次 的 分类任务 和 边框回归任务,以进一步提升检测精度。
3.在 RPN末端,通过对 两个分支的结果进行汇总,来实现对anchor的 初步筛除(先剔除越界的anchor,再根据cls结果通过NMS算法去重)和 初步偏移(根据bbox reg结果),此时输出的都改头换面叫 Proposal 了:
后话
RPN之后,proposal 成为 RoI (感兴趣区域) ,被输入 RoIPooling 或 RoIAlign 中进行 size上的归一化。当然,这些都是 RPN网络 之后 的操作了,严格来说并 不属于 RPN 的范围 了。
图中 绿框内 为 RPN ,红圈内 为 RoI 以及其对应的 Pooling 操作:
参考内容:
https://blog.csdn.net/JNingWei/article/details/78847696
https://zhuanlan.zhihu.com/p/31426458
本文暂时没有评论,来添加一个吧(●'◡'●)