余利区

 找回密码
 立即注册
查看: 66|回复: 1

Halcon深度学习(预训练网络模型介绍)

[复制链接]

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-12-3 08:58:57 | 显示全部楼层 |阅读模式
一.Halcon介绍

Halcon是德国MVtec公司开发的一套完善的标准的机器视觉算法包,它节约了产品成本,缩短了软件开发周期。Halcon底层功能算法多,运算性能快,开发需要一定软件功底和图像处理理论。
快速学习做法:研究实例、做实战项目。halcon不能提供相应的界面编程需求,需要和vs来构造MFC界面或者搭配QT使用,才能构成一套完整软件。比如,Qt联合halcon实现的效果:


目前Halcon最新版为20.05,内部提供了5个预训练网络。这些网络已经在大规模工业数据集训练过,在此基础上训练出的网络对于图像分类任务表现更好。接下来分别介绍Halcon提供的预训练网络:
二.pretrained_dl_classifier_compact.hdl模型

网络的优点是节省内存以及运行效率高,模型支持‘real’图像类型。如果想知道网络模型各参数值,可以使用算子get_dl_classifier_param获取,网络没有全连接层。网络架构支持改变训练图像尺寸,但最小尺寸不能低于15 x 15。
Halcon虽说不开源,但是通过一些方法还是可以获得里面的网络架构,这也为自己搭建网络模型提供了可能。Halcon框架里面定义了卷积,池化,上采样等算子。但说实话,如果要自己搭建网络就我个人经验来说还不如选用Tensorflow和Pytorch开源框架,教程多debug方便。但有时做项目规定了必须用halcon,那也没办法。
pretrained_dl_classifier_compact.hdl模型的原理是SqueezeNet网络,由这位大佬提出,具体原理可以看论文。
1510.00149.pdf
1.1M
· 百度网盘




1.SqueezeNet网络介绍:

SqueezeNet在保证精度不损失的同时,将原始AlexNet压缩至原来的510倍。(Squeezenet比AlexNet参数少50倍,再使用了deep compression使得模型压缩至原来的510倍)。SqueezeNet的核心指导思想是——在保证精度的同时使用最少的参数。
SqueezeNet提出了一种多分支结构—fire model。这个结构由squeeze层和expand层构成。squeeze层是由1×1卷积组成,expand层利用1×1和3×3卷积构成多分支结构提取输入特征,以此提高网络的精度。




三.pretrained_dl_classifier_alexnet.hdl模型

第一层卷积核比compact更大,更有利于特征提取。
四.pretrained_dl_classifier_enhanced.hdl模型

对比compact网络,此网络拥有更多的隐含层,因此可以胜任更复杂的分类任务。但是代价是更大内存以及更长的训练时间,另外由于隐含层的增多,计算相较于上面的网络更复杂,所以batch_size不能设置太大。同样此网络架构也支持改变训练图像尺寸,但是最小尺寸不能低于47 x 47。虽然网络架构没有对图像尺寸设置上限,但是如果图像尺寸越大,那么需要占用的内存资源就越多,对内存的要求就更高,同时耗时更多。更改图像大小将重新初始化全连接层的权重,因此需要重新训练网络。
五.retrained_dl_classifier_resnet50.hdl模型

对比pretrained_dl_classifier_enhanced.hdl网络模型,此模型对更复杂的分类任务表现效果更好。它的网络结构不同于以上两个模型,训练时稳定性以及鲁棒性更好。同样此网络架构也支持改变训练图像尺寸,但是最小尺寸不能低于32 x 32。尽管同样是全连接层,图像大小的改变不会导致权重的重新初始化。
六.pretrained_dl_classifier_mobilenet_v2.hdl模型

体积小,功耗低,适合移动和嵌入式视觉应用。
七.自己搭网络

这里有三种思路:
1.Halcon框架里面定义了卷积,池化,上采样等算子,用这些搭建网络。实例:VGG16





2.在python中import halcon模块,联合编程:

1、 安装 HALCON20.11;
2、 安装 Python3.8
3、 启用 python 虚拟环境(可选)
4、 执行 pip install mvtec-halcon==20110 安装 HALCON20.11


5、Python 下直接调用 Halcon
在任意目录下新建 Python 脚本, 并将 halcon.dll、 halconc.dll、 halconcpp.dll、 hdevenginecpp.dll 拷贝
到该脚本目录下。首先使用 import halcon as ha 将 halcon 进行导包, 导包完成后可以将 halcon 中的函数按照普通函数进行使用, 例如:
ha.open_framegrabber(...)
ha.grab_image(...)
ha.get_image_size_s(...)
ha.open_window(...)
ha.disp_obj(...)
利用这种方式可以读入一张图片, 二值化并进行连通域求取, 如图所示:


3.把用pytorch,tensorflow搭建的网络存成onex格式,然后halcon加载进去。

八.总结

以上三个网络模型中列出的参数值都是在使用网络之前预训练网络时使用的值。如果想要不同的图像尺寸,可以通过算子 set_dl_classifier_param 设置。对于至少有一个全连接层的网络模型,只要图像尺寸变了,就需要重新训练,比如pretrained_dl_classifier_enhanced模型;对于没有全连接层的网络,训练好的网络模型可以直接应用在不同尺寸的图像上,但分类精度会降低。
回复

使用道具 举报

1

主题

3

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-12-3 08:59:44 | 显示全部楼层
请问一下onnx模型怎么导入halcon啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表