halcon脚本-深度学习【目标检测】

这篇具有很好参考价值的文章主要介绍了halcon脚本-深度学习【目标检测】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文讲解使用halcon的目标检测是使用步骤,标注工具不使用halcon提供的标注工具,而是使用各个深度学习框架都使用的labelImg工具,然后使用hde脚本以及python脚本转化为标准的halcon训练及文件
本文涉及数据标注、数据转化、训练、评估、预测几个模块。


一、数据集的准备

  首先我是用的是halcon数据集里边的药片,去了前边的100张做标注,后面的300张做测试,其中100张里边选择90张做训练集,10张做验证集。

1.标注工具的安装

pip install labelimg

进入cmd,输入labelimg,会出现如图的标注工具:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测

2.数据集的准备

首先我们先创建3个文件夹,如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
DataImage:100张需要标注的图像
DataLabel:空文件夹,主要是存放标注文件,这个在labelimg中生成标注文件
test:存放剩下的300张图片,不需要标注
DataImage目录下和test目录的存放样子是这样的(以DataImage为例):
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测

3.标注数据

  首先我们需要在labelimg中设置图像路径和标签存放路径,如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
  然后先记住快捷键:w:开始编辑,a:上一张,d:下一张。这个工具只需要这三个快捷键即可完成工作。
  开始标注工作,首先按下键盘w,这个时候进入编辑框框的模式,然后在图像上绘制框框,输入标签(框框属于什么类别),即可完成物体1的标注,一张物体可以多个标注和多个类别,但是切记不可摸棱两可,比如这张图像对于某物体标注了,另一张图像如果出现同样的就需要标注,或者标签类别不可多个,比如这个图象A物体标注为A标签,下张图的A物体标出成了B标签,最终的效果如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
最后标注完成会在DataLabel中看到标注文件,json格式:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测

4.解释xml文件的内容

halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
xml标签文件如图,我们用到的就只有object对象,对其进行解析即可。


二、数据转换

数据转换分为两步,首先使用python脚本解析xml文件,然后使用hdev脚本实现halcon训练所需要的训练文件

1.解析XML文件

此处解析xml,提取每张图像的目标类别及位置

with open(xmlfile, "r", encoding="utf-8") as in_file:
    tree = ET.parse(in_file)
    root = tree.getroot()

    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            classes.append(cls)
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text),int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text),int(xmlbox.find('ymax').text))
        list_file += " " + ",".join([str(a) for a in b]) + ',' + str(cls_id)
        if cls not in label_name_dict:
            label_name_dict[cls]=0
            label_name_dict[cls]+=1
       TrainDataList.append(list_file)

with open(os.path.join(SaveDir,'classes.txt'), encoding="utf-8", mode="w") as f:
   for each in range(len(classes)):
       f.write(classes[each] + "\n")

with open(os.path.join(SaveDir,'TrainList.txt'), encoding="utf-8", mode="w") as f:
   for each in TrainDataList:
       f.write(each + "\n")


后得到的效果主要是两个txt文件:
‘TrainList.txt’:训练数据
‘classes.txt’:类别数据
如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测

halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测

2.转换得到hdev文件

1.变量定义

* 前边生成的类别文件
class_txt:='../DataSet/Temp_DetDataSet/classes.txt'
* 前边生成的数据标注文件
train_txt:='../DataSet/Temp_DetDataSet/TrainList.txt'
* 基于halcon转化脚本下的图像保存路径
ImageDir:='../DataSet/DataImage'
* 基于halcon训练脚本下的图像保存路径
BaseImgDir:='./DataSet/DataImage'
* 保存为halcon识别的训练文件
dict_File:='../DataSet/Temp_DetDataSet/dl_dataset.hdict'

2.读取种类

open_file (class_txt, 'input', FileHandle)
repeat
    fread_line(FileHandle, oneline, IsEOF)
    if(IsEOF == 1)
        break        
    endif
    if(oneline == ' ' or oneline=='\n')
        continue
    endif
    tuple_regexp_replace (oneline, '\n', '', oneline)
    tuple_length (ClassID, Length)
    ClassID[Length]:=Length+1
    tuple_concat (ClassName, oneline, ClassName)
