使用深度学习检测变化 (影像分析)

获得 Image Analyst 许可后可用。

摘要

运行经过训练的深度学习模型,以检测两个栅格之间的变化。

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

使用情况

  • 该工具的输入为两张图像:上一张图像和最近一张图像。 输出是分类的栅格数据集,用于显示两个栅格输入之间的变化。

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

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

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

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

  • 可能需要其他输入参数,例如迷你批量大小、填充大小等。

  • 有关模型定义 JSON 文件 (.emd),请参阅下面的示例。

    示例模型定义 JSON 文件

    
    {
       "Framework": "",
       "ModelConfiguration":" ",
       "ModelFile":"",
       "InferenceFunction":"",
       "ModelType":"",
       "ImageHeight":256,
       "ImageWidth":256,
       "ExtractBands":[0,1,2],
       "CropSizeFixed": 1,
       "BlackenAroundFeature": 1,
          "Classes": [
          {
             "Value": 0,
                "Name": "Building",
                "Color": [255, 0, 0]
               	}
       ]
    }

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

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

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

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

参数

标注说明数据类型
自栅格

更改前的输入栅格。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer
至栅格

更改后的输入栅格。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer
输出分类栅格

显示变化的输出分类栅格。

Raster Dataset
模型定义

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

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

File; String
参数
(可选)

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

  • padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。

Value Table

DetectChangeUsingDeepLearning(from_raster, to_raster, out_classified_raster, in_model_definition, {arguments})
名称说明数据类型
from_raster

更改前的输入栅格。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer
to_raster

更改后的输入栅格。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer
out_classified_raster

显示变化的输出分类栅格。

Raster Dataset
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 - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 要在减少伪影的同时使输出更加平滑,请增大此值。 内边距的最大值可以是切片大小值的一半。 此参数适用于所有模型架构。
  • batch_size - 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 此参数适用于所有模型架构。

Value Table

代码示例

DetectChangeUsingDeepLearning 示例 1(Python 窗口)

此示例运行深度学习模型以查找两个图像之间的差异。

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


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


DetectChangeUsingDeepLearning("c://detectchange//input_image1.tif", 
     "c://detectchange//input_image2.tif", "c://detectchange//output_difference.tif", 
     "c://detectchange/detectBuilding.emd", "padding 0;score_threshold 0.6;batch_size 4")
DetectChangeUsingDeepLearning 示例 2(独立脚本)

此示例运行深度学习模型以查找两个图像之间的差异。

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

""" 
Usage: DetectObjectsUsingDeepLearning(from_raster, to_raster, out_classified_raster, 
    in_model_definition, {model_arguments}) 
"""

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

# Set local variable
from_raster = r"c:/detectchange/input_image1.tif"
to_raster = r"c:/detectchange/input_image2.tif"
out_classified_raster = r"c:/detectchange/output_difference.tif"
in_model_definition = r"c:/ detectchange/detectbuilding.emd"

# arcpy.env.processorType = "GPU"
# arcpy.env.gpuId = 0

# Execute
DetectChangeUsingDeepLearning(from_raster, to_raster, out_classified_raster, 
    in_model_definition, "padding 0;score_threshold 0.6;batch_size 4")