shell.albert 发表于 2019-1-17 13:22:16

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

目前在x86上基于opencv上实现了一个物体跟踪算法,程序跑起来,1080p,30fps,效果还算不错。
但是程序放到arm上,rk3399,同时输入图像降为720*480,速度就很慢,很慢,跟不上。
是不是我的思路不对呀? arm不适合做图像处理?

tarzar 发表于 2019-1-17 13:43:39

关注中。。。

liurangzhou 发表于 2019-1-17 14:27:24

neon,还有,3399其实带了一个DSP

hexenzhou 发表于 2019-1-17 14:55:27

opencv没有针对ARM进行优化,慢是一定的。

nongxiaoming 发表于 2019-1-17 14:57:39

获取摄像头图片的时候不要用opencv的api获取,里面对图片数据做了很多处理,会慢很多

90999 发表于 2019-1-17 15:03:01

换z8350                                 

shell.albert 发表于 2019-1-17 15:13:20

liurangzhou 发表于 2019-1-17 14:27
neon,还有,3399其实带了一个DSP

编译的时候启用了neon和vfpv3,速度还是上不来。

shell.albert 发表于 2019-1-17 15:13:45

hexenzhou 发表于 2019-1-17 14:55
opencv没有针对ARM进行优化,慢是一定的。

是不是不应该使用arm来跑opencv?这条路是不是一条不归路?

shell.albert 发表于 2019-1-17 15:14:34

90999 发表于 2019-1-17 15:03
换z8350

你提到的这个是Intel Atom了,功耗是不是就大了吗? 并且尺寸也大了

hexenzhou 发表于 2019-1-17 15:16:22

shell.albert 发表于 2019-1-17 15:13
是不是不应该使用arm来跑opencv?这条路是不是一条不归路?

是的,在ARM端用到的OpenCV函数另外用C重写。

shell.albert 发表于 2019-1-17 15:18:56

hexenzhou 发表于 2019-1-17 15:16
是的,在ARM端用到的OpenCV函数另外用C重写。

我就相当于优化的工作呀,这工作量大了去了。还有没有别的方法呢?除了换x86

elsonx 发表于 2019-1-17 18:37:00

shell.albert 发表于 2019-1-17 15:14
你提到的这个是Intel Atom了,功耗是不是就大了吗? 并且尺寸也大了

这颗Z8350以前是intel用来做平板电脑方案的,尺寸和功耗不一定比RK3399大~~~

nanfang2000 发表于 2019-1-17 19:30:54

参考下openmv的代码,他是在m4都能跑opencv,还用了Python封装

jianfengxixi 发表于 2019-1-17 19:35:51

Opencv就是intel那帮人搞出来的,对x86架构有特殊的优化

Earthman 发表于 2019-1-17 19:39:18

用neon重写某些函数

记得有某app用neon asm优化后处理速度极大提升

boyiee 发表于 2019-1-17 20:30:30

换x86吧, 以前在imx6q上做过OpenCV的项目, 无论怎么优化,速度让人蛋疼。。
最后跟踪捕捉移动物体,然后计算物体周围几百行像素来分析。。。。

xcm_gz 发表于 2019-1-18 00:56:07

我在全志H5上做简单的物体追踪,单独分配一个CPU做opencv运算,20FPS左右。

hl1200 发表于 2019-1-18 06:38:29

90999 发表于 2019-1-17 15:03
换z8350

樱桃之路是坑,linux没驱动,没文档。

nibia 发表于 2019-1-18 08:00:41

opencv 在arm上估计就那样了,还1080p处理,真要了命了。
图省事,不如换个z8350. 你看淘宝有卖电脑棒的,功耗不大。要么换个高端dsp,dsp跑opencv可以快

hexenzhou 发表于 2019-1-18 08:33:11

dsp也跑不了opencv,dsp也是要用C重写的。

shell.albert 发表于 2019-1-18 09:02:22

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

那估计你的算法属于很简单的那种,如果复杂度增加的话,我估计不可能达到20fps。
你输入图像的分辨率多大? 追踪区域多大?

shell.albert 发表于 2019-1-18 09:08:46


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

wingerchen 发表于 2019-1-18 11:04:07

hl1200 发表于 2019-1-18 06:38
樱桃之路是坑,linux没驱动,没文档。

用3735、3740的平板测试WIN10和UBUNTU,发现UBUNTU的DESKTOP真心不稳定,操作也比WIN10慢,不够一天就死机,WIN10放了一个多星期都没啥问题。找不到方法在平板上装UBUNTU SERVER,不清楚效果怎么样。

xcm_gz 发表于 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内核都跑满了吗?


yofa2008 发表于 2019-1-18 12:05:47

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

20帧已经很流畅了吧

xcm_gz 发表于 2019-1-18 12:12:26

本帖最后由 xcm_gz 于 2019-1-18 12:14 编辑

yofa2008 发表于 2019-1-18 12:05
20帧已经很流畅了吧

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

孤独的猫 发表于 2019-1-18 12:48:39

z8350 不一定有3399 跑的快。。。

90999 发表于 2019-1-18 14:48:18

shell.albert 发表于 2019-1-18 09:08
这玩意不知道性能如何,打算买个来测试一把。到时候上结果。

你把电脑频率调低到最低,只开单一核心,然后开始跑就知道了

amigenius 发表于 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做,速度相差七八倍