until (IsEOF)

3.解析trainList.txt

TrainDataList:=[]
open_file (train_txt, 'input', FileHandle)
repeat
    fread_line(FileHandle, oneline, IsEOF)
    if(IsEOF == 1)
        break        
    endif
    if(oneline == ' ' or oneline=='\n')
        continue
    endif
    tuple_regexp_replace (oneline, '\n', '', oneline)
    tuple_concat (TrainDataList, oneline, TrainDataList)
until (IsEOF)

4.生成字典

for Index := 0 to |TrainDataList|-1 by 1
    EachTrainList:=TrainDataList[Index]
    tuple_split (EachTrainList, ' ', DataList)
    imageFile:=DataList[0]
    tuple_length (DataList, Length)
    DataList:=DataList[1:Length-1]
    create_dict (SampleImage)
    set_dict_tuple (SampleImage, 'image_id', Index+1)
    set_dict_tuple (SampleImage, 'image_file_name', imageFile)
    
    bbox_label_id:=[]
    bbox_row1:=[]
    bbox_col1:=[]
    bbox_row2:=[]
    bbox_col2:=[]
    
    for bbox_index:=0 to |DataList|-1 by 1
        bbox_data:=DataList[bbox_index]
        
        tuple_split (bbox_data, ',', bbox_data_list)
        
        tuple_number (bbox_data_list[4], Number)
        tuple_concat (bbox_label_id, Number+1, bbox_label_id)
        
        tuple_number (bbox_data_list[1], Number)
        tuple_concat (bbox_row1, Number, bbox_row1)
        
        tuple_number (bbox_data_list[0], Number)
        tuple_concat (bbox_col1, Number, bbox_col1)
        
        tuple_number (bbox_data_list[3], Number)
        tuple_concat (bbox_row2, Number, bbox_row2)
        tuple_number (bbox_data_list[2], Number)
        tuple_concat (bbox_col2, Number, bbox_col2)
        
    endfor
    set_dict_tuple (SampleImage, 'bbox_label_id', bbox_label_id)
    set_dict_tuple (SampleImage, 'bbox_row1', bbox_row1)
    set_dict_tuple (SampleImage, 'bbox_col1', bbox_col1)
    set_dict_tuple (SampleImage, 'bbox_row2', bbox_row2)
    set_dict_tuple (SampleImage, 'bbox_col2', bbox_col2)
    
    tuple_concat (AllSamples, SampleImage, AllSamples)
endfor

最后得到的字典结构如图所示:

halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测


三、模型训练

1.参数定义

* 主干网络结构
Base_ModelFile := ['pretrained_dl_classifier_compact.hdl','pretrained_dl_classifier_enhanced.hdl','pretrained_dl_classifier_resnet50.hdl']
* 先验框的设置
MinLevel := 2
MaxLevel := 4
NumSubscales := 3
AspectRatios := [1.0,0.5,2.0]
Capacity := 'medium'
* 显示预训练数据效果
showExample:=true
* 模型选择
ModelType := 1
* 输入网络结构的图像大小及通道
ImageWidth := 416
ImageHeight := 416
ImageNumChannels := 3
*上边脚本生成的训练文件
TrainDict:='./DataSet/Temp_DetDataSet/dl_dataset.hdict'
* 原图路径
ImgDir:='./DataSet/DataImage'
* 训练时生成的临时文件都放入此文件夹内
OutPutDir:='./DataSet/Temp_DetDataSet/Output'
DataDirectory := OutPutDir + '/dldataset_pill_bag_' + ImageWidth + 'x' + ImageHeight
* 保存最后训练模型以及效果最好模型
BestModelBaseName := OutPutDir + '/best_dl_model_detection'
FinalModelBaseName := OutPutDir + '/final_dl_model_detection'
DLDatasetFileName := DataDirectory + '/dl_dataset.hdict'
* 自定义保存最后的模型
ModelFile:='./best_Det.dat'
* 保存数据预处理的模型参数
ModelParams:='./det_params.hdict'
* 每次迭代的图片量
batch_size := 2
* 学习率
learning_rate := 0.001
* 优化器
Momentum := 0.9
* 迭代次数
NumEpochs := 600

