来源:机器学习实验室

本文约2800字,建议阅读9分钟

本文作者与你分享图像分类项目经验总结。

任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果。

机器学习和图像分类也不例外,工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践。

在这篇文章中,我将给你很多资源来学习,聚焦于从13个Kaggle比赛中挑选出的最好的Kaggle kernel。这些比赛是:

  • Intel Image Classification:https://www.kaggle.com/puneet6060/intel-image-classification

  • Recursion Cellular Image Classification:https://www.kaggle.com/c/recursion-cellular-image-classification

  • SIIM-ISIC Melanoma Classification:https://www.kaggle.com/c/siim-isic-melanoma-classification

  • APTOS 2019 Blindness Detection:https://www.kaggle.com/c/aptos2019-blindness-detection/notebooks

  • Diabetic Retinopathy Detection:https://www.kaggle.com/c/diabetic-retinopathy-detection

  • ML Project — Image Classification:https://www.kaggle.com/c/image-classification-fashion-mnist/notebooks

  • Cdiscount’s Image Classification Challenge:https://www.kaggle.com/c/cdiscount-image-classification-challenge/notebooks

  • Plant seedlings classifications:https://www.kaggle.com/c/plant-seedlings-classification/notebooks

  • Aesthetic Visual Analysis:https://www.kaggle.com/c/aesthetic-visual-analysis/notebooks

我们会讨论调试深度学习解决方案的三个主要方面:

  • 数据

  • 模型

  • 损失函数

还有很多例子项目(和参考资料)供你参考。

数据

  • 图像预处理 + EDA

每一个机器学习/深度学习解决方案都从原始数据开始。在数据处理管道中有两个基本步骤。

第一步是探索性数据分析 (EDA)。它帮助我们分析整个数据集并总结它的主要特征,比如类分布、大小分布等等。通常使用可视化方法来显示这种分析的结果。

第二步是图像预处理,目的是对原始图像提高图像数据(也称为图像特征)的质量,通过抑制不必要的扭曲,缩放,增强重要的特征,使数据更适合模型并提高性能。

你可以钻研这些Kaggle笔记本,看看一些图像预处理技术:

  • Visualisation:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline#Building-a-baseline-model-

  • Dealing with Class imbalance:https://www.kaggle.com/rohandeysarkar/ultimate-image-classification-guide-2020

  • Fill missing values (labels, features and, etc.):https://www.kaggle.com/datafan07/analysis-of-melanoma-metadata-and-effnet-ensemble

  • Normalisation :https://www.kaggle.com/vincee/intel-image-classification-cnn-keras

  • Pre-processing:https://www.kaggle.com/ratthachat/aptos-eye-preprocessing-in-diabetic-retinopathy#3.A-Important-Update-on-Color-Version-of-Cropping-&-Ben's-Preprocessing

  • 数据增强

数据增强可以通过从现有的训练样本中生成更多的训练数据来扩展我们的数据集。通过大量的随机转换生成新的样本,这些转换不仅可以生成可信的图像,而且还反映了真实的场景 —— 稍后将对此进行详细介绍。

这种技术得到了广泛的应用,不仅仅是在训练模型的数据样本太少的情况下。在这种情况下,模型开始记忆训练集,但无法泛化(在从未见过的数据上表现很差)。

通常,当一个模型在训练数据上表现很好,但在验证数据上表现很差时,我们称之为过拟合。为了解决这个问题,我们通常会尝试获取新数据,如果没有可用的新数据,则可以使用数据增强。

注:一般的经验法则是始终使用数据增强技术,因为它有助于使我们的模型见识更多的变化并更好地泛化。即使我们有一个很大的数据集,也要使用数据增强,但这是以较慢的训练速度为代价的,因为增强是在线完成的(即在训练期间)。

