点击上方“CVer”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者:许出山
https://zhuanlan.zhihu.com/p/73823115
本文已由作者授权,未经允许,不得二次转载
最近参加了ICIP上的一个比赛拿了个第一名,然后把相关的心得写了个论文,投了一下稿,然后reject了,哈哈哈哈。那就在这里把比赛心得分享一下,确实没有太多的新意。
比赛链接:https://aidea-web.tw/icip
这个比赛全名叫做Mosquito Breeding Site Hunting for Dengue Fever Control。首先这个比赛就是一个检测的比赛,然后它最后只要求在小物体上做评估,小物体的标准遵守COCO,是小于1024pixels的物体。代码这边我用了mmdetection。它所谓的积水容器就是瓶瓶罐罐,轮胎,塑料袋什么的。
一开始是想只训练小物体的,发现不行,然后就试着拿所以数据跑了一个带fpn的基于resnet101的faster rcnn,后来发现效果不如resnet50好。于是就是50做基础模型了,这部分的原因我没有做细究。
然后就是一些小技巧(tricks):
冻结batch normalization
把选box的threshold调小,本来默认设定是大于0.05的,我改成了0.01,其实我试过更小的,都会有提升,但是提交的结果数量会大大上升,而且我看不到val的gt,所以我不知道这样调整对precision和recall的影响。
多尺度测试。这部分我发现如果我用多尺度训练,再加多尺度测试的效果不如单独多尺度测试。虽然单独多尺度训练会有mAP的提升。
反转图片,我发现把原图和反转的图片的结果合并在一起,然后NMS,很多时候在val上会掉点。不过感觉这样结果更稳健,所以还是用了。
用了上面除掉反转以外的技巧后,mAP就到了0.3407。
这个0.3407就比第二名高了,不过最后的结果还更高一点,一方面我集合(ensemble)了另外的model,另一方面我用了类似SNIP的技巧。
我后来发现虽然说单独训练小物体效果不好,但是这样做会有提升。首先你用所有数据训练,然后把RCNN的部分冻结,把RPN的anchor size改小,然后在小物体上微调(fine-tuning)RPN,这样会有提升,不过最后没有用这个。
我参考了SNIP的做法,用了多尺度训练,然后训练的时候,如果这个box大于一定大小我们才用来做训练。这个大小得按照数据集的分布,原图大小,多尺度训练的选择还有评测的尺度的选择来综合决定。这边我叫他box selection。这边就不细写了,一句话表达就是,你要让你在训练时被用来训练的box大小,在最后测试时在原图上是能落入1024pixels的。比如说你原图100x100,但是你训练放大到了1000x1000,那么这时小于10240pixels的box都是小box。
这边还是用了flip testing。可以看到faster rcnn用了这个方法后,就算flip,也有0.3503,比刚才最好的0.3407还好。然后我就直接在Cascaded R-CNN和Libra R-CNN上试了,没有做对比试验。其实和FPN没有太大区别。最后Ensemble了一下,这边ensemble就是合并结果然后做NMS,结果到了0.3779。这个是publicboard的结果,相当于是val。最后在private board上的结果,我是0.374227,第二名是0.321927。
我一开始以为我就是提交一个比赛的心得这样,就写了个文提交了,说是published under ICIPC(challenge),我以为就像workshop一样蛮容易的,我也就是抱着分享方法的心态,没想到审稿时感觉当做是ICIP。比赛结束之后我也没办法再添加实验,本来也没办法看具体的precision和recall。加上我写论文水平一般,就被reject了。所以直接在这边分享一下了。
重磅!CVer-目标检测交流群成立啦
扫码添加CVer助手,可申请加入CVer-目标检测学术交流群。一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡)
▲长按加群
▲长按关注我们
麻烦给我一个在看!