Skip To Content

栅格分析中的深度学习

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

深度学习工作流

工作流项目 1

可以在 ArcGIS Pro 中使用标注对象以供深度学习使用工具来创建训练样本并使用 ArcGIS REST API 中的导出训练数据进行深度学习栅格分析工具或 ArcGIS API for Python 为数据科学家准备数据。

工作流项目 2

可以使用训练深度学习模型栅格分析工具来训练深度学习。您也可以使用 ArcGIS REST API 通过深度学习框架来训练模型。输出深度学习包 (*.dlpk) 由模型定义文件和经过训练的深度学习模型和/或 Python 脚本构成,可将其作为 .dlpk 项目共享至您的门户。

工作流项目 3

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

借助门户上的 .dlpk 项目,可以运行使用深度学习检测对象工具、使用深度学习分类像素工具或使用深度学习分类对象工具来生成输出。

特性和功能

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

  • 使用卷积神经网络进行图像分类和对象检测。
  • 使用深度学习模型对图像像素进行分类,或检测或分类诸如飞机、树木、车辆、水体、建筑物和油井平台等对象。
  • 集成外部深度学习模型框架,其中包括 PyTorch、Keras 和 TensorFlow。
  • 在模型推断过程中处理栅格集合,以检测随时间的变化或检测不同感兴趣区域中的对象。
  • 生成面要素类来显示检测到的对象,以供其他分析或工作流使用。
  • 深度学习推理工具可以使用 CPU 进行分布式处理,或者在每个服务器节点上使用功能强大的 GPU(如果可用)。
  • 通过 ArcGIS 中预定义的模型配置,可以利用每个服务器节点的多个 GPU 来运行深度学习推断作业,其中包括 TensorFlow 对象检测 API 和 DeepLab、Keras MaskRCNN、PyTorch fastai 单帧检测器。
  • 如果输入栅格随附相应的地图空间以进行影像空间转换,则可以在“导出训练数据进行深度学习”的影像空间中导出训练影像片。

深度学习入门

训练样本的创建和导出由熟悉相关知识的影像分析人员在 ArcGIS 内完成,因为这些操作需要扎实的影像分类工作流知识。在 ArcGIS 中,可以使用“训练深度学习模型”栅格分析工具或 ArcGIS API for Python arcgis.learn 来训练深度学习模型。或者,可以在 ArcGIS 外部使用第三方深度学习 API 来训练深度学习模型。对模型进行训练后,.dlpk 项目将添加至 Portal for ArcGIS 并可以用于模型推断任务。可以在 Map ViewerArcGIS API for PythonArcGIS REST APIArcGIS Pro 中运行栅格分析工具来检测并分类对象或分类像素。整个深度学习工作流可以由一名在深度学习模型和 ArcGIS 影像分类方面具有经验的分析人员完成。

此外,系统还提供一个单独的深度学习安装应用程序,用于在 ArcGIS Image Server 默认 arcgispro-py3 环境中安装相应的深度学习框架 API(TensorFlow、Keras、PyTorch 和所有其他必需的 Python 库)。这是在 ArcGIS Image Server 上运行深度学习任务的先决条件。

有关针对栅格分析配置并部署 ArcGIS Enterprise 的帮助,请参阅帮助文档。有关配置 Raster Analysis 服务器以利用每个服务器节点的多个 GPU 的信息,请参阅其他步骤

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

      使用深度学习检测对象工具或使用深度学习分类对象工具的输出是一个要素类,用于显示模型检测或分类的对象,并且使用深度学习分类像素工具将输出分类栅格。

      注:

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

Esri 模型定义文件

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

模型定义文件参数说明

框架

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

支持的以下深度学习框架:

  • TensorFlow
  • Keras
  • PyTorch

InferenceFunction

ModelConfiguration

模型配置的名称。

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

TensorFlow

  • ObjectDetectionAPI
  • DeepLab

Keras

  • MaskRCNN
  • KerasClassifier

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

ModelFile

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

ModelType

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

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

InferenceFunction

(可选)

推断函数的路径。

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

  • TensorFlow 检测对象
  • Tensor Flow 分类像素
  • Keras 检测对象
  • PyTorch 检测对象
  • 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 项目类型。

注:

需要在根文件夹级别对深度学习模型包中包含的所有文件进行压缩。