• 我在<Kaggle> <Flower Classification with TPUs>中的解决方案


     

    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.

      其次是外部数据的实用. 主办方并没有对此做出限制要求. 我使用了多途径的花朵图像数据投入训练, 最终使结果分数有了明显的提升.

  • 相关阅读:
    快乐的深圳之旅
    编码和字体[zz]
    USB转串口芯片几点总结有疑问
    ANSI/UTF8/UCS2(UTF16),以及回车换行[zz]
    详细介绍四线电阻触摸屏的工作原理[zz]
    无字库12864液晶的驱动方法[zz]
    字符集和字符编码(Charset & Encoding)[zz]
    搭建CodeBlocks+wxWidgets可视化编程环境(Windows)
    wxWidgets初始化分析应用定义和初始化
    开发CodeBlocks插件(1)入门篇
  • 原文地址:https://www.cnblogs.com/dynmi/p/12901053.html
Copyright © 2020-2023  润新知