(中国气象局 天气识别比赛 B榜第八)
- 其实就和一般的分类比赛差不多,先使用各种预训练的sota模型去试,找出比较适合该比赛数据的,我这里最好的是resnext101和efficientNet。我先选择resnext50作为baseline,
- 然后就是加一些常用的trick,比如label smooth, mixup(cutout, cutmix), rand_aug,以及选择合适的optimizer+scheduler等等,在baseline的基础上比较效果,排除掉不好用的。
- 顺利的话,这时候其实效果已经可以差不多可以到前20了。要想更进一步,就针对一下特殊的数据集。在Data aug时,要注意天气图像最好不要上下翻转和旋转的,这样整个图像的特征就变了(敏感)。这个比赛里由于是天气分类,所以用mixup、cutout系列trick时注意和imagenet不同,要变一下,如全局多个小块的cutout。
- 接下来我用到的比较重要的一个技巧来自这篇paper:“Fixing the train-test resolution discrepancy”。简单点说就是先用小的size对整个网络进行训练,再冻结前面的所有层,使用大的size训练最后几层(一般是fc层)以及BN层。我的设置一般是(320\384 + 224)。这样也加快了整个训练速度,而且二次训练时可以释放大量的GPU资源,只训练FC层也保证了可以使用大分辨率的输入。这个技巧在比赛后期几乎还可以提升1.5个百分点左右,很稳定。。。
- 接着又试了teacher mode。简单点就是使用复杂的网络对测试集进行预测,再使用该测试集作为训练集去预训练小的网络,再使用原始训练集接着训练该小网络,最后小网络可以拟合复杂网络中的大多数据,还可以在训练集中学到自身特性,最终提升分类效果。(实际上对复杂网络的提升不大)
- 最后就是集成了,我使用的大多是分权重投票。最后试了stack,但是训练太复杂而且太慢了,就只融合了2个模型。
最终得分:0.89347994