强强联合,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)

可以看到在相同视频下,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

整体流程图如下图所示:

下面将向大家展示如何将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.zipunzip 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在技术和社区上展开更深入合作,在现有基础上支持更多飞桨模型;同时原生支持飞桨模型的加载和推理,并通过更深层次的优化获得极佳的推理性能。欢迎大家持续关注飞桨。

(0)

相关推荐

  • 模型部署翻车记:pytorch转onnx踩坑实录

    作者丨nihate 审稿丨邓富城 编辑丨极市平台 极市导读 本文记录了作者在深度学习模型部署是,从pytorch转换onnx的过程中的踩坑记录. >>加入极市CV技术交流群,走在计算机视觉 ...

  • pb模型文件与.pbtxt配置不匹配导致OpenCV调用dnn模块出错(Mask R

    问题:pb模型文件与.pbtxt配置不匹配导致OpenCV调用dnn模块出错(Mask R-CNN为例) OpenCV调用tensorflow的pb模型,需要.pb和.pbtxt文件. 在前期采用Te ...

  • 【从零学习OpenCV 4】深度神经网络应用实例

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • (10条消息) OpenCV之DNN模块,实现深度学习网络的推理加速

    OpenCV是计算机视觉领域使用最为广泛的开源库,以功能全面使用方便著称.自3.3版本开始,OpenCV加入了对深度神经网络(DNN)推理运算的支持.在LiveVideoStack线上交流分享中英特尔 ...

  • 利用OpenCV实现基于深度学习的超分辨率处理

    重磅干货,第一时间送达 OpenCV是一个非常强大的计算机视觉处理的工具库.很多小伙伴在入门图像处理时都需要学习OpenCV的使用.但是随着计算机视觉技术的发展,越来越多的算法涌现出来,人们逐渐觉得O ...

  • (4条消息) 用opencv的dnn模块实现Yolo

    最近在微信朋友圈里疯传的Yolo-Fastest(github代码地址是https://github.com/dog-qiuqiu/Yolo-Fastest),据说模型非常小,且运行速度快,而且,这个 ...

  • cv.dnn介绍及常用模块

    介绍 OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,即模型训练好了,进行预测,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet. Op ...

  • OpenCV4.4加载C 版和pytorch版YOLOv3及YOLOv4实现自定义目标检测

    opencv在4.4版本添加了对yolov4的支持,网上也有相应的教程,但是目前中文网上的教程大都基于C++实现,或者是用cv2.dnn.readNetFromDarknet.这个比较low-leve ...

  • 千呼万唤始出来,OpenCV 4.0正式发布!

    OpenCV 4.0 正式版来啦!虽然官网还没更新,但Github已经放出来了! 重回英特尔的OpenCV终于迎来一次大版本更新,增加了诸多新特性,快来一起看看吧- 因为OpenCV最开始开发时的语言 ...

  • 超详细!使用OpenCV深度学习模块在图像分类下的应用实践

    加入极市专业CV交流群,与 10000+来自港科大.北大.清华.中科院.CMU.腾讯.百度 等名校名企视觉开发者互动交流! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总,行业技术交流.关注 ...

  • OpenCV调用Tensorflow训练好的.pb模型

    " 做一个安静细微的人,于角落里自在开放,默默悦人,却始终不引起过分热闹的关注,保有独立而随意的品格,这就很好." ​​​​ 本博文使用opencv的dnn模块inference保 ...

  • 实用教程详解:用OpenCV的DNN模块部署YOLOv5目标检测

    作者丨nihate 审稿|邓富城 编辑丨极市平台 极市导读 本文中介绍的整套程序只依赖OpenCV库就能正常运行,彻底摆脱了对深度学习框架的依赖.文章讲述了作者在自己编写用OpenCV的dnn模块做Y ...

  • (8条消息) 在OpenCV中使用Mask R

    本文翻译自:https://www.pyimagesearch.com/2018/11/19/mask-r-cnn-with-opencv/ 在本教程中,您将学习如何在OpenCV中使用Mask R- ...

  • 火爆GitHub!这个图像分割神器开源了

    最近全球各大新势力造车公司简直不能再火!小编看着蹭蹭飙升的股价实在是眼红的不要不要的.而懂行的人都知道,以Telsa为首,各大公司都采用计算机视觉作为自动驾驶的技术底座,而其中正是通过图像分割技术,汽 ...

  • 嵌入式中的人工神经网络

    人工神经网络在AI中具有举足轻重的地位,除了找到最好的神经网络模型和训练数据集之外,人工神经网络的另一个挑战是如何在嵌入式设备上实现它,同时优化性能和功率效率. 使用云计算并不总是一个选项,尤其是当设 ...

  • (4条消息) OpenCV DNN之YOLO实时对象检测

    OpenCV在3.3.1的版本中开始正式支持Darknet网络框架并且支持YOLO1与YOLO2以及YOLO Tiny网络模型的导入与使用.YOLO是一种比SSD还要快的对象检测网络模型,算法作者在其 ...

  • 飞浆 快到飞起!兼容所有主流操作系统,又一Java开发神器面世!

    OSC开源社区 昨天 自从飞桨框架2.0发布以来,一直有用户期待什么时候能够帮助Java用户更便捷高效完成他们的部署任务.在过去,我们往往需要自己部署一台Model Server来做这个事情.但是,无 ...