amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 5142|回复: 59

opencv在rk3399上运行很慢,x86上却很流畅,求助怎么优化呢?

  [复制链接]
发表于 2019-1-17 13:22:16 | 显示全部楼层 |阅读模式
目前在x86上基于opencv上实现了一个物体跟踪算法,程序跑起来,1080p,30fps,效果还算不错。
但是程序放到arm上,rk3399,同时输入图像降为720*480,速度就很慢,很慢,跟不上。
是不是我的思路不对呀? arm不适合做图像处理?
发表于 2019-1-17 13:43:39 | 显示全部楼层
关注中。。。
发表于 2019-1-17 14:27:24 | 显示全部楼层
neon,还有,3399其实带了一个DSP
发表于 2019-1-17 14:55:27 | 显示全部楼层
opencv没有针对ARM进行优化,慢是一定的。
发表于 2019-1-17 14:57:39 | 显示全部楼层
获取摄像头图片的时候不要用opencv的api获取,里面对图片数据做了很多处理,会慢很多
发表于 2019-1-17 15:03:01 | 显示全部楼层
换z8350                                 
 楼主| 发表于 2019-1-17 15:13:20 | 显示全部楼层
liurangzhou 发表于 2019-1-17 14:27
neon,还有,3399其实带了一个DSP

编译的时候启用了neon和vfpv3,速度还是上不来。
 楼主| 发表于 2019-1-17 15:13:45 | 显示全部楼层
hexenzhou 发表于 2019-1-17 14:55
opencv没有针对ARM进行优化,慢是一定的。

是不是不应该使用arm来跑opencv?这条路是不是一条不归路?
 楼主| 发表于 2019-1-17 15:14:34 | 显示全部楼层

你提到的这个是Intel Atom了,功耗是不是就大了吗? 并且尺寸也大了
发表于 2019-1-17 15:16:22 | 显示全部楼层
shell.albert 发表于 2019-1-17 15:13
是不是不应该使用arm来跑opencv?这条路是不是一条不归路?

是的,在ARM端用到的OpenCV函数另外用C重写。
 楼主| 发表于 2019-1-17 15:18:56 | 显示全部楼层
hexenzhou 发表于 2019-1-17 15:16
是的,在ARM端用到的OpenCV函数另外用C重写。

我就相当于优化的工作呀,这工作量大了去了。还有没有别的方法呢?除了换x86
发表于 2019-1-17 18:37:00 | 显示全部楼层
shell.albert 发表于 2019-1-17 15:14
你提到的这个是Intel Atom了,功耗是不是就大了吗? 并且尺寸也大了

这颗Z8350以前是intel用来做平板电脑方案的,尺寸和功耗不一定比RK3399大~~~
发表于 2019-1-17 19:30:54 来自手机 | 显示全部楼层
参考下openmv的代码,他是在m4都能跑opencv,还用了Python封装
发表于 2019-1-17 19:35:51 来自手机 | 显示全部楼层
Opencv就是intel那帮人搞出来的,对x86架构有特殊的优化
发表于 2019-1-17 19:39:18 | 显示全部楼层
用neon重写某些函数

记得有某app用neon asm优化后处理速度极大提升
发表于 2019-1-17 20:30:30 | 显示全部楼层
换x86吧, 以前在imx6q上做过OpenCV的项目, 无论怎么优化,速度让人蛋疼。。
最后跟踪捕捉移动物体,然后计算物体周围几百行像素来分析。。。。
发表于 2019-1-18 00:56:07 | 显示全部楼层
我在全志H5上做简单的物体追踪,单独分配一个CPU做opencv运算,20FPS左右。
发表于 2019-1-18 06:38:29 来自手机 | 显示全部楼层
90999 发表于 2019-1-17 15:03
换z8350

