使用深度学习检测对象 (Image Analyst)

获得 Image Analyst 许可后可用。

摘要

用于运行输入栅格上的训练深度学习模型,以生成包含其找到对象的要素类。 这些要素可以是所找到对象周围的边界框或面,也可以是对象中心的点。

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

使用情况

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

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

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

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

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

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

    {
        "Framework" :"TensorFlow",
        "ModelConfiguration": "ObjectDetectionAPI",
        
        "ModelFile": ".\\CoconutTreeDetection.model",
        "ModelType": "ObjectDetection",
        "ImageHeight": 850,
        "ImageWidth": 850,
        "ExtractBands": [0,1,2],
        "ImageSpaceUsed": "MAP_SPACE"
        "Classes": [
        {
            "Value": 0,
            "Name": "CoconutTree",
            "Color": [0, 255, 0]
        }
        ]
    }
  • 该工具可以处理地图空间或像素空间中的输入影像。 地图空间中的影像位于基于地图的坐标系中。 像素空间中的影像位于原始影像空间中,没有旋转和变形。 可以在导出训练数据进行深度学习工具中使用参考系统参数生成训练数据时指定参考系统。 如果使用第三方训练软件对模型进行训练,则必须在 .emd 文件中使用 ImageSpaceUsed 参数指定参考系统, 该参数可以设置为 MAP_SPACEPIXEL_SPACE

  • 增加批量大小可以提高工具性能;但是随着批量大小增加,所用内存也将随之增加。 如果出现内存不足错误,则降低批量大小。 可以使用自变量参数调整 batch_size 值。

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

  • 使用非极大值抑制参数标识和移除对象检测中重复的要素。 有关此参数的详细信息,请参阅非极大值抑制工具的用法部分。

  • 要仅检测镶嵌数据集中所选图像上的对象,请使用仅处理候选项目的处理模式参数。 您可以使用计算镶嵌候选项工具在镶嵌数据集和影像服务中查找最能代表镶嵌区域的图像候选项。

  • 该工具将支持并使用多个 GPU(如果可用)。 要使用特定的 GPU,指定 GPU ID 环境。 如果未设置 GPU ID,该工具将使用所有可用 GPU。 这是默认设置。

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

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

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

参数

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

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

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
输出检测到的对象

此输出要素类中包含围绕输入图像中检测到的一个或多个对象的几何。

Feature Class
模型定义

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

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

File; String
参数
(可选)

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

  • padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • threshold - 置信度得分高于此阈值的检测将包含在结果中。 允许的值范围为从 0 到 1.0。 此参数适用于所有模型架构。
  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。
  • nms_overlap - 两个重叠要素的最大重叠比,其定义为交集区域与并集区域之比。 默认值为 0.1。 此参数适用于所有模型架构。
  • exclude_pad_detections - 如果值为 true,则将过滤影像片内边距区域中的边附近可能被截断的检测结果。 此参数仅适用于 SSD、RetinaNet、YOLOv3、DETReg、MMDetection 和 Faster RCNN。
  • test_time_augmentation - 在预测期间执行测试时数据增强。 如果值为 True,则输入影像的翻转和旋转方向的预测将合并到最终输出,并且其置信度将取平均值。 对于仅在影像的某些方向上检测到的对象,这可能导致置信度值低于阈值。 此参数适用于所有模型架构。
  • tile_size - 影像切片的宽度和高度,影像将按照此值分割以进行预测。 此参数仅适用于 MaskRCNN。
  • merge_policy - 用于合并增强预测的策略。 可用选项包括平均值、最大值和最小值。此参数仅在使用测试时数据增强时适用。 此参数仅适用于 MaskRCNN。
  • output_classified_raster - 输出栅格的路径。 此参数仅适用于 MaXDeepLab。

Value Table
非极大值抑制
(可选)

指定是否将执行非极大值抑制,其中将标识重复的对象,并移除置信度值较低的重复要素。

  • 未选中 - 不执行非极大值抑制。 所有检测到的对象都将位于输出要素类中。 这是默认设置。
  • 选中 - 将执行非极大值抑制,并且将移除检测到的重复对象。

Boolean
置信度得分字段
(可选)

要素类中包含将由对象检测方法输出的置信度得分的字段的名称。

当选中了非最大抑制参数时需要用到该参数。

String
类值字段
(可选)

输入要素类中类值字段的名称。

如果未指定字段名称,则将使用 ClassvalueValue 字段。 如果这些字段不存在,则会将所有记录标识为属于一个类。

String
最大重叠比
(可选)

两个重叠要素的最大重叠比,其定义为交集区域与并集区域之比。 默认值为 0。

Double
处理模式
(可选)

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

  • 以镶嵌影像方式处理将镶嵌在一起并处理镶嵌数据集或影像服务中的所有栅格项目。 这是默认设置。
  • 单独处理所有栅格项目将作为独立影像处理镶嵌数据集或影像服务中的所有栅格项目。
  • 仅处理候选项目将仅处理输入镶嵌数据集属性表的 Candidate 字段中值为 1 或 2 的栅格项目。
String
使用像素空间
(可选)

指定是否对像素空间中的影像执行推断。

  • 未选中 - 将在地图空间中执行推断。 这是默认设置。
  • 选中 - 将在影像空间中执行推断,输出将重新转换为地图空间。 对于要素可能在使用地图空间时变形的倾斜影像或街景影像,此选项非常有用。

Boolean

派生输出

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

用于像素分类的输出分类栅格。 栅格数据集的名称将与输出检测对象参数值相同。

