强强联合,OpenCV搭载飞桨模型,帮你轻松玩转深度学习

OpenCV 是一个跨平台的开源的计算机视觉库,提供了 Python、Ruby、MATLAB 等语言的接口。下一个版本OpenCV 5.0 不仅仅支持常规的图像分类、目标检测、图像分割和风格迁移功能,还引入上百个的CV方向任务。

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨目前官方模型库支持300+个产业级开源算法,覆盖语音、视觉、NLP、推荐等领域大规模应用。

随着人工智能及深度学习视觉技术的快速发展,OpenCV从3.3版本就开始引入DNN模块,通过ONNX等多种格式支持对深度学习模型的加载和推理,并且支持OpenCL加速,非常方便用户使用,后端的推理引擎也支持多种选择。

应广大开发者的要求,飞桨社区和OpenCV社区双方启动合作,在OpenCV DNN模块中增加飞桨模型的支持。飞桨一系列特色模型可快速通过OpenCV进行加载和推理,极大方便了应用开发者,大大加速开发流程。

下面详细跟大家介绍OpenCV DNN模块以及如何通过 OpenCV DNN模块进行飞桨PaddlePaddle模型的加载和预测。

什么是DNN模块?

OpenCV中的DNN(Deep Neural Network)模块是专门用于实现深度学习预测推理功能的模块,包括目标检测、图像分割任务等。OpenCV可以载入其他深度学习框架(例如PaddlePaddle、PyTorch等等)训练好的模型,并使用该模型进行预测。

为什么要用DNN模块?

OpenCV的DNN模块主要有以下三点优势:

  • 轻量,由于DNN模块只实现了推理功能,它的代码量、编译运行开销与其他深度学习框架比起来会少很多。

  • 方便,DNN模块提供了内建的CPU和GPU加速且无须依赖第三方库。

  • 通用,DNN模块支持多种网络模型格式,因此用户无须额外进行网络模型的转换就可以直接使用,同时它还支持多种运算设备和操作系统。

除此之外,DNN模块还在网络层面做了一些优化,包括层融合、内存复用等。下图为不同框架在 CPU 上使用Tiny YOLOV4算法进行目标检测任务时速度的比较。(图片来自LearnOpenCV.com)


d34fc728e929f667fbdcd784d8729b08.png

可以看到在相同视频下,OpenCV的DNN模块可以达到35FPS,而使用OpenMP和AVX编译的Darknet只有15FPS,速度提升了足足1.3倍!

如何利用DNN模块部署飞桨模型?

目前DNN模块部署支持ONNX模型,而飞桨开源框架在升级2.0之后也支持模型导出为ONNX格式。框架内置paddle.onnx.export接口,用户在代码中可以调用接口以ONNX协议格式保存模型。此外,对于用户已经保存的飞桨模型,也可以通过Paddle2ONNX加载后进行转换。Paddle2ONNX为飞桨与ONNX开源组织合作的项目。不了解的童鞋快戳链接,了解Paddle2ONNX项目。

项目链接:

https://github.com/PaddlePaddle/Paddle2ONNX

整体流程图如下图所示:
cc3cfd86308d44f3e17655190ee0bcaa.png

下面将向大家展示如何将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模块加载模型

运行如下代码:
10eb6ca6038080c7cd5441a96ed621c8.png
上述代码主要分为三个步骤:
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

最终就可以得到下图所示的分割结果啦!

4861f2309d5b6875717bfc4eab8a9e17.png

是不是很方便呢,想体验的小伙伴赶紧上手试试吧!

未来,飞桨社区将与OpenCV在技术和社区上展开更深入合作,在现有基础上支持更多飞桨模型;同时原生支持飞桨模型的加载和推理,并通过更深层次的优化获得极佳的推理性能。欢迎大家持续关注飞桨。

直播预告

10月20日,OpenCV中文社区的负责人于仕琪老师给大家介绍OpenCV5.0最新版本特性以及如何使用OpenCV部署飞桨模型,欢迎扫描下方二维码进群观看!

1433a697bd2a2b1dce1c56ba218cc475.png

长按下方二维码立即

Star

8b7ea3c6bb85c48fe0186420e03ee9b5.png

更多信息:

  1. 飞桨官方QQ群:793866180

  2. 飞桨官网网址:

    www.paddlepaddle.org.cn/

  3. 飞桨开源框架项目地址:

    GitHub:

    github.com/PaddlePaddle/Paddle 
    Gitee:

    gitee.com/paddlepaddle/Paddle

  4. 欢迎在飞桨论坛讨论交流~~

    http://discuss.paddlepaddle.org.cn

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值