在region proposal阶段采用不同的iou。
第一幅图,不同颜色的线是用不同的region proposal的iou阈值,横坐标是region proposal生成的框与gt的原始iou,纵坐标是未经过训练的框经过bounding box regression后生成的新框与gt的iou,发现0.5的iou阈值对0.5的的提升更好,0.6的对0.6到0.75的好,0.7对0.75以上的效果好。
第二幅图,不同颜色的线是用不同的region proposal的iou阈值,横坐标是region proposal生成的框与gt的原始iou,纵坐标是不同iou框对应的ap值。可以看到0.6的性能在提升,但变成0.7后性能反而下降了。
一般来说,0.7的iou生成的正样本的框的质量更高,应该性能更好,但ap值却在下降。原因在于,iou在0.5时,正样本大多集中在0.5到0.6之间,如果你阈值选在0.7,正样本数量大大减少,造成了过拟合。
红色的数字应该是代表的这个iou之上的正样本占总的region proposal的比例
总结起来,就是:
- cascaded regression不断改变了proposal的分布,并且通过调整阈值的方式重采样
- cascaded在train和inference时都会使用,并没有偏差问题
- cascaded重采样后的每个检测器,都对重采样后的样本是最优的,没有mismatch问题
https://zhuanlan.zhihu.com/p/35882192
https://blog.csdn.net/qq_21949357/article/details/80046867
代码实现的问题:
代码的地址:https://github.com/zhaoweicai/cascade-rcnn/tree/master/examples/voc
1.proposals这个layer层有个iou thr = 0.7,这个不是多级级联重采样选择正负样本的的iou,这个是nms的iou,即过滤的iou
2.在test的时候,在第二阶段多出现了一个分支,并且这两个分支的名字和train的对应不上,第三阶段也出现相似的情况,3个分支,如第一幅图。拿第二阶段来举例,第一个分支对应的是第一阶段的参数,第二个分支对应的是第二阶段的参数,看着layer名字不一样,但具体看里面的参数赋值就发现第一个分支就是用的第一阶段的参数,如第二幅图
3.test的预测,在每一阶段都进行了label和bouding box的预测(label是多个分支进行eltwise相加得到,bouding box只在当前stage的分支计算得到),最终输出的时候是把这3个stage的值进行加权求和,最简单的当然是每个结果乘以1/3然后相加。这也同时引发一个问题,是否需要改变权值来获得最优的结果?