Kaggle优胜者详解:如何用深度学习实现卫星图像分割与识别

Kaggle优胜者详解:如何用深度学习实现卫星图像分割与识别

最近,Kaggle网站举办了一场在卫星图像上进行场景特征检测的比赛Dstl Satellite Imagery Feature Detection,数据集由英国国防科学与技术实验室(DSTL)提供。以色列团队http://deepsense.io在419支参赛队伍中获得了第四名的成绩。http://deepsense.io的模型使用了改进版的U-Net网络,这是一种常用于图像分割问题的人工神经网络。随后,他们在官方网站上发布文章,介绍了模型所使用的深度学习方法,并分享了在完成项目过程中学习到的教训。

比赛介绍

国防科学技术实验室(DSTL),是英国国防部的执行机构,也是这次比赛的举办方。他们所提供的训练集里包含了25个1平方公里大小地区的高分辨率卫星图像,具体任务是通过算法进行识别10个不同类型的对象,分别是:

  1. 房屋和楼房;

  2. 混杂的人工建筑;

  3. 道路;

  4. 铁路;

  5. 树木;

  6. 农作物;

  7. 河流;

  8. 积水区;

  9. 大型车辆;

  10. 小轿车。

训练集的样本图像及对应标签:

从图中可以看出,这些对象之间并没有完全分离开来,你可以发现在道路上存在车辆,以及位于农作物内的树木。各类的分布是不均匀的,统计得到,农作物所占面积最多,达到了总面积的28%,树木占了10%,但是道路所占面积则小得多,只有总面积的0.8%,车辆所占面积只有0.02%。此外,大多数图像区域只有一个相应的类标签。

为了评估模型预测结果和地面实际情况的吻合程度,引入了检测评价函数Intersection over Union(IOU,也叫做Jaccard指数),来说明模型检测的准确率。如当得分为0,则说明完全不匹配,而得分为1时说明检测结果和实际情况完全吻合。最后的评分结果是将每个类的单独得分进行平均得到的。第一名队伍的模型评分为0.49,我们模型的评分结果也达到了0.46。

数据预处理

训练集图像有三个版本可供选择,分别是:灰度图、3通道RGB彩色图和16通道图像,详情见下表:

我们通过调整和对齐16通道图像,使其与3通道的RGB图像进行匹配。校准操作是非常必要的,能够消除通道之间的差异。最终,我们将训练集中三个版本的图像,整合成一个20通道的输入图像。

训练模型

我们通过借鉴U-Net网络结构来建立卷积网络模型,其中U-Net网络能够通过对低层次特征映射的组合,构建高层次复杂特征,来实现精确定位。

要详细了解U-Net,见论文Convolutional Networks for Biomedical Image Segmentation

这种网络结构能够就是为有效地解决图像分割问题而做的。我们和其他队伍在解决这个问题时都把它所谓首选。我们最终的网络结构如下:

在典型的卷积神经网络(CNN)结构中,通常会在每次最大池化操作后增加特征图谱(卷积通道)的数量。在我们的模型中,我们决定在整个网络中保持特征图谱始终为64个。这样做出于以下两个因素:首先,我们可以允许网络在进行下采样操作时丢失一些信息,因为该模型在上采样过程中已经可以得到相关低级特征。其次,在卫星图像中,不需要去理解和识别高层次3D物体的概念,因此,在较高网络层中增加特征图谱的数量,可能并不会影响到该模型的实际预测性能。

我们为每一类的对象都训练了特定的模型,因为这样能更容易对每一类网络进行微调,以获得更好的预测性能,并克服数据量不平衡的问题。

训练步骤

该模型能够对输入图像的每个像素作出该点属于目标类的概率。虽然用Jaccard指数作为模型的评估指标,但是在训练过程中以最小化所有像素的二进制交叉熵总和为训练目标。

我们对数据集通过预先计算得到数据的统计值,将图像集归一化为具有零均值和单位方差的数据集。

根据图像的实际类别,我们将预处理的图像保持不变,或者将图像及相应标签共同调整为1024x1024和2048x2048分辨率的正方形图像。在训练期间,我们从不同的图像中随机收集大小为256x256的图像块,其中一半的图像块总是包含了一些正像素,即分类的目标对象。我们通过对图像块随机地应用水平翻转、垂直翻转、随机旋转和颜色抖动等方法来增加批次中的图像数量。虽然在处理数据集的不平衡类问题时,有欠采样和调整数据集权重等多种方法,如上过采样方法是效果最好和最简单的方法。

每个网络模型有大约有170万个参数,设置批次大小为4。该网络训练没有采用现有模型进行微调的方法,在单个GTX 1070上花了约两天时间完成了从权值初始化开始进行的网络训练过程。

预测

我们在测试过程中时使用滑动窗口的方法,窗口大小固定为256x256,滑动步幅为64。图像块边界的对象在没有周围的环境时只能部分显示,我们通过上述操作能够消除对图像块边界效果较弱的预测。为了进一步提高预测质量,我们将输入图像的翻转和旋转版本,以及在不同尺度下训练的网络模型进行了平均操作。总体而言,我们获得了很好的平滑输出效果。

后期处理

地面实际情况的标签通过WKT格式文件进行加载,以由顶点定义的多边形来表示对象。我们在提交过程中需要简化所生成的多边形,去除不必要的噪声干扰。这样评估系统可以快速处理所提交的结果,避免超时而限制实际效果。我们可以通过使用二值化输出上的参数化操作,以最小的评估指标损失来实现多边形简化。在后期处理阶段,我们使用了形态学上的图像扩张和侵蚀操作,简单有效地去除了小于给定阈值的物体及小孔。

我们的解决方案

房屋,各种建筑物,道路,铁路,树木,农作物,积水区

对于这七类,输入训练集为20通道的图像集,具有1024和2048这两种不同的输入维度。我们以最小化二进制交叉熵损失总和为目标,分别对每个类别训练对应的卷积神经网络,得到了令人满意的结果。所有模型的输出简单地进行平均,然后根据特定的类对超参数进行后期处理。

河流

我们通过线性回归和随机森林的组合方法来识别河流对象,对20通道的输入数据进行了训练。由于水面独特的光谱响应,这种简单的方法起到了很好的效果。

大型和小型车辆

由于训练集中的车辆数量较少,我们发现本地验证得到的结果和公开排行榜上的结果相差较大。为了解决这个问题,我们分别为大型车辆和小汽车训练了对应的模型,以及将两个不同输入维度的模型标签进行相加。此外,我们改变输入数据,使用RGB+灰度的4通道输入数据,重复了所有实验,以增加我们模型在网络集成中的多样性。最终,我们对两类训练模型和单类特定模型进行平均得到了顶层输出,用来预测车辆类型。

技术

我们根据团队成员的喜好,基于PyTorch、Keras和TensorFlow这三种框架实现了预测模型。我们的策略是为每个类别建立单独的模型,并且需要仔细检查我们的代码确保不出错。为了运行模型并跟踪实验进度,我们使用了Neptune桌面应用。

最终结果

下面我们来展示一下最终模型的检测效果。

房屋和楼房:

道路:

铁路:

农作物:

河流:

小汽车:

 

结论

卫星领域能够产生大量的图像数据,非常适合应用深度学习方法进行研究。我们已经证明,可以应用最新研究方法来解决实际问题。目前模型的效果不错,我们期待未来会有更多的挑战。

torh.nn    http://codingdict.com/sources/py/torch.nn/8372.html

发布了88 篇原创文章 · 获赞 9 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/jwy2014/article/details/103774811
今日推荐