Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度技术解析:遥感图像的语义分割项目

项目背景与痛点

随着卫星图像和无人机图像在数据搜集中的广泛应用,遥感图像的数据量呈现出爆发性增长。与此同时,人们对遥感图像的智能分析也提出了越来越高的要求,特别是在语义分割领域。语义分割的任务是为图像中的每个像素分配一个类别标签,这对于国土监控、环境监测、城市规划等领域至关重要。然而,由于遥感图像的复杂性和多样性,现有技术在准确性和效率上仍存在较大的提升空间。

核心技术揭秘

该项目基于深度学习框架 TensorFlow 2.0,利用其强大的 Keras API 实现了高度可定制性和高效性。为了提供清晰的内部数据流,下面是一个简化后的数据处理和模型训练流程图。

graph TD A[载入图像] --> B[数据预处理] B --> C{"是否需要增强?"} C -->|"是"| D[数据增强] C -->|"否"| E[直接处理] D --> E E --> F[划分训练/验证集] F --> G[启动训练] G --> H[模型评估] H --> I[调整优化] I --> J{"达到阈值?"} J -->|"是"| K[保存模型] J -->|"否"| L[继续训练] K --> G

在技术实现层面,项目利用 ResNet 等高效结构作为基础模型,通过 U-Net 等流行语义分割网络结构,有效地结合了编码器和解码器架构。该模型不仅能够从较低维度图像提取高维特征,还通过跳层连接提升了像素级分类精度。整个流程设计充分考虑了计算效率和效果优化,确保在不损失处理精度的前提下,能够高效应用于大规模遥感图像数据集。

功能亮点与差异

该项目的亮点在于其出色的扩展性和灵活性。通过 Keras 模块化设计,用户可以根据具体应用需求自定义模型结构、损失函数和优化器。相较同类工具,这是一个强大的差异化功能,使得其不仅仅是一个简单的语义分割工具,更是为研究者提供了一个用于自定义优化和实验的平台。

差异化设计还包括对多种数据增强技术的支持,这种方法可以显著提高模型对不同类型和质量的遥感图像的鲁棒性。

应用场景与落地建议

该项目适合应用于需要高精度像素级分类的应用场景,如自然灾害监控、环境变化监测、土地管理等。然而,要在生产环境中使用时,还需要注意以下几点:

  1. 模型训练时长:遥感图像数据集往往非常庞大,模型训练过程可能会非常耗时,需要考虑优化训练流程或使用云端资源。
  2. 计算资源需求:U-Net 和 ResNet 等深度网络对内存和计算资源要求较高,确保有足够强大的硬件支持。
  3. 模型选择:根据数据类型和特征,选择合适的模型结构,如使用不同版本的 ResNet 或其他编码器结构。

综合评价

该项目凭借其严谨的设计思想、高度的灵活性和扩展性,在遥感图像的语义分割领域表现卓越。尽管在大规模图像处理中的计算需求和训练效率仍需进一步优化,但其在专业化场景中的应用潜力令人期待。

总体而言,该项目是遥感图像分析领域的一款强大工具,为希望深入探索这项技术的开发者和研究人员提供了一个坚实的起点。

简要分析

热度分
462
价值分
210
活跃状态
活跃

语言占比

Python

贡献者

README

Semantic-segmentation-of-remote-sensing-image
基于深度学习关于遥感影像的语义分割

首先看一下数据集,包含原始影像与标签,实际的分辨率很大,这个只是缩略图。
影像数据是Landsat8卫星的,用五四三波段进行合成,并利用GS方法进行全色第八波段的融合。(Envi软件处理)
标签是通过矢量图层以ArcGIS软件来处理生成的。

此代码库可在Tensorflow下keras环境运行,在Tensorflow1.12及Tensorflow2.0测试运行,代码更改后,更适合于Tensorflow2.0

train label

Unet、FPN模型及嵌入相关模块后的结果:

通过fit_generator运行,所以生成器需要自己编写,FCN8S与Segnet均为序列式模型与Keras的Model类有些不同,可以调用更多的方法。
展示一下Unet模型及FPN模型在此数据集上的结果,结果比Segnet与FCN好太多,所以就在这里不对比Segnet与FCN了。

其中Unet未经过预训练,其他集成的模块都经过了Imagenet预训练,并且测试都是通过划分数据来进行测试的,train75%,val25%。

准确率对比:

ACC

Iou对比:

IOU

Loss对比:

Loss

参数对比:

在相同的硬件条件下运行: 参数

不同全色波段融合方法的结果:

在目录里可以看到,这个影响不大。

Unet++模型结果:

混淆矩阵百分比:

混淆矩阵

混淆矩阵像素数:

混淆矩阵

相关统计:

当中1,2,3,4,5,15分别代表预测后的像素值,每个像素值代表一类 1 2 3

结果图的拼接痕迹问题:

我认为这个很大概率上跟模型的拟合能力、泛化能力有关,所以这个问题不用考虑,只要能够训练到所有的像素就可以了。 Unet等相关模型预测的图,“拼接痕迹”很小。

代码运行:

弄好数据集后,需要切割,切割的话这个可以参考一下生成数据并增强.py,更改相关参数即可。
然后通过里面的Segnet的训练程序启动即可,需要修改参数。
这个Segnet、FCN8S是用序列式类来实现的模型,所以预测的话是跟Model类有一点不相同,就是可以调用predict_classes的方法。
Model类文件里提供了使用Model类的模型的预测方法。
以上所有代码只是提供参考,训练其他数据的话很多参数需要自己修改,甚至生成器也需要更改,如果想对数据类别进行加权或使用样本权重,主要记得在生成器中做修改就可以了。

CRF后处理:

模型预测完毕后,可以使用CRF进行后处理,CRF.py文件提供了相关代码参考,但未必保证结果可靠。

GDAL

如果自己做的图包含多个波段(往往大于4个),Opencv或PIL就不太顶用了,这时候GDAL就派上用场了
例如我有一个十波段图像,用此函数读取后为numpy数组类,shape为[h,w,10]

from osgeo import gdal
import numpy as np

def load_img(path):
    dataset = gdal.Open(path)
    im_width = dataset.RasterXSize
    im_height = dataset.RasterYSize
    im_data = dataset.ReadAsArray(0,0,im_width,im_height)
    im_data = im_data.transpose((1,2,0)) #此步保证矩阵为channel_last模式
    return im_data

提示

我的该贡献库中,提供了一些分割的模型及相关指标与损失的代码
1044197988-TF.Keras-Commonly-used-models

评论

暂无评论