使用深度学习分类像素 (影像分析)

获得 Image Analyst 许可后可用。

摘要

用于运行输入栅格上的训练深度学习模型,以生成分类栅格,其中每个有效像素都被分配了一个类标注。

该工具需要包含经过训练的模型信息的模型定义文件。 可以使用训练深度学习模型工具或第三方训练软件(例如 TensorFlow、PyTorch 或 Keras)训练模型。 模型定义文件可以是 Esri 模型定义 JSON 文件 (.emd) 或深度学习模型包,它必须包含为处理每个对象调用的 Python 栅格函数的路径以及经过训练的二进制深度学习模型文件的路径。

使用情况

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

    要设置计算机以在 ArcGIS AllSource 中使用深度学习框架,请参阅安装 ArcGIS 的深度学习框架

  • 该工具将调用第三方深度学习 Python API(例如 TensorFlow、PyTorch 或 Keras),并使用指定的 Python 栅格函数来处理每个对象。

  • 可以在 Esri Python 栅格函数 GitHub 页面中找到此工具的示例用例。 您还可以按照 GitHub 仓库中的示例和说明编写自定义 Python 模块。

  • 模型定义参数值可以是 Esri 模型定义 JSON 文件 (.emd)、JSON 字符串或深度学习模型包 (.dlpk)。 当在服务器上使用此工具时,JSON 字符串十分有用,因为您可以直接粘贴 JSON 字符串,而无需上传 .emd 文件。 .dlpk 文件必须存储在本地。

  • 有关深度学习的详细信息,请参阅 ArcGIS AllSource 中的深度学习

  • 以下代码示例使用 Esri 模型定义文件 (.emd):

    {
        "Framework":"TensorFlow",
        "ModelConfiguration":"deeplab",
    
        "ModelFile":"\\Data\\ImgClassification\\TF\\froz_inf_graph.pb",
        "ModelType":"ImageClassification",
        "ExtractBands":[0,1,2],
        "ImageHeight":513,
        "ImageWidth":513,
    
        "Classes" : [
            {
                "Value":0,
                "Name":"Evergreen Forest",
                "Color":[0, 51, 0]
             },
             {
                "Value":1,
                "Name":"Grassland/Herbaceous",
                "Color":[241, 185, 137]
             },
             {
                "Value":2,
                "Name":"Bare Land",
                "Color":[236, 236, 0]
             },
             {
                "Value":3,
                "Name":"Open Water",
                "Color":[0, 0, 117]
             },
             {
                "Value":4,
                "Name":"Scrub/Shrub",
                "Color":[102, 102, 0]
             },
             {
                "Value":5,
                "Name":"Impervious Surface",
                "Color":[236, 236, 236]
             }
        ]
    }
  • 输入栅格可以是单个栅格、多个栅格或附加影像的要素类。 有关附件的详细信息,请参阅添加或移除文件附件

  • 增加批处理大小可以提高工具性能;但是,随着批处理大小的增加,会占用更多内存。 如果发生内存不足错误,请使用较小的批处理大小。 可以使用参数参数调整 batch_size 值。

  • 批处理大小为平方数,例如 1、4、9、16、25、64 等。 如果输入值不是完美平方,则使用可能的最高平方值。 例如,如果指定值为 6,则表示批处理大小设置为 4。

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

参数

标注说明数据类型
输入栅格

将分类的输入栅格数据集。

输入可以是镶嵌数据集、影像服务或影像文件夹中的一个或多个栅格,或者具有影像附件的要素类。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
模型定义

模型定义参数值可以是 Esri 模型定义 JSON 文件 (.emd)、JSON 字符串或深度学习模型包 (.dlpk)。 当在服务器上使用此工具时,JSON 字符串十分有用,因为您可以直接粘贴 JSON 字符串,而无需上传 .emd 文件。 .dlpk 文件必须存储在本地。

其中包含深度学习二进制模型文件的路径、待使用的 Python 栅格函数的路径以及其他参数,例如首选切片大小或填充。

File; String
参数
(可选)