2.创建目标检测模型

create_dict (DLModelDetectionParam)
set_dict_tuple (DLModelDetectionParam, 'image_width', ImageWidth)
set_dict_tuple (DLModelDetectionParam, 'image_height', ImageHeight)
set_dict_tuple (DLModelDetectionParam, 'image_num_channels', ImageNumChannels)
set_dict_tuple (DLModelDetectionParam, 'min_level', MinLevel)
set_dict_tuple (DLModelDetectionParam, 'max_level', MaxLevel)
set_dict_tuple (DLModelDetectionParam, 'num_subscales', NumSubscales)
set_dict_tuple (DLModelDetectionParam, 'aspect_ratios', AspectRatios)
set_dict_tuple (DLModelDetectionParam, 'capacity', Capacity)
create_dl_model_detection (Base_ModelFile[ModelType], NumClasses, DLModelDetectionParam, DLModelHandle)
set_dl_model_param (DLModelHandle, 'class_ids', class_ids)

3.数据预处理

TrainingPercent := 85
ValidationPercent := 15
SeedRand := 42
set_system ('seed_rand', SeedRand)
split_dl_dataset (DictHandle, TrainingPercent, ValidationPercent, [])
create_dl_preprocess_param_from_model (DLModelHandle, 'false', 'full_domain', [], [], [], DLPreprocessParam)

4.显示标注文件

dev_display_dl_data (DLSampleBatchDisplay[Index], [], DictHandle, 'bbox_ground_truth', GenParam, WindowHandleDict)
get_dict_tuple (WindowHandleDict, 'bbox_ground_truth', WindowHandles)
* 显示信息
dev_set_window (WindowHandles[0])
get_dict_object (Image, DLSampleBatchDisplay[Index], 'image')
get_image_size (Image, ImageWidth, ImageHeight)
dev_disp_text ('New image size after preprocessing: ' + ImageWidth + ' x ' + ImageHeight, 'window', 'bottom', 'right', 'black', [], [])
dev_set_window (WindowHandles[1])
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
        

5.模型训练

1.学习率设置

ChangeLearningRateEpochs :=[]
ChangeLearningRateValues :=[]
IndexNum:=0
for Index:=1 to 600 by 50
    ChangeLearningRateEpochs[IndexNum] :=50*(IndexNum+1)
    * 现在学习率 = 上一次学习率*0.5   每ChangeLearningRateEpochs次修改一次学习率
    tuple_pow (0.9, (IndexNum+1), Pow)
    ChangeLearningRateValues[IndexNum]:=learning_rate*Pow
    IndexNum :=IndexNum + 1
endfor

2.初始化训练模型

read_dict (DLDatasetFileName, [], [], DLDataset)
set_dl_model_param (DLModelHandle, 'learning_rate', learning_rate)
set_dl_model_param (DLModelHandle, 'momentum', Momentum)
set_dl_model_param (DLModelHandle, 'batch_size', batch_size)
if (|WeightPrior| > 0)
    set_dl_model_param (DLModelHandle, 'weight_prior', WeightPrior)
endif
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')

3.模型训练

create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, DisplayEvaluation, SeedRandom, GenParamName, GenParamValue, TrainParam)
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0.0, TrainResults, TrainInfos, EvaluationInfos)

训练过程如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测


四、模型评估

1.初始化模型

read_dict (DLDatasetFileName, [], [], DLDataset)
set_dl_model_param (DLModelHandle, 'learning_rate', learning_rate)
set_dl_model_param (DLModelHandle, 'momentum', Momentum)
set_dl_model_param (DLModelHandle, 'batch_size', batch_size)
if (|WeightPrior| > 0)
    set_dl_model_param (DLModelHandle, 'weight_prior', WeightPrior)
endif
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')

2.创建模型及训练模型

create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, DisplayEvaluation, SeedRandom, GenParamName, GenParamValue, TrainParam)
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0.0, TrainResults, TrainInfos, EvaluationInfos)

