任何领域的成功都可以总结成一组基本原则,当它们结合在一起时,就会产生巨大的成效。
机器学习和图像分类没有什么不同,工程师可以通过参加 Kaggle 这样的比赛来展示最佳实践。
本文将为您提供大量学习资源,重点介绍 13 个 Kaggle 竞赛的最佳核心程序——其中最突出的竞赛有:
- Intel Image Classification:多类图像场景分类
- Recursion Cellular Image Classification:细胞图像分类
- SIIM-ISIC Melanoma Classification:识别黑色素瘤
- APTOS 2019 Blindness Detection:检测糖尿病视网膜病变
- Diabetic Retinopathy Detection:检测糖尿病视网膜病变
- ML Project — Image Classification:Fashion-MNIST图像分类
- Cdiscount’s Image Classification Challenge:电子商务图片分类
- Plant seedlings classifications:幼苗种类分类
- Aesthetic Visual Analysis:图像质量分类
将讨论深度学习解决方案的三个方面:
- 数据
- 模型
- 损失函数
数据
图像预处理+探测性数据分析(EDA)
每个机器学习或深度学习解决方案都从数据开始,处理数据有两个基本步骤:
- 探索性数据分析(EDA),分析整个数据集并总结主要特征,如类分布、规模分布等,通常使用可视化来显示。
- 图像预处理,通过减少不需要的扭曲、调整大小、增强重要特征等手段,使数据更适合模型。
案例:
数据增强
数据增强,通过现有训练样本生成更多的训练数据。
新的样本是通过大量的随机变换生成的,这些变换不仅能产生可信的图像,还能反映真实的场景。
在数据样本太少的情况下,模型开始记住训练集,在从未见过的数据上表现很差,即不能泛化。
通常,当一个模型在训练集上表现很好,但在验证集上表现很差时,称为过拟合。
为了解决这个问题,首先尝试获取更多数据,但做不到时,数据增强就可以解决问题。
一般建议使用数据增强技术,尽管有大数据集并且训练更耗时,但它有助于将模型暴露在更多的变化中,能达到更好的泛化效果。
数据增强能够反映真实场景,如猫狗分类,用水平翻转,裁剪,亮度,对比度,来匹配不同的拍照方式。
案例:
模型
开发一个基准模型(baseline)
使用一个简单架构创建基本模型,没有任何正则化或 dropout ,看看能否超过基准模型 50% 准确率
虽然不能总是达到这个目标,但是如果在尝试了多个合理的架构后仍不能超过基准模型,那么输入数据可能不包含模型预测所需的信息
Jeremy Howard: 您应该在15分钟内使用50%或更少的数据集快速测试是否进入一个有前景的方向,如果不是,您必须重新考虑一切。
开发一个足够大的模型,使其能过拟合
一旦基准模型有足够的能力超过基准模型,就可以增加基准模型的能力直到过拟合数据集,然后开始应用正则化。通过以下方法增加模型能力:
- 添加更多层
- 使用更好的架构
- 更好的训练程序
架构
根据文献,以下架构提高了模型能力,但几乎没有改变计算复杂度:
- Residual Networks
- Wide Residual Networks
- Inception
- EfficientNet
- Swish activation
- Residual Attention Network
训练程序
超参数调优
超参数在配置模型时指定,如学习率、迭代次数、隐藏单元的数量、批次大小等
与手动尝试配置不同,可以使用超参数调优库(如 Scikit learn Grid Search
、Keras Tuner
)自动化,这些库将尝试指定范围内的所有超参数组合,并将返回性能最佳的模型。
需要调优的超参数越多,过程就越慢,因此最好选择要调优的模型超参数的最小子集。
并非所有模型的超参数都同等重要,一些超参数会对机器学习算法的行为产生巨大影响,进而影响其性能。应该仔细选择对模型性能影响最大的那些,并对它们进行调优以获得最大性能。
正则化
正则化通过惩罚记忆/过拟合和欠拟合,让模型学习数据的有意义和一般化表示,使模型在处理从未见过的数据时更具鲁棒性。
解决上述问题的最简单方法是获取更多的训练数据,因为在更多数据上训练的模型自然会泛化得更好。
以下是可以缓解过拟合和欠拟合的技巧:
损失函数
损失函数又称成本函数或目标函数,它用于寻找模型输出与目标输出之间的差异,帮助模型最小化它们之间的距离。
以下是一些最流行的损失函数:
- 标签平滑
- 焦点损失函数
- SparseMax loss和加权交叉熵
- 二元交叉熵loss、带logits的二元交叉熵loss、分类交叉熵loss
- 用于深度人脸识别的Additive Angular Margin loss
评估和误差分析
分析实验结果,确定模型的优缺点,寻找未来改进的方向:
结论
有很多方法调整模型,深度学习是一个快速发展的领域,没有捷径,必须进行大量实验,足够多的尝试和错误才能带来突破。
进一步的研究
参考文献
论文
- Wide Residual Networks
- mixup: BEYOND EMPIRICAL RISK MINIMIZATION
- ArcFace: Additive Angular Margin Loss for Deep Face Recognition
- EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
- Searching for Activation Functions
- Residual Attention Network for Image Classification
- Mixed Precision Training
- Self-training with Noisy Student improves ImageNet classification
- When Does Label Smoothing Help?
- Additive Angular Margin Loss for Deep Face Recognition
- Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization
- A Comparative Study of Deep Learning Loss Functions for Multi-Label Remote Sensing Image Classification
博客
- Wide Residual Nets: “Why deeper isn’t always better”
- Tune Hyperparameters for Classification Machine Learning Algorithms
- Image Pre-Processing
- Understanding Categorical Cross-Entropy Loss, Binary Cross-Entropy Loss, Softmax Loss, Logistic Loss, Focal Loss and all those confusing names
- Noisy student
- Overfitting and Underfitting With Machine Learning Algorithms
- Developing AI projects under pressure
- Understanding Neural Networks
- Kaggle competitions
书籍
Kaggle 竞赛
- Intel Image Classification
- Recursion Cellular Image Classification
- SIIM-ISIC Melanoma Classification
- APTOS 2019 Blindness Detection
- Diabetic Retinopathy Detection
- ML Project — Image Classification
- Cdiscount’s Image Classification Challenge
- Plant seedlings classifications
- Aesthetic Visual Analysis
- Data Science Bowl 2017
- Plant Pathology 2020 – FGVC7
- Lyft Motion Prediction for Autonomous Vehicles
- Humpback Whale Identification
- Distributed Training
- 3D Image classification
Kaggle 笔记
- Ultimate Image Classification Guide 2020
- Protein Atlas – Exploration and Baseline
- Intel Image Classification (CNN – Keras)
- APTOS : Eye Preprocessing in Diabetic Retinopathy
- Lyft Level5: EDA + Training + Inference
- [BEG][TUT]Intel Image Classification[93.76% Accur]
- pretrained ResNet34 with RGBY (0.460 public LB)
- Fold1h4r3 ArcENetB4/2 256px RCIC
- Quick Visualization + EDA
- Analysis of Melanoma Metadata and EffNet Ensemble
- Triple Stratified KFold with TFRecords
- Melanoma. Pytorch starter. EfficientNet
- InceptionV3 for Retinopathy (GPU-HR)
- Fastai tutorial for image classification
- Google image classification v4
- Chest X-Ray Image Classification – TF Hub ResNet50