对象检测的理论介绍建议访问官网:如果安装halcon到c盘一般到这个路径下介绍对象检测:
file:///C:/Program%20Files/MVTec/HALCON-21.05-Progress/doc/html/reference/operators/toc_deeplearning_objectdetection.html#section_list
基于深度学习的对象检测任务的一般工作流程。它细分为创建模型和数据预处理、模型训练、训练模型评估和新图像推理四个部分。
一,创建模型和数据集预处理
步骤
1.1读取主干网络,这是预训练网路的基础,后面我们设置特定参数的对象检测网络实际上在主干网络上附加特征金字塔。
算子:
read_dict(‘F:/hacon_egg/markedImages_hdict/markedResult/21.10.19_1×4RGB_02.hdict’,[], [], DLDataset)
1.2创建预训练网络对象检测神经网络
create_dl_model_detection( : :Backbone,NumClasses,DLModelDetectionParam : DLModelHandle)
因此,我们必须至少指定要区分的主干和类的数量NumClasses。可以通过字典设置更多参数。应该为特定任务精心选择它们的值,尤其是为了可能减少内存消耗和运行时间。
1.2.0可以使用以下程序估计适合您的数据集的特定参数
determine_dl_model_detection_param.(可以用其他方法代替比如自己创建的dict上设置一些参数详见实例代码)
1.3拆分由字典表示的数据集,按照一定比例把数据集拆分成training,vlidation,test(训练的,验证,测试)三个部分 。
split_dl_dataset (DLDataset, 80, 20, [])
网络对图像提出要求,例如图像宽度和高度。
您可以使用运算符检索每个值: get_dl_model_param()
1.4,获取必要的模型参数并进行预处理
create_dl_preprocess_param_from_model (DLModelHandle, ‘false’, ‘full_domain’, [], [], [], DLPreprocessParam)
preprocess_dl_dataset (DLDataset, 'dataset', DLPreprocessParam, PreprocessSettings, DLDatasetFileName)
建议在开始训练之前预处理和存储用于训练的所有图像,因为这会显着加快训练速度。
1.5为了可视化预处理的数据,用算子dev_display_dl_data()
实例:
dev_update_off ()
dev_close_window ()
**************************************(一):预处理数据集**************************************************
my_backbone := 'pretrained_dl_classifier_enhanced.hdl'
**???每个边界框的纵横比
AspectRatios := [1.0, 2.0, 0.5]
***
read_dict('F:/hacon_egg/markedImages_hdict/markedResult/21.10.19_1×4RGB_02.hdict',[], [], DLDataset)
****找出create_dl_model_detection()所需要参数的过程即:1,主干网络my_backbone, 2.分类的类数|my_classID|, 3.自己的特定字典参数my_DictHDLModelDetectionParamandle
list_image_files ('F:/hacon_egg/imageEggSource', 'default', [], ImageFiles)
read_image (Image, ImageFiles[0])
get_image_size (Image, Width, Height)
Scale:=4
Width :=(Width / Scale) / 64 * 64
Height :=(Height / Scale) / 64 * 64
count_channels (Image, Channels)
create_dict (my_DictHDLModelDetectionParamandle)
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'image_dimensions', [Width, Height, Channels])
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'min_level', 3)
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'max_level', 4)
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'num_subscales', 3)
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'aspect_ratios', AspectRatios)
set_dict_tuple (my_DictHDLModelDetectionParamandle, 'capacity', 'high')
get_dict_tuple (DLDataset, 'class_ids', my_classID)
**** 1,根据主干网络设置自己的参数创建预处理对象检测网络,特征金字塔附加在相应的对接层上
create_dl_model_detection (my_backbone, |my_classID|, my_DictHDLModelDetectionParamandle, DLModelHandle)
**** 2,按一定的比例拆分数据子集为训练的,验证,测试
split_dl_dataset (DLDataset, 80, 20, [])
create_dict (PreprocessSettings)
set_dict_tuple (PreprocessSettings, 'overwrite_files', true)
****3,获取必要的模型参数并进行预处理
create_dl_preprocess_param_from_model (DLModelHandle, 'false', 'full_domain', [], [], [], DLPreprocessParam)
preprocess_dl_dataset (DLDataset, 'dataset', DLPreprocessParam, PreprocessSettings, DLDatasetFileName)
read_dict(DLDatasetFileName,[], [], after_preprocess_DLDataset)
****随机显示
create_dict (WindowDict)
get_dict_tuple (DLDataset, 'samples', DatasetSamples)
for Index := 0 to 3 by 1
SampleIndex := round(rand(1) * (|DatasetSamples| - 1))
read_dl_samples (DLDataset, SampleIndex, DLSample)
dev_display_dl_data (DLSample, [], DLDataset,'bbox_ground_truth', [], WindowDict)
endfor
****************************************************************************************