Kaggle首战斩获第三,看深度学习菜鸟团队如何一鸣惊人

  • 日期:07-11
  • 点击:(1443)

YG电子游戏攻略

Kaggle在第一场战斗中赢得了第三场战斗,看看这个节奏深的新秀队是如何成为重磅炸弹

来自朝向科学

作者:Mercy Markus

机器心脏编辑器

在fast.ai图书馆和视频教程的支持下,第一场Kaggle比赛,新手赢得了油棕种植园卫星图像识别的第三名。

数据科学领域的女性和合作伙伴推出了WiDS数据竞赛(WiDS数据通信)。标题是创建一个模型,预测卫星图像上油棕种植园的存在。

Planet和Figure Eight慷慨地提供了最近由Planet Satellite拍摄的附加卫星图像数据集。数据集图像的空间分辨率为3米,每个图像都根据是否是油棕种植园进行标记(0表示没有油棕种植园,1表示有油棕种植园)。

竞赛任务是训练可以输入卫星图像并输出包含油棕种植园图像的似然预测的模型。在模型开发中,比赛组织者提供标记的训练和测试数据集。

有关更多信息,请参阅:

我的队友(Abdishakur,Halimah和Ifeoma Okoh)使用fast.ai框架来迎接游戏。非常感谢Thomas Capelle在kaggle上启动内核,这为解决这个问题提供了很多见解。

此外,感谢fast.ai团队,它创建了一个令人难以置信的深入学习课程,简化了许多困难的深度学习概念。现在,深度学习初学者也可以赢得讨价还价的竞争。

课程地址:

从易于理解的深度学习指南开始

不要考虑立即理解一切,需要大量的练习。本指南旨在向初学者展示fast.ai的魅力。假设你了解一些python知识,并且有点参与机器学习。在这种情况下,我们走在正确的轨道上。

(参考)本文中显示的所有代码都可以在Google Colaboratory中找到:这是一个Jupyter笔记本环境,无需任何设置即可运行,完全在云中运行。您可以通过Colaboratory编写和执行代码,保存和共享分析以及访问大量计算资源,所有这些都是免费的。

请参阅代码:

导入fast.ai和我们将使用的其他库

93e5ef85a93a4557b8749decacee3861.jpeg

输入库

获取比赛数据

为了尽可能简洁,Abdishakur将比赛数据文件上传到dropbox.com。您可以在竞赛页面上找到这些数据。您需要接受比赛规则并在比赛结束后访问数据。

a55497a8868747e1acda18fa65e0a175.jpeg

观察数据

解决问题时我们需要做的第一件事就是观察可用的数据。在我们提出解决方案之前,我们需要了解问题以及数据的样子。观察数据意味着了解数据目录的结构,数据标签的内容以及样本图像的外观。

53961c06bc0b44c0abde291409e4988a.png

使用pandas库来读取数据。

aefcfa7155c54b959ebfc43320936f08.jpeg

用于训练模型的数据标签。

处理“图像分类数据集”和“表数据集”之间的主要区别在于标签的存储方式。此处的标签是指图像中的内容。在此特定数据集中,标签以CSV文件格式存储。

要了解有关如何计算“得分”列的详情,请点击:

我们将使用seaborn的countplot函数来观察训练数据的分布。从下图可以看出,在大约14,300幅图像中没有发现油棕种植园,仅在942幅图像中发现了油棕种植园。这被称为不平衡数据集,但我们不会在这里讨论这个深度学习问题。我们现在迈出了一小步。

5e053cf2997b4b06a3caa4b7fbe60422.png

计算两个类别中的样本数。

40e2f49363ff4f90b5bd970455db0a8c.jpeg

培训数据集分布

准备数据

提供的测试数据放在两个不同的文件夹中:排行榜保留数据和排行榜测试数据。由于竞争需要提交两个数据集的预测,我们将两者结合起来。我们总共有6,534张图片。

52879d03f95a4b4c8ec4e9c4c8f5d95b.png

结合排行榜以预留数据和排行榜测试数据。

我们将使用fast.ai的DataBlock API来构建数据,这是将数据集呈现给模型的简单方法。

5f80698980bc4b9c880b6bea32ef446f.jpeg

创建一个ImageList来保存数据

我们将使用ImageList来保存训练数据并使用from_df方法来读取数据。这样做的原因是我们将训练集信息存储在名为df的DataFrame中。

接下来,您需要随机分段训练集并保留20%作为验证集,以监控训练期间的模型性能。我们选择种子来确保我们在另一次训练中获得相同的结果。使用相同的种子,我们可以知道哪些改进是好的哪些是坏的。