训练模型过程如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测


四、模型评估及验证

for Index := 0 to 5 by 1
    read_dl_samples (DLDataset, DLSampleIndicesShuffled[Index], DLSampleBatch)
    apply_dl_model (DLModelHandle, DLSampleBatch, [], DLResultBatch)
    dev_display_dl_data (DLSampleBatch, DLResultBatch, DLDataset, 'bbox_both', GenParam, WindowHandleDict)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
endfor

效果如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测


五、模型预测

1.载入模型

open_file (ModelFile, 'input_binary', FileHandle)
fread_serialized_item (FileHandle, SerializedItemHandle)
close_file (FileHandle)
deserialize_dl_model (SerializedItemHandle, DLModelHandle)

read_dict (TrainDict, [], [], DictHandle)
get_dict_tuple (DictHandle, 'class_ids', class_ids)
get_dict_tuple (DictHandle, 'class_names', class_names)

2.载入预测

read_image (ImageBatch, ImageFiles[Index1])
gen_dl_samples_from_images (ImageBatch, DLSampleBatch)
preprocess_dl_samples (DLSampleBatch, DLPreprocessParam)
apply_dl_model (DLModelHandle, DLSampleBatch, [], DLResultBatch)

效果如图:
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测
halcon目标检测,机器视觉-halcon,深度学习,目标检测,计算机视觉,halcon,视觉检测


总结

文章来源地址https://www.toymoban.com/news/detail-696011.html

到了这里,关于halcon脚本-深度学习【目标检测】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于计算机视觉,深度学习、机器学习,OpenCV,图像分割,目标检测卷积神经网络计算机毕业设计选题题目大全选题指导

    随着深度学习、机器学习和神经网络技术的快速发展,计算机视觉领域的应用变得越来越广泛和有趣。本毕业设计旨在探索这一领域的前沿技术,将深度学习模型、神经网络架构、OpenCV图像处理工具,以及卷积神经网络(CNN)的强大能力结合起来,以解决实际图像处理问题。

    2024年02月08日
    浏览(73)
  • 《计算机视觉中的深度学习》之目标检测算法原理

    参考:《计算机视觉中的深度学习》 目标检测的挑战: 减少目标定位的准确度 减少背景干扰 提高目标定位的准确度 目标检测系统常用评价指标:检测速度和精度 提高精度:有效排除背景,光照和噪声的影响 提高检测速度:精简检测流程,简化图像处理算法 算法概述:传

    2024年03月27日
    浏览(60)
  • 竞赛选题 机器视觉目标检测 - opencv 深度学习

    🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉 opencv 深度学习目标检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng

    2024年02月07日
    浏览(49)
  • 【计算机视觉 | 目标检测】Grounding DINO 深度学习环境的配置(含案例)

    “ Grounding DINO:Marrying DINO with Grounded Pre-Training for Open-Set Object Detection ”的官方 PyTorch 实现: SoTA 开放集对象检测器。 论文地址: 在 YouTube 上观看介绍视频: Try the Colab Demo: Try Official Huggingface Demo: Grounded-SAM: Marrying Grounding DINO with Segment Anything Grounding DINO with Stable Diffusion

    2024年02月07日
    浏览(72)
  • 挑战杯 机器视觉目标检测 - opencv 深度学习

    🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉 opencv 深度学习目标检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng

    2024年04月13日
    浏览(55)
  • 【计算机视觉面经四】基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)

    目标检测算法主要包括:【两阶段】目标检测算法、【多阶段】目标检测算法、【单阶段】目标检测算法。 什么是两阶段目标检测算法,与单阶段目标检测有什么区别? 两阶段目标检测算法因需要进行两阶段的处理:1)候选区域的获取,2)候选区域分类和回归,也称为基于

    2024年03月27日
    浏览(58)
  • 竞赛保研 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 实时检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-sen

    2024年01月16日
    浏览(64)
  • 计算机竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https

    2024年02月08日
    浏览(75)
  • 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https:/

    2024年02月05日
    浏览(64)
  • 计算机毕设 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月14日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包