回答

收藏

震惊!S905X跑SSD竟然能达到每秒5帧!——khadas VIM试用后续

#拆解/开源硬件 #拆解/开源硬件 5026 人阅读 | 0 人回复 | 2019-09-07

本帖最后由 day_day 于 2019-9-13 21:21 编辑

(一)关于khadas vim base
手上这块khadas的vim base开发板是我所有开发板里面性能排行第二的,拥有2G主频的四核A53令其超越绝大部分。而手上最强的开发板是NANOPC-T4,其搭载的是瑞芯微的RK3399,不仅拥有六个核心,更是有A72大和夹持。后面这块开发板足足花费了我近千大洋,心里在滴血。


为什么当时我没有选择VIM呢?
首先VIM是18年年初时从论坛试用活动得到的,当时我弄到的试用名单还是VIM PRO,那个拥有3G运存和16G存储,双收发的无线模块。但是也不知道是世野方面搞错了,还是他们觉得不值得给我一块那么强大的板子,最后给我的也是一块VIM BASE。当时的管理员还是可依小姐姐,她突然来问我是不是发错了。
【Khadas VIM试用】开箱与上电
由于VIM BASE只有8G运存,当时绞尽脑汁才把opencv3.4装上,试用计划里面的其他部分基本不用想。
除此以外这块VIM BASE还有一些客观条件上的限制。


1、USB口带宽不足
这个是最严重的,因为这一点绝对性地限制了我的应用场景。我试用计划里面本就是为了接上双目摄像头处理图像的,带宽不足而无法打开opencv采集图像令我当时不得不再画近千大洋买T4。


2、系统支持一般
18年那会,KHADAS在国内的情况还不是很好,WIKI需要挂梯才能爬上,WIKI的内容也少。系统支持一般,作为一个仿树莓派Ubuntu mate系统,没有wiringpi底层驱动库,找不到数据手册、datasheet,也没有适配ACL加速库。
这个情况现在好了很多,在最新的系统里面已经支持wiringpi了,由于我还没有装,暂时不知道适配了ACL加速库没有。
WIKI也焕然一新,很容易访问,界面也很友好。

系统方面也更新到了boinic(ubuntu18代号),桌面采用了轻量化的xfce。可能有人觉得xfce各个方面的体验都不如mate桌面,为何我觉得这是个进步呢?这点我后面会重点提到。


3、无线模块太差
AP6212这个无线模块应用于很多开源硬件的无线方案中。之所以这么火,很重要的一个原因是它便宜。但便宜的价格同时也会带来糟糕的体验。


首先说个题外话——可能用过VIM的朋友会遇到这种事情,XRDP或者VNC远程无法打开,这是因为系统配置里面有些疏漏的地方,需要在.vnc/xstartup里面写入远程所要显示的桌面:
xfce4桌面的安装
上述链接是一个配置xfce远程桌面的方案,只需要把写入.vnc/xstartup的字符——xface改为ubuntu mate即可,因为我安装的镜像本身就是使用mate桌面,所以不必像教程里面那么繁琐,再安装一遍mate桌面。


题外话说完了,再说说题内话。我上面提到过,xfce桌面算是一种改进,尽管他很多体验远不如mate桌面方便。因为mate桌面体量远比xfce桌面大,树莓派之所以选择这个桌面式因为他们有着博通的强劲的wifi芯片,完全能够胜任远程桌面时急速变化的图像传播,甚至能看视频!但渣渣的AP6212完全刷一次1080P的屏需要十几秒!开发的时候完全没有体验!如果使用xfce桌面,能够一定程度上缓解这种问题。


当然我也尝试过用有线网,但效果也就稍微比无线网好一点,那个网口的传输能力也非常一般,我怀疑是不是这个芯片的网络能力都这么差……


4、识别帧率让人不尽满意
以前我采用opencv里面的DNN模块运行yolo神经网络推算来识别物体,但在VIM上,这一方法需要800ms+才能识别一帧(当然,这已经是相当快的速度了,RK3288上面需要1400ms+)
我当时觉得是硬件性能不足,因此咬了咬牙买了RK3399,但事实证明RK3399用DNN来运行yolo也只不过快了200ms,一秒连两帧都做不到。

