Planet: Understanding the Amazon from Space 获奖者心得

来源:互联网 发布:大数据设计哪些技术 编辑:程序博客网 时间:2024/06/05 21:51


在我们最近的“ 星球:从太空中了解亚马逊”竞赛中,星球挑战了Kaggle社区,标记来自亚马逊盆地的卫星图像,以便更好地跟踪和了解砍伐森林的原因。

比赛包含4万多个训练图像,每个图像可以包含多个标签,一般分为以下几组:

  • 大气条件:晴朗,局部多云,多云,阴霾
  • 常见的土地覆盖和土地利用类型:雨林,农业,河流,城镇,道路,耕地和裸地
  • 罕见的土地覆盖和土地利用类型:大规模的砍伐,开采,开采,传统的采矿,手工采矿和排污


最近,我们与参赛者“ bestfitting”进行了交谈,了解他如何使用11个精调卷积网络,标签关联结构模型,以及避免过度拟合的强调集合,以达到第一名。


概况

进入这个挑战之前,你的背景是什么?

我主修计算机科学,拥有10多年Java编程经验,从事大规模数据处理,机器学习和深度学习。

您是否有任何经验或领域知识帮助您在本次比赛中取得成功?

今年我参加了Kaggle的一些深度学习比赛。我获得的经验和直觉帮助了很多。

你是怎么开始参与Kaggle竞争的?

自2010年以来,我一直在阅读大量关于机器学习和深度学习的书籍和论文,但是我总是发现很难将我学到的算法应用于通常可用的各种小数据集。所以我发现Kaggle是一个很好的平台,包含所有有趣的数据集,内核和讨论。我迫不及待地尝试了一些东西,去年进入了“预测红帽商业价值”竞赛。

是什么让你决定参加这个比赛?

我参加了这个比赛有两个原因。

首先,我对自然保护感兴趣。我认为用我的技能使我们的星球和生活更美好是很酷的。所以我已经进入了Kaggle今年主办的所有比赛。我对亚马逊热带雨林特别感兴趣,因为它经常出现在电影和故事中。

其次,我使用分割和检测等算法,进入Kaggle的各种深度学习比赛,所以我想要分类挑战来尝试一些不同的尝试。

让我们来获取技术

你能先介绍一下你的解决方案吗?

这是一个多标签分类挑战,标签不平衡。

这是一个激烈的竞争,近年来图像分类算法得到了广泛的应用和建立,并且有许多经验丰富的计算机视觉竞争者。

我尝试了许多我认为可能有用的热门分类算法,并且在仔细分析标签关系和模型功能的基础上,我能够建立一个赢得第一名的集成方法。

这是我模特的架构:

正题:

  • 首先,我对数据集进行了预处理(调整图像大小并去除雾霾),并应用了几种标准的数据增强技术。
  • 接下来,对于我的模型,我调整了11个卷积神经网络(我使用了ResNets,DenseNets,Inception和SimpleNet等各种流行的,高性能的CNN)来获得每个CNN的一组类标签概率。
  • 然后,我通过自己的岭回归模型通过每个CNN的类标签概率,以便调整概率以利用标签相关性
  • 最后,我合奏的所有11节细胞神经网络,使用另一种岭回归模型。
  • 另外值得注意的是,我没有使用标准的对数损失作为我的损失函数,而是使用了一个特殊的F2-损失来获得F2评估指标上的更好的分数。

你做了什么预处理和特征工程?

我使用了几个预处理和数据增强步骤。

  • 首先,我调整了图像的大小。
  • 我还在我的训练和测试集中添加了通过翻转,旋转,转置和弹性变换图像的数据增强功能。
  • 我还使用了在这个“使用黑暗通道优先的单一图像雾度去除”文件中描述霾去除技术来帮助我的网络更清晰地“看见”图像。

以下是一些数据集上的阴霾清除的例子:

