create_dl_model_detectionT_create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection创建深度学习模型检测(算子)

名称

create_dl_model_detectionT_create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection — 创建用于目标检测的深度学习网络。

签名

create_dl_model_detection( : : Backbone, NumClasses, DLModelDetectionParam : DLModelHandle)

Herror T_create_dl_model_detection(const Htuple Backbone, const Htuple NumClasses, const Htuple DLModelDetectionParam, Htuple* DLModelHandle)

void CreateDlModelDetection(const HTuple& Backbone, const HTuple& NumClasses, const HTuple& DLModelDetectionParam, HTuple* DLModelHandle)

void HDlModel::HDlModel(const HString& Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)

void HDlModel::HDlModel(const char* Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)

void HDlModel::HDlModel(const wchar_t* Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)   ( Windows only)

void HDlModel::CreateDlModelDetection(const HString& Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)

void HDlModel::CreateDlModelDetection(const char* Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)

void HDlModel::CreateDlModelDetection(const wchar_t* Backbone, Hlong NumClasses, const HDict& DLModelDetectionParam)   ( Windows only)

static void HOperatorSet.CreateDlModelDetection(HTuple backbone, HTuple numClasses, HTuple DLModelDetectionParam, out HTuple DLModelHandle)

public HDlModel(string backbone, int numClasses, HDict DLModelDetectionParam)

void HDlModel.CreateDlModelDetection(string backbone, int numClasses, HDict DLModelDetectionParam)

def create_dl_model_detection(backbone: str, num_classes: int, dlmodel_detection_param: HHandle) -> HHandle

描述

通过 create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection 算子可创建用于目标检测或实例分割的深度学习网络。有关基于深度学习的目标检测与实例分割的详细信息,请参阅 深度学习 / 目标检测与实例分割 一章。该网络的句柄将通过 DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle 返回。

您可以通过下列参数指定模型及其架构。要成功创建检测模型,需指定其骨干网络和模型应能识别的类别数量。第一项信息通过参数 BackboneBackboneBackboneBackbonebackbonebackbone 传递,具体说明详见下文“可选骨干网络”一节。第二项信息通过 NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes 参数指定。请注意,该参数将固定网络区分的类别数量,同时也会确定 'class_ids'"class_ids""class_ids""class_ids""class_ids""class_ids"'class_names'"class_names""class_names""class_names""class_names""class_names" 中条目的数量。

所有其他适用参数的值均可通过字典 DLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamdlmodel_detection_param 进行指定。例如 'instance_type'"instance_type""instance_type""instance_type""instance_type""instance_type" 参数即决定模型处理何种边界框类型。若要创建用于实例分割的深度学习网络,需将 'instance_segmentation'"instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation" 参数设为 'true'"true""true""true""true""true"。可设置参数的完整列表详见下文“可设置参数”一节。部分参数仅适用于实例分割任务。若未指定参数,则采用默认值创建模型。注意:影响网络架构的参数在模型创建后将不可更改。其余参数仍可通过 set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param 算子设置或修改。参数设置方法详见 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 文档,其中同时提供了各参数的具体说明。创建目标检测模型后,其 'type'"type""type""type""type""type" 参数将自动设置为 'detection'"detection""detection""detection""detection""detection"

可选骨干网络

参数 BackboneBackboneBackboneBackbonebackbonebackbone 决定网络采用的骨干结构。更多信息请参阅 深度学习 / 目标检测与实例分割 一章。简言之,骨干网络由预训练分类器构成,仅保留生成特征图所需的层,因此网络中不再包含全连接层。这意味着您需读取分类器作为后续检测网络的特征提取器。为此可读取 HALCON 格式的分类器或 ONNX 格式的模型,详情参见 read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModelread_dl_model

create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection 将特征金字塔连接至骨干网络的不同层级。更精确地说,骨干网络在不同层级设有指定对接层。创建检测模型时,特征金字塔将连接至对应对接层。HALCON 提供的预训练分类器已预设对接层。但若使用自定义分类器作为骨干网络,则需自行指定对接层。可通过 set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param 算子设置分类器 backbone_docking_layers 的参数,或直接使用该算子设置骨干网络本身。

对接层来自不同层级,因此特征金字塔中使用的特征图尺寸各不相同。更精确地说,在特征金字塔中,特征图长度每层减半。由此可知,输入图像长度也需每层减半。这意味着网络架构允许调整图像尺寸,但 'image_width'"image_width""image_width""image_width""image_width""image_width"'image_height'"image_height""image_height""image_height""image_height""image_height" 必须是 的整数倍。其中 代表特征金字塔构建的最高层级。该值取决于所连接的网络以及对接层。对于以下列出的分类器,在默认设置下特征金字塔的构建层级上限如下所示。