zouzhichao 发表于 2019-1-19 08:25:58

amigenius 发表于 2019-1-19 00:35
兄弟真搞笑,cv和mv根本不是一个量级,非要打个比喻,就像是汽车和玩具车。opencv只有在intel cpu下才跑 ...

对的,非要做,反正cv算法出来了,用c重写一遍呗,估计能快点,想省事就用x86

CK345 发表于 2019-1-19 09:05:52

用ZYNQ跑 opencv

pazulin 发表于 2019-1-19 12:28:36

算法验证可以了,把最核心的部分根据arm重新就应该可以把?

biezhen 发表于 2019-1-19 15:32:03

ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。买个便宜的arm+计算棒才是做图像的最佳方案。目前可以超过集显PC性能一倍左右

biezhen 发表于 2019-1-19 15:35:58

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

我在H6上跑,也就3帧 640X480的

xcm_gz 发表于 2019-1-19 19:11:23

biezhen 发表于 2019-1-19 15:32
ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。买个便宜的arm+计算棒才是做图像的最佳方案。 ...

我的算法现在比较简单,所有勉强能用。有什么便宜的arm+计算棒方案,可以介绍一下吗?

timi 发表于 2019-1-20 07:52:49

Cpu gpu ddr定频到最高试试。

timi 发表于 2019-1-20 07:57:50

3399内部没有dsp

nibia 发表于 2019-1-20 17:31:42

biezhen 发表于 2019-1-19 15:32
ARM的性能,远远不及X86的性能。 价格和功耗在那里拍着。买个便宜的arm+计算棒才是做图像的最佳方案。 ...

你说的计算棒是啥?

biezhen 发表于 2019-1-21 12:34:10

nibia 发表于 2019-1-20 17:31
你说的计算棒是啥?

Movidius Myriad X计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。

biezhen 发表于 2019-1-21 12:40:07

我在 可怜的树霉派3b+只能做到1帧多点。现在手机的ARM芯片还是很强劲的,rk3399算力也还行,就是发热量太大, 3399上跑SSD 300X300的,大约可以5-6帧的样子;。裁剪、量化后可以做到10帧,但不是特别稳定.什么时候8核的手机芯片哪怕是两年前的手机芯片干图像这些都很轻松。 AI加速是未来了,现在很多手机ARM都带AI加速的。

shell.albert 发表于 2019-1-31 14:46:00

找到好东东了,ZYNQ + openCV,结贴{:lol:}

boyiee 发表于 2019-2-6 14:39:02

如果对fpga比较熟悉的话,zynq确实是个不错的选择,对一些关键算法的加速还是很给力的

boyiee 发表于 2019-2-6 14:39:25

并且带宽也不是问题

nibia 发表于 2019-2-6 15:15:27

shell.albert 发表于 2019-1-31 14:46
找到好东东了,ZYNQ + openCV,结贴

你考虑好你们是否能驾驭fpga?

jianfengxixi 发表于 2019-2-6 15:24:04

估计悬,fpga没有几年的经验是玩不转的

Earthman 发表于 2019-2-6 21:05:11

说到计算棒,瑞芯微也弄了款芯片 usb3.0接口呢

610570143 发表于 2019-2-11 02:09:03

本帖最后由 610570143 于 2019-2-11 10:04 编辑

最快的办法是用3399pro。http://t.rock-chips.com

qiqirachel 发表于 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就得用泰勒级数展开。展开过程中还得用到大量浮点计算。那个速度就没法把握了。

Gorgon_Meducer 发表于 2019-2-12 00:55:16

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

Intel的x86内部也是一个RISC……

albert_w 发表于 2019-2-12 17:17:22

biezhen 发表于 2019-1-21 12:34
Movidius Myriad X计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。 ...

应该没这么厉害吧. 1080有8T FLOPS了, NCS2 也就100多G吧

biezhen 发表于 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更快。

nibia 发表于 2019-2-13 11:54:10

biezhen 发表于 2019-2-12 19:33
Myriad X之所以强大,是因为引入了一种神经计算器引擎的结构,属于一种加速器,在这种引擎的帮助下,Myriad ...

如果我没有深度学习的算法,而是大量的浮点数运算,这个计算棒能加速吗?除了usb3,能不能别的接口与arm连接

biezhen 发表于 2019-2-13 21:39:34

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

不可以,这些这算棒都是针对特殊的神经网络加速的,不是通用计算加速

nibia 发表于 2019-3-1 09:14:38

是不是用opengl开发会快很多

redworlf007 发表于 2019-5-10 01:13:54

biezhen 发表于 2019-1-21 12:34
Movidius Myriad X计算棒,二代的算力,相当于大名鼎鼎GTX1080的一半。相当的强悍。 ...

这种计算棒,没有工业级的呀。

jiangchun999 发表于 2019-5-10 09:46:29

可以看看最新的NVIDIA的NANO ,8个1080P图像流实时识别,非常强悍,开发板现在价格不过800块钱

SMC 发表于 2019-6-24 23:00:10

楼主你需要的是Jetson Nano这个

fsclub 发表于 2019-6-24 23:21:53

我知道有个捕捉流星的系统,640x480,在pi上跑的,

18501501628 发表于 2019-11-27 15:37:06

页: [1]
查看完整版本: opencv在rk3399上运行很慢,x86上却很流畅,求助怎么优化呢?