樱桃之路是坑,linux没驱动,没文档。
发表于 2019-1-18 08:00:41 | 显示全部楼层
opencv 在arm上估计就那样了,还1080p处理,真要了命了。
图省事,不如换个z8350. 你看淘宝有卖电脑棒的,功耗不大。要么换个高端dsp,dsp跑opencv可以快
发表于 2019-1-18 08:33:11 | 显示全部楼层
dsp也跑不了opencv,dsp也是要用C重写的。
 楼主| 发表于 2019-1-18 09:02:22 | 显示全部楼层
xcm_gz 发表于 2019-1-18 00:56
我在全志H5上做简单的物体追踪,单独分配一个CPU做opencv运算,20FPS左右。

那估计你的算法属于很简单的那种,如果复杂度增加的话,我估计不可能达到20fps。
你输入图像的分辨率多大? 追踪区域多大?
 楼主| 发表于 2019-1-18 09:08:46 | 显示全部楼层

这玩意不知道性能如何,打算买个来测试一把。到时候上结果。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-1-18 11:04:07 | 显示全部楼层
hl1200 发表于 2019-1-18 06:38
樱桃之路是坑,linux没驱动,没文档。

用3735、3740的平板测试WIN10和UBUNTU,发现UBUNTU的DESKTOP真心不稳定,操作也比WIN10慢,不够一天就死机,WIN10放了一个多星期都没啥问题。找不到方法在平板上装UBUNTU SERVER,不清楚效果怎么样。
发表于 2019-1-18 11:15:52 | 显示全部楼层
本帖最后由 xcm_gz 于 2019-1-18 11:33 编辑
shell.albert 发表于 2019-1-18 09:02
那估计你的算法属于很简单的那种,如果复杂度增加的话,我估计不可能达到20fps。
你输入图像的分辨率多大 ...


我的算法比较简单,所有只用了一个CPU核心跑,分辨率是640*480.
你的程序所有CPU内核都跑满了吗?


发表于 2019-1-18 12:05:47 | 显示全部楼层
xcm_gz 发表于 2019-1-18 00:56
我在全志H5上做简单的物体追踪,单独分配一个CPU做opencv运算,20FPS左右。

20帧已经很流畅了吧
发表于 2019-1-18 12:12:26 | 显示全部楼层
本帖最后由 xcm_gz 于 2019-1-18 12:14 编辑
yofa2008 发表于 2019-1-18 12:05
20帧已经很流畅了吧


正常走勉强能跟上,快速跑动还不行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-1-18 12:48:39 | 显示全部楼层
z8350 不一定有3399 跑的快。。。
发表于 2019-1-18 14:48:18 | 显示全部楼层
shell.albert 发表于 2019-1-18 09:08
这玩意不知道性能如何,打算买个来测试一把。到时候上结果。

你把电脑频率调低到最低,只开单一核心,然后开始跑就知道了
发表于 2019-1-19 00:35:26 来自手机 | 显示全部楼层
nanfang2000 发表于 2019-1-17 19:30
参考下openmv的代码,他是在m4都能跑opencv,还用了Python封装

兄弟真搞笑,cv和mv根本不是一个量级,非要打个比喻,就像是汽车和玩具车。opencv只有在intel cpu下才跑得欢,因为本来就是基于intel特有的扩展指令集(例如sse系列)和多核架构做优化的,是辅助营销。我用h7做图像卷积,用simd优化和纯c做,速度相差七八倍
发表于 2019-1-19 08:25:58 来自手机 | 显示全部楼层
amigenius 发表于 2019-1-19 00:35
兄弟真搞笑,cv和mv根本不是一个量级,非要打个比喻,就像是汽车和玩具车。opencv只有在intel cpu下才跑 ...

