涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南
点击上方,选择星标或置顶,不定期资源大放送!
阅读大概需要15分钟
Follow小博主,每天更新前沿干货
本文转载自:AI公园
作者:Prince Canuma 编译:ronghuaiyang
导读
覆盖了模型相关的方方面面,从数据准备到模型的推理,每个阶段的方法和要点,非常多的参考资料,足够看一段时间了。
任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果。
机器学习和图像分类也不例外,工程师们可以通过参加像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
有许多实验跟踪和管理工具,采取最小设置为你自动保存所有数据,这使消融研究更容易。
最后
有许多方法来调整你的模型,并且新的想法总是会出现。深度学习是一个快速发展的领域,没有什么灵丹妙药。我们必须做很多实验,足够的试验和错误会带来突破。
英文原文:https://neptune.ai/blog/image-classification-tips-and-tricks-from-13-kaggle-competitions
重磅!DLer-计算机视觉交流群已成立!
大家好,这是DLer-计算机视觉微信交流群!欢迎各位Cver加入DLer-计算机视觉微信交流大家庭 。
本群旨在学习交流图像分类、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。希望能给大家提供一个更精准的研讨交流平台!!!
进群请备注:研究方向+学校/公司+昵称(如图像分类+上交+小明)
???? 长按识别添加,即可进群!
涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南相关推荐
- cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南
从数据预处理.增强.模型优化.调参再到损失函数... 本文转载自:AI公园 作者:Prince Canuma 编译:ronghuaiyang 注:文末附CV学习交流群 导读 覆盖了模型相关的方方面面, ...
- 图像分类:从13个Kaggle竞赛中总结技巧
原文:https://neptune.ai/blog/image-classification-tips-and-tricks-from-13-kaggle-competitions 任何领域的成功都 ...
- 图像分类:13个Kaggle项目的经验总结
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 方向:图像分类,编辑:数据派THU 本文约2800字,建议阅读9分钟 本 ...
- 图像分类:来自13个Kaggle项目的经验总结
来源:机器学习实验室 本文约2800字,建议阅读9分钟 本文作者与你分享图像分类项目经验总结. 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类 ...
- python大型项目经验_图像分类:13个Kaggle项目的经验总结
来源:数据派THU 任何领域的成功都可以归结为一套小规则和基本原则,当它们结合在一起时会产生伟大的结果. 机器学习和图像分类也不例外,工程师们可以通过参加像Kaggle这样的竞赛来展示最佳实践. 在这 ...
- 2021-01-20 Python编程特殊小技巧汇集
Python编程特殊小技巧汇集 Python作为一种高级编辑语言,有很多使用的小技巧,分享一期. 1.变量值互换 a = 0b = 1a,b = b, a 2.连续赋值 a, b = 2, 1 3.自 ...
- 超高清晰电影寻觅及下载技巧汇集
超高清晰电影寻觅及下载技巧汇集 -|电脑侠客 发表于 2005-12-6 13:33:00 电影下载 求人不如求己 首先要说的就是:在很多时候求人不如求己.因为别人能帮你的是很有限的,举个例子 ...
- 新手炼丹师的调参内经——深度学习涨点技巧总结
新手炼丹师的调参内经--深度学习涨点技巧总结 训练神经网络的过程就像是一个炼丹的过程,各位炼丹师们除了要设计一个好的丹方(Contribution),配置好的炼丹炉(GPU Server),当然这其中 ...
- ConvNeXt:超越 Transformer?总结涨点技巧与理解代码(附注释)
文章目录 1. 前言 2. 论文学习 2.1. 发展路线 2.2. 训练策略改进 2.3. 宏观设计 2.3.1. stage compute ratio 2.3.2. stem to "P ...
最新文章
- Python基础07-数据类型:字典dict
- Centos7上yum安装mongodb(安装epel中的版本可能会比较老)
- Intent打开Activity
- linux w 命令参数解释
- 用python连接数据库_用Python连接MySQL
- lucene的Query类型
- 标贝科技亮相2019中国互联网大会 解决语音合成定制需求痛点
- 容器(Context)使用之支付系统
- 济南清北学堂游记 Day 6.
- Serverless Computing:现状与基础知识
- ad9原理图转到orcad capture16.5
- 使用hosts屏蔽网站
- 详解文本格式(Text)[第二天]
- python函数输入参数数量_如何实现Python函数的参数不限个数?
- 【Vue.js安装】
- compareTo()和compare()的详解和区别
- 苹果切换输入法_使用苹果手机的注意啦!iphone输入法不好用?这些使用技巧教给你...
- 排行榜|当 DB-Engines 遇见墨天轮国产数据库排行
- 职业院校物联网实训室建设方案研究
- 遗传算法:一:遗传算法简介