前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kaggle冠军告诉你,如何从卫星图像分割及识别比赛中胜出?

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

作者头像
量子位
发布2018-03-30 15:32:03
2.7K0
发布2018-03-30 15:32:03
举报
文章被收录于专栏:量子位量子位
王小新 编译自 Kaggle 量子位 出品 | 公众号 QbitAI

在2016年12月至2017年3月期间,Kaggle网站举办了一场对英国国防科学与技术实验室(DSTL)提供的卫星图像进行场景特征检测的图像分割比赛。

主办方所提供的训练集里包含了25个1平方公里大小地区的高分辨率卫星图像,具体任务是通过算法进行识别10个不同类型的对象,分别是:

  1. 房屋和楼房;
  2. 混杂的人工建筑;
  3. 道路;
  4. 铁路;
  5. 树木;
  6. 农作物;
  7. 河流;
  8. 积水区;
  9. 大型车辆;
  10. 小轿车。

Kyle的Kaggle主页

比赛结束后,冠军Kyle Lee接受了Kaggle网站的采访,详细地介绍了他在这次比赛中的获胜之道。其中,耐心和坚持是关键因素,他花费了大量的时间,为不同的类别开发了独特的处理技术、采样策略和U-NET结构。

以下内容节选自Kaggle对Kyle的采访:

你的整体策略是什么?

总而言之,我的解决方案主要有以下几点:

1. 将多尺度图像块与滑动窗口生成方法相结合,利用区域块重叠技术覆盖到整个图像的边缘。最初将尺度为256x256和288x288的图像块相结合,后来又加入了尺度为224x224和320x320的图像块;

2. 组合不同的频段(bands)和尺度(scales),来训练和融合网络模型,得到最优的U-NET网络;

3. 对小样本类别进行过采样。过采样在小样本图像上以较小的步长来滑动采样窗口,在大样本图像上以比默认值更大的步长来滑动采样窗口;

4. 作用于河流对象的指标法,组合无差别水分指数(Non-Differential Water Index)和顶端叶绿素含量指数(Canopy Chlorophyl Content Index)这两个指标来辨识河流;

5. 对道路、积水区、河流、小轿车与大型车辆这些对象进行后期处理。这种后期处理办法解决了积水区和河流之间的类别混乱,同时去除道路上的伪影,并在计算大型车辆得分时设置附加权值;

6. 大型车辆识别。在这里我用了一些技巧来训练用于预测道路和房屋的网络。我只使用RGB频段的图像数据,取平均值,并训练多个融合网络,对大型车辆进行分割。

7. 农作物。我先将图像的尺度降低为1024×1024,然后利用滑动窗口重叠采样,得到尺度为256x256的图像块。

图1:辨识所有类别的完整网络示意图

你是如何进行特征提取和数据预处理?

我使用不同大小的滑动窗口,对A频段和M频段的图像分开处理。另外,我还在一些融合模型中对小样本类别进行过采样操作。关于滑动窗口的详细参数如下:

图2:各类过采样的详细参数

同时对积水区和河流进行过采样是一个不错的方法。因为过采样能减少积水区的伪影,降低了积水区和河流的类别混乱。

就网络所用的数据频段来说,我主要使用灰度图、RGB图像和多光谱M频段,也使用了短波红外A频段。对于A频段,我没有使用所有的通道,而是随机选择几种通道,以节省训练时间和内存占用。

在上面也提到过,我仅对道路和建筑物周围的车辆进行滑动窗口采样,用于网络训练和预测,这有助于减少训练所需的图像数量,并允许对车辆图像块进行针对性的过采样。该方案也应用于测试集,你可以从流程图中看出一系列结果。

最后,在预处理中,将训练集的图像减去平均值,并标准化偏差。也就是说,训练集、验证集和测试集的图像块都需要减去全局平均值,再除以训练集的标准偏差。

你使用了哪种监督学习方法?

U-NET网络经常用于“超声神经分割”(Ultrasonic Nerve Segmentation)比赛和其他的分割比赛中。在此次比赛中,我也大量使用了这种网络,因为这是目前扩展性最好的完全卷积网络(Fully Convolutional Network)。事实上,如果我没有猜错,大多数参赛者都使用了升级版U-NET网络。

我对原始的网络结构进行了调整,在下游路径添加了BN层(batch-normalization),在后合并路径上添加了dropout层,所有激活层都使用的是指数线性单元(ELU)。通过交叉验证评分,对于不同的类别使用不同的网络深度和图像尺寸,如256 x 256,288 x 288等。

在我的实验过程中,有一种网络结构在训练时间等方面都具备最优的性能。这种网络有着较大的图像尺寸(288x288)和较浅的U-NET网络深度(3组2 x conv层+ maxpool)。

图3:不同类别的U-NET结构

最终,我创建了40多种不同尺度、宽度和深度的网络模型,来训练数据子样本和选择最佳频段。

图4:10类对象的全部网络模型表1
图5:10类对象的全部网络模型表2

在交叉验证方面,我根据不同类别,使用了10%到20%的随机图像块,大样本类别比例更高。对于过采样的小样本类别,只使用5%的随机图像块。这样,整体上减少了模型的运行时间。

训练集的图像(包括图像和标签)通过旋转45度、缩放15-25%、剪切操作、切换频段(仅针对某些网络)和垂直+水平翻转等图像增强操作,增加泛化能力,网络的训练时间也随之增加。对验证集或测试集不进行上述操作。

在优化策略方面,NAdam优化器效果不好,直接使用Adam作为优化器,用Jaccard Loss作为训练指标。我的学习率优化方法是,每经过30次迭代,学习率减小为原来的0.2倍。

在处理网络输出上,大多数类直接使用标签算术平均,对于积水区和大型车辆类别采用相加方法,仅在使用NDWI指数和CCCI指数的河流上使用了交叉选取的方法。

对于数据,最重要的洞察力是什么?

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

积水区与河流

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

图6:积水区的伪影问题

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

大型车辆和小轿车

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

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

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

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

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

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

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

什么结果让你感到惊讶?

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

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

图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内存的桌面系统

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你的整体策略是什么?
  • 你是如何进行特征提取和数据预处理?
  • 你使用了哪种监督学习方法?
  • 对于数据,最重要的洞察力是什么?
  • 什么结果让你感到惊讶?
  • 你使用哪些工具?
  • 你是如何度过这次比赛?
  • 你的硬件配置是怎样的?
  • 您获胜方案的总运行时间是多少?
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档