训练深度学习模型 (Image Analyst)

获得 Image Analyst 许可后可用。

描述

使用导出训练数据进行深度学习工具的输出训练深度学习模型。

使用方法

  • 该工具使用深度学习框架训练深度学习模型。

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

  • 该工具还可用于对现有经过训练的模型进行微调。例如,可以对已针对汽车进行了训练的现有模型进行微调,以训练用于识别卡车的模型。

  • 要使用 GPU 运行此工具,请将处理器类型环境设置为 GPU。如果您具有多个 GPU,还可以指定 GPU ID 环境。

  • 该工具的输入训练数据必须包括从导出训练数据进行深度学习工具生成的影像和标注文件夹。

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

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

语法

TrainDeepLearningModel(in_folder, out_folder, {max_epochs}, {model_type}, {batch_size}, {arguments}, {learning_rate}, {backbone_model}, {pretrained_model}, {validation_percentage}, {stop_training}, {freeze})
参数说明数据类型
in_folder

包含训练模型所需的影像片、标注和统计数据的文件夹。此数据为导出训练数据进行深度学习工具的输出。

要训练模型,输入图像必须是具有三个波段的 8 位栅格。

Folder
out_folder

将存储经训练模型的输出文件夹位置。

Folder
max_epochs
(可选)

应用于将训练模型的最大新纪元数。最大新纪元值为 1 意味着数据集将通过神经网络向前和向后传递一次。默认值为 20。

Long
model_type
(可选)

指定用于训练深度学习模型的模型类型。

  • SSD单帧检测器 (SSD) 方法将用于训练模型。SSD 将用于对象检测。该模型类型的输入训练数据使用 Pascal 可视化对象类元数据格式。
  • UNETU-Net 方法将用于训练模型。U-Net 用于像素分类。
  • FEATURE_CLASSIFIER“要素分类器”方法将用于训练模型。可将其用于对象或图像分类。
  • PSPNET金字塔场景解析网络 (PSPNET) 方法将用于训练模型。PSPNET 用于像素分类。
  • RETINANETRetinaNet 方法将用于训练模型。RetinaNet 将用于对象检测。该模型类型的输入训练数据使用 Pascal 可视化对象类元数据格式。
  • MASKRCNNMaskRCNN 方法将用于训练模型。MaskRCNN 将用于对象检测。可将其用于实例分割,即对影像中对象的精确划分。此模型类型可用于检测建筑物覆盖区。该类型将 MaskRCNN 元数据格式作为输入用于训练数据。输入训练数据的类值必须从 1 开始。只能使用支持 CUDA 的 GPU 来训练此模型类型。
  • YOLOV3YOLOv3 方法将用于训练模型。YOLOv3 将用于对象检测。
  • DEEPLABDeepLabV3 方法将用于训练模型。DeepLab 用于像素分类。
  • FASTERRCNNFasterRCNN 方法将用于训练模型。FasterRCNN 将用于对象检测。
String
batch_size
(可选)

一次需要处理以便用于训练的训练样本数。默认值为 2。

如果您具有功能强大的 GPU,则可将此数字增加到 8、16、32 或 64。

Long
arguments
[arguments,...]
(可选)

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

当选择 SSD 作为 model_type 参数值时,arguments 参数将使用以下参数进行填充:

  • grids - 为进行处理将图像分割成的格网数。将此参数设置为 4 意味着影像将被划分为 4 x 4 或 16 个格网像元。如果未指定任何值,则将根据输入影像计算最佳格网值。
  • zooms - 每个格网像元将按比例进行扩大或缩小的缩放级别数。将此参数设置为 1 意味着所有格网像元都将保持相同的大小或缩放级别。缩放级别为 2 表示所有格网像元都将变成两倍大(放大 100%)。提供缩放级别列表意味着将使用列表中的所有数字来缩放所有格网像元。默认值为 1.0。
  • ratios - 用于锚点框的纵横比列表。在对象检测中,锚点框表示要预测的对象的理想位置、形状和大小。将此参数设置为 [1.0,1.0]、[1.0,0.5] 表示锚点框是正方形 (1:1) 或水平边大小为垂直边一半 (1:0.5) 的矩形。默认值为 [1.0, 1.0]。

