CascadeRCNN
动机
双阶段训练过程中的RPN在给出proposal时候,需要给定一个IOU阈值,来筛选正负样本进行RPN的学习,然后训练的RPN会基于这些样本进行学习,给出图中存在物体的ROI区域的proposal,然后proposal被RCNN再次细调回归和分类,得到最后的结果。然后测试时,得到了一堆检出的bboxes,需要进行NMS处理,这时候又要设置IOU阈值来进行滤除。如果训练和测试使得IOU阈值用的差别太大,就会让最后的检测效果于训练过程不match。但要是一味的拔高IOU阈值,又会让RPN学习过程中的正样本数量过少,也不可取
Cascade RCNN说通过级联逐级fintune的形式可以解决这个问题,让训练和测试时使用的IOU阈值匹配起来。
方法概要
先上图:
可以看到,cascadeRCNN(d)和测试时的多级finetune(b)已经非常匹配了。下面说说cascadeRCNN是怎么做的。把用一个较低的IOU阈值(比如0.5)训练一个RPN,然后RPN会给出proposal的ROI,让这些ROI用来学习RCNN分类器和回归器,将RCNN得到的回归结果作为下一级RCNN的输入ROI,但是筛选时要给一个比较高的阈值,比如0.6,然后在筛选后的ROI中继续学习RCNN的分类器和回归器,得到检出结果后,设置一个更高一点的IOU阈值来筛选第二级RCNN给出的bbox,将筛选后的bbox当作是第三级RCNN训练中用到的ROI,然后再进行分类回归。
细节及注意事项
- cascade使用级联的detector,每个stage采用递增的阈值,实验证明,每个stage均有足够数量的proposal,并不会出现严重的过拟合的现象。
- 虽然在测试的时候RPN得到的proposal依然质量不高,但是经过几个级联的stage之后,proposal的质量逐步提高,不会出现严重的mismatch现象。
评价
- cascadeRCNN不就是把检出结果当成ROI逐级在用吗?扯这么多洋的?就算是级联完成了,RPN的质量也不会好到那里去吧?优化负担都给到新加的RCNN层了,对RPN的改进力度应该是没有,但得到的检出价格应该是稳步在提升。