(二)关于Tengine
2017年12月30日,Tengine AIOT平台正式开源,这个有着跟淘宝Web服务器同样名称的AIOT引擎,能够运行在ARM平台上,并把本应该比yolo更慢的SSD算法加速到200ms以内。
可惜是我试用恰逢tengine默默无闻时,完全没有耳闻这款产品。当时嵌入式深度学习环境还相当荒芜,比如TF lite这些根本没有发展起来,在嵌入式平台运行深度学习几乎没什么选择。
我曾经还一度以为ARM linux平台上可以装Tensorflow,但实际上到了18年末,Tensorflow才出现ARM linux平台的适配包,当时我看见anaconda上面有个arm字眼的包还以为真的可以装到arm上,结果捣鼓了半天,屁都运行不了。
ARM平台上安装CPU版TensorFlow  Lannister_wf
谷歌的几位大神员工合力贡献出了一个适用于ARM aarch64架构的TensorFlow安装包。

所以当时opencv几乎是arm平台跑深度学习的唯一选择。不得不说intel这个开源项目的成员们牛逼哄哄,在那个荒芜的时代生生把DNN模块挤进了opencv3.3里面,让嵌入式玩家也能用得上深度学习。但跨平台终究是牺牲了性能。


(三)安装Tengine
参考:
Tengine在Ubuntu16.04上的部署及MobileNet_SSD的实时测试
Firefly支持AI引擎Tengine

1、下载tengine
  1. sudo apt-get install git
  2. git clone https://github.com/OAID/tengine
复制代码
2、安装依赖项
  1. sudo apt install libprotobuf-dev protobuf-compiler libboost-all-dev libgoogle-glog-dev libopenblas-dev
复制代码

第一个参考资料里面少了一项libopenblas-dev,编译时会报错:
/usr/bin/ld: cannot find -lopenblas
collect2: error: ld returned 1 exit status
CMakeFiles/MSSD.dir/build.make:164: recipe for target 'MSSD' failed
make[2]: *** [MSSD] Error 1

3、配置文件
  1. cd ~/tengine
  2. cp makefile.config.example makefile.config
复制代码
基本不需要改动,默认配置就是ARM64位。实际上tengine项目早起只支持RK3399,而且在RK3399上还有个ACL加速库,可以支持显卡加速,需要额外启用。但VIM上面没有这个库,具体可以在github上下载编译。

此外还要安装opencv,如果不介意用2.14版本可以apt安装,但我是编译安装的,编译安装在VIM base上颇为麻烦,可以参考:
【Khadas VIM试用】emmc空间不足的情况下安装opencv3.4.0

4、编译

  1. make -j4
  2. make install
复制代码


5、配置环境(可略过)

  1. sudo mkdir -p /usr/local/AID/Tengine
  2. sudo cp -rpf ~/Tengine/install/* /usr/local/AID/Tengine
  3. wget ftp://ftp.openailab.net/tools/script/gen-pkg-config-pc.sh
  4. chmod +x ./gen-pkg-config-pc.sh
  5. sudo ./gen-pkg-config-pc.sh
复制代码

6、运行测试
在/examples/mobilenet_ssd目录下修改CMakeList.txt文件:
加一句
  1. set( TENGINE_DIR /home/khadas/tengine/tengine )
复制代码


  1. set( INSTALL_DIR ${TENGINE_DIR}/install/)
复制代码

前面。
如果位置错了,会报错:
Scanning dependencies of target MSSD
[ 33%] Building CXX object CMakeFiles/MSSD.dir/mssd.cpp.o
/home/khadas/tengine/tengine/examples/mobilenet_ssd/mssd.cpp:32:27: fatal error: tengine_c_api.h: No such file or directory
compilation terminated.
CMakeFiles/MSSD.dir/build.make:62: recipe for target 'CMakeFiles/MSSD.dir/mssd.cpp.o' failed
make[2]: *** [CMakeFiles/MSSD.dir/mssd.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/MSSD.dir/all' failed
make[1]: *** [CMakeFiles/MSSD.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

编译:
  1. cmake .
  2. make
  3. ./MSSD
复制代码
效果:

可以识别多个对象,却不足200ms!


(未完待续……)






分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条