美文网首页
图像分类心得(FlyAI平台)

图像分类心得(FlyAI平台)

作者: 可恶小林子 | 来源:发表于2020-03-26 17:39 被阅读0次

以下心得来自于参加FlyAI的心得,刚好在这里也分享以下,我是小林子。本篇细数我在分类中用到的Trick,以及如何快速找到它们。

纯分享,有不足,还望指正

首先声明本人自去年九月接触FlyAI,未拿过第一,只想单纯分享经验,一个梦想致力于开源路上的小男孩。但是平台可以帮人快速成长是一点没错的,当你看到诸多优秀的人,你会有一种为什么我不行的错觉,这篇文章就是希望帮你找到你在图像分类中可能忽视的细节。

当第一次做图像分类的步骤应该是啥?

  1. 观察数据:数据长什么样,标签几类啊,图像大小啊。
  2. 数据增强:最开始最好什么也没有,或者肉眼感觉可以做的数据增强(仅限部分赛题,肉眼和CNN理解存在差距)
  3. 模型选择:resnet,densenet,efficientnet个人最常用的三种,选择一个浅层的开始。
  4. 观察性能:有了数据,模型,然后就提交看一下可以获得多少分啊!

看了分数之后,发现怎么和第一差好多我该怎么办?

  1. 我模型不对,我换个模型试试?
  2. 我数据增强不好,我改一改?
    注意,我想说的是,以上这两条再单模的时候十分关键,模型和数据增强很大一部分决定了你的分数上限,所以在调参的时候可以跑一编常用的模型res34-50-101;wrn-50-101等等等,在换模型的时候注意不要改动数据增强了。然后你在修改数据增强,找到一个最好的数据增强。

这个时候就有小伙伴问了,什么是最好的数据增强?

  1. 如果你fai足够,你就尝试自己认为可能的数据增强,找到一个合适的。
  2. 自己写好数据增强,自己把增强后的数据画出来看看,如果差距同类中的太多,肯定不行啊!
  3. 当你遇到瓶颈后,你可以分析bad case,看一下怎样的数据增强可以让其预测正确?(我在很多分类经验中都看到过这一点,虽然我从来没用过,因为我是个懒人)
补充一点比较关键的optimizer和 lr_scheduler
  • 如果你不知道如何使用优化器:Adam,学习率3e-4。
  • 如果你不明白学习率递减策略: ReduceLROnPlateau(patience通常3、4)和余弦学习率选一个

数据增强,模型都说完了,怎么上分才是关键啊,一下我就列举我在FlyAI,用到过的所有Trick(Pytorch版,Keras可能没啥人用吧,搜索☞Github)。

  1. 数据重新划分:官方给的是6:2,第一步我默认直接0.1或者0.2,这点我觉得也是大多数人默认的技术了。
  2. 标签平滑:适用于有噪声的标签,我在标签种类多的比赛中常用,少的几乎不用,来自于经验。个人取舍!
  3. 样本平衡:几乎不用,大部分评估指标acc(因此你可以揣测测试样本也是如此的,过大的权重不利于样本多的类更准确)。如果你非要用,搜索ImbalancedDatasetSampler即可使用。
  4. warmup:最开始我用小的学习率训练,防止一开始底层的权重被拉偏了。当数据量较少的时候我会使用。当数据量很大的时候,我通常为了剩fai这里就不做过多的设置。搜索GradualWarmupScheduler即可使用
  5. cutout以及随机擦除:这里有时候是涨分点,例如你画我猜的时候就很好用。这个trick在pytorch的transforms中自带了,可想而知,这个还是常用的。
  6. Mixup:我看到已经有大佬分享这个了,我只能说,用这个我从来没有上过分,不知道是不是自己太菜了!!所以,这个大家自己试试。在尝试的时候注意,如果你已经用到了cutout的话,再用是不是有点就不好了,个人理解。搜索pytorch mixup
  7. 分层学习率:backbone和fc使用不同的学习率,这点我感觉和warmup有点相似之处,所以大家各取所好就好。具体实现可以自己写网络类,或者根据网络层的名字在optimizer里指定。
  8. Dropout和BN:抑制过拟合的好手段,将最后的fc前面加一层DP或者BN,或者自己重新写一下FC。这里分享以下,我以前Keras,后来Pytorch,所以在修改fc的时候有点不适应。后来发现只需要 nn.Sequential( nn.Dropout(0.2),nn.Linear(nfs, cfg.num_class) )即可。
  9. TTA:测试增强,这也是几乎必用的手段,没有副作用(在不要求复杂度的情况下)。模型预测的时候,使用数据增强的多张照片,取结果的平均值。这里的数据增强,我通常直接使用训练时候的数据增强。如果你分析了bad case在这里修改一下增强效果,涨分利器。
  10. 模型融合:Flyai2.0更加开放,使得模型融合变得非常简单,所以不妨试一下,你会发现新大陆,就像我在X肺炎检测里说的,在过拟合的情况下,通常能带来稳定的涨点,也是各路比赛要求的。
  11. 交叉验证:这里就和模型融合有点类似,区别在于数据上而已,使用不同的数据训练多个模型。有时候也是涨点利器。
    今天就分享这么多,以后可能会更新,怎么合理使用这些技巧呢?每次都试一遍不是 太扯淡了吗?

