雷锋网 AI 研习社按,在日前结束的 Kaggle「Statoil/C-CORE Iceberg Classifier Challenge」(冰山图像分类大赛)中,由 David Austin 和 Weimin Wang 组成的队伍一举拔得头筹,获得 25000 美元奖金。据介绍,他们的解决方案能有效应用于实际生活,保证舰船在危险的水域更加安全地航行,降低船和货物的损伤,避免人员伤亡。
据 Kaggle 官网介绍,这次冰川图像分类大赛是 Kaggle 上最火的图像分类竞赛——拥有史上最多参赛队伍。而在所有数据竞赛中,本次比赛热度位列第 7。
不久前,外媒对 David Austin 进行了一次深入采访,在采访中,他们讨论了以下问题:
冰山图像分类竞赛是什么;
冠军方案中的处理方法、核心算法以及相关技术;
在竞赛中遇到的最大的难题及解决方案;
对想参加 Kaggle 比赛的人的建议。
以下是具体的采访内容,雷锋网 AI 研习社编译整理:
图 1:Kaggle 冰山分类挑战赛的任务目标是建立一个图像分类器,将输入卫星图像划分为冰山或者船
问:你好,David,十分感谢你能接受我的采访,也恭喜你们在冰山图像分类挑战赛中取得第一名的好成绩。你是如何对计算机视觉和深度学习产生兴趣的呢?
答:在过去两年里,我对深度学习的兴趣与日俱增。因为我看到人们利用它从数据中获得了难以置信的结果。我对深度学习领域的前沿研究和实际应用都很感兴趣,我认为 Kaggle 是一个非常棒的平台。通过比赛,我能保持对前沿技术的掌控能力,可以在合适的场景下尝试新的技术。
问:你在参加这次比赛之前,在计算机视觉和机器学习领域的学术背景如何?你之前参加过其他 Kaggle 竞赛吗?
答:大概十年前,我首次接触机器学习,那时我开始学习梯度提升树和随机森林相关知识并将其应用到分类问题中。近几年,我开始更广泛地关注深度学习和计算机视觉。不到一年前,我开始参加 Kaggle 竞赛,这是提升技能的一种方式,本次比赛是我第三次参加 Kaggle 竞赛。
图 2:冰山
问:能再谈谈冰山分类挑战赛吗?是什么驱使你参加了本次比赛?
答:冰山分类挑战赛是一个图像二分类问题,这个比赛要求参赛者在卫星图像中将船和冰山区分开来。这项工作在能源勘探领域尤为重要,它让我们能够识别并且避开类似浮冰这样的威胁。
本次比赛的数据有两个特别有意思的地方:
首先,数据集规模相当小,训练集中只有 1604 张图片。这样一来,从硬件的角度来说,参与竞赛的门槛很低。然而,另一方面,使用有限的数据完成图像分类任务又是十分困难的。
其次,如果用肉眼去观察这些图片,它们看上去就像电视屏幕上出现的「雪花」图——一堆乱七八糟的噪点。人类用肉眼完全不可能看出来哪些图像是船,哪些图像是冰山。
图 3:人眼很难准确判断输入图片是「冰山」还是「船」
要让人类仅凭肉眼准确地区分图片类别十分困难。我认为这是一个很好的契机——测试深度学习和计算机视觉能够做到人类做不到的事情。
图 4: 冠军团队采用集成的卷积神经网络结构
问:接下来,让我们讨论稍微技术性一些的问题。能介绍一下你们优胜策略中所使用的数据处理方法、算法和相关技术吗?
答:好的,总体上我们的数据处理方法和大多数传统的计算机视觉问题中所使用的方法很相似。我们都会事先花费一些时间去理解数据。
使用无监督学习方法是一种我最喜欢的技术,通过学习这些模式,我们可以决定接下来将要使用什么样的深度学习方法。
在这个任务中,标准的 KNN(K 最近邻算法)就能够识别出帮助定义模型结构的关键信号。我们使用了一个十分庞大的卷积神经网络结构,包含超过 100 个改造过的卷积神经网络和类似于 VGG 的结构,然后我们使用 greedy blending 策略和两层结合了其他的图像特征的集成学习算法将模型结果融合起来。
这听起来是个很复杂的方法。但是请记住!这里的目标函数是要最小化对数损失误差。在这个任务中,我们仅仅像这样加入了一些模型,因为它们能够在不发生过拟合的情况下减小对数损失。所以,这又是一个很好的例子,说明了将许多弱机器学习模型集成之后的威力。
我们最后再次训练了许多和之前一样的卷积神经网络结构,但是这里我们仅仅是使用了一开始通过无监督学习挑选出的原始数据的子集作为输入,这同样也提高了我们模型的性能。
图5:过拟合是它们在本次比赛中遇到的最棘手的问题
问:对于你们来说,本次比赛中遇到的最大难题是什么?
答:在比赛中最困难的部分当属验证模型没有过拟合。
说实话,这个数据集对于图像分类问题来说是相当小的,所以我们担心过拟合会是一个很大的问题。为此,得确保所有的模型都要经过4折交叉验证,尽管这会增加计算开销,但是却能降低过拟合的风险。尤其是在处理像对数损失这样非常严格的损失函数时,需要时刻注意过拟合问题。
问:训练模型需要花费多长时间呢?
答:尽管我们选用的卷积神经网络规模巨大,并且在所有的模型训练过程中都使用了4折交叉验证,训练过程仅仅花费了一到两天。没有交叉验证的单个模型可以在几分钟内完成训练。
问:如果要你选出一项本次比赛中你所使用的最重要的技术或者小窍门,你会选什么呢?
答:毫无疑问,最重要的步骤当属预先进行的探索性分析,从而对数据有更好的了解。
探索性分析的结果表明,有一个图像数据之外的特征中非常重要,它能够帮助消除数据中大量的噪声。
在我看来,我们在计算机视觉或者深度学习问题中最容易忽视的步骤之一,就是需要事先理解数据,并且利用这些知识帮助我们做出最佳设计选择。
现成的算法如今更加易于获得和引用,我们往往会不假思索、简单粗暴地将这些算法应用于待解决的问题上。然而我们却没有真正想清楚这些算法是不是这一任务的最佳选择,或者没有想清楚在训练之前或之后是否需要对数据进行一些适当的处理工作。
图 6:优胜解决方案用到了 Tensorflow、Keras、XGBoost 框架
问:本次比赛中,你选择了哪些工具和程序库?
答:就我个人而言,我认为 TensorFlow 和 Keras 是最好用的,因此在处理深度学习问题时,我会倾向于选择它们。
至于 stacking 和 boosting 两种集成学习方法,我使用 XGBoost 去实现,这也是因为我对它很熟悉以及它已经被证实有好的运算结果。
比赛中,我使用了我的 dl4cv 虚拟环境(这是计算机视觉深度神经网络中用到的 Python 虚拟环境),并且将 XGBoost 加入其中。
问:对于初次参加 Kaggle 竞赛的新手们,你有什么好的建议吗?
答:Kaggle 有着很棒的社区文化,其上的比赛是依靠这个机制运行的。
社区中有很多供选手进行讨论的论坛,也有各种各样讨论的方式。如果参赛选手愿意,他们可以将自己的代码分享出来。当你试着学习通用的方法并将代码应用于具体问题上时,这将十分有帮助。
当我第一次参加 Kaggle 比赛时,我花了几个小时仔细阅读了论坛中的文章以及其它高质量的代码,我发现这是学习的最佳途径之一。
问:下一步的打算如何?
答:目前我手头上有很多项目要去做,因此我将会忙上一段时间。还有一些 Kaggle 比赛看上去十分有趣,所以之后我很有可能再回来参与到其中。
问:如果读者想要和你交流,你的联系方式是什么呢?
答:最好方式的话,在我的 LinkedIn 用户资料中有写到。大家同样可以通过 LinkedIn 联系 Weimin Wang。同时,我会参加 PyImageConf2018,如果大家想要和我当面交流,那时候可以来找我。
via PyImageSearch
雷锋网 AI 研习社编译整理。