使用 ArcGIS Image Analyst 扩展模块的深度学习

获得 Image Analyst 许可后可用。

使用 ArcGIS Image Analyst 扩展模块,您可以使用 ArcGIS Pro 中的影像执行整个深度学习工作流。 使用地理处理工具准备图像训练数据、训练对象检测、像素分类或对象分类模型,以及生成和查看结果。

注:

本主题介绍了使用 Image Analyst 进行影像工作流的深度学习。 有关 ArcGIS Pro 中所有深度学习功能的概述,请参阅 ArcGIS Pro 中的深度学习

工作流如下图所示。

深度学习工作流

步长描述

深度学习步骤 1

使用标注对象以供深度学习窗格创建训练样本,然后使用导出训练数据进行深度学习工具将样本转换为深度学习训练数据。

注:

Spatial Analyst 扩展模块还支持导出训练数据进行深度学习工具。

深度学习步骤 2

使用训练深度学习模型工具通过 PyTorch 训练模型,或在 ArcGIS Pro 外部使用支持的第三方深度学习框架训练模型。

深度学习步骤 3

使用训练模型运行使用深度学习检测对象工具、使用深度学习分类像素工具或使用深度学习分类对象工具以生成输出。

使用属性窗格查看和验证结果,并使用计算对象检测的精度工具计算精度。

特性和功能

通过 ArcGIS Pro 中的深度学习工具,可以使用除标准机器学习分类方法以外的更多方法。

  • 使用卷积神经网络或深度学习模型检测对象、对对象进行分类或对图像像素进行分类。
  • 集成外部深度学习模型框架,例如 TensorFlow、PyTorch 和 Keras。
  • 多次使用模型定义文件来检测随时间的变化或检测不同感兴趣区域中的对象。
  • 生成面要素类来显示检测到的对象的位置,以供其他分析或工作流使用。
  • 利用 GPU 处理以及使用 CPU 进行分布式处理。

深度学习入门

可在 ArcGIS Pro 中使用标准训练样本生成工具创建和导出训练样本。 深度学习模型可以使用训练深度学习模型工具通过 PyTorch 框架进行训练,或者可以在 ArcGIS Pro 外部使用另一个深度学习框架进行训练。 训练模型后,使用 Esri 模型定义文件 (.emd) 运行地理处理工具以检测影像中的要素或对其进行分类。

您必须安装深度学习框架 Python 包;否则,在将 Esri 模型定义文件添加到深度学习地理处理工具时会出现错误。 有关如何安装这些包的信息,请参阅安装 ArcGIS 的深度学习框架

  1. 创建并导出训练样本。
    1. 使用标注对象以供深度学习窗格或训练样本管理器来选择或创建分类方案。
    2. 为感兴趣的类类别或类要素创建训练站点样本。 保存训练样本文件。
    3. 运行导出训练数据进行深度学习地理处理工具,将源影像和训练样本转换为深度学习训练数据。 源影像可以是影像服务、镶嵌数据集、栅格数据集或栅格文件夹。 该工具的输出为影像片或样本,其中包含用于训练深度学习模型的训练场。 该工具的另一个输出是必须填充的模板文件 .emd
  2. 训练深度学习模型。
    1. 使用训练深度学习模型工具通过在上一步中生成的影像片训练深度学习模型。
  3. ArcGIS Pro 中运行推断地理处理工具。
    1. 使用使用深度学习检测对象使用深度学习 分类像素使用深度学习分类对象地理处理工具处理影像。 如果经过训练的模型整合了自定义 Python 栅格函数及其他变量(如用于微调灵敏度的填充或置信度阈值),则这些变量将显示在地理处理工具的用户输入对话框中。 数据类型(如字符串或数字)在 Python 栅格函数中指定。 理想情况下,其他推断参数的个数限制应为两个。

      Esri 模型定义参数值可以是 Esri 模型定义 JSON 文件 (.emd) 或 JSON 字符串。 当在服务器上使用此工具时,JSON 字符串十分有用,因为您可以直接粘贴 JSON 字符串,而无需上传 .emd 文件。

      The output of the 使用深度学习检测对象工具是显示模型检测到的对象的要素类。 使用深度学习分类像素工具会输出已分类栅格。 使用深度学习分类对象工具需要要素类和影像作为输入数据集,并将生成一个要素类,其中每个要素中的每个对象均以类名称标注。