当您选择任意像素分类模型(例如,PSPNETUNETDEEPLAB)作为 model_type 参数值时,该 arguments 参数将使用以下参数进行填充:

  • USE_UNET - 在金字塔池化完成后,将使用 U-Net 解码器来恢复数据。默认为 True。此参数特定于 PSPNET 模型。
  • PYRAMID_SIZES - 要应用于不同子区域的卷积图层的数量和大小。默认值为 [1,2,3,6]。此参数特定于 PSPNET 模型。
  • MIXUP - 指定是否使用 mixup 增强和 mixup 损失。默认为 False
  • CLASS_BALANCING - 指定是否平衡与每类像素的频率成反比的交叉熵损失。默认为 False
  • FOCAL_LOSS - 指定是否使用焦点损失。默认为 False
  • IGNORE_CLASSES - 包含模型不会在其上发生损失的类值列表。

当选择 RETINANET 作为 model_type 参数值时,arguments 参数将使用以下参数进行填充:

  • SCALES - 每个像元将按比例进行扩大或缩小的比例级数。默认值为 [1, 0.8, 0.63]。
  • RATIOS - 锚点框的纵横比。默认值为 [0,5,1,2]。

所有模型类型均支持 chip_size 参数,即训练样本中切片的片大小。将从 in_folder 参数中指定的文件夹中的 .emd 文件提取影像片大小。

Value Table
learning_rate
(可选)

在整个训练过程中,现有信息将被新获取的信息覆盖的比率。如果未指定任何值,则系统将在训练过程中从学习曲线中提取最佳学习率。

Double
backbone_model
(可选)

指定要用作训练新模型的架构的、预先配置的神经网络。这种方法称为迁移学习。

  • DENSENET121预先配置的模型将是在 ImageNET 数据集上训练的密集网络,其中包含一百万个以上的影像,且深度为 121 个图层。与使用求和来合并图层的 RESNET 不同,DenseNet 使用串联来合并图层。
  • DENSENET161预先配置的模型将是在 ImageNET 数据集上训练的密集网络,其中包含一百万个以上的影像,且深度为 161 个图层。与使用求和来合并图层的 RESNET 不同,DenseNet 使用串联来合并图层。
  • DENSENET169预先配置的模型将是在 ImageNET 数据集上训练的密集网络,其中包含一百万个以上的影像,且深度为 169 个图层。与使用求和来合并图层的 RESNET 不同,DenseNet 使用串联来合并图层。
  • DENSENET201预先配置的模型将是在 ImageNET 数据集上训练的密集网络,其中包含一百万个以上的影像,且深度为 201 个图层。与使用求和来合并图层的 RESNET 不同,DenseNet 使用串联来合并图层。
  • MOBILENET_V2由于这种预先配置的模型所使用的内存较少,因此将在 ImageNet 数据库上进行训练,且深度为 54 个图层,适用于边设备计算。
  • RESNET18预先配置的模型将是在 ImageNET 数据集上训练的残差网络,其中包含一百万个以上的影像,且深度为 18 个图层。
  • RESNET34预先配置的模型将是在 ImageNET 数据集上训练的残差网络,其中包含一百万个以上的影像,且深度为 34 个图层。这是默认设置。
  • RESNET50预先配置的模型将是在 ImageNET 数据集上训练的残差网络,其中包含一百万个以上的影像,且深度为 50 个图层。
  • RESNET101预先配置的模型将是在 ImageNET 数据集上训练的残差网络,其中包含一百万个以上的影像,且深度为 101 个图层。
  • RESNET152预先配置的模型将是在 ImageNET 数据集上训练的残差网络,其中包含一百万个以上的影像,且深度为 152 个图层。
  • VGG11预先配置的模型将是在 ImageNET 数据集上训练的卷积神经网络,其中包含一百万个以上的影像以将影像分类为 1000 个对象类别,且深度为 11 个图层。
  • VGG11_BN这种预先配置的模型基于 VGG 网络,但具有批量归一化功能,这意味着网络中的每个图层都已归一化。它在 ImageNet 数据集上进行了训练,具有 11 个图层。
  • VGG13预先配置的模型将是在 ImageNET 数据集上训练的卷积神经网络,其中包含一百万个以上的影像以将影像分类为 1000 个对象类别,且深度为 13 个图层。
  • VGG13_BN这种预先配置的模型基于 VGG 网络,但具有批量归一化功能,这意味着网络中的每个图层都已归一化。它在 ImageNet 数据集上进行了训练,具有 13 个图层。
  • VGG16预先配置的模型将是在 ImageNET 数据集上训练的卷积神经网络,其中包含一百万个以上的影像以将影像分类为 1000 个对象类别,且深度为 16 个图层。
  • VGG16_BN这种预先配置的模型基于 VGG 网络,但具有批量归一化功能,这意味着网络中的每个图层都已归一化。它在 ImageNet 数据集上进行了训练,具有 16 个图层。
  • VGG19预先配置的模型将是在 ImageNET 数据集上训练的卷积神经网络,其中包含一百万个以上的影像以将影像分类为 1000 个对象类别,且深度为 19 个图层。
  • VGG19_BN这种预先配置的模型基于 VGG 网络,但具有批量归一化功能,这意味着网络中的每个图层都已归一化。它在 ImageNet 数据集上进行了训练,具有 19 个图层。
  • DARKNET53预先配置的模型将是在 ImageNET 数据集上训练的卷积神经网络,其中包含一百万个以上的影像,且深度为 53 个图层。
