ImageNet2017 周记之第二周

来源:互联网 发布:mac 解码器 编辑:程序博客网 时间:2024/04/28 22:36

因为跑一次ImageNet需要2天多的时间,所以一开始是在VOC上做修改网络结构的实验。在网络结构上主要尝试了以下实验:

第一种,就是直接使用RFCN+ Resnet101 结构跑VOC,什么改动都没有,结果作为baseline。

第二种,在RFCN的ps-roipooling层,加入pad_ratio,之所以要加pad_ratio,相当于起到增大了proposal对应原图的尺寸,比如pad_ratio为0.5,映射为原图相当于之前proposal对应原图尺寸的2倍,这样的好处使感知野区域变大,学到的信息更多。师兄去年也是在FasterRCNN roi pooling上加入pad提升2个点。这样就有个问题,不加pad的featuremap 于加完pad的featuremap怎么处理作为cls和bboxloss 的输入呢?

这也就陷入了第一个坑,使用的是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的多样性多了。

原创粉丝点击