此外,我们还向ImageList提供训练集的标签地址,并将数据与标签合并。

最后,您需要对数据执行转换,通过设置flip_vert=True来翻转图像,这有助于模型识别具有不同方向的图像。此外,您需要使用imagenet_stats来规范化图像。

预览图片

以下是有或没有油棕种植园的卫星图像:

1b03cae680c144f097c51ad062d4e594.png

显示两个批处理图像。

4a2e4cd3a3d94583949756c35390bc98.jpeg

带有油棕的图像标记为1,没有油棕色标记为0

训练我们的模型

现在,开始训练我们的模型。我们将使用卷积神经网络作为主体,并利用ResNet模型的预训练权重。 ResNet模型经过培训,可以对各种图像进行分类,而无需担心其理论和实现细节。现在,我们建立一个以卫星图像作为输入的模型,并输出两个类别的预测概率。

32dbf43abeeb46b5b7acf0c9c96b6269.png

卷积神经网络

1dfb3d0756a44975a739cca7574c80d0.png

搜索最佳模型学习率。

接下来,我们使用lr_find()函数找到理想的学习速率,并使用recorder.plot()对其进行可视化。

8ecfa130a03d4daa82184c3d456e3b6a.jpeg

搜索最佳模型学习率。

我们将选择坡度最大的学习率,这里我们选择1e-2。

0115b9710eda4b3c94fc861e7d3bc59d.png

使用1e-2的学习率进行5个循环的训练。

我们将使用fit_one_cycle函数来训练5个时期的模型(遍历所有数据5次)。

97554996425844bcb763362f779c1ff9.jpeg

培训和验证损失。

请注意显示的指标,即training_loss和valid_loss。随着时间的推移,我们使用它们来监控模型改进。

最好的模型是在第四纪元获得的。

84be5b96166e41ccaab4897cbca8058f.jpeg

训练阶段模型的输出;培训和验证损失的过程。

当您训练和验证数据集时,fast.ai仅在内部选择并保存您的最佳模型。

评估我们的模型

比赛提交的材料基于预测概率与观察到的目标has_oilpalm之间的ROC曲线进行评估。默认情况下,Fast.ai不附带此指标,因此我们将使用scikit-learn库。

45385c074d0548b6a4c7238c367ed688.jpeg

打印验证指标。

使用预训练模型和fast.ai的美妙之处在于您获得了良好的预测准确性。在我们的案例中,我们毫不费力地达到了99.44%的准确率。

9dbcdb88a86c42c68e15088b7c1890dd.jpeg

培训第一阶段的指标。

保存模型并绘制关于预测的混淆矩阵。

acccd465d0114aeba6a19c19161dc71e.png

使用混淆矩阵查看结果

202c33dcfabb458985aec1471f92e91e.png

绘制混淆矩阵

混淆矩阵是一种图形方式,用于查看准确或不准确的预测图像的数量。

dc92ba1a9cbd457ebe836fe643db80f9.jpeg

第一个训练阶段的混淆矩阵。

从该矩阵可以看出,该模型准确地预测了没有油棕的2,863个图像和具有油棕的168个图像。油棕的十个图像被分类为不,并且没有油棕的七个图像被分类为油棕。

对于这个简单的模型,这个结果很好。接下来,我们搜索了理想的培训学习率。

1061dad5241d4762baa8ea6cce80dd03.png

搜索理想的学习率。

c9beb2b9d4464cd3bb3b5d364e1d2ee3.jpeg

我们选择了学习率1e-6和1e-4之间的学习率。

在7个时期内,使用1e-6和1e-4之间的最大学习率来拟合模型。

8f48d2217b3d4d92a0dff313acda56ce.png

该模型训练7个周期,学习率应在1e-6和1e-4的范围内。

57dde12a89b1464c9c5fcdbbcff3be04.jpeg

培训和验证损失。

以图形方式观察训练指标,以在每个训练期后监测模型的性能。

4d8a25ae955b42669664f0caba6e365f.jpeg

训练阶段模型的输出;培训和验证损失的过程。

保存模型的第二个培训阶段:

7c4bb91a328442b4ba4aec804b48ae04.jpeg

准确性,错误率和AUC分数

打印模型准确度,错误率和AUC指标:

7a5e42a4fc28408fb4b74ed6005ae2e0.jpeg

第二个培训阶段的指标。