使用深度学习模型后,您需要审查结果并评估模型的准确性。 使用属性窗格,通过基于对象的推断审查结果使用深度学习分类对象工具或使用深度学习检测对象工具)。 您也可以使用计算对象检测的精度工具生成表格和报表以进行精度评估。

要了解具有计算机视觉的深度学习应用程序的基础知识,请参阅深度学习简介

有关运行地理处理工具的要求以及您可能遇到的问题的信息,请参阅深度学习常见问题

Esri 模型定义文件

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

.emd 文件完成并验证后,只要输入影像来自与原始模型输入相同的传感器,且正在检测的类或对象相同,则可以将该文件多次用于推断。 例如,可以使用通过 Sentinel-2 卫星影像定义的具有检测油井平台模型的 .emd 文件,检测多个感兴趣区域和多个使用 Sentinel-2 影像的日期的油井平台。

下表列出了所有推断工具所使用的一些参数。 还有一些参数仅适用于特定工具,例如 CropSizeFixedBlackenAroundFeature 参数,二者仅适用于使用深度学习分类对象工具。

模型定义文件参数说明

框架

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

支持以下深度学习框架:

  • TensorFlow
  • Keras
  • PyTorch
如果使用未列出的深度学习框架训练模型,则需要一起使用自定义推断函数(Python 模块)和经过训练的模型,并且必须将 InferenceFunction 设置为 Python 模块路径。

ModelConfiguration

模型配置的名称。

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

TensorFlow

  • ObjectDetectionAPI
  • DeepLab

Keras

  • MaskRCNN

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

ModelType

模型类型。

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

ModelFile

经过训练的深度学习模型文件的路径。 文件格式将取决于模型框架。 例如,在 TensorFlow 中,模型文件为 .pb 文件。

描述

提供有关模型的信息。 模型信息可以包含描述已训练模型的所有信息。 例如,模型编号和名称、模型创建时间、性能精度等等。

InferenceFunction

(可选)

推断函数的路径。

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

  • 针对 TensorFlow 检测对象
  • 针对 Tensor Flow 分类像素
  • 针对 Keras 检测对象
  • 针对 PyTorch 检测对象
  • 针对 Pytorch 对对象进行分类
如果您使用的推断函数是上述之一,则无需在 .emd 文件中指定。 如果使用尚不支持的深度学习模型配置训练模型,或者需要特殊的推断逻辑,则需要一起使用自定义推断函数(Python 模块)和经过训练的模型。 在这种情况下,请将 InferenceFunction 设置为 Python 模块路径。 推断 Python 模块文件可以位于 ArcGIS Pro 可访问的任何位置。

SensorName

(可选)

用于收集生成训练样本时基于的影像的传感器的名称。

RasterCount

(可选)

用于生成训练样本的栅格数。

BandList

(可选)

源影像中使用的波段列表

ImageHeight

(可选)

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

ImageWidth

(可选)

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

ExtractBands

(可选)

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

(可选)

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

DataRange

(可选)

如果在预处理中进行了缩放或归一化,则为数据值的范围。

ModelPadding

(可选)

要添加到输入影像以用于推断的填充量。

BatchSize

(可选)

模型每次迭代中将使用的训练样本数量。

PerProcessGPUMemoryFraction

(可选)

为模型中每次迭代分配的 GPU 内存的比例。 默认值为 0.95 或 95%。

MetaDataMode

(可选)

用于影像片的元数据标注的格式。

ImageSpaceUsed

(可选)

用于训练模型的参考系统的类型。

  • MAP_SPACE
  • PIXEL_SPACE

WellKnownBandNames

(可选)

按照波段索引的顺序为每个输入波段提供的名称。 然后,可以在其他工具中按照这些给定名称来引用波段。

AllTileStats

训练数据中每个波段的统计数据。

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

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

下面是配置中包含多个可选参数的模型定义文件 (.emd) 的示例:

{
    "Framework": "PyTorch",
    "ModelConfiguration": "FasterRCNN",
    "ModelFile":"C:\\ModelFolder\\ObjectDetection\\river_detection.pb",
    "ModelType":"ObjectionDetection",
				"Description":"This is a river detection model for  imagery",
    "ImageHeight":448,
    "ImageWidth":448,
    "ExtractBands":[0,1,2,3],
				"DataRange":[0.1, 1.0],
				"ModelPadding":64,
				"BatchSize":8,
				"PerProcessGPUMemoryFraction":0.8,
				"MetaDataMode" : "PASCAL_VOC_rectangles",
				"ImageSpaceUsed" : "MAP_SPACE",
    "Classes" : [
      {
        "Value": 1,
        "Name": "River",
        "Color": [0, 255, 0]
      }
    ],
				"InputRastersProps" : {
						"RasterCount" : 1,
						"SensorName" : "Landsat 8",
						"BandNames" : [
								"Red",
								"Green",
								"Blue",
								"NearInfrared"
						]
				},
				"AllTilesStats" : [
      {
      		"BandName" : "Red",
      		"Min" : 1,
      		"Max" : 60419,
      		"Mean" : 7669.720049855654,
      		"StdDev" : 1512.7546387966217
      },
      {
      		"BandName" : "Green",
      		"Min" : 1,
      		"Max" : 50452,
      		"Mean" : 8771.2498195125681,
      		"StdDev" : 1429.1063589515179
      },
      {
      		"BandName" : "Blue",
      		"Min" : 1,
      		"Max" : 47305,
      		"Mean" : 9306.0475897744163,
      		"StdDev" : 1429.380049936676
      },
      {
      		"BandName" : "NearInfrared",
      		"Min" : 1,
      		"Max" : 60185,
      		"Mean" : 17881.499184561973,
      		"StdDev" : 5550.4055277121679
      }
    ],
}

深度学习模型包

深度学习模型包 (.dlpk) 包含运行深度学习推断工具所需的文件和数据以进行对象检测或影像分类。 该包可以作为 DLPK 项目上传到您的门户,并用作深度学习栅格分析工具的输入。

深度学习模型包必须包含 Esri 模型定义文件 (.emd) 和经过训练的模型文件。 经过训练的模型文件扩展名取决于您用于训练模型的框架。 例如,如果您使用 TensorFlow 训练模型,则模型文件将为 .pb 文件,而使用 Keras 训练的模型将生成 .h5 文件。 根据您用于训练模型的模型框架和选项,您可能需要包括 Python Raster 函数 (.py) 或其他文件。 您可以在一个深度学习模型包中包括多个经过训练的模型文件。

您可以在任何版本的 ArcGIS Pro 中打开大多数包。 默认情况下,包的内容存储在 <User Documents>\ArcGIS\Packages 文件夹中。 您可以在共享和下载选项中更改此位置。 在当前用于使用包的 ArcGIS Pro 版本中不受支持的包功能将不可用。

要查看或编辑 .dlpk 包的属性,或在 .dlpk 包中添加或移除文件,右键单击目录窗格中的 .dlpk 包,然后单击属性

在“目录”窗格中打开深度学习包

属性包括以下信息:

  • 输入 - .emd 文件、经过训练的模型文件以及运行推断工具所需的任何其他文件。
  • 构架 - 用于训练模型的深度学习框架。
  • ModelConfiguration - 执行的模型训练类型(对象检测、像素分类或要素分类)。
  • 描述 - 模型的描述。 此项可选且可编辑。
  • 汇总 - 模型的简短介绍。 此项可选且可编辑。
  • 标签 - 用于标识包的任何标签。 这对于在门户上存储的 .dlpk 包项目非常有用。

深度学习包属性

属性窗口中编辑的任何属性将在单击确定时更新。 如果正在从门户的目录窗格访问 .dlpk 包项目,则门户项目也将一并更新。

有关如何创建 .dlpk 包的信息,请参阅共享深度学习模型包

开发人员资源

除了 ArcGIS Pro 中提供的地理处理工具和工作流程外,您还可以在脚本和笔记本中执行深度学习任务。 如果您正在 ArcGIS REST API 中工作,请使用适用于栅格分析服务栅格分析服务任务的深度学习任务。 这些任务等同于可用的地理处理工具,但允许根据您的处理配置进行分布式处理。

如果您正在 ArcGIS API for Python 中工作,则 arcgis.learn模块 ArcGIS for Python API 网站上还提供许多其他的深度学习任务。

相关主题