对的,非要做,反正cv算法出来了,用c重写一遍呗,估计能快点,想省事就用x86
发表于 2019-1-19 09:05:52 | 显示全部楼层
用ZYNQ跑 opencv
发表于 2019-1-19 12:28:36 | 显示全部楼层
算法验证可以了,把最核心的部分根据arm重新就应该可以把?
发表于 2019-1-19 15:32:03 | 显示全部楼层
ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。  买个便宜的arm+计算棒  才是做图像的最佳方案。目前可以超过集显PC性能一倍左右
发表于 2019-1-19 15:35:58 | 显示全部楼层
xcm_gz 发表于 2019-1-18 00:56
我在全志H5上做简单的物体追踪,单独分配一个CPU做opencv运算,20FPS左右。

我在H6上跑,也就3帧 640X480的
发表于 2019-1-19 19:11:23 | 显示全部楼层
biezhen 发表于 2019-1-19 15:32
ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。  买个便宜的arm+计算棒  才是做图像的最佳方案。 ...

我的算法现在比较简单,所有勉强能用。有什么便宜的arm+计算棒方案,可以介绍一下吗?
发表于 2019-1-20 07:52:49 来自手机 | 显示全部楼层
Cpu gpu ddr定频到最高试试。
发表于 2019-1-20 07:57:50 来自手机 | 显示全部楼层
3399内部没有dsp
发表于 2019-1-20 17:31:42 来自手机 | 显示全部楼层
biezhen 发表于 2019-1-19 15:32
ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。  买个便宜的arm+计算棒  才是做图像的最佳方案。 ...

你说的计算棒是啥?
发表于 2019-1-21 12:34:10 | 显示全部楼层
nibia 发表于 2019-1-20 17:31
你说的计算棒是啥?

Movidius Myriad X  计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。
发表于 2019-1-21 12:40:07 | 显示全部楼层
我在 可怜的树霉派3b+只能做到1帧多点。现在手机的ARM芯片还是很强劲的,rk3399算力也还行,就是发热量太大, 3399上跑SSD 300X300的,大约可以5-6帧的样子;。裁剪、量化后可以做到10帧,但不是特别稳定.  什么时候8核的手机芯片哪怕是两年前的手机芯片干图像这些都很轻松。 AI加速是未来了,现在很多手机ARM都带AI加速的。
 楼主| 发表于 2019-1-31 14:46:00 | 显示全部楼层
找到好东东了,ZYNQ + openCV,结贴
发表于 2019-2-6 14:39:02 来自手机 | 显示全部楼层
如果对fpga比较熟悉的话,zynq确实是个不错的选择,对一些关键算法的加速还是很给力的
发表于 2019-2-6 14:39:25 来自手机 | 显示全部楼层
并且带宽也不是问题
发表于 2019-2-6 15:15:27 来自手机 | 显示全部楼层
shell.albert 发表于 2019-1-31 14:46
找到好东东了,ZYNQ + openCV,结贴

你考虑好你们是否能驾驭fpga?
发表于 2019-2-6 15:24:04 来自手机 | 显示全部楼层
估计悬,fpga没有几年的经验是玩不转的
发表于 2019-2-6 21:05:11 | 显示全部楼层
说到计算棒,瑞芯微也弄了款芯片 usb3.0接口呢
发表于 2019-2-11 02:09:03 来自手机 | 显示全部楼层
本帖最后由 610570143 于 2019-2-11 10:04 编辑

最快的办法是用3399pro。http://t.rock-chips.com
发表于 2019-2-11 04:44:05 来自手机 | 显示全部楼层
biezhen 发表于 2019-1-21 12:40
我在 可怜的树霉派3b+只能做到1帧多点。现在手机的ARM芯片还是很强劲的,rk3399算力也还行,就是发热量太大 ...

我靠你开多少分辨率为啥才1帧?
发表于 2019-2-11 16:51:48 | 显示全部楼层
看cpu性能,光看速度没意义,arm里的r指的是risk,精简指令集,对应的词叫cisk,复杂指令集,x86就是cisk,复杂指令集能一条指令完成的,精简指令集得跑半天,好比没学过乘法的小学生,算6个5相加,得掰着手指头加半天,学过乘法的,一条指令就出来了。