模型定义参数中的信息将用于填充此参数。 这些参数将有所不同,具体取决于模型架构。 以下是在 ArcGIS 中训练的模型支持的模型参数: ArcGIS 预训练模型和自定义深度学习模型可能具有该工具支持的其他参数。

  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。
  • padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • tile_size - 影像切片的宽度和高度,影像将按照此值分割以进行预测。 此参数仅适用于 CycleGAN 架构。
  • predict_background - 指定是否对背景类进行分类。 如果为 true,则也会对背景类进行分类。 此参数适用于 UNET、PSPNET、DeepLab 和 MMSegmentation。
  • test_time_augmentation - 在预测期间执行测试时数据增强。 如果值为 true,则输入影像的翻转和旋转变体的预测将合并到最终输出中。 此参数适用于 UNET、PSPNET、DeepLab、HED Edge Detector、BDCN Edge Detector、ConnectNet、MMSegmentation 和 Multi-Task Road Extractor。
  • merge_policy - 用于合并增强预测的策略。 可用选项包括平均值、最大值和最小值。此参数仅在使用测试时数据增强时适用。 此参数适用于 MultiTaskRoadExtractor 和 ConnectNet 架构。 如果 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • threshold - 置信度得分高于此阈值的预测将包含在结果中。 允许的值范围为从 0 到 1.0。 如果模型的 .emd 文件中的 ArcGISLearnVersion 为 1.8.4 或更高版本,则 MultiTaskRoadExtractor 和 ConnectNet 架构适用。 如果 ArcGISLearnVersion 为 1.8.4 或更高版本,并且 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • return_probability_raster - 指定输出是否为概率栅格。 如果为 true,则输出将为概率栅格。 如果为 false,则输出将为二进制分类栅格。 默认值为 false。 如果模型的 .emd 文件中的 ArcGISLearnVersion 为 1.8.4 或更高版本,则 MultiTaskRoadExtractor 和 ConnectNet 架构适用。 如果 ArcGISLearnVersion 为 1.8.4 或更高版本,并且 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • direction - 图像将从一个域转换为另一个域。 选项为 AtoBBtoA。 此参数仅适用于 CycleGAN 架构。 有关此参数的详细信息,请参阅 CycleGAN 的工作原理
  • thinning - 指定是对预测边进行细化,还是对其进行概化。 选项为 TrueFalse。 如果 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构适用。

Value Table
处理模式

指定处理镶嵌数据集或影像服务中的所有栅格项目的方式。 当输入栅格是镶嵌数据集或影像服务时,将应用此参数。

  • 以镶嵌影像方式处理将镶嵌在一起并处理镶嵌数据集或影像服务中的所有栅格项目。 这是默认设置。
  • 单独处理所有栅格项目将作为独立影像处理镶嵌数据集或影像服务中的所有栅格项目。
String
输出文件夹
(可选)

将存储输出分类栅格的文件夹。 将使用此文件夹中的分类栅格来生成镶嵌数据集。

当输入栅格是要单独处理所有项目的影像文件夹或镶嵌数据集时,此参数为必需项。 默认为工程文件夹中的文件夹。

Folder
输出要素
(可选)

将存储输出分类栅格的要素类。

当输入栅格为图像要素类时,此参数为必需参数。

Feature Class
覆盖附件
(可选)

指定是否将覆盖现有图像附件。

  • 未选中 - 将不会覆盖现有图像附件,并且新图像附件将存储在新要素类中。 取消选中此参数时,输出要素参数将可用。 这是默认设置。
  • 选中 - 现有要素类将被新的已更新附件覆盖。

仅当输入栅格参数值为具有图像附件的要素类时,此参数才适用。

Boolean

返回值

标注说明数据类型
输出栅格数据集

包含结果的栅格或镶嵌数据集的名称。

Raster Dataset

ClassifyPixelsUsingDeepLearning(in_raster, in_model_definition, {arguments}, processing_mode, {out_classified_folder}, {out_featureclass}, {overwrite_attachments})
名称说明数据类型
in_raster

将分类的输入栅格数据集。

输入可以是镶嵌数据集、影像服务或影像文件夹中的一个或多个栅格,或者具有影像附件的要素类。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
in_model_definition

in_model_definition 参数值可以是 Esri 模型定义 JSON 文件 (.emd)、JSON 字符串或深度学习模型包 (.dlpk)。 当在服务器上使用此工具时,JSON 字符串十分有用,因为您可以直接粘贴 JSON 字符串,而无需上传 .emd 文件。 .dlpk 文件必须存储在本地。

其中包含深度学习二进制模型文件的路径、待使用的 Python 栅格函数的路径以及其他参数,例如首选切片大小或填充。

File; String
arguments
[arguments,...]
(可选)

