因为使用RFCN直接训练ImageNet的baselinemAP只有24%左右,太低,打乱自己的计划,之前那种网络结构都没有机会去在ImageNet上使用,先找这个问题。花了一周时间,从重新写imagenet.py,处理ImageNet的数据,到训练完,得到结果,花了四天,还是这么高。说明之前训练RFCN的ImageNet数据处理是没有问题的,但是为何如此低,难道是因为ImageNet的目标检测比VOC难吗?但是rfcn在coco的数据集上表现依然很棒,说明是没问题的。于是,自己对着coco的训练方法和prototxt,和作者在github上每次commit的代码比较,发现了几点不同:
首先coco的anchors使用了15个,voc只用了9个;coco在rpn层加入了scale操作,voc没有。
比较fasterrcnn 和rfcn,因为cls比较低,肯定是rfcn分类训得不好,而rfcn提出了使用class-agnostic的方式,也就是对于一个proposal,只返回是物体还是背景,并不是指出物体属于哪一类,这是和class-aware不同的,我猜测应该是这个原因,导致分类很低,出现许多0.0几的分类。
这一周,在查问题的同时,跑上了SSD300,使用作者的模型finetune,从论文中的43.2提升到了45.3.这个mAP是使用train+val1训练,使用val2测试,得到的结果,所以看起来比较高。因为SSD使用的vgg16作为分类网络,所以如果把vgg16换作resnet101的,理论上会更好,但是没做这个实验,评论区里有人评论说换完Resnet101效果不好,作者也没有试过。