同样速度,arm的运算能力,特别是有了浮点预算的情况下,跟x86没法比,至于什么是浮点运算,求个正弦就是浮点运算,x86求sin是由专用指令完成的,arm就得用泰勒级数展开。展开过程中还得用到大量浮点计算。那个速度就没法把握了。

发表于 2019-2-12 00:55:16 | 显示全部楼层
下一页 发表于 2019-2-11 16:51
看cpu性能,光看速度没意义,arm里的r指的是risk,精简指令集,对应的词叫cisk,复杂指令集,x86就是cisk, ...

Intel的x86内部也是一个RISC……
发表于 2019-2-12 17:17:22 | 显示全部楼层
biezhen 发表于 2019-1-21 12:34
Movidius Myriad X  计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。 ...

应该没这么厉害吧. 1080有8T FLOPS了, NCS2 也就100多G吧
发表于 2019-2-12 19:33:46 | 显示全部楼层
本帖最后由 biezhen 于 2019-2-12 19:52 编辑

Myriad X之所以强大,是因为引入了一种神经计算器引擎的结构,属于一种加速器,在这种引擎的帮助下,Myriad X可以提供超过4 TOPS 的总体性能表现,并且达到每秒万亿次的DNN峰值吞吐量。
上面是网上介绍的,那个4TOPS,的能力估计指的是int8 ,但做边缘计算基本也都是int8,所以提供4TOPS算力应该很强劲了。    gtx1080的8TOPS可能是float,换成int8应该更强大。 但这个性能是超过i5平台X86 的cpu算力的。
这个X我没有用过。  
但老掉牙的Movidius MA2450 的计算棒用过,实测和笔记本i5-5300 相当。跑ssd-mobilenet 300   640*480 ,  基本可以做到12-15帧的样子。对比    三星note8手机大概可以跑3帧多不到4 左右。 rk3399大概可以跑2帧。 树莓派3B+ 超频到1.5G后 大概是1.3秒左右吧也就是不到一帧。
半年前玩的,具体时间可能有些出入  但树莓派3b+  一旦插入2代的vpu计算棒后,速度立马提高10倍,效果非常惊人,这个X应该比vpu-2450更快。
发表于 2019-2-13 11:54:10 | 显示全部楼层
biezhen 发表于 2019-2-12 19:33
Myriad X之所以强大,是因为引入了一种神经计算器引擎的结构,属于一种加速器,在这种引擎的帮助下,Myriad ...

如果我没有深度学习的算法,而是大量的浮点数运算,这个计算棒能加速吗?  除了usb3,能不能别的接口与arm连接
发表于 2019-2-13 21:39:34 | 显示全部楼层
nibia 发表于 2019-2-13 11:54
如果我没有深度学习的算法,而是大量的浮点数运算,这个计算棒能加速吗?  除了usb3,能不能别的接口与ar ...

不可以,这些这算棒都是针对特殊的神经网络加速的,不是通用计算加速
发表于 2019-3-1 09:14:38 | 显示全部楼层
是不是用opengl开发会快很多
发表于 2019-5-10 01:13:54 来自手机 | 显示全部楼层
biezhen 发表于 2019-1-21 12:34
Movidius Myriad X  计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。 ...

这种计算棒,没有工业级的呀。
发表于 2019-5-10 09:46:29 | 显示全部楼层
可以看看最新的NVIDIA的NANO ,8个1080P图像流实时识别,非常强悍,开发板现在价格不过800块钱
发表于 2019-6-24 23:00:10 | 显示全部楼层
楼主你需要的是Jetson Nano这个
发表于 2019-6-24 23:21:53 来自手机 | 显示全部楼层
我知道有个捕捉流星的系统,640x480,在pi上跑的,
发表于 2019-11-27 15:37:06 | 显示全部楼层
shell.albert 发表于 2019-1-31 14:46
找到好东东了,ZYNQ + openCV,结贴

zynq跑opencv怎么样,能商用吗?准备入坑了。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-25 17:53

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表