强强联合,OpenCV搭载飞桨模型,帮你轻松玩转深度学习
OpenCV 是一个跨平台的开源的计算机视觉库,提供了 Python、Ruby、MATLAB 等语言的接口。下一个版本OpenCV 5.0 不仅仅支持常规的图像分类、目标检测、图像分割和风格迁移功能,还引入上百个的CV方向任务。
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨目前官方模型库支持300+个产业级开源算法,覆盖语音、视觉、NLP、推荐等领域大规模应用。
随着人工智能及深度学习视觉技术的快速发展,OpenCV从3.3版本就开始引入DNN模块,通过ONNX等多种格式支持对深度学习模型的加载和推理,并且支持OpenCL加速,非常方便用户使用,后端的推理引擎也支持多种选择。
应广大开发者的要求,飞桨社区和OpenCV社区双方启动合作,在OpenCV DNN模块中增加PaddlePaddle飞桨模型的支持。飞桨一系列特色模型可快速通过OpenCV进行加载和推理,极大方便了应用开发者,大大加速开发流程。
下面详细跟大家介绍OpenCV DNN模块以及如何通过 OpenCV DNN模块进行飞桨PaddlePaddle模型的加载和预测。
什么是DNN模块?
OpenCV中的DNN(Deep Neural Network)模块是专门用于实现深度学习预测推理功能的模块,包括目标检测、图像分割任务等。OpenCV可以载入其他深度学习框架(例如PaddlePaddle、PyTorch等等)训练好的模型,并使用该模型进行预测。
为什么要用DNN模块?
OpenCV的DNN模块主要有以下三点优势:
1、轻量,由于DNN模块只实现了推理功能,它的代码量、编译运行开销与其他深度学习框架比起来会少很多。
2、方便,DNN模块提供了内建的CPU和GPU加速且无须依赖第三方库。
3、通用,DNN模块支持多种网络模型格式,因此用户无须额外进行网络模型的转换就可以直接使用,同时它还支持多种运算设备和操作系统。
除此之外,DNN模块还在网络层面做了一些优化,包括层融合、内存复用等。下图为不同框架在 CPU 上使用Tiny YOLOV4算法进行目标检测任务时速度的比较。(图片来自LearnOpenCV.com)
可以看到在相同视频下,OpenCV的DNN模块可以达到35FPS,而使用OpenMP和AVX编译的Darknet只有15FPS,速度提升了足足1.3倍!
如何利用DNN模块部署飞桨模型?
目前DNN模块部署支持ONNX模型,而飞桨开源框架在升级2.0之后也支持模型导出为ONNX格式。框架内置paddle.onnx.export接口(https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/onnx/export_cn.html),用户在代码中可以调用接口以ONNX协议格式保存模型。此外,对于用户已经保存的飞桨模型,也可以通过Paddle2ONNX加载后进行转换。Paddle2ONNX为飞桨与ONNX开源组织合作的项目。不了解的童鞋快戳链接,了解Paddle2ONNX项目。
项目链接:
https://github.com/PaddlePaddle/Paddle2ONNX
整体流程图如下图所示:
下面将向大家展示如何将PaddleSeg的人像分割模型导出为 ONNX 格式的模型,并使用OpenCV的DNN模块进行部署。
环境准备
pip install paddlepaddle-gpu
pip install paddlehub
pip install paddle2onnx
将人像分割模型导出为ONNX格式
1、获得PaddleSeg人像分割的预测模型
wget
https://x2paddle.bj.bcebos.com/inference/models/humanseg_hrnet18_small_v1.zip
unzip humanseg_hrnet18_small_v1.zip
2、通过Paddle2ONNX导出ONNX模型
paddle2onnx --model_dir humanseg_hrnet18_small_v1 \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 11 \
--save_file humanseg_hrnet18_tiny.onnx
这样在当前路径就能获得名为humanseg_hrnet18_tiny.onnx的ONNX模型
OpenCV DNN模块加载模型
运行如下代码:
上述代码主要分为三个步骤:
1、通过cv2.dnn.readNetFromONNX接口加载ONNX模型
2、对图片进行预处理并进行预测
3、对预测结果后处理并可视化
完整代码在如下链接:
https://github.com/opencv/opencv/blob/master/samples/dnn/dnn_model_runner/dnn_conversion/paddlepaddle/paddle_humanseg.py
最终就可以得到下图所示的分割结果啦!
是不是很方便呢,想体验的小伙伴赶紧上手试试吧!
未来,飞桨社区将与OpenCV在技术和社区上展开更深入合作,在现有基础上支持更多飞桨模型;同时原生支持飞桨模型的加载和推理,并通过更深层次的优化获得极佳的推理性能。欢迎大家持续关注飞桨。
直播预告
10.20号,我们还将邀请OpenCV中文社区的负责人于仕琪老师给大家介绍下一个版本OpenCV5.0规划以及如何使用OpenCV部署飞桨模型。敬请期待!
强强联合,OpenCV搭载飞桨模型,帮你轻松玩转深度学习相关推荐
- 刚在乌镇夺魁的飞桨,又将在“WAVE SUMMIT+”深度学习开发者峰会带来哪些惊喜?...
日前举办的第六届乌镇世界互联网大会上,百度飞桨(PaddlePaddle)作为中国首个也是目前国内唯一全面开源开放.功能完备的产业级深度学习平台,成功入选"世界互联网科技领先成果" ...
- 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
作为深度学习小白一枚,从一开始摸索如何使用深度学习框架,怎么让脚本跑起来,到现在开始逐步读懂论文,看懂模型的网络结构,按照飞桨官方文档进行各种模型训练和部署,整个过程遇到了无数问题.非常感谢飞桨开 ...
- 飞桨模型保存_史上最全解读 | 飞桨模型库重大升级 主流算法模型全覆盖
11 月 5 日,在 Wave Summit+2019 深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响. 很多未到场的开发者觉得遗憾,希望可以 ...
- Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
点击左上方蓝字关注我们 16年前的电影<功夫>可以说是家喻户晓,并将武侠片推向了一个新的高潮.在电影中,街头小混混阿星偶然间被打通了任督二脉,因善开悟,再有"如来神掌" ...
- 【飞桨/百度领航团/零基础Python】学习心得
[飞桨/百度领航团/零基础Python]学习心得 课程链接:https://aistudio.baidu.com/aistudio/course/introduce/7073 初识python Pyt ...
- 腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋
来源:腾讯AI 实验室 腾讯AI Lab机器学习中心今日宣布成功研发出世界上首款自动化深度学习模型压缩框架--PocketFlow,并即将在近期发布开源代码.这是一款面向移动端AI开发者的自动模型压缩 ...
- 【树莓派4B深度学习 垃圾分类】Chap.3 树莓派安装opencv并测试视频接口实时视频流的垃圾分类【深度学习 招式篇】
[树莓派4B深度学习 垃圾分类]Chap.3 树莓派安装opencv并测试视频接口实时视频流的垃圾分类[深度学习 招式篇] 后记 1.激活虚拟环境+进入代码+更改测试集路径(这里是安装成功后测试的代码 ...
- 七夕礼物没送对?飞桨PaddlePaddle帮你读懂女朋友的小心思
本文作者:飞桨工程师 量子位 转载 | 公众号 QbitAI 七夕节,广大的钢铁直男们,你们给女朋友的礼物买对了么? "女孩儿的心思男孩你别猜,你猜来猜去也猜不明白.不知道她为什么掉眼泪,也 ...
- 飞桨模型保存_重磅发布开源框架、生物计算平台螺旋桨,百度飞桨交了年终成绩单...
机器之心报道 作者:蛋酱.张倩 在 12 月 20 日举行的「WAVE SUMMIT+ 2020 深度学习开发者峰会」上,飞桨平台交出了一份非常亮眼的年终成绩单. 2020 年,是不平凡的一年:这一年 ...
最新文章
- 集线器(Hub)、交换机(Switch)与路由器(Router)之间的区别和联系
- 高性能MySQL数据库(含二级考试)-张晨光-专题视频课程
- Python3 From Zero——{最初的意识:007~函数}
- SparkStreaming
- mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)
- Java 加密 base64 encode
- 用猎物皮毛换酒喝java_荒野大镖客2三星毛皮狩猎技巧分享 各种类猎物三星皮毛获取方法...
- 列注释_【EXCEL检查问题】:如何快速检查并删除EXCEL中隐藏的工作表、行、列等信息...
- python多维矩阵基础运算中的一点困惑
- 九种食物摆脱便秘烦恼 - 生活至上,美容至尚!
- SpringApplication run方法解析:SpringApplicationRunListeners(二)
- Android 7.1 32位apk导致的系统库找不到问题
- CANFD MCP2517FD 滤波ID设置例子
- JS遍历map集合以及map对象
- 最简单快速的源码开发平台 -- LEARUN
- Davids实操笔记:Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索
- HKC PG27P3评测 HKC PG27P3怎么样
- 阿里云窄带高清的演进与思考
- python-字符串练习1
- Openwrt 18.06 iPhone XR usb tethering导致内核崩溃问题解决方案
热门文章
- Topic model相关文章总结
- 机器学习之RandomForest(随机深林)原理与实战
- 由相机的自身参数求解内参矩阵
- 解析linux中的vfs文件系统机制,解析Linux中的VFS文件系统机制
- mpvue 微信小程序api_基于mpvue构建微信和支付宝小程序(1)
- c++循环执行一个函数_javascript的五种循环,作为程序员,要根据场景和性能作出选择
- 虚拟机状态错误_学会这3招,分分钟迁移业务繁忙虚拟机!
- python图标的演变_把Python脚本生成exe文件并添加版本信息和自定义图标
- python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术
- Android application project 各个文件夹作用