如您所见,模型的准确性从99.44%增加到99.48%。错误率从0.0056降至0.0052。 AUC也从99.82%上升到99.87%。

aa54027c8e6240dd9a5a742d9758430c.png

绘制一个混淆矩阵。

与我们绘制的最后一个混淆矩阵相比,您会发现模型的预测更好。

948580a65dce4c0596d98775859ede57.jpeg

第二个培训阶段的混淆指标

以前,七个无油种植园的图像被错误分类,现在已经下降到三个,这是进步。

我们在训练和调整期间遵循了一种模式。大多数深度学习实验都遵循类似的迭代模式。

图像转换

我们将对数据执行更多图像转换,这将改善模型的效果。有关图像转换的详细说明,请参见fast.ai文档:

53ab35b5e5c0418f8595157c84e54f49.jpeg

应用不同的转换以提高模型性能

Max_lighting:如果超级参数不是None,则以p_lighting为概率随机调整亮度和对比度,最大亮度不超过max_lighting。

Max_zoom:如果超级参数不小于1,则以p_affine为概率随机放大1到max_zoom次。

Max_warp:如果super参数不是None,则在-max_warp和max_warp之间进行随机对称变换,以p_affine为概率。

我们再次搜索最佳学习率:

e6e95f8eac4e4256a405d62b1e9e09bd.png

搜索合理的学习率

d4f55c4157374181836379f513b8c661.jpeg

我们选择的学习率是1e-6

训练模型5个周期。

f9bb4f7a8eaf45d8899fec45b00eb4e3.png

训练5个周期

57e5ca776302465e9a9320d35bca753a.jpeg

培训和验证损失

比较培训指标并将其与过去的指标进行比较。在这次迭代中,我们的模型稍差于0.0169和0.0163。不要先气馁。

814760b01a40477e93ed8dd9c1bb9007.jpeg

训练阶段模型的输出;第三纪的最佳模特

保存模型培训的第三阶段并打印出指标。如图所示,当前模型的准确度为99.38,前一阶段的准确度为99.48%。 AUC分数从99.87%增加到99.91%,这是比赛得分的标准。

67e298570cc041e7867274e9d5f11d22.png

准确性,错误率和AUC分数

9fff3b2a817946918de2a14ba0f7319c.jpeg

第三个培训阶段的指标

最后的培训阶段

您可能已经注意到我们刚刚开始使用的图像大小为164,然后逐渐增加到256(如下所示)。这样做是为了利用fast.ai用于分类的渐进图像尺寸缩放,即在开始时使用小图像,然后随着训练的进行逐渐增加图像尺寸。因此,当模型在早期非常不准确时,它可以快速看到大量图像并实现快速改进,而在后期训练中,它可以看到更大的图像并学习更细粒度的差异。 (详情请见:现在,每个人都可以在18分钟内训练ImageNet)

61f76e20e38942c494c77abed32cc7e6.jpeg

应用不同的变换来改进模型并将图像大小增加到256

我们也找到了最好的学习率。

f9ed2d69cae844a9a0b266262ba9b563.png

找到理想的学习率

81fa411677864cb2ad84ab9c799f112b.jpeg

找到理想的学习率

以1e-4的学习速率训练五个时期以适合该模型。

aff68a8993fa4484ab82107565f42352.png

以1e-4的学习速率训练模型5个循环

36ba0a53b8774e4c8d704553d86f31fc.jpeg

培训和验证损失

观察培训指标并将其与之前的指标进行比较。我们的模型有一个小的改进(损失从0.169到0.168)。

dc0f905ce4bb440b91a6170d09e447f2.jpeg

模型训练阶段的输出。在第二纪元获得最佳模型

保存模型的最终培训阶段并打印出指标。

b64a5fec0d3e46a39a2d5b5c85df283b.png

90aae935064b43078c6f2d86f78e975e.png

准确性,错误率和AUC分数

如下图所示,模型的准确率为99.44%,优于之前训练阶段的准确率99.38%。

3d27831cf8ef45c29738c0fb21f4de88.jpeg

第四个培训阶段的指标

准备比赛提交文件

现在我们可以看到我们的模型对未见数据的预测有多好。

660b8080866d47488dfe9f0790102a80.jpeg

准备CSV提交文件

将文件提交给WiDS Datathon

您仍然可以参加WiDS比赛并在以后提交。转到输入页面并单击“加入竞赛”以了解游戏规则。现在您可以提交您的作品,看看您是否会排名第一。

根据模型预测对提交的提交进行评分

原始链接:

看看更多