查看: 4114|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-10 08:31
  • 签到天数: 300 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2019-9-7 17:07:57 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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也焕然一新,很容易访问,界面也很友好。

    VIM的系统镜像

    VIM的系统镜像

    系统方面也更新到了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
    复制代码
    效果:
    @XHYG3QA([G[6[XHY$]5$DS.png
    可以识别多个对象,却不足200ms!


    (未完待续……)






    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 19:59 , Processed in 0.102032 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.