String
pretrained_model
(可选)

用于微调训练新模型的预训练模型。输入为 Esri 模型定义文件 (.emd) 或深度学习包文件 (.dlpk)。

可以对具有相似类的预训练模型进行微调以适应新模型。预训练模型必须已使用将用于训练新模型的相同模型类型和骨干模型进行了训练。

File
validation_percentage
(可选)

将用于验证模型的训练样本的百分比。默认值为 10。

Double
stop_training
(可选)

指定是否将实施提前停止。

  • STOP_TRAINING当模型不再改进时,无论所指定的 max_epochs 参数值是什么,模型训练都将停止。这是默认设置。
  • CONTINUE_TRAINING模型训练将一直持续,直至达到 max_epochs 参数值为止。
Boolean
freeze
(可选)

指定是否冻结预训练模型中的骨干层,以使权重和偏差保持原始设计。

  • FREEZE_MODEL预定义的权重和偏差不会在 backbone_model 参数中进行更改。这是默认设置。
  • UNFREEZE_MODELbackbone_model 参数的权重和偏差可能会进行更改以更好地适合您的训练样本。这将需要花费更多的时间来处理,但通常会产生更好的结果。
Boolean

派生输出

名称说明数据类型
out_model_file

输出已训练模型文件。

文件

代码示例

TrainDeepLearningModel 示例 1(Python 窗口)

本示例使用 U-Net 方法来训练树分类模型。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
# Execute 
TrainDeepLearningModel(r"C:\DeepLearning\TrainingData\Roads_FC", 
     r"C:\DeepLearning\Models\Fire", 40, "UNET", 16, "# #", None, 
     "RESNET34", None, 10, "STOP_TRAINING", "FREEZE_MODEL")
TrainDeepLearningModel 示例 2(独立脚本)

本示例使用 SSD 方法来训练对象检测模型。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
#Define input parameters
in_folder = "C:\\DeepLearning\\TrainingData\\Cars" 
out_folder = "C:\\Models\\Cars"
max_epochs = 100
model_type = "SSD"
batch_size = 2
arg = "grids '[4, 2, 1]';zooms '[0.7, 1.0, 1.3]';ratios '[[1, 1], [1, 0.5], [0.5, 1]]'"
learning_rate = 0.003
backbone_model = "RESNET34" 
pretrained_model = "C:\\Models\\Pretrained\\vehicles.emd"
validation_percent = 10
stop_training = "STOP_TRAINING"
freeze = "FREEZE_MODEL"


# Execute
TrainDeepLearningModel(in_folder, out_folder, max_epochs, model_type, 
     batch_size, arg, learning_rate, backbone_model, pretrained_model, 
     validation_percent, stop_training, freeze)

许可信息

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

相关主题