加油

这里要说的就是,当你看了很多心得,你发现为啥感觉大家说来说去就这么多,我好像都明白,但是为什么我的分数不如别人呢?哈哈,我也有同样的问题,这其中有运气的成分,但不可否认别人的经验和技术的差距,随便一个参数(例如学习率)别人设置的可能就比你设置的结果好一些。不乏大佬可以重新修改底层网络结构,所以在抱怨的时候,为何不去尝试一点新的东西,不分析一下bad case呢?例如最新的cbam,cutmix,优秀的预训练模型啊,kaggle就有你画我猜原题目啊,对吧?是不是说太多废话了

如果觉得我说的有用,就给我点个赞吧!

PS:

本人懒人,以上trick我在接触平台的时候就已经开始收集各种实现方式了,很多大佬也是如此。所以你看,同样一个题目,别人可能直接修改少量的参数就比较有好的效果了,所以把好用的就封装起来,下次直接用,祝大家可以取得高分。

相关文章

  • 图像分类心得(FlyAI平台)

    以下心得来自于参加FlyAI的心得,刚好在这里也分享以下,我是小林子。本篇细数我在分类中用到的Trick,以及如何...

  • 图像分类

    图像分类入门 -图像分类的概念 背景与意义 所谓图像分类问题,就是已有固定的分类标签集合,然后对于输入的图像,从分...

  • python计算机视觉深度学习3图像分类基础

    什么是图像分类? 图像分类的核心任务是从预定义的一类图像中为图像分配标签。分析输入图像并返回标签对图像进行分类。标...

  • python计算机视觉深度学习工具3图像分类基础

    什么是图像分类? 图像分类的核心任务是从预定义的一类图像中为图像分配标签。分析输入图像并返回标签对图像进行分类。标...

  • 标注组件-react版

    组件支持标注类型:1、图像 — 浏览、标注集合展示2、图像分类 — 支持对图像进行分类标注3、图像检测 — 支持对...

  • 2018-10-17

    数据驱动方法 图像分类 图像分类时,分类系统接受一些输入图像,比如猫咪,并且系统已经清楚了一些确定分类或者标签的集...

  • [CS231n]Lecture 2 Image Classifi

    本节内容:图像分类概述、KNN、线性分类器 图像分类是计算机视觉的核心问题。 问题 :语义分割的鸿沟。图像仅仅是一...

  • 机器学习5(轻量TensorFlow)教程

    2. 图像分类器 底层技术依靠TensorFlow实现,此图像分类器利用了Mobilenet分类模型 2.1. 用...

  • 图像分类

    Above All 机器学习的大作业是写图像分类。这里我整理一些有用的参考资料,以便后来提交报告的时候逻辑比较清晰...

  • 图像分类

    Lecture 2: Image Classification pipeline Image Classifica...

网友评论

      本文标题:图像分类心得(FlyAI平台)

      本文链接:https://www.haomeiwen.com/subject/tmoaactx.html