Kaggle#1获胜图像分类挑战方法 - 图1
这篇文章是关于我用于Kaggle竞赛的方法:植物幼苗分类。我在排名中排名第一,持续了几个月,最终在最终评估结束时以#5结束。该方法非常通用,也可用于其他图像识别任务。

Kaggle是一个> 预测建模和> 分析竞赛的平台,统计人员和数据挖掘者在竞争中生成预测和描述公司和用户上传的数据集的最佳模型。这种> 众包方法依赖于这样一个事实:无数的策略可以应用于任何预测建模任务,并且不可能事先知道哪种技术或分析师最有效。[1] 另外,请查看在NLP上获得Intent Classification任务的最新成果的博客:

了解您的意图:SoTA结果意图分类 此博客文章显示了在三个语料库上获得的最新最新结果:medium.com


任务概述

你可以区分杂草和农作物幼苗吗? 有效地这样做的能力可以意味着更好的作物产量和更好的环境管理。

所述奥尔胡斯大学信号处理组,在具有协作南丹麦大学,释放含有属于12种约960独特的植物的图像数据集在几个生长阶段。[1] [2]
Kaggle#1获胜图像分类挑战方法 - 图2
其中一个样本植物:鹅肠菜样本[3]

公开可获得在几个生长阶段属于12种物种的约960种独特植物的图像数据库。它包括带注释的RGB图像,物理分辨率约为每毫米10个像素。

为了使用数据库获得的分类结果的评估标准化,提出了基于F1分数的基准。该URL提供了数据集[13]

下图是描述数据集中所有12个类的示例:
Kaggle#1获胜图像分类挑战方法 - 图3

将图像分类为各个类的任务,任务分为5个步骤:

步骤1:

机器学习中的第一个也是最重要的任务是在继续任何算法之前分析数据集。这对于理解数据集的复杂性非常重要,这最终将有助于设计算法。

图像和类的分布如下:
Kaggle#1获胜图像分类挑战方法 - 图4
如前所述,共有12个类,总共有4750个图像。然而,如上所述,分布不均匀,并且类别分布从最大654个图像变化到最小221个图像。这清楚地表明数据不平衡,数据需要平衡才能获得最佳结果。我们将在第3步中讨论这个问题。

Kaggle#1获胜图像分类挑战方法 - 图5每班的图像分发

现在,将图像可视化以便更好地理解数据非常重要。因此,显示来自每个类的一些样本图像以便查看图像彼此之间的差异。
Kaggle#1获胜图像分类挑战方法 - 图6
从上面的图像中可以理解的是,所有图像看起来都非常相似。所以,我决定使用称为t-Distributed随机邻居嵌入(t-SNE)的可视化技术来看图像的分布。 t分布式随机邻域嵌入(t-SNE)是一种降维的技术,特别适用于高维数据集的可视化。该技术可以通过Barnes-Hut近似实现,允许它应用于大型真实世界的数据集。[14] Kaggle#1获胜图像分类挑战方法 - 图7数据集的t-SNE可视化

仔细观察之后,我们很难看出课程的差异。因此,重要的是要了解数据是否很难仅仅为人类区分,或者机器学习模型也很难。所以,我们将为它做一个基本的基准测试。

培训和验证集

在开始使用模型基准测试之前,我们需要将数据划分为训练和验证数据集。在原始测试集上测试模型之前,验证集将扮演测试数据集的角色。因此,基本上在训练数据集上训练模型并在验证集上进行测试,然后随着时间的推移可以在验证集上改进模型。一旦我们对验证集的结果感到满意,我们就可以在真实的测试数据集上应用该模型。通过这种方式,我们可以看到模型是否过度拟合或欠拟合我们的验证集,这可以帮助我们更好地拟合模型。

因此,我们通过将80%的图像保留为训练数据集并将20%的图像保持为验证集来划分4750个图像的数据集。

Kaggle#1获胜图像分类挑战方法 - 图8培训和验证数据分开

第2步:

一旦我们获得了培训和验证集,我们将从数据集的基准测试开始。我们可以看到这是一个分类问题,在给出测试数据集时,我们需要将其分类为12个类中的一个。所以我们将使用卷积神经网络来完成任务。 如果您是初学者并且需要更好地理解深度学习术语,请访问以下> 博客:

有几种方法可以创建CNN模型,但对于第一个基准测试,我们将使用Keras深度学习库。我们还将使用Keras中可用的预训练模型,通过ImageNet数据集进行训练,我们将根据我们的任务对其进行微调。

从头开始训练卷积神经网络几乎实际上是低效的。因此,我们在ImageNet上使用预先训练的CNN模型的权重,使用1000个类,并通过保持一些层冻结并解冻其中一些并对其进行训练来对其进行微调。这是因为顶层学习简单的基本功能,我们不需要训练这些层,它可以直接应用于我们的任务。需要注意的一件重要事情是我们需要检查我们的数据集是否与ImageNet类似,以及我们的数据集有多大。这两个功能将决定我们如何执行微调。要了解更多详情,请阅读Andrej Karpathy的博客:

用于视觉识别的CS231n卷积神经网络用于 斯坦福类CS231n的课程材料和注释:用于视觉识别的卷积神经网络。cs231n.github.io

在我们的例子中,数据集很小但有点类似于ImageNet。因此,我们可以直接使用ImageNet的权重,只需添加一个包含12个类的最终输出层即可查看第一个基准测试。然后我们将解除一些底层的解冻,然后训练这些层。

我们将使用Keras作为初始基准,因为Keras提供了许多预训练模型,我们将使用ResNet50和InceptionResNetV2来完成我们的任务。使用一个简单模型和一个非常高端模型对数据集进行基准测试非常重要,以了解我们是否过度拟合/不适合给定模型上的数据集。