社会焦点

Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?(2)

字号+ 作者: 来源: 2017-05-01

我的理解是,大多数参赛者在积水区和两种车辆对象的识别率都比较低,在这一块,我花了很多功夫来进对图像进行预处理和后期处理。我相信,只要提高这三类对象(积水区,小轿车和大型车辆)的识别率,就能领先其他参

  我的理解是,大多数参赛者在积水区和两种车辆对象的识别率都比较低,在这一块,我花了很多功夫来进对图像进行预处理和后期处理。我相信,只要提高这三类对象(积水区,小轿车和大型车辆)的识别率,就能领先其他参赛者,提高我的最终成绩排名。

  积水区与河流

  对于积水区,积水区的主要问题之一是会与河流相混淆。如前所述,对积水区和河流进行过采样,有助于U-NET网络在积水区预测时解决河流的伪影问题,但仍然有大量河流对象的旁支干扰,下图为积水区预测的最初效果。

  Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?

  图6:积水区的伪影问题

  从常识上来说,河流总是会延伸到图像的边界,而积水区一般只有小的重叠区域,这是解决问题的关键。此外,为了检测河流而建立的NDWI指数可能与原始的积水区预测结果相重叠,并且两者间非常相似的断裂边缘可以被合并成凸包,形成一种触及图像边界的完整轮廓。总之,检查积水区和河流的图像边界轮廓,是后期处理流程的一部分工作,能将一些错分为积水区的图像转变为河流类。

  大型车辆和小轿车

  此外,我也花了大量时间用于分类两类车辆对象。我注意到,无论是在训练数据中,还是根据常识来判断,车辆往往停放在道路上或道路附近,以及建筑物的周围。

  Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?

  图7:在道路上和建筑物周围的小轿车

  我们只对包含有建筑物和道路的车辆图像块进行训练和预测,同时对车辆图像样本进行过采样,并缩小网络中的卷积核大小。此外,我只采用RGB图像作为输入数据,因为在其他的频段中,车辆对象不可见或明显移位。

  其次,许多车辆在图像模糊和处于标记区域时,都很难区分大型车辆和小轿车。作为参照,这些训练数据的标记区域大小显示在下面的直方图中,并且在大型车辆和小轿车之间,大约有50-150像素点的大面积重叠。

  Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?

  图8:小轿车和大型车辆的标记区域像素点数量对比

  为了解决这个问题,我将小轿车和大型车辆合并为一类,训练了更多的网络,并将这个网络与识别大型车辆的网络进行合并。这是因为该合并网络没有类别混乱,所以能够更好地预测多边形。然后我设置了这个合并网络识别区域的最小像素为200,目的是只提取大型车辆。对于小轿车的识别,基本上只是采取多个小轿车网络预测的平均值,并删除与大型车辆重叠的轮廓和超过区域像素阈值的多边形。此外,再通过建筑物、树木和其他类别的标签排除两类车辆对象的可能性。

  后来的分析表明,这种方法有助于大型车辆的私有LB评分,如果省去这部分,对大型车辆的预测性能将下降59%。另一方面,去除上述的区域最小像素门槛,小型车辆的预测性能没有任何的改善。

  什么结果让你感到惊讶?

  令我惊讶的是,使用简单快速的指数法可以很好地预测河流对象。我没有采用深度学习的方法,而是结合NDWI指数和CCCI指数进行边界连接检查,以过滤掉积水区和建筑物,从而腾出资源用于其他类的训练。相对于可能使用深度学习方法的其他团队来说,在这一类上,我的公开LB得分和私有LB得分是比较有竞争力的。

  最后,这是各类的CV值、私有LB得分和公开LB得分列表。

  Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?

  图9:各类的本地CV值,公开LB得分和私有LB得分比较。

  作物类别的私有LB评分带有星号(*),是因为OpenCV库的findContours函数出现错误,如果使用正确的WKT生成脚本,则该类别的私有LB得分为0.8344,而不是0.7089。这样我的解决方案的正确率可达0.50434,超过了0.5!而不是现在0.49272的总体私有LB分数。

  我在后来的比赛中才发现,这个错误导致了部分图像没有被检测出轮廓。如果我有时间,我会编写一个WKT格式标签转储Diff的程序。剩余的九类都使用了正确的提交脚本。

  我猜测,较好的车辆和积水区预测效果,使我在比赛中脱颖而出,因为其他优秀的参赛者往往车辆类别或积水区类别的得分不高。

  你使用哪些工具?

  以Theano后端的Keras ,用于操纵多边形的OpenCV库、Rasterio库和Shapely库。

  虽然我之前使用了VGG16分类器对合并后的车辆预测网络进行了微调,但效果并不是很好。所以在最终解决方案中,我没有使用预先训练好的模型。

  你是如何度过这次比赛?

  由于这是一个应用神经网络分割的比赛,我花了80%的时间用于调整和训练不同的网络并监控训练效果;剩下20%的时间用于设计预处理和后期处理流程。从各类所用时间的角度来看,超过70%的时间花在识别车辆、积水区和建筑物,而花了最少的时间识别农作物。

  在提交次数上,我多次尝试提交文件来微调近似多边形。我先尝试了正方形边框,然后改为近似多边形,接着在OpenCV中尝试侵蚀多边形。最终,我使用rasterio库和shapely库来执行从多边形到WKT格式的转换。除了树木之外,其他的类别都没有近似值,所以在转换为WKT格式之前,我首先将树木类别重新调整为1550 x 1550,这样能有效地逼近多边形。

  你的硬件配置是怎样的?

  在这次比赛中我使用了三部台式机:前两个用于所有类别的网络训练和预测,而第三个仅用于训练农作物的预测网络。

  • GTX1080(8GB)+ 48GB内存的桌面系统

  • GTX1070(8GB)+ 48GB内存的桌面系统

  • GTX960(4GB)+ 16GB内存的桌面系统

  • 您获胜方案的总运行时间是多少?

      假设所有的模型和所有的图像尺度预处理过程可以并行运行,那么完成所有网络的训练大约需要三天时间:一天进行预处理,一天进行训练和预测,剩下一天进行车辆预测并生成提交方案。

      量子位还曾经编译过Kaggle对这次比赛第三名的采访。要查看文中提到的Kaggle竞赛和U-NET论文,可以在量子位公众号(QbitAI)对话界面回复“卫星图像识别”。

      招聘

      我们正在招募编辑记者、运营等岗位,工作地点在北京中关村,期待你的到来,一起体验人工智能的风起云涌。

      相关细节,请在公众号对话界面,回复:“招聘”两个字。

      One More Thing…

      今天AI界还有哪些事值得关注?在量子位(QbitAI)公众号会话界面回复“今天”,看我们全网搜罗的AI行业和研究动态。笔芯~

      另外,量子位有一个机器学习入门群,欢迎加小助手的微信qbitbot,注明“加入门群”并做个自我介绍,如果你正在做相关研究,小助手会带你进群。

    转载请注明出处。


    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章