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

简介:
本文来自AI新媒体量子位(QbitAI)

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


最近,Kaggle网站举办了一场在卫星图像上进行场景特征检测的比赛,数据集由英国国防科学与技术实验室(DSTL)提供。

以色列团队deepsense.io在419支参赛队伍中获得了第四名的成绩。deepsense.io的模型使用了改进版的U-Net网络,这是一种常用于图像分割问题的人工神经网络。随后,他们在官方网站上发布文章,介绍了模型所使用的深度学习方法,并分享了在完成项目过程中学习到的教训。

量子位编译了他们的文章,供大家学习。

比赛介绍

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

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

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

数据预处理

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

类型 波段波段 像素分辨率 通道 规模
灰度图 全色波段 0.31 m 1 3348x3392
3通道 RGB 0.31 m 3 3348x3392
16通道 多光谱 1.24 m 8 837x848
16通道 近红外波段 7.5 m 8 134x136

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

训练模型

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

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

640?wx_fmt=png&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

 图像分割的卷积模型结构图

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

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

训练步骤

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

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

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

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

预测

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

后期处理

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

我们的解决方案

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

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

河流

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

大型和小型车辆

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

技术

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

最终结果

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

房屋和楼房:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

道路:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

铁路:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

农作物:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

河流:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

小汽车:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

结论

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

我们整理了文中提到的Kaggle竞赛以及论文链接,可以在量子位公众号(QbitAI)对话界面回复“卫星图像识别”查看。

本文作者:王新民 
原文发布时间: 2017-04-15
相关文章
|
3月前
|
机器学习/深度学习 算法 计算机视觉
基于GoogleNet深度学习网络的花朵类型识别matlab仿真
基于GoogleNet深度学习网络的花朵类型识别matlab仿真
|
5月前
|
机器学习/深度学习 算法 数据挖掘
基于Googlenet深度学习网络的人脸身份识别matlab仿真
基于Googlenet深度学习网络的人脸身份识别matlab仿真
|
4月前
|
机器学习/深度学习 算法 TensorFlow
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
56 0
|
16天前
|
机器学习/深度学习 数据采集 算法
深度学习在医学影像识别中的应用与挑战
医学影像识别是深度学习技术在医疗领域中的重要应用之一。本文将探讨深度学习在医学影像识别中的应用现状、挑战以及未来发展方向。通过对深度学习算法的介绍和医学影像识别的案例分析,展示了深度学习在提高医学影像诊断准确性、降低医疗成本、改善医疗服务质量等方面的潜力。同时,也指出了在医学影像识别中面临的数据质量、隐私保护、模型可解释性等挑战,并探讨了未来发展中需要解决的技术问题和可能的解决方案。
|
25天前
|
机器学习/深度学习 算法
深度学习在医学影像识别中的应用与挑战
医学影像识别是深度学习在医疗领域中的重要应用之一,通过结合深度学习算法和医学影像技术,可以实现对疾病、肿瘤等病变的自动化识别和分析。本文将从深度学习在医学影像识别中的优势和挑战两个方面展开讨论,旨在探讨深度学习技术在医学影像领域的前景和发展方向。
9 0
|
27天前
|
机器学习/深度学习 算法
深度学习在医疗影像识别中的应用与挑战
传统医疗影像识别技术在临床诊断中存在一定局限性,而深度学习技术的引入为医疗影像识别带来了新的可能性。本文将探讨深度学习在医疗影像识别中的应用现状与挑战,并分析其潜在的未来发展方向。
|
29天前
|
机器学习/深度学习 人工智能 算法
深度学习在医疗影像识别中的应用与挑战
随着人工智能技术的不断发展,深度学习在医疗领域的应用日益广泛。本文将探讨深度学习在医疗影像识别中的重要性及挑战,展示其在提高诊断准确性、加速医疗影像分析等方面的潜力与前景。
8 1
|
30天前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
这是一个关于使用深度学习进行指纹识别的算法概述。在matlab2022a环境下,通过预处理指纹图像(灰度化、二值化等)并利用卷积神经网络(CNN)提取特征。CNN架构包含卷积、池化、归一化和全连接层。特征向量通过余弦相似度计算匹配,训练时采用triplet loss优化。部分核心代码展示了加载预训练模型进行测试集分类预测并计算准确率的过程。
|
2月前
|
机器学习/深度学习 算法 算法框架/工具
基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)
基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)
157 0
|
2月前
|
机器学习/深度学习 算法 搜索推荐
《深度学习在医学影像识别中的应用与前景》
【2月更文挑战第4天】 医学影像识别是近年来深度学习技术的一个热门应用领域。本文将介绍深度学习在医学影像识别中的应用现状,探讨其在医学诊断、治疗以及医疗大数据分析等方面的潜在前景,并对未来发展进行展望。
32 4