create_dl_model_detectionT_create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection创建深度学习模型检测(算子)
名称
create_dl_model_detectionT_create_dl_model_detectionCreateDlModelDetectionCreateDlModelDetectioncreate_dl_model_detection — 创建用于目标检测的深度学习网络。
签名
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)
描述
通过 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):
-
'anchor_angles'"anchor_angles""anchor_angles""anchor_angles""anchor_angles""anchor_angles"
-
'anchor_aspect_ratios'"anchor_aspect_ratios""anchor_aspect_ratios""anchor_aspect_ratios""anchor_aspect_ratios""anchor_aspect_ratios" (旧称:'aspect_ratios'"aspect_ratios""aspect_ratios""aspect_ratios""aspect_ratios""aspect_ratios")
-
'anchor_num_subscales'"anchor_num_subscales""anchor_num_subscales""anchor_num_subscales""anchor_num_subscales""anchor_num_subscales" (旧称:'num_subscales'"num_subscales""num_subscales""num_subscales""num_subscales""num_subscales")
-
'backbone_docking_layers'"backbone_docking_layers""backbone_docking_layers""backbone_docking_layers""backbone_docking_layers""backbone_docking_layers"
-
'bbox_heads_weight'"bbox_heads_weight""bbox_heads_weight""bbox_heads_weight""bbox_heads_weight""bbox_heads_weight", 'class_heads_weight'"class_heads_weight""class_heads_weight""class_heads_weight""class_heads_weight""class_heads_weight"
-
'capacity'"capacity""capacity""capacity""capacity""capacity"
-
'class_ids'"class_ids""class_ids""class_ids""class_ids""class_ids"
-
'class_ids_no_orientation'"class_ids_no_orientation""class_ids_no_orientation""class_ids_no_orientation""class_ids_no_orientation""class_ids_no_orientation"
-
'class_names'"class_names""class_names""class_names""class_names""class_names"
-
'class_weights'"class_weights""class_weights""class_weights""class_weights""class_weights"
-
'freeze_backbone_level'"freeze_backbone_level""freeze_backbone_level""freeze_backbone_level""freeze_backbone_level""freeze_backbone_level"
-
'ignore_direction'"ignore_direction""ignore_direction""ignore_direction""ignore_direction""ignore_direction"
-
'image_dimensions'"image_dimensions""image_dimensions""image_dimensions""image_dimensions""image_dimensions"
-
'image_height'"image_height""image_height""image_height""image_height""image_height", 'image_width'"image_width""image_width""image_width""image_width""image_width"
-
'image_num_channels'"image_num_channels""image_num_channels""image_num_channels""image_num_channels""image_num_channels"
-
'instance_segmentation'"instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation""instance_segmentation"
-
'instance_type'"instance_type""instance_type""instance_type""instance_type""instance_type"
-
'mask_head_weight'"mask_head_weight""mask_head_weight""mask_head_weight""mask_head_weight""mask_head_weight"
限制: 仅实例分割
-
'max_level'"max_level""max_level""max_level""max_level""max_level", 'min_level'"min_level""min_level""min_level""min_level""min_level"
-
'max_num_detections'"max_num_detections""max_num_detections""max_num_detections""max_num_detections""max_num_detections"
-
'max_overlap'"max_overlap""max_overlap""max_overlap""max_overlap""max_overlap"
-
'max_overlap_class_agnostic'"max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic""max_overlap_class_agnostic"
-
'min_confidence'"min_confidence""min_confidence""min_confidence""min_confidence""min_confidence"
-
'optimize_for_inference'"optimize_for_inference""optimize_for_inference""optimize_for_inference""optimize_for_inference""optimize_for_inference"
注意
要成功设置 '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
模块
深度学习训练