【感受】android + opencv + umat + opencl使用感受
近期编译了android下支持opencl的opencv,使用opencl能力的关键是用cv::UMat替换cv::Mat。
实际使用后发现坑很多,非常不成熟,不推荐使用这种方式来提升实际产品的性能。
- 每个UMat产生的时候会从gpu分配内存,而GPU分配内存是很慢的;使用Mat的时候,这点开销不值得一提,但是UMat完全不是一回事。因此,UMat一定一定要重用,避免反复分配。
- mat.getUMat()方法很多坑,引用计数的错误很难查,至今没搞明白原理。因此一直用mat.copyTo(umat)来代替。
- mat.copyTo(umat) 和 umat.copyTo(mat)也是很慢的,因此,一定要计算时间大于数据拷贝时间,抵消了拷贝的开销,使用umat才能带来性能提升。
- 例如这样一个函数 cv::cvtColor(umat_in, umat_out),第一次使用是很慢的,因为opencl的核函数编译很耗时。因此要使用很多次,多到第一次使用的编译开销可以忽略。
- 再说核函数编译的问题:opencv是C风格的,每次调用,核函数都要编译一次,虽然第二次以后很快,但是这种每次调用都编译一次核函数没有意义。
- T-API看起来很好,一套API既支持Mat又支持UMat,但其中的坑是:计算到底用GPU完成的还是CPU完成的,你不知道。例如我使用cv::dft()一样,传入的UMat必须按照2的倍数对齐,否则就会退化到用CPU计算。这下大坑就来了——我先mat.copyTo(umat),然后传给cv::dft(), 函数内部检测无法用GPU计算后,自动退化成CPU计算,然后内部umat.getMat(), 计算完成后再mat.getUMat,白白多了两次GPU内存拷贝,加上外部调用又拷贝了两次,来回有四次GPU内存拷贝。
- opencv的函数都没有提供opencl的Queue的支持,也就是所有的拷贝和计算无法让CPU和GPU做到异步。就算GPU分担了CPU的压力,但是CPU在等着GPU计算的结果。
- 从opencl支持的源码风格上看,很可能T-API最初只在intel GPU & AMD GPU上测试,网上的android+opencv+opencl的文章也很少——由此猜测:android下的opencv中的opencl加速,可能并没有专门针对android平台去测试加速情况。没有前人证明过这条路可行!
【感受】android + opencv + umat + opencl使用感受的更多相关文章
- OpenCV、OpenCL、OpenGL、OpenPCL
对于几个开源库的总结,作为标记,以前看过,现在开始重视起来!更详细资料请移步 开源中国社区! 涉及:OpenCV,OpenCL,OpenGL,OpenPCL 截止到目前: OpenGL的最新版本为4. ...
- WINDOWS系统Eclipse+NDK+Android + OpenCv
WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...
- Android OpenCV 图像识别
最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...
- Android OpenCV样例调试+报错处理
1.OpenCV样例调试:<OpenCV Sample - image-manipulations> blog+报错:E/CAMERA_ACTIVITY(17665): Cam ...
- Android+openCV 的坑
之前一直用IntelliJ IDEA 导入 opencv_android_sdk 的 java 包,在最后一步finish时,始终出错. 后来重新安装Android Studio 重复以上步骤,能顺利 ...
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
1 扩展库简介 OpenCV(Open Source Computer Vision Library)是一个致力于实时处理计算机视觉问题的开源库.它最初由Intel公司开发,以GPL许可协议发布,后来 ...
- android opencv
最近工作需求:用opencv来先做一个demo.扫描照片进行边缘检测和透视矫正. 之后会加入照片降噪等处理. 请教了一下搞图像的同事.他的提议: 1.绿盟的“黄色照片检测” 用的是动态的opencv库 ...
- 【OpenCV开发】使用OpenCV的OpenCL(ocl)模块
参加OpenCV的OpenCL模块(以下称OCL)移植工作已经有2个月了.这里我说移植而不是开发,是因为大部分OCL模块的函数都是从已经很成熟的GPU模块移植过来的.于是目前阶段OCL模块所支持的函数 ...
- 【记录一个问题】opencv官网的opencv android sdk使用opencl并未用到GPU
UMat u_mat;mat.copyTo(u_mat);cv::cvtColor(u_mat, cv::BGR2GARY);这样的代码反复执行,并未发现GPU占用提升.执行时间与不使用UMat相当. ...
随机推荐
- 深度解析HashMap
讲讲HashMap? 源码解析 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { //辅助 ...
- 选课系统V1.0
tree . . ├── bin │ ├── __init__.py │ └── start.py #启动文件 ├── conf │ ├── __init__.py │ └── set ...
- FastAPI 学习之路(六十)打造系统的日志输出
我们要搭建日志系统,我们使用loguru,挺不错的一个开源的日志系统.可以使用 pip install loguru 我们在common创建log.py使用方式也很简单 import os impor ...
- 【九度OJ】题目1052:找x 解题报告
[九度OJ]题目1052:找x 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1052 题目描述: 输入一个数n ...
- BZOJ 1857: [Scoi2010]传送带(三分套三分)
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2549 Solved: 1370 [Submit][Status][Discuss] Descriptio ...
- pandas tutorial
目录 Series 利用dict来创建series 利用标量创建series 取 Dataframe 利用dict创建dataframe 选择 添加列 列移除 行的选择, 添加, 移除 Panel B ...
- 代码质量管理sonarqube部署使用
一.sonarqube的部署 1.下载sonaqube:https://www.sonarqube.org/downloads/ 根据需要下载特定版本: 2.如果通过sonar-scanner进行代码 ...
- maven打包报错 Fatal error compiling: tools.jar not found: C:\Program Files\Java\jre1.8.0_151\..\lib\tool
maven 打包报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:comp ...
- iNeuOS工业互联网操作系统,增加DTU与平台实时交互的应用场景
目 录 1. 概述... 2 2. 平台演示... 2 3. 硬件设置... 2 4. 应用过程... 3 1. 概述 DTU向下连接硬件传感器 ...
- 开源社区Review代码步骤
以Ranger项目为例,说明开源社区Review代码详细步骤. 1.寻找合适的issue进行review 首先自己需要是某个开源项目的committer, 要有合入代码的权限. 2.review代码 ...