高效赋能AIoT生态链:

本教程以飞凌嵌入式RK3399平台为例,讲述主动模式和被动模式的人工智能计算棒部署流程。

硬件平台

平台:OK3399-C开发板
系统:Desktop
模块:TB-RK1808S0
环境准备: 飞凌OK3399-C开发板,RK1808人工智能计算棒(固件版本为V1.3.4),usb摄像头,摄像头和计算棒都插入OK3399-C开发板。

使用lsusb命令查看,如下(红框部分2207:0018即为RK1808人工智能计算棒):

输入命令如下:

注意:因为被动模式需要安装的库文件较多,占用空间较大,所以需要扩大rootfs分区,修改param/parameter.txt文件0x00f00000@0x0005a000(rootfs) //0x f00000个块(512字节)=7.5G

改为

0x01800000@0x0005a000(rootfs) //0x1800000个块=12G

修改后进入系统,查看分区大小:

概述

AI计算区分为四个不同的象限,分别是云端训练、云端推理,边缘训练以及边缘推理。其中终端推理,几乎都集中在Arm架构生态上。AI神经网络计算目前可以通过CPU、GPU、DSP、NPU、FAGA等完成,但不同的硬件特性会导致效率和功耗的不同。其中NPU——嵌入式神经网络处理器采用“数据驱动并行计算”的架构,最擅长的就是视频、图像类的海量多媒体数据的处理,并且相比GPU等具有更低的功耗。我司推出OK3399-CDesktop+RK1808(含3Tops算力NPU)的组合,在满足AI边缘计算的情况下,使得功耗大幅降低。

RK1808人工智能计算棒是一个专用AI应用模块,拥有主动模式和被动模式两种模式。

主动模式下:RK1808人工智能计算棒作为主动设备,RK1808人工智能计算棒内部默认已安装rknn-toolkit和rknn-api,上位机(也称宿主机)无需安装rknn-toolkit和rknn-api,模型及算法固化在RK1808人工智能计算棒中,OK3399-C通过USB口向计算棒输入数据(例如图片和视频流),RK1808人工智能计算棒自动完成数据的前处理、推理、后处理,然后把处理结果通过USB口输出给OK3399-C。

为了方便用户通过USB口传输数据,RK1808人工智能计算棒会把USB口虚拟成网卡等标准设备,用户只需通过标准设备接口的操作(例如网络的socket编程)即可完成对RK1808人工智能计算棒数据的输入和输出。

被动模式下:OK3399-C通过RKNN-Toolkit将模型及前处理后的数据传输给RK1808人工智能计算棒,RK1808人工智能计算棒完成推理,并把结果返回OK3399-C,OK3399-C进行后处理以及显示等操作。

主动模式

细节如下:

1. RK1808计算棒插入上位机后,会被虚拟成网卡设备;

2. 上位机OK3399-C进行虚拟网卡配置,配置IP为192.168.180.1,保证上位机和1808中间的网络连接正常;

3. 计算棒默认IP为192.168.180.8,账号密码皆为toybrick,用户可以SSH登录计算棒,拷贝模型和server服务程序到计算棒;

4. 计算棒端运行server服务程序,用来接收上位机的连接请求,并调用RKNN进行处理,再返回结果;

5. 上位机运行client程序,连接server成功之后,发送推理请求,从1808端获取返回结果。

1、计算棒网络配置与网络共享配置

(1)计算棒网络配置

上位机使用OK3399-C Forlinx Desktop系统,点击右下角网络按钮选择弹出窗口中的“EditConnections...”选项:

选择计算棒usb网卡生成的有线网络节点:

配置该节点为手动模式,设置IP:192.168.180.1,子网掩码:255.255.255.0,并保存:

终端输入ifconfig指令查看网络节点配置如下,可见usb网卡配置完成:

ping一下1808计算棒网络192.168.180.8,如下网络可以连通:

使用ssh登录1808计算棒,用户名和密码默认都为toybrick,如下登陆成功:

(2)网络共享配置

运行ifconfig,可以看到eth0、wlan0等宿主机网卡,我们用于访问外网,enx10dcb69f022c为USB网卡(RK1808人工智能计算棒虚拟网卡)。不同的系统网卡名称可能不一样,以实际网卡名称为准。

首先配置宿主机网络,使宿主机可以连通以太网,这里我们使用wlan0节点来上网,具体配置不再赘述。

命令行执行如下命令,其中enx10dcb69f022c需要修改成用户本地实际值;正常情况只要设置一次即可,若拔插设备发现网卡名称改变了或者用户手动删除该网卡,则需要重新设置。

 sudo nmcli connection add con-name toybrick type ethernet ifname enx10dcb69f022c autoconnect yes ip4 192.168.180.1/24

配置NAT功能,执行如下命令,其中eno1需要修改成用户本地实际值;关机失效,所以每次电脑重启都要重新设置。

sudo sysctl   -w net.ipv4.ip_forward=1
sudo iptable -F
sudo iptables -t nat -F
sudo  iptables  -t  nat  -A POSTROUTING -o wlan0 -j MASQUERADE

注意:以自己开发板联网的实际端口为准,例:eth0

iptables命令部分释义如下:

iptables --help

--flush -F [chain] Delete all rules in chain or all chains

--table -t table table to manipulate (default: `filter')

--append -A chain Append to chain

--jump -j target target for rule (may load target extension)

MASQUERAD,地址伪装,算是snat中的一种特例,可以实现自动化的snat

SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,所以叫做SNAT,基于源地址的地址转换。

DNAT是destinationnet workaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。

2、主动模式Mobilenet-ssd测试

(1)环境要求

1)参考“计算棒网络配置与网络共享配置”章节,完成RK1808人工智能计算棒网络配置(RNDIS)以及网络共享配置。

  1. 宿主机需要插入USB摄像头,并连接显示器。

(2)部署计算棒程序

SSH方式

该方式通过ssh连接到RK1808人工智能计算棒,运行相应程序。

计算棒系统用户名:toybrick 密码:toybrick

计算棒系统用户名:root 密码:toybrick

建议用toybrick用户登录

1)使用官方链接下载Mobilenet-SSD主动模式demo软件包,解压,链接如下:

https://eyun.baidu.com/s/3htJNFwS

2)拷贝解压目录中的1808目录至计算棒

1. scp -r 1808/ toybrick@192.168.180.8:/home/toybrick/

3)ssh进入计算棒

1. ssh toybrick@192.168.180.8

4)安装依赖包

1. sudo dnf install -y cmake make

5)编译

1. cd 1808/mkdir buildcd build/cmake ..make -j4

6)直接运行程序或设置程序为开机启动

•直接运行:

1. ./1808_ssd_demo

(3)部署上位机程序(以OK3399-Cdesktop为例)

1)安装依赖包make/cmake/opencv

1. sudo apt-get install -y make cmake libopencv-dev

2)进入Mobilenet-SSD主动模式demo软件包中的host目录,修改host/ssd_demo.cpp,根据开发板实际情况修改打开的摄像头节点:

1. cd host/

2. int main(void)

3. {

4. //ret = test.run(VIDEO_NODE, post_process, &data);

5. ret = test.run("/dev/video10", post_process, &data);

6. }

3)编译

1. mkdir buildcd build/cmake ..make -j4

4)计算棒程序运行起来后,运行上位机程序

1. ./ssd_demo

效果如下:

3、主动模式yolov3测试

(1)环境要求

1)参考“计算棒网络配置与网络共享配置”章节,完成RK1808人工智能计算棒网络配置(RNDIS)以及网络共享配置。

2)OK3399-C开发板需要插入USB摄像头,并连接显示器。

(2)部署步骤

计算棒端:

1)使用官方链接下载示例源码master_yolov3.zip,解压,链接如下:

https://eyun.baidu.com/s/3ekyvJS#sharelink/path=%2F

2)拷贝解压目录中的1808目录至计算棒:

scp -r 1808/ toybrick@192.168.180.8:/home/toybrick/

3)通过ssh连接到RK1808人工智能计算棒,运行yolov3master端程序

计算棒系统用户名toybrick 密码toybrick

计算棒系统用户名root 密码toybrick

建议用toybrick用户登录,安装python依赖包,root用户可能存在未知风险。

进入计算棒:

ssh toybrick@192.168.180.8

4)安装依赖包:

sudodnf install python3-opencv -y

5)进入刚才拷贝的1808目录,运行1808端程序。

宿主机端:

1)安装依赖库

pip3 install --user numpy

sudo apt-get install -y python3-opencv

2)运行host端程序

(3)效果如下:

被 动 模 式

被动模式开发流程图如下:

被动模式整体数据流程图如下:

1、被动模式Mobilenet-ssd测试

(1)使用官方链接下载被动模式Mobilenet-ssd源码

http://t.rock-chips.com/wiki.php?mod=view&id=71

或者使用用户资料中提供的源码,目录为:用户资料\linux\源码\被动模式\Mobilenet-ssd\

(2)安装编译器、OpenCV、rknn-api

sudo apt-get install cmake gcc g++ //安装编译器

验证编译器已安装成功:

sudo apt-get install libopencv-dev //安装opencv库文件

rknn-api 安装脚本在 slave_mobilenet_ssd 压缩包中

cd slave_mobilenet_ssd/install_rknn

sudo ./install_rknn_api.sh //安装rknn_api和通信程序

执行脚本后,下载了rknn_api和通信程序:

(3)代码编译运行

1)cd slave_mobilenet_ssd

修改ssd_demo.cpp文件中main函数中如下语句,根据开发板实际情况修改打开的摄像头节点

ret= test.run(VIDEO_NODE, post_process, &data);

改为:

ret= test.run("/dev/video10", post_process, &data);

2)mkdir build

3)cd build

4)cmake..

5)make

编译结果生成ssd_demo可执行程序:

6)npu_transfer_proxy& //启动NPU守护进程,通信代理服务。该程序由原厂提供。

7)在PC上插入USB摄像头

8)在PC界面终端上执行./ssd_demo,将会在屏幕上显示SSD图像结果

9)按'ESC'键退出运行

2、被动模式Rock-X测试

(1)使用原厂链接下载Rock-X SDK并解压,链接如下:

https://eyun.baidu.com/s/3o9xqPPC#sharelink/path=%2F

或者使用用户资料中提供的源码,目录为:用户资料\linux\源码\被动模式\Rock-X\

(2)安装编译器

sudo apt-get install cmake gcc g++

3、插入计算棒,等待上位机识别到计算棒

4、上位机运行rock-x依赖rknn_api, npu_transfer_proxy

用户可以先按照本文档第三章“被动模式Mobilenet-ssd测试”安装rknn_api;用户也可以通过原厂提供的链接地址直接下载rknn_api, npu_transfer_proxy,如下:

http://repo.rock-chips.com/rk1808/rknn-api/

http://repo.rock-chips.com/rk1808/npu_transfer_proxy/

5、运行npu_transfer_proxy和计算棒进行通信

npu_transfer_proxy &

6、编译测试用demo

cd demo/command_line_demo

./build-linux-rk3399pro-on-device.sh

此时会编译得到rock-x中demo目录下的各用例并存放在install目录下

7、测试生成的用例中的rockx_face_landmark_demo

cd install/rockx_linux_rk3399pro/rockx_face_landmark_demo/

export LD_LIBRARY_PATH=../lib

./rockx_face_landmark face4.jpg 68 //人脸特征点定位(68点)

8、测试效果如下:

9、Rock-X command_line_demo提供的例程

rockx_carplate_demo 车牌识别

rockx_face_attribute_demo 人脸属性识别(性别、年龄)

rockx_face_detection_demo 人脸检测

rockx_face_landmark_demo 人脸特征点定位

rockx_head_detection_demo 人头检测

rockx_object_detection_demo 物体检测

rockx_object_track_demo 物体运动检测

rockx_pose_body_demo 人体姿态检测

rockx_pose_finger_demo 手掌节点姿态检测

rockx_face_liveness_demo 活体检测

rockx_face_recognition_demo 人脸识别对比

3、被动模式yolov3测试

注意该测试中安装的部分包因为资源问题下载可能会因超时而无法下载,遇到这种情况,可以使用我司提供的现成的安装包,目录为:用户资料\ linux\源码\被动模式\yolov3 demo\安装包\

(1)安装python3.5

ubuntu18.04默认python3.6,该版本部分库没有资源无法安装,所以更换为python3.5

sudo apt-get update

sudo apt-get install software-properties-common

sudo add-apt-repository ppa:deadsnakes/ppa

sudo apt-get update

sudo apt-get install python3.5-dev

sudo apt-get --reinstall install python3.5-minimal

sudo mv /usr/bin/python3 /usr/bin/python3-old

sudo ln -s /usr/bin/python3.5 /usr/bin/python3

sudo update-alternatives --install /usr/bin/python python/usr/bin/python3.5 300

验证python3.5是否安装成功并且python3已经修改为默认使用3.5:

安装新版pip:

wget https://bootstrap.pypa.io/get-pip.py

sudo python3 get-pip.py

sudo pip3 install setuptools --upgrade

sudo ln -s /usr/local/bin/pip3 /usr/bin/pip3

验证pip安装成功且默认使用python3.5的pip工具:

(2)安装依赖库

sudo apt-get install cmake gcc g++ libprotobuf-dev protobuf-compiler

sudo apt-get install liblapack-dev libjpeg-dev zlib1g-dev

sudo apt-get install python3-dev python3-pip python3-scipy

sudo apt-get install python3-opencv python3-numpy python3-lmd bpython3-h5py

pip3 install wheel setuptools

sudo apt-get build-dep python3-h5py && pip3 install h5py

pip3 install --user scipy

pip3 install --user grpcio==1.26.0

pip3 install --user onnx

pip3 uninstall pillow

pip3 install --user pillow==4.2.1

pip3 uninstall h5py

pip3 install --user h5py==2.8.0rc1

注意部分安装包因为资源问题下载可能会因超时而无法下载,可以使用我司提供的现成的安装包。

查看上述指令安装的包是否安装到python3.5目录下:

(3)安装TensorFlow

wget http://repo.rock-chips.com/python/tensorflow-1.11.0-cp35-none-linux_aarch64.whl

pip3 install --user tensorflow-1.11.0-cp35-none-linux_aarch64.whl

TensorFlow也可以到/home/forlinx/.local/lib/python3.5/site-packages/目录下查看安装情况

(4)Python3.5安装OpenCV3

1)下载opencv和opencv_contrib,这两部分代码下载也比较困难,建议使用我司用户资料中提供的源码包,目录为:用户资料\linux\源码\被动模式\yolov3demo\安装包\:

cd~

git clone https://github.com/opencv/opencv.git

git clone https://github.com/opencv/opencv_contrib.git

2)编译opencv源码

cd~/opencv

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..

make

编译结果如下:

3)安装OpenCV

sudo make install

部分安装信息:

OpenCV的安装文件也可以在系统中找到,例如:

/usr/local/lib/libopencv_core.so.4.3.0

/usr/local/include/opencv4/opencv2/cvconfig.h

编译时会有报错解决方法可以参考如下链接:

https://stackoverflow.com/questions/28776053/opencv-gtk2-x-error

http://www.luyixian.cn/news_show_316237.aspx

或者可以使用我司提供的现成的OpenCV的源码。

(5)安装rknn-toolkit

wget http://repo.rock-chips.com/python/tensorflow-1.11.0-cp35-none-linux_aarch64.whl

pip3 --default-timeout=100000 install --user rknn_toolkit-1.1.0-cp35-cp35m-linux_aarch64.whl

rknn_toolkit也可以到/home/forlinx/.local/lib/python3.5/site-packages/目录下查看安装情况,可以看到对应安装目录:

(6)下载yolov3 demo程序测试运行

wget -r -np -nc -nH http://repo.rock-chips.com/rk1808/yolov3/

cd rk1808/yolov3/

修改rknn_camera_tiny_multiProcess.py中打开的摄像头节点:

video= cv2.VideoCapture(0)

改为:

video= cv2.VideoCapture("/dev/video10")

注意:摄像头节点需要依据自己开发板的实际情况来修改

命令行执行:

python3.5 rknn_camera_tiny_multiProcess.py

运行结果如下:

至此,OK3399-C开发板+RK1808人工智能计算棒在主动模式和被动模式下的测评就告一段落。

测评分享丨RK3399+RK1808人工智能计算棒(主动模式和被动模式)相关推荐

  1. 演讲实录丨周斌:人工智能推动新基建和数据中心的技术革新

    2020-09-09 21:54:49 7月25日-26日,在中国科学技术协会.中国科学院.中国工程院.浙江省人民政府.杭州市人民政府.浙江省人工智能发展专家委员会指导下,由中国人工智能学会.杭州市余 ...

  2. 华为高级研究员谢凌曦:下一代人工智能计算模型探索

    2020-04-30 23:30:04 导读:下一代人工智能计算模型,主要是使用一些自动化技术帮助我们设计更好的深度学习网络结构,并在任务中提升性能.在深度学习如火如荼的当下,如何设计高效的神经网络架 ...

  3. 赠票福利 | 2019人工智能计算大会即将开幕,与王恩东、陆永青、王海峰等专家共话AI计算技术与未来...

    通过量子位特邀渠道,即可获得原票价1099的限时免费报名通道,并会优先审核,优先通过.文末有报名方式及报名通道. 计算.算法与数据是新一轮人工智能浪潮兴起与持续发展的三大核心要素,其中计算作为承载和推 ...

  4. 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化

    使用特邀码"liangziwei"(量子位的拼音),获得原票价600的免费报名通道,并会优先审核,优先通过. 9月11-12日,2018人工智能计算大会(AI Computing ...

  5. 虹科案例分享丨世界领先的矿业公司(英美资源集团)与虹科-Atheer合作

    虹科案例分享丨世界领先的矿业公司(英美资源集团)与虹科-Atheer合作   摘要 世界领先的矿业公司之一.总部位于伦敦的英美资源集团(Anglo American)与虹科-Atheer合作,推动了劳 ...

  6. 华为人工智能计算机平台,华为Atlas人工智能计算平台正式上市

    原标题:华为Atlas人工智能计算平台正式上市 2019年4月17日,华为宣布Atlas人工智能计算平台系列产品正式上市,开启了Atlas商用新篇章. 华为智能计算Atlas新品开售 Atlas人工智 ...

  7. PFMEA分享丨PFD过程流程图的那些事

    专栏简介 我们将通过FMEA系列文章,从理论出发结合丰富案例分析,深入浅出地带大家系统的学习FMEA相关知识,掌握潜在失效分析方法并能高效落实进行风险管控和预防,解决产品设计和过程设计可能出现的问题. ...

  8. 浙大计算机学院夏令营面试,学姐经验分享丨夏令营面试准备 套路详解!

    原标题:学姐经验分享丨夏令营面试准备 & 套路详解! A:哎,小B,我听说夏令营面试很重要,你准备好了吗? B:没有欸,自我介绍.专业知识考核.英语考核什么的感觉好复杂. A:是啊,听说还有什 ...

  9. 树莓派4B与Intel Movidius计算棒2代实现深度学习应用加速

    树莓派4B与Intel Movidius计算棒2代实现人脸识别加速实例 树莓派 树莓派介绍 教程 操作 换源部分: 安装cmake Intel 神经计算棒环境配置 Intel 神经计算棒简介 Open ...

最新文章

  1. usaco Magic Squares
  2. mysql 触发器死循环_请教如何避免该条触发器的死循环
  3. 北大美女学霸力压大神何恺明新作MAE!怒摘12个SOTA,灵感竟来自16年前CVPR论文...
  4. 解题报告:NOIP2013 车站分级(拓扑序递推求解差分约束、建图优化O(n+m)) 超详细讲解
  5. 希尔排序算法原理与实现
  6. [转].NET学习网站收集
  7. PhotoMill X for Mac(图片批处理工具)
  8. Java面试基础部分合集
  9. html上传文件出现fakepath,IE8上传文件时获取文件本地路径问题(C:\fakepath\……)的解决...
  10. pandas datetime数据类型
  11. springboot+elasticsearch 中测试查询语句报错failed to map source
  12. python tox
  13. 什么是NLP,NLP主要有什么用,为什么要学自然语言处理?
  14. 基于Javaweb和阿里云服务器的用户管理平台
  15. 企业做CMMI认证有什么用?
  16. 软件评估报告和软件可行性分析文档搜集
  17. 轻量级pythonide_《轻》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  18. 还在找免费的能提供HTTPS协议外链的图床?这个开源插件轻松完成
  19. 解决实例化Servlet类XXX异常
  20. 金仓数据库 时间没有 时分秒 的问题

热门文章

  1. Linux. CentOS7.5安装X Server
  2. java中关于引用net.sf.json.JSONObject 和org.json.JSONObject 的差别
  3. 梅花雪js树形控件MZTreeVew1.0/MZTreeVew2.0下载
  4. web无序列表去掉点_在HTML中怎样去除无序列表前的小圆点
  5. 联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑整机测试评测-ZOL中关村在线...
  6. 华为补助武汉员工,最高每日 2000 元;谷歌更新安卓修复数百万台芯片漏洞;Fuchsia OS进入开发者试用阶段 | EA周报...
  7. python图案代码大全_Python练习代码实例65-一个最优美的图案
  8. 手机端安装charles证书详解
  9. js读取excel的值
  10. Canvas doesn't allow drawing