使用深度学习分类对象 (Image Analyst)

获得 Image Analyst 许可后可用。

描述

用于运行输入栅格和可选要素类上的训练深度学习模型,以生成要素类或表,其中每个输入对象或要素均具有一个分配的类或类别标注。

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

使用方法

  • 您需要在 ArcGIS Pro Python 环境中安装适当的深度学习框架 Python API(PyTorch 或 Keras);否则将 Esri 模型定义文件添加到工具中时会发生错误。Esri 模型定义文件的创建者应提供相应的框架信息。

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

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

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

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

  • 请参阅下面的 .emd 文件示例。

    {
        "Framework": "Keras",
        "ModelConfiguration":"KerasClassifier",
        "ModelFile":"C:\\DeepLearning\\Damage_Classification_Model_V7.h5",
        "ModelType":"ObjectClassification",
        "ImageHeight":256,
        "ImageWidth":256,
        "ExtractBands":[0,1,2],
        "CropSizeFixed": 1,
        "BlackenAroundFeature": 1,
        "ImageSpaceUsed": "MAP_SPACE", 
        "Classes": [
        {
           "Value": 0,
           "Name": "Damaged",
           "Color": [255, 0, 0]
        },
        {
           "Value": 1,
           "Name": "Undamaged",
           "Color": [76, 230, 0]
        }
        ]
    }
  • CropSizeFixed 属性可定义每个对象周围的栅格切片的裁剪模式。值 1 表示将使用由 .emd 文件内的 ImageHeightImageWidth 属性定义的固定栅格切片。对象位于固定切片大小的中心。值 0 表示将使用可变切片大小,其中栅格切片将使用对象周围的最小边界框进行裁剪。

  • BlackenAroundFeature 属性指定是否掩码每个对象外部的像素。值 0 表示不会掩码对象外部的像素。值 1 表示将掩码对象外部的像素。

  • 该工具可以处理地图空间或像素空间中的输入影像。地图空间中的影像位于基于地图的坐标系中。像素空间中的影像位于原始影像空间中,没有旋转和变形。可以在导出训练数据进行深度学习工具中使用参考系统参数生成训练数据时指定参考系统。如果使用第三方训练软件对模型进行训练,则必须在 .emd 文件使用 ImageSpaceUsed 参数指定参考系统,可以设置为 MAP_SPACEPIXEL_SPACE

  • 输入栅格可以是单个栅格、多个栅格或附加影像的要素类。有关附件的详细信息,请参阅添加或移除文件附件

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

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

语法

ClassifyObjectsUsingDeepLearning(in_raster, out_feature_class, in_model_definition, {in_features}, {class_label_field}, {processing_mode}, {model_arguments})
参数说明数据类型
in_raster

用于检测对象的输入图像。输入可以是镶嵌数据集、影像服务或影像文件夹中的单个栅格或多个栅格。还支持具有影像附件的要素类。

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

包含输入要素类中对象或要素周围几何的输出要素类,以及用于存储分类标注的字段。

Feature Class
in_model_definition

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

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

File; String
in_features
(可选)

用于标识要分类或要标注的每个对象或要素位置的点、线或面输入要素类。输入要素类中的每一行表示一个对象或要素。

如果未指定输入要素类,则工具将假设每个输入影像包含单个待分类对象。如果一个或多个输入影像使用空间参考,则工具的输出为要素类,其中每个影像的范围将用作每个标注要素类的边界几何。如果一个或多个输入影像没有使用空间参考,则工具的输出为包含影像 ID 值和每个影像类标注的表。

Feature Class; Feature Layer
class_label_field
(可选)

包含输出要素类中类或类别标注的字段名称。

如果未指定字段名称,则会在输出要素类中生成一个名为 ClassLabel 的新字段。

String
processing_mode
(可选)

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

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

函数参数在 Python 栅格函数类中定义。您可以在此列出其他深度学习参数和用于试验和优化的参数,例如用于调整灵敏度的置信度阈值。参数名称将由工具通过读取 Python 模块进行填充。

Value Table

代码示例

ClassifyObjectsUsingDeepLearning 示例 1(Python 窗口)

此示例中生成了一个新的要素类,其标注字段可用于对影像中损坏和未损坏的建筑物进行分类。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
# Execute 
ClassifyObjectsUsingDeepLearning("C:/Data/Input_Image.tif", 
	"C:/Data/MyProject.gdb/Classified_Results", "C:/Data/BuildingDamageClassifier.emd", 
	"C:/Data/building_footprints.shp","Class_Label", 
	"PROCESS_AS_MOSAICKED_IMAGE", "padding 0;batch_size 4")
ClassifyObjectsUsingDeepLearning 示例 2(独立脚本)

此示例中生成了一个新的要素类,其标注字段可用于对影像中损坏和未损坏的建筑物进行分类。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
# Define input parameters
in_raster = "C:/Classify_Objects/input_image.tif" 
out_feature_class = "C:/Classify_Objects/MyProject.gdb/classified_results" 
in_model_definition = "C:/Classify_Objects/BuildingDanmageClassifier.emd" 
in_features = "C:/Classify_Objects/building_footprints.shp" 
class_label_field = "Damaged_or_Undamaged"
model_arguments = "padding 0;batch_size 4"
process_all_raster_items = "PROCESS_AS_MOSAICKED_IMAGE"

# Execute 
ClassifyObjectsUsingDeepLearning(in_raster, out_feature_class, in_model_definition,
	in_features, class_label_field,  
	process_all_raster_items, model_arguments)

许可信息

  • Basic: 需要 Image Analyst
  • Standard: 需要 Image Analyst
  • Advanced: 需要 Image Analyst

相关主题