前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV加速与优化,让代码执行速度飞起来

OpenCV加速与优化,让代码执行速度飞起来

作者头像
OpenCV学堂
发布2019-11-11 13:31:36
25.8K0
发布2019-11-11 13:31:36
举报

引子

做OpenCV开发这些年以来,很多人对OpenCV经常说的抱怨有如下两点:

1.OpenCV模块很多,是一个很重量级的视觉框架!

2.OpenCV速度有点问题,不够快!

针对对一个问题,OpenCV开发包包含的东西太多了,大而全,而它们的项目可能需要只是一点点,需要的是小而精,其实这个很容易解决,这个就是要求做好OpenCV的模块裁剪与移植,通过CMake自己编译,关于这个问题,我也写过一篇文章来介绍,感兴趣可以点击这里:

OpenCV实战应用必备技能 | 模块裁剪

第二个问题,我们可以分为几个部分来说明。

CPU加速

今天我们重点说说第二个问题,OpenCV速度没有达到项目要求怎么办,其实OpenCV发展到今天在不同的架构平台上都有一些底层的指令集支持的加速方法,在Windows系统下,OpenCV编译默认支持加速SSE3 指令集,同时还额外支持SSE4.2、AVX、AVX2等加速指令集,在编译时候CMake配置文件提供了下面选项支持:

CPU_BASELINE=SSE2 CPU_BASELINE=AVX 需要C++编译器支持 CPU_DISPATCH=SSE4_2,AVX CPU_DISPATCH=AVX CPU_DISPATCH=AVX,AVX2 额外的加速支持,同样需要编译器支持。

早期通过ENABLE的方式已经在OpenCV3.x之后被抛弃,下面这个几个选项是无效选项:

ENABLE_AVX ENABLE_AVX2 ENABLE_POPCNT

ARMv7架构系统下支持

NEON

这些方法的加速效果如何,答案是通过编译支持的SSE/AVX加速,基本上可以获得1.3~3.0之间的加速执行。这个也就是为什么有时候我们直接无感的原因,就是加速不够明显!

一般情况下,自己重新编译OpenCV源码,CMake的时候都会生成如下的一些信息:

其实这个时候,还有几个比较有用的Flag可以勾选上,会起到明显的加速效果:

WITH_TBB

默认情况下是OFF、勾选可以获得并行处理支持

在TBB开启支持的情况下,可以通过下面的两个API设置线程数目,尝试获得并行执行能力。

代码语言:javascript
复制
setNumThreads() // 设置线程数目
getNumThreads() // 查询线程数目,为0表示顺序执行

CV_ENABLE_IPP

默认情况下是OFF、早期的OpenCV版本可以这么干,现在的OpenCV版本不支持

GPU加速

OpenCV CUDA支持下面的模块的加速运行

这个OpenCV默认是不支持,需要自己重新编译OpenCV源码,如何编译,参考我在B站的视频教程:

https://www.bilibili.com/video/av71643385

OpenCV中深度神经网络模块之前一直不支持CUDA作为计算后台的加速运行,就在前几天,OpenCV社区刚刚完成此项支持,所以OpenCV DNN模块在后续下个版本中将可以使用CUDA加速。简单点说,OpenCV DNN模块将会获得更大的速度优势。OpenCV也必将在更多边缘设备上得到应有。

OpenVINO加速

英特尔从去年推出视觉加速框架,对OpenCV所有的模块都有加速,特别是对深度神经网络模块,支持CPU/GPU(HD显卡)/加速棒等硬件加速,特别值得一提的是其CPU基本的加速,对人脸检测、对象检测等深度神经网络均可以达到实时运行级别,本人也写过一系列的OpenVINO SDK开发的相关技术文章。OpenVINO的安装与配置,代码演示,可以观看我在B站的视频教程:

https://www.bilibili.com/video/av71979782

相关技术文章汇总在这里:

英特尔 OpenVINO深度学习推理框架 开发技术系列文章汇总

总结与后记

上述各种加速手段,都有一定的限制,只有选择适合应用场景的加速方法才是正确的解决问题之道。另外OpenCV在开发阶段,不同代码写法与实现效率有时候会有云泥之别!这个更加体现开发者本身的技术水准。最后放两张图,看一下,OpenCV加速效果,分别是传统的图像处理方式与深度学习模型加速视频演示,帧率分别超过 199与90 FPS 以上!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档