在ROIPooling层加入pad_ratio实现context

在RFCN的ps-roipooling层,加入pad_ratio,                                                                                                                                     相当于起到增大了proposal对应原图的尺寸,比如pad_ratio为0.5,映射为原图相当于之前proposal对应原图尺寸的2倍,这样的好处使感知野区域变大,学到的信息更多。在FasterRCNN roi pooling上加入pad提升2个点。

加了pad的featuremap与不加pad的featuremap如何结合?

方法一:

【在FRCN中加入pad_ratio失败】使用的是concat连接,然后加了一个1*1的卷积层降维,然后传入cls和bbox的loss层。这种方式训完之后,比不加pad_ratio的方式要低好多点。解释是pad_ratio和no_pad 共同学习会影响rfcn_cls和rfcn_bbox。为了不让他们互相影响,复制了一个rfcn_cls和rfcn_bbox, 两个并行的分支,然后得到pooling之后的featuremap 再concat一起,再使用1*1的卷积层降维,接入loss层,然而训完之后测试,这种方式也比baseline低许多点。

【为什么使用fasterrcnn 加这种方式可以提升,mscnn加这种方式也能提升,但是rfcn加这种方式不升反降呢,而且降了不是一两个点,是20多个点?】

因为fasterrcnn 和mscnn这两个网络,在proposal加入pad并concat之后会继续经过卷积层训练,mscnn后面还加了两个fc层,但是rfcn后面什么就没有。也就是说rfcn是在前面把该学的东西学好了,经过pooling之后直接可以预测接loss不用再学习了。所以,这时候,你给它加了一个pad_ratio,不要紧,但是concat之后再降维,就有问题了,之前对应的关系,一通过卷积层降维就乱了,就没有之前代表的意义了,所以不应该concat之后接1*1 卷积降维。

应该使用ele_sum,对应通道的对应像素值相加,这样是具有意义的。果然,这种方式训练,比之前的baseline就差了一个点左右,如果再增加训练次数,理论上是能够超过baseline的。

【proposal做数据增强】

在rpn层得到的proposal之后,对proposal随机扩大或者缩小0.1倍,这样之后,和baseline差不多,如果好好训练,增加训练轮数,降低loss_weight,是能够提升的,毕竟proposal的多

你可能感兴趣的:(代码解读)