这篇文章主要讲解了“C++怎么实现基于OpenCV的DNN网络”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么实现基于OpenCV的DNN网络”吧!OpenCV从3.3版本就开始引入DNN模块,现在已经是4.5版本了,DNN模块的支持度也更好了。目前OpenCV已经支持ONNX格式的模型加载和推理,后端的推理引擎也有了多种选择。而Pytorch作为目前易用性相对最好的深度学习训练框架,使用非常广泛。Pytorch的pth格式模型没法直接用OpenCV加载,但可以转换成ONNX格式使用。首先在Ubuntu下编译OpenCV,默认配置选项已经可以支持加载ONNX模型进行推理,不需要contrib
库支持或其他的特殊配置。我在编译过程中,按照习惯仅指定了CMAKE_INSTALL_PREFIX
参数,用来指定编译后的安装路径,方便后期管理,不干扰系统目录。Pytorch已经原生支持导出ONNX模型,具体可以参见官方教程和文档。一个最简化的导出Demo如下,核心的只有torch.onnx.export
一个函数。利用OpenCV的DNN模块进行网络推理,可以参考 香港云主机官方教程,以及源码包中的samples/dnn/classification.cpp
。这边以我之前做的一个目标修正的小网络为例,演示一个简化的Demo。模型借鉴MobilenetV2
中的InvertedResidual
模块,搭建特征提取部分,输入64*64的图像,最后通过pooling
层和fc
层,输出一个10维的向量。输出向量的含义分别为:0:目标Confidence,是否包含目标;1-5:目标Class,分类得分;6-9:2D-BBox,按xywh方式表述。一个简化的推理Demo如下所示。其中结果可视化的代码不再赘述,主要是把回归出的2DBBox画出来。结果输出如下:输出结果维度符合预期,运行时间也与python调用onnxruntime
的运行耗时差不多。结果可视化如下,可以正确地对车辆目标的位置进行修正。感谢各位的阅读,以上就是“C++怎么实现基于OpenCV的DNN网络”的内容了,经过本文的学习后,相信大家对C++怎么实现基于OpenCV的DNN网络这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。比如函数:val multiplier = (i:Int) => i * factor;factor不是形式参数,而是自由…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。