Cascade R-CNN的本质是 “ Cascade roi-wise subnet ” 。
传统的Faster R-CNN结构如下:
在train阶段,其最终的输出结果是通过如下一个简单的IoU阈值判断来决定哪些proposal作为output:
由于早前VOC只以 mAP50mAP50mAP_{50} 作为唯一的性能衡量标准,为了overfit该数据集,算法的IoU阈值在train阶段和inference阶段常被简单地设定为 0.5,而这会导致train阶段对bbox的质量要求过低。
inference阶段,如果IoU阈值设为0.5,最终输出可能如下的左图所示,带有不少错分为object的bbox;如果我们把IoU阈值调高到0.7,如下右图所示,就可以把一堆IoU介于0.5~0.7之间的bbox给过滤掉:
那我们直接在train阶段就把IoU阈值改为0.7,test阶段依然为0.5,不就好了吗?
不行。
原因:
[红线]
,在IoU=0.5的输入上定位效果甚至不如IoU=0.5训练出来的detector[蓝线]
:
那我们train阶段为0.5,只在test阶段把IoU阈值改为0.7呢?
不行。
原因:
那就同时把train阶段和test阶段都改为0.7呢?
还是不行。
原因:
作者发现,假设待输入regressor的bbox为Input,回归后的输出bbox为Output,则Output的IoU质量普遍优于Input:
等于证明了:
经过location regression的bbox明显更high-quality。
故而,多次叠加roi-wise subnet,就等于多regress几次bbox,自然可以获得更high-quality的output bbox,从而刷高COCO测评性能。
那么直接简单地在roi-wise subnet后面再叠加roi-wise subnet可以么?
不行。
原因:
作者的Idea,是设计cascade的bbox cls/reg机制:
总共有三个roi-wise subnet相cascade (级联) ,每个roi-wise subnet采用不同的IoU阈值。依次为0.5、0.6、0.7。
对应的网络结构如下:
该设计有如下四大优势:
经过试验,发现cascade roi-wise subnet可以逐步过滤非object的bbox,并提升object的bbox质量:
经过三个级联的roi-wise subnet,可以明显看出最后一个roi-wise subnet输入的待处理bbox(如下最右边的子图)质量明显高了很多:
经过实验,发现取三个roi-wise subnet级联的效果最好:
Note:
[1] Cascade R-CNN: Delving into High Quality Object Detection