正如我们在下面的图表中看到的,雾霾消除提高了一些标签(例如裸地)的F2分数,但是降低了其他标签(例如,雾霾清澈的F2分数然而,这样没有问题,因为组合可以为每个标签选择最强的模型,并且整体上帮助消除了阴霾。


你使用了什么样的监督学习方法?

我的集合的基础包括11个流行的卷积网络:ResNets和DenseNets的混合,具有不同数量的参数和层,以及Inception和SimpleNet模型。 我更换了最后的输出层以满足竞赛的输出之后,对这些预先训练的CNN的所有层进行了微调,而且我没有冻结任何层。
训练集由40,000个以上的图像组成,因此可以从头开始训练一些CNN体系结构(例如,resnet_34和resnet_50),但是我发现对预先训练的网络的权重进行了微调好一点。

你有没有使用任何特殊的技术来建模评估指标?

他们的F2分评估了提交的内容,这是一种将精确度和召回率结合成单一得分的方法 - 就像F1分数一样,但是回忆加权高于精度。因此,我们不仅需要训练我们的模型来预测标签概率,而且还需要选择最佳的阈值来决定是否选择一个给定概率的标签。

起初和其他很多竞争对手一样,我使用log loss作为我的损失函数。但是,如下图所示,较低的对数损失不一定会导致更高的F2分数。


这意味着我们应该找到另一种损失函数,使我们的模型更加注意优化每个标签的召回。所以借助论坛的代码,我写了自己的Soft F2-Loss函数。

这确实提高了总体F2分,特别是农业阴天栽培等标签的F2score


你对数据和模型最重要的洞察是什么?

我分析了标签之间的相关性,发现某些标签相当频繁地共存,而其他标签则不是。例如,晴朗局部多云阴天阴霾的标签是不相交的,但居住农业标签却经常出现在一起。这意味着利用这种相关结构可能会改善我的模型。


例如,让我们把我的resnet-101模型。这预测了17个标签中的每一个的概率。然而,为了利用标签相关性,我又增加了另一个脊形规则化的层来重新校准每个标签的概率。

换句话说,为了预测最终的  清晰  概率(仅来自resnet-101模型),我有一个特定的清晰的回归模型,其中包含了resnet-101模型对所有17个标签的预测。


你的模型怎么样?

在我们从所有N个模型中得到预测后,我们从N个不同的模型中得到N个清晰标签的概率我们可以使用它们来预测最终的明确标签概率,通过使用另一个岭回归。

这种两级岭回归做两件事:

  1. 首先,它允许我们使用不同标签之间的相关信息。
  2. 它使我们能够选择最强大的模型来预测每个标签。

你对你的发现感到惊讶吗?

尽管我曾经预测过排行榜的最终变化(公共和私人排行榜的分数有很大的不同),但我仍然感到惊讶。

基本上,在比赛的最后阶段(比赛结束前10天),我发现公开比分非常接近,我无法再提高本地交叉验证或公开比分。所以我警告自己要小心,避免过分贴合标签上的噪音。

为了更好地理解这个缺陷,我使用不同的随机种子来选择一半的训练集图像作为新的训练集,从而将公共和私人排行榜模拟分割。我发现,随着种子的变化,我的模拟公共和私人分数之间的差距可能会增长到0.0025。但排行榜前十名和前十名之间的差距小于这个数值。

这意味着在真正的竞争中很可能会发生很大的变化。

仔细分析之后,我发现这种变化产生的图像很难处理,标签容易被人类混淆,比如图像是否应该被标记为阴霾与阴天,公路与水,还是开花与选择性采伐。

正因为如此,我相信自己的公共排行榜分数并不是模型能力的完美指标。这是出乎意料的:由于公开的测试集包含了40,000多个图像,看起来排行榜应该相当稳定。

所以我把自己的目标调整到了前十名,并决定不在意上周在公共排行榜上的确切位置。相反,我试图找到最稳定的方式来整合我的模型,我抛弃了任何可能导致过度拟合的模型,最后我使用了投票和岭回归。

为什么这么多模型?

答案很简单:多样性。

我不认为模型的数量是一个大问题,原因如下:

  1. 首先,如果我们想要一个简单的模型,我们可以简单地选择其中的1-2个,在公共和私人排行榜(排名前20位)上仍然会得到相当不错的分数。
  2. 其次,我们有17个标签,不同的型号在每个标签上都有不同的功能。
  3. 第三,我们的解决方案将被用来取代或简化人类标签工作。由于计算资源相对比人类便宜,我们可以通过使用强模型来预测未标记的图像,修改任何不正确的预测图像,然后使用扩展数据集迭代地训练更强或更简单的模型。

你用什么工具?

Python 3.6,PyTorch,PyCharm社区版。

你的硬件设置是什么样的?

一台配有四个NVIDIA GTX TITAN X Maxwell GPU的服务器。

你从这场比赛中获得了什么?

正如我们上面所讨论的那样,我发现使用一个软的F2损失函数,添加一个雾霾消除算法,并应用两级岭回归对获得好的分数是重要的。

另外,由于标签噪声,我们必须相信我们的本地交叉验证。

对于刚入门的数据科学,你有什么建议吗?

  1. 学习像斯坦福大学的CS229和CS231n这样的好课程。
  2. 学习Kaggle竞赛,内核和入门脚本。
  3. 进入Kaggle比赛,并使用它们获得反馈。
  4. 每天阅读论文并实践其中的一部分。


阅读全文
1 0
原创粉丝点击