此外,对于每个任务或数据集,我们必须使用反映可能的现实场景的增强技术(例如,如果我们有一个猫/狗探测器,我们可以使用水平翻转、剪裁、亮度和对比度,因为这些增强匹配不同的照片拍摄方式。

这里是一些Kaggle比赛notebooks,你可以查看流行的数据增强技术:

  • Horizontal Flip:https://www.kaggle.com/datafan07/analysis-of-melanoma-metadata-and-effnet-ensemble

  • Random Rotate and Random Dihedral:https://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb

  • Hue, Saturation, Contrast, Brightness, Crop:https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords

  • Colour jitter:https://www.kaggle.com/nroman/melanoma-pytorch-starter-efficientnet

模型

  • 开发一个基线

在这里,我们使用一个非常简单的架构创建一个基本的模型,没有任何正则化或dropout层,看看我们是否能超过50%的准确率基线。尽管我们不可能总能达到这个目标,但如果我们在尝试了多种合理的架构后不能超过基线,那么输入数据可能不包含模型进行预测所需的信息。

用Jeremy Howard的名言:

“你应该能够在15分钟内使用50%或更少的数据集快速测试你是否正在朝着一个有希望的方向前进,如果没有,你必须重新考虑一切。”

  • 开发一个足够大可以过拟合的模型

一旦我们的基线模型有足够的能力超过基线分数,我们就可以增加基线模型的能力,直到它在数据集上过拟合为止,然后我们就开始应用正则化。我们可以通过以下方式增加模块容量:

  • 添加更多层

  • 使用更好的结构

  • 更完善的训练流程

结构

根据文献,以下架构的改进提高了模型的容量,但几乎没有改变计算复杂度。

  • Residual Networks

  • Wide Residual Networks

  • Inception

  • EfficientNet

  • Swish activation

  • Residual Attention Network

大多数时候,模型容量和精度是正相关的 —— 随着容量的增加,精度也会增加,反之亦然。

训练过程

下面是一些你可以用来调整你的模型的训练过程,通过实例项目来看看它们是如何工作的:

  • Mixed-Precision Training

  • Large Batch-Size Training

  • Cross-Validation Set

  • Weight Initialization

  • Self-Supervised Training (Knowledge Distillation)

  • Learning Rate Scheduler

  • Learning Rate Warmup

  • Early Stopping

  • Differential Learning Rates

  • Ensemble

  • Transfer Learning

  • Fine-Tuning

超参数调试

与参数不同,hyperparameters是由你在配置模型时指定的(即学习率、epoch的数量、hidden units的数量、batch size大小等)。

你可以通过使用hyperparameter调优库,比如Scikit learn Grid Search,Keras Tuner来自动化这个过程,而不是去手动配置。这些库会在你指定的范围内尝试所有的hyperparameter组合,返回表现最好的模型。

需要调优的超参数越多,过程就越慢,因此最好选择模型超参数的最小子集进行调优。

并不是所有的模型超参数都同样重要。一些超参数会对机器学习算法的行为产生巨大的影响,进而影响其性能。你应该小心地选择那些对模型性能影响最大的参数,并对它们进行调优以获得最佳性能。

正则化

这种方法迫使模型学习有意义和具有泛化能力的数据表示,通过对记忆/过拟合和欠拟合进行惩罚来实现,使模型对于它没见过的数据更鲁棒。

解决上述问题的一个简单方法是获得更多的训练数据,因为一个模型训练的数据越多,自然就会泛化得越好。

这里有一些技巧你可以试着减轻过拟合和欠拟合,项目如下:

  • Adding Dropout:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline

  • Adding or changing the position of Batch Norm:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline

  • Data augmentation:https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords

  • Mixup:https://arxiv.org/abs/1710.09412

  • Weight regularization:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline

  • Gradient clipping:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline


损失函数

损失函数也被称为成本函数或目标函数,用于查找目标输出的模型之间的差异,并帮助模型最小化它们之间的距离。

这里是一些最流行的损失函数,与项目实例,你会发现一些技巧,以提高你的模型的能力:

  • Label smoothing

  • Focal loss

  • SparseMax loss and Weighted cross-entropy

  • BCE loss, BCE with logits loss and Categorical cross-entropy loss

  • Additive Angular Margin Loss for Deep Face Recognition

  • 评估 + 错误分析

在这里,我们做消融研究,并分析我们的实验结果。我们确定了我们的模型的弱点和长处,并确定了未来需要改进的地方。在这个阶段,你可以使用以下技术,并在链接的示例中查看它们是如何实现的:

  • Tracking metrics and Confusion matrix:https://www.kaggle.com/vincee/intel-image-classification-cnn-keras

  • Grad CAM:https://arxiv.org/pdf/1610.02391v1.pdf

  • Test Time Augmentation (TTA):https://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb

有许多实验跟踪和管理工具,采取最小设置为你自动保存所有数据,这使消融研究更容易。

最后

有许多方法来调整你的模型,并且新的想法总是会出现。深度学习是一个快速发展的领域,没有什么灵丹妙药。我们必须做很多实验,足够的试验和错误会带来突破。

编辑:黄继彦

图像分类:来自13个Kaggle项目的经验总结相关推荐

  1. 图像分类:13个Kaggle项目的经验总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 方向:图像分类,编辑:数据派THU 本文约2800字,建议阅读9分钟 本 ...

  2. python大型项目经验_图像分类:13个Kaggle项目的经验总结

    来源:数据派THU 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类也不例外,工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践. 在这 ...

  3. 涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文转载自:AI公园 作者:Prince Canuma  编译:ronghuaiyang 导读 ...

  4. cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南

    从数据预处理.增强.模型优化.调参再到损失函数... 本文转载自:AI公园 作者:Prince Canuma 编译:ronghuaiyang 注:文末附CV学习交流群 导读 覆盖了模型相关的方方面面, ...

  5. 图像分类:从13个Kaggle竞赛中总结技巧

    原文:https://neptune.ai/blog/image-classification-tips-and-tricks-from-13-kaggle-competitions 任何领域的成功都 ...

  6. Kaggle 数据挖掘比赛经验分享 (转载)

     [干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...

  7. 【干货】Kaggle 数据挖掘比赛经验分享

    [干货]Kaggle 数据挖掘比赛经验分享 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Ka ...

  8. 竞赛老陪跑怎么办?来自一位Kaggle比赛失败者的含泪总结

    大数据文摘出品 来源:medium 编译:zeroInfinity.笪洁琼 Kaggle比赛应该是数据竞赛中公认含金量最高的那个.每场比赛,参加的队伍至少上千人,也并非每次都次都能脱引而出,一不小心就 ...

  9. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量

    Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...

最新文章

  1. 干货|利用卷积自编码器对图片进行降噪
  2. Atitit. 查找linux 项目源码位置
  3. Android中显示输入的隐藏密码/Android多语系支持
  4. [转]VC++中对文件的写入和读取
  5. apollo 配置中心_.NET Core 下使用 Apollo 配置中心
  6. android imageview 设置网络图片,ImageView加载网络图片
  7. 类文件Spring中空值的写法-java教程
  8. KGPolicy:用于推荐的负采样模型(知识图谱策略网络)WWW 2020
  9. python字符串转64位数字_python-将String转换为64位整数映射字符以自定义两位值映射...
  10. linux反汇编时乱码,Linux反汇编代码理解 标准例子 很好
  11. seaborn_Seaborn Distplot:综合指南
  12. Linux下使用QQ和查看QQ空间
  13. 通信原理第六章思维导图
  14. SqlServer 备份数据库语句
  15. 华为路由与交换 eSight 基本功能学习笔记
  16. IIS 405 Method Not Allowed
  17. 本机 ip 地址和本地ip地址的区别?
  18. php输入框里的提示文字,input标签输入框带提示文字方法
  19. vue引入原生高德地图
  20. 美拍解析去水印原理,sign签名算法,获得无水印播放地址

热门文章

  1. python布尔类型运算_Python中与或非运算(布尔运算)
  2. Django admin coercing to Unicode: need string or buffer, tuple found
  3. 支付宝钱包支付iOS SDK的方法
  4. 织梦后台不显示验证码的解决
  5. python数据库查询不出结果_记一次pymysql查询不到表中最新插入的数据的问题
  6. python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力
  7. 出现module ‘xgboost‘ has no attribute ‘DMatrix‘的临时解决方法
  8. 词向量之BERT 结构
  9. 安装anaconda 报错 failed to create menus
  10. torchtext语料库 词与 下标互转使用教程