in_model_definition 参数中的信息将用于设置此参数的默认值。 这些参数将有所不同,具体取决于模型架构。 以下是在 ArcGIS 中训练的模型支持的模型参数: ArcGIS 预训练模型和自定义深度学习模型可能具有该工具支持的其他参数。

  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。
  • padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • tile_size - 影像切片的宽度和高度,影像将按照此值分割以进行预测。 此参数仅适用于 CycleGAN 架构。
  • predict_background - 指定是否对背景类进行分类。 如果为 true,则也会对背景类进行分类。 此参数适用于 UNET、PSPNET、DeepLab 和 MMSegmentation。
  • test_time_augmentation - 在预测期间执行测试时数据增强。 如果值为 true,则输入影像的翻转和旋转变体的预测将合并到最终输出中。 此参数适用于 UNET、PSPNET、DeepLab、HED Edge Detector、BDCN Edge Detector、ConnectNet、MMSegmentation 和 Multi-Task Road Extractor。
  • merge_policy - 用于合并增强预测的策略。 可用选项包括平均值、最大值和最小值。此参数仅在使用测试时数据增强时适用。 此参数适用于 MultiTaskRoadExtractor 和 ConnectNet 架构。 如果 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • threshold - 置信度得分高于此阈值的预测将包含在结果中。 允许的值范围为从 0 到 1.0。 如果模型的 .emd 文件中的 ArcGISLearnVersion 为 1.8.4 或更高版本,则 MultiTaskRoadExtractor 和 ConnectNet 架构适用。 如果 ArcGISLearnVersion 为 1.8.4 或更高版本,并且 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • return_probability_raster - 指定输出是否为概率栅格。 如果为 true,则输出将为概率栅格。 如果为 false,则输出将为二进制分类栅格。 默认值为 false。 如果模型的 .emd 文件中的 ArcGISLearnVersion 为 1.8.4 或更高版本,则 MultiTaskRoadExtractor 和 ConnectNet 架构适用。 如果 ArcGISLearnVersion 为 1.8.4 或更高版本,并且 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构同样适用。
  • direction - 图像将从一个域转换为另一个域。 选项为 AtoBBtoA。 此参数仅适用于 CycleGAN 架构。 有关此参数的详细信息,请参阅 CycleGAN 的工作原理
  • thinning - 指定是对预测边进行细化,还是对其进行概化。 选项为 TrueFalse。 如果 IsEdgeDetection 存在于模型的 .emd 文件中,则 BDCNEdgeDetector、HEDEdgeDetector 和 MMSegmentation 架构适用。

Value Table
processing_mode

指定处理镶嵌数据集或影像服务中的所有栅格项目的方式。 当输入栅格是镶嵌数据集或影像服务时,将应用此参数。

  • PROCESS_AS_MOSAICKED_IMAGE将镶嵌在一起并处理镶嵌数据集或影像服务中的所有栅格项目。 这是默认设置。
  • PROCESS_ITEMS_SEPARATELY将作为独立影像处理镶嵌数据集或影像服务中的所有栅格项目。
String
out_classified_folder
(可选)

将存储输出分类栅格的文件夹。 将使用此文件夹中的分类栅格来生成镶嵌数据集。

当输入栅格是要单独处理所有项目的影像文件夹或镶嵌数据集时,此参数为必需项。 默认为工程文件夹中的文件夹。

Folder
out_featureclass
(可选)

将存储输出分类栅格的要素类。

当输入栅格为图像要素类时,此参数为必需参数。

Feature Class
overwrite_attachments
(可选)

指定是否将覆盖现有图像附件。

  • NO_OVERWRITE将不会覆盖现有图像附件,并且新图像附件将存储在新要素类中。 指定此选项时,必须填充 out_featureclass 参数。 这是默认设置。
  • OVERWRITE现有要素类将被新的已更新附件覆盖。

仅当 in_raster 参数值为具有图像附件的要素类时,此参数才有效。

Boolean

返回值

名称说明数据类型
out_classified_raster

包含结果的栅格或镶嵌数据集的名称。

Raster Dataset

代码示例

ClassifyPixelsUsingDeepLearning 示例 1(Python 窗口)

此示例使用 ClassifyPixelsUsingDeepLearning 函数并基于自定义像素分类对栅格进行分类。

# Import system modules
import arcpy
from arcpy.ia import *

# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")

ClassifyPixelsUsingDeepLearning("c:/classifydata/moncton_seg.tif",
     "c:/classifydata/moncton.tif", "c:/classifydata/moncton_sig.emd")
ClassifyPixelsUsingDeepLearning 示例 2(独立脚本)

此示例使用 ClassifyPixelsUsingDeepLearning 函数并基于自定义像素分类对栅格进行分类。

# Import system modules
import arcpy
from arcpy.ia import *


# Set local variables
in_raster = "c:\\classifydata\\moncton_seg.tif"
in_model_definition = "c:\\classifydata\\moncton_sig.emd"
model_arguments = "padding 0; batch_size 16"
processing_mode = "PROCESS_AS_MOSAICKED_IMAGE"

# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")

# Execute 
Out_classified_raster = ClassifyPixelsUsingDeepLearning(in_raster, 
                   in_model_definition, model_arguments, processing_mode)
Out_classified_raster.save("c:\\classifydata\\classified_moncton.tif")