该参数仅在模型类型为全景分割时才可用。

Raster Dataset

DetectObjectsUsingDeepLearning(in_raster, out_detected_objects, in_model_definition, {arguments}, {run_nms}, {confidence_score_field}, {class_value_field}, {max_overlap_ratio}, {processing_mode}, {use_pixelspace})
名称说明数据类型
in_raster

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

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

此输出要素类中包含围绕输入图像中检测到的一个或多个对象的几何。

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 预训练模型和自定义深度学习模型可能具有该工具支持的其他参数。

  • padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • threshold - 置信度得分高于此阈值的检测将包含在结果中。 允许的值范围为从 0 到 1.0。 此参数适用于所有模型架构。
  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。
  • nms_overlap - 两个重叠要素的最大重叠比,其定义为交集区域与并集区域之比。 默认值为 0.1。 此参数适用于所有模型架构。
  • exclude_pad_detections - 如果值为 true,则将过滤影像片内边距区域中的边附近可能被截断的检测结果。 此参数仅适用于 SSD、RetinaNet、YOLOv3、DETReg、MMDetection 和 Faster RCNN。
  • test_time_augmentation - 在预测期间执行测试时数据增强。 如果值为 True,则输入影像的翻转和旋转方向的预测将合并到最终输出,并且其置信度将取平均值。 对于仅在影像的某些方向上检测到的对象,这可能导致置信度值低于阈值。 此参数适用于所有模型架构。
  • tile_size - 影像切片的宽度和高度,影像将按照此值分割以进行预测。 此参数仅适用于 MaskRCNN。
  • merge_policy - 用于合并增强预测的策略。 可用选项包括平均值、最大值和最小值。此参数仅在使用测试时数据增强时适用。 此参数仅适用于 MaskRCNN。
  • output_classified_raster - 输出栅格的路径。 此参数仅适用于 MaXDeepLab。

Value Table
run_nms
(可选)

指定是否将执行非极大值抑制,其中将标识重复的对象,并移除置信度值较低的重复要素。

  • NO_NMS不执行非极大值抑制。 所有检测到的对象都将位于输出要素类中。 这是默认设置。
  • NMS将执行非极大值抑制,并且将移除检测到的重复对象。
Boolean
confidence_score_field
(可选)

要素类中包含将由对象检测方法输出的置信度得分的字段的名称。

当将 run_nms 参数设置为 NMS 时,此参数为必需项。

String
class_value_field
(可选)

输入要素类中类值字段的名称。

如果未指定字段名称,则将使用 ClassvalueValue 字段。 如果这些字段不存在,则会将所有记录标识为属于一个类。

String
max_overlap_ratio
(可选)

两个重叠要素的最大重叠比,其定义为交集区域与并集区域之比。 默认值为 0。

Double
processing_mode
(可选)

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

  • PROCESS_AS_MOSAICKED_IMAGE将镶嵌在一起并处理镶嵌数据集或影像服务中的所有栅格项目。 这是默认设置。
  • PROCESS_ITEMS_SEPARATELY将作为独立影像处理镶嵌数据集或影像服务中的所有栅格项目。
  • PROCESS_CANDIDATE_ITEMS_ONLY将仅处理输入镶嵌数据集属性表的 Candidate 字段中值为 1 或 2 的栅格项目。
String
use_pixelspace
(可选)

指定是否对像素空间中的影像执行推断。

  • NO_PIXELSPACE将在地图空间中执行推断。 这是默认设置。
  • PIXELSPACE将在影像空间中执行推断,输出将重新转换为地图空间。 对于要素可能在使用地图空间时变形的倾斜影像或街景影像,此选项非常有用。
Boolean

派生输出

名称说明数据类型
out_classified_raster

用于像素分类的输出分类栅格。 栅格数据集的名称将与 out_detected_objects 参数值相同。

该参数仅在模型类型为全景分割时才可用。

Raster Dataset

代码示例

DetectObjectsUsingDeepLearning 示例 1(Python 窗口)

此示例可基于对象检测创建要素类。

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

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

DetectObjectsUsingDeepLearning("c:/detectobjects/moncton_seg.tif", 
     "c:/detectobjects/moncton_seg.shp", "c:/detectobjects/moncton.emd", 
     "padding 0; threshold 0.5; batch_size 4", "NO_NMS", "Confidence", 
     "Class", 0, "PROCESS_AS_MOSAICKED_IMAGE")
DetectObjectsUsingDeepLearning 示例 2(独立脚本)

此示例可基于对象检测创建要素类。

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

"""
Usage: DetectObjectsUsingDeepLearning( in_raster, out_detected_objects, 
       in_model_definition, {arguments}, {run_nms}, {confidence_score_field}, 
       {class_value_field}, {max_overlap_ratio}, {processing_mode})
"""

# Set local variables
in_raster = "c:/classifydata/moncton_seg.tif"
out_detected_objects = "c:/detectobjects/moncton.shp"
in_model_definition = "c:/detectobjects/moncton_sig.emd"
model_arguments = "padding 0; threshold 0.5; batch_size 4"
run_nms = "NO_NMS"
confidence_score_field = "Confidence"
class_value_field = "Class"
max_overlap_ratio = 0
processing_mode = "PROCESS_AS_MOSAICKED_IMAGE"
# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")

# Execute 
DetectObjectsUsingDeepLearning( in_raster, out_detected_objects, 
   in_model_definition, model_arguments, run_nms, confidence_score_field, 
   class_value_field, max_overlap_ratio, processing_mode)

许可信息

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

相关主题