HALCON 提供以下预训练分类器,可作为骨干网络读取:

'pretrained_dl_classifier_alexnet.hdl'"pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl"

该神经网络专为简单分类任务设计。其特征在于前几层卷积核尺寸较大,相比具有同等分类性能的其他网络(如 'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl")更具优势。此特性可能有助于特征提取。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 4 层。

'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl"

该神经网络旨在实现内存和运行时的高效性。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 4 层。

'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl"

该神经网络具有比 'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl" 更多的隐藏层,因此被认为更适合处理复杂任务。但这需要付出更高的时间和内存消耗代价。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 5 层。

'pretrained_dl_classifier_mobilenet_v2.hdl'"pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl"

该分类器是一款小型低功耗模型,因此更适用于移动和嵌入式视觉应用场景。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 4 层。

'pretrained_dl_classifier_resnet18.hdl'"pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl"

与网络 'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl" 相比,该网络适用于更复杂的任务。但其结构有所不同,具有训练更稳定、内部更健壮的优势。相较于神经网络 'pretrained_dl_classifier_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl",它结构更简单且推理速度更快。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 5 层。

'pretrained_dl_classifier_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl"

与网络 'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl" 相比,该网络适用于更复杂的任务。但其结构有所不同,具有训练更稳定、内部更健壮的优势。

该骨干模型要求输入图像类型为 real。此外,该骨干网络专为特定图像属性而设计。相关参数可通过 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param 获取。以下列出分类器训练时使用的默认值:

'image_width'"image_width""image_width""image_width""image_width""image_width":224

'image_height'"image_height""image_height""image_height""image_height""image_height":224

'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels":3

'image_range_min'"image_range_min""image_range_min""image_range_min""image_range_min""image_range_min":-127.0

'image_range_max'"image_range_max""image_range_max""image_range_max""image_range_max""image_range_max":128.0

基于此骨干构建的默认特征金字塔可延伸至第 5 层。

可设置参数

使用 create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection 创建模型时可设置的参数(具体说明请参见 get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param):

注意

要成功设置 'gpu'"gpu""gpu""gpu""gpu""gpu" 参数,需要安装 cuDNN 和 cuBLAS,即需将参数 GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 的值 'runtime'"runtime""runtime""runtime""runtime""runtime" 设置为 'gpu'"gpu""gpu""gpu""gpu""gpu"。更多详细信息,请参阅 “安装指南” 中的“深度学习及基于深度学习方法的要求”一章。

执行信息

此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。

参数

BackboneBackboneBackboneBackbonebackbonebackbone (输入控制)  filename.read HTuplestrHTupleHtuple (string) (string) (HString) (char*)

深度学习分类器,用作骨干网络。

默认值: 'pretrained_dl_classifier_compact.hdl' "pretrained_dl_classifier_compact.hdl" "pretrained_dl_classifier_compact.hdl" "pretrained_dl_classifier_compact.hdl" "pretrained_dl_classifier_compact.hdl" "pretrained_dl_classifier_compact.hdl"

值列表: 'pretrained_dl_classifier_alexnet.hdl'"pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl""pretrained_dl_classifier_alexnet.hdl", 'pretrained_dl_classifier_compact.hdl'"pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl""pretrained_dl_classifier_compact.hdl", 'pretrained_dl_classifier_enhanced.hdl'"pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl""pretrained_dl_classifier_enhanced.hdl", 'pretrained_dl_classifier_mobilenet_v2.hdl'"pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl""pretrained_dl_classifier_mobilenet_v2.hdl", 'pretrained_dl_classifier_resnet18.hdl'"pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl""pretrained_dl_classifier_resnet18.hdl", 'pretrained_dl_classifier_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl"

文件扩展名: .hdl

NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

类别数量。

默认值: 3

DLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamDLModelDetectionParamdlmodel_detection_param (输入控制)  dict HDict, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

目标检测模型的参数。

默认值: []

DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle (输出控制)  dl_model HDlModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

用于目标检测的深度学习模型。

结果

如果参数有效,算子 create_dl_model_detectioncreate_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。

可能的后继

set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParamset_dl_model_param, get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param, apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModelapply_dl_model, train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatchtrain_dl_model_batch

替代

read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModelread_dl_model

模块

深度学习训练