Skip To Content

栅格分析中的深度学习

ArcGIS Image Server 允许您使用统计或机器学习分类方法对遥感影像进行分类。深度学习是一种机器学习,依赖于多图层的非线性处理以便进行模型中描述的要素识别和图案识别。深度学习模型可以与 ArcGIS Image Server 集成,用于对象检测和影像分类。在 ArcGIS Pro 中使用分类训练样本管理器工具生成感兴趣要素或对象的训练样本,然后转换为在深度学习框架中使用的格式。数据科学家或影像科学家可使用这些训练样本通过第三方深度学习框架来训练模型。经过训练的模型和模型定义文件(或选择 python 栅格函数脚本文件)一起打包并作为深度学习包 (dlpk) 项目进行共享,该学习包之后可用于运行栅格分析推断工具。推断工具可以提取特定要素,或对影像中的像素进行分类。Dlpk 项目可以多次用作栅格分析工具的输入,从而在完成模型训练后可轻松评估不同位置和时间段的多个影像。

深度学习工作流

工作流项目 1

使用 ArcGIS Pro 中的训练样本管理器创建训练样本并使用 ArcGIS REST API 中的导出训练数据进行深度学习栅格分析工具或 ArcGIS API for Python 为数据科学家准备数据。

工作流项目 2

数据科学家使用训练数据通过第三方深度学习框架来开发模型。

工作流项目 3

数据科学家将深度学习包(包括模型定义文件和经过训练的模型和/或 Python 脚本)送回到 ArcGIS Image Server 栅格分析环境。

工作流项目 4

创建深度学习包 (.dlpk) 项目并将其共享到门户。通过 dlpk 项目,运行使用深度学习检测对象工具或使用深度学习对像素进行分类工具以生成输出。

工作流项目 5

您可以利用 ArcGIS API for Python 通过深度学习框架来训练模型。

特性和功能

您可以通过深度学习栅格分析工具使用除标准机器学习分类技术以外的更多技术。

  • 使用卷积神经网络进行影像分类。
  • 使用深度学习模型对影像像素进行分类或检测飞机、树木、车辆、水体和油井平台等对象。
  • 集成外部深度学习模型框架,包括 Keras、TensorFlow、CNTK 和 PyTorch。
  • 多次使用模型定义文件来检测随时间的变化或检测不同感兴趣区域中的对象。
  • 生成面要素类来显示检测到的对象,以供其他分析或工作流使用。
  • 深度学习推理工具可以使用 CPU 进行分布式处理,或者在每个服务器节点上使用功能强大的 GPU(如果可用)。

深度学习入门

训练样本的创建和导出由熟悉相关知识的影像分析人员在 ArcGIS 内完成,因为这些操作需要扎实的影像分类工作流知识。深度学习模型由数据科学家或具有丰富深度学习模型训练经验的人员在 ArcGIS 外通过深度学习框架进行训练。在 Esri 模型定义文件 .emd 中训练并定义模型后,您可将 dlpk 项目共享到 Portal for ArcGIS 并在 Map ViewerArcGIS API for PythonArcGIS REST APIArcGIS Pro 中运行栅格分析工具来检测对象或对像素进行分类。在某些情况下,所有三个步骤都可以由在深度学习模型和 ArcGIS 影像分类方面具有经验的一名分析人员完成。

您需要在 ArcGIS API for Python Python 3 环境中安装适当的深度学习框架 ArcGIS Server(TensorFlow、CNTK、PyTorch 或 Keras);否则在将 Esri 模型定义文件添加至工具时会发生错误。向 Esri 模型定义文件的创建者索取相应的框架信息

有关安装帮助,请参阅框架文档。有关针对栅格分析配置并部署 ArcGIS Enterprise 的帮助,请参阅帮助文档。

  1. 创建并导出训练样本。
    1. 使用 ArcGIS Pro 中的训练样本管理器选择或创建分类方案。
    2. 为感兴趣的类类别或类要素创建训练站点样本。保存训练样本文件。
    3. 运行导出训练数据进行深度学习栅格分析工具,将源影像和训练样本转换为深度学习训练数据。源影像可以是影像服务。该工具的输出是数据存储字符串,该字符串将用于存储输出影像芯片、标注和元数据文件。工具的其他输出是由数据科学家填充的模板 .emd 文件。
  2. 训练深度学习模型。
    1. 使用上述步骤 1 中生成的影像芯片通过深度学习框架(如 TensorFlow、CNTK、PyTorch 或 Keras)训练模型。
    2. 更新 .emd 文件,包括深度学习框架的名称、模型配置和其他可选属性。有关 .emd 文件中必选参数和可选参数的信息,请参阅以下 Esri 模型定义文件部分。
  3. Map ViewerArcGIS API for PythonArcGIS REST APIArcGIS Pro 中运行推断栅格分析工具。
    1. 使用使用深度学习检测对象使用深度学习对像素进行分类栅格分析工具处理您的影像。如果经过训练的模型整合了自定义 Python 栅格函数及其他变量(如用于微调灵敏度的填充或置信度阈值),则这些变量将显示在 ArcGIS ProMap Viewer 栅格分析工具的用户输入对话框中。数据类型(如字符串或数字)在 Python 栅格函数中指定。理想情况下,其他推断参数的个数限制应为两个。

      使用深度学习检测对象工具的输出是要素类,用于显示模型检测到的对象,而使用深度学习对像素进行分类工具的输出则是分类栅格。

      注:

      为了运行推断工具,深度学习模型框架必须安装在栅格分析服务计算机上,因为推断逻辑内置在框架 Python API 中,且是计算的必需项。

Esri 模型定义文件

.emd 文件是 JSON 文件,用于描述经过训练的深度学习模型。该文件包含运行推断工具所需的模型定义参数,并且应由训练该模型的数据科学家进行修改。文件中的必选参数与可选参数如下表所述。

模型定义文件参数说明

指南

用于训练模型的深度学习框架的名称。

支持的三种深度学习框架:

  • TensorFlow
  • CNTK
  • Keras
  • PyTorch

InferenceFunction

ModelConfiguration

模型配置的名称。

模型配置用于定义模型输入和输出、推断逻辑以及关于模型输入和输出的假设。现有的开源深度学习工作流用于定义标准输入和输出配置以及推断逻辑。ArcGIS 支持一组预定义配置:

TensorFlow

CNTK

Keras

PyTorch

如果使用了其中一个预定义配置,请在 .emd 文件中输入配置的名称。如果使用自定义配置训练深度学习模型,则需要在 .emd 文件或自定义 Python 文件中对输入和输出进行完整描述。

ModelFile

经过训练的深度学习模型文件的路径。由于许多模型框架文件格式都基于协议缓冲区,因此经过训练的深度学习模型为 .pb 文件,但也支持其他文件格式。

ModelType

模型类型。可以是以下任意一种类型:

  • ImageClassification - 用于对像素进行分类
  • ObjectDetection - 用于检测对象或要素

InferenceFunction

(可选)

推断函数的路径。

推断函数了解经过训练的模型数据文件并提供推断逻辑。ArcGIS 深度学习栅格分析工具支持六种推断函数:

  • 针对 TensorFlow 检测对象
  • 针对 Tensor Flow 分类像素
  • 针对 CNTK 检测对象
  • 针对 CNTK 分类像素
  • 针对 Keras 检测对象
  • 针对 Pytorch 检测对象
如果您使用的推断函数是上述之一,则无需在 .emd 文件中指定。如果使用尚不支持的深度学习模型配置训练模型,或者需要特殊的推断逻辑,则需要一起使用自定义推断函数(Python 模块)和经过训练的模型。在本例中,请将 InferenceFunction 设置为 Python 模块路径。

ImageHeight

(可选)

正在分类或处理的影像中的行数。

ImageWidth

(可选)

正在分类或处理的影像中的列数。

ExtractBands

(可选)

要从输入影像中提取的波段索引或波段名称。

(可选)

有关输出类类别或对象的信息。

下面的示例是使用标准模型配置的模型定义文件 (.emd):

{
    "Framework": "TensorFlow",
    "ModelConfiguration": "ObjectDetectionAPI",
    "ModelFile":"tree_detection.pb",
    "ModelType":"ObjectionDetection",
    "ImageHeight":850,
    "ImageWidth":850,
    "ExtractBands":[0,1,2],
    "Classes" : [
      {
        "Value": 0,
        "Name": "Tree",
        "Color": [0, 255, 0]
      }
    ]
}

深度学习包 (dlpk) 项目

深度学习栅格分析工具需要深度学习模型包 (dlpk) 作为输入。深度学习模型包由 Esri 模型定义 JSON 文件 (.emd)、深度学习二进制模型文件以及要使用的 Python 栅格函数(可选)组成。

准备好所有组件后,可以将所有文件压缩为 .zip 文件,然后将 .zip 文件作为 dlpk 项目上传至您的门户。有关详细信息,请参阅从您的计算机添加文件。您还可以将 .zip 文件扩展名更改为 .dlpk,以便在添加项目时自动检测 dlpk 项目类型。