Intro
任务是, 使用tensorflow和主办方提供的TPUs训练自己的模型,对104种花朵图像作分类. 主办方提供了最高分辨率为512x512的图像数据集. 在提交测试集结果后,系统采用F1 score进行评分. 在这场playground比赛中,我采用了 data argumention 和 应用多个SOTA模型作ensemble 的技巧, 后期又使用了外部数据, 取得了比较靠前的成绩.
Backbone与调参
我所使用到的SOTA模型--- EfficientNetB7, DenseNet201 . EfficentNetB7选择noisy-student作为预训练权重,在训练时候作全局训练, DenseNet201选择imagenet作为预训练权重. ENet在40Epoch左右基本收敛到全局最优, Densenet在30EPOCH左右时候基本收敛到全局最优. 因为是在TPU上训练,batch size设置为了每个单元16, 总共8个单元,也就是全局128的batch size. 另外设置了学习率 callback,实践标明使用lrfn对调参有显著正影响.
数据扩充data argumention
比赛过程中我尝试了多种图像DA手段, 如mixup , cutmix , brightness 等等, 最后基于效果只选用了random flip left right 和random saturation .
另外将官方提供的验证集合并到训练集中作为训练数据 也是提分必要手段.
比赛中遇到的一些问题
首先是TPU使用超时. 主办方为每个notebook设置了运行上限三小时, 这导致模型训练过程受限, 我采用了保存模型权重到本地,再加载模型权重这种多notebook训练一个模型的方法, model.save_weights() 和model.load_weight()的延时超低, 实践表明这是一个超实用的trick.
其次是外部数据的实用. 主办方并没有对此做出限制要求. 我使用了多途径的花朵图像数据投入训练, 最终使结果分数有了明显的提升.