原创 基于飞凌嵌入式 NXP i.MX8MMini开发板试用体验-运行tengine

2020-10-29 09:12 5530 2 2 分类: MCU/ 嵌入式

Tengine 是 OPEN AI LAB 一款轻量级神经网络推理引擎,它针对 Arm 嵌入式平台进行了专门优化,对 Android、Linux 系统都提供了很好的支持。

而且更加难能可贵的是 Tengine 并不依赖于专用 AI 芯片(即 Tengine 可以利用 GPU、NPU 这些具有专门 AI 加速功能的模块进行 AI 运算,也可以利用通用的 CPU 进行 AI 运算),很多 Arm 平台都可以通过 Tengine 框架对算力进行深度挖掘,从而高效的运行一些 AI 应用。


本文就是想描述如何在OKMX8MM-C这一 Arm64 平台上搭建 Tengine AI 推理框架,并运行图像识别相关应用。首先在OKMX8MM-C上面移植了基于 Armbian 的 Debian 10 系统,运行的 u-boot 和 linux kernel 都是mainline的。


编译 Tengine

OPEN AI LAB 在 Github 上提供了开源的 Tengine 版本,并提供了比较详细的参考文档,所以可以直接下载源码,根据文档进行编译。

得益于 i.MX8MMini 强大的性能,我们可以直接在 i.MX8MMini 上下载代码,进行编译,免去交叉编译的诸多不便。


1. 下载源码

git clone --recurse-submodules https://github.com/OAID/tengine/

注意 clone 的时候一定要带 --recurse-submodules 这个参数,否则会下载不完整。


2. 安装依赖

apt install libprotobuf-dev protobuf-compiler libopencv-dev  pkg-config


3. 修改配置文件

在源码的 default_config 目录下提供了基于 arm32、arm64、x86 这三个平台的配置文件。

RK3399 是 Arm64, 所以对应的配置文件为:arm64_linux_native.config。

这里要做的修改是,在配置文件中打开 BUILD_SERIALIZER=y 这个选项,否则后面运行的时候可能会遇到Shared library not found: libcaffe-serializer.so: cannot open shared object file: No such file or directory 这个错误。

4. 编译

在源码根目录执行如下命令进行编译:

./linux_build.sh default_config/arm64_linux_native.config


5. 下载 model 文件

运行这些 AI 应用的时候,需要加载对应的 model 文件,这些文件可以从 OPEN AI LAB 提供的网盘里下载:

https://pan.baidu.com/s/1Ar9334MPeIV1eq4pM1eI-Q , 提取码为 hhgc 。

下载完后需要把这些 model 文件放在 Tengine 源码根目录下的 models 文件夹,所有的 model 文件加在一起比较大,我只上传了后面测试需要用到的部分:

6. 运行 benchmark

编译完成后默认会在 build/benchmark/bin/ 目录下生成两个供测试用的 benchmark 文件,可以直接执行这两个文件,用来简单的测试,确实是否真正编译成功。

./build/benchmark/bin/bench_sqz ./build/benchmark/bin/bench_mobilenet


编译并运行测试 Demo

Tengine 开放的源码里面还带了几个不错的 图像识别相关的测试 Demo,用来测试和进行 AI 相关的基础学习都很不错。

这些 Demo 的源码在 examples 目录下,在编译之前我们需要修改一个编译脚本 linux_build.sh, 即根据实际情况,正确设置 Tengine 的所在路径,比如我下载编译的 Tengine 代码在 /root/rockdev/tengine 目录下:

然后在 examples 目录下执行如下命令:

mkdir buildcd build/../linux_build.sh make

编译完成,主要有 faster_rcnn 、lighten_cnn、 mobilenet_ssd、 mtcnn 、ssd、 yolov2、 YuFaceDetectNet 这几个测试 Demo。

faster_rcnn

Faster rcnn 是大神 Ross B. Girshick 在 RCNN 和 Fast RCNN 的基础上于 2016 年提出的新模型,综合性能更高,检测速度更快。

Tengine 版本的 Demo 对下面的图片进行识别:

运行 faster_rcnn 可执行程序,会生成一张对检测到的物体进行标注后的图像:

可以看到识别到了 Dog、bicycle、car 三个物体。

YOLO v2

YOLO 全称 You look only once,是 2016 年 CVPR 上发表的一篇目标检测论文。

YOLOV v2 发表于 2017 年的 CVPR 上,论文名称为《YOLO9000: Better, Faster, Stronger》,获得了 CVPR 2017 Best ** Honorable Mention 大奖。

这里用这个模型来检测和 RCNN 同样的图片:

从这张图片看,准确性和 RCNN 相当,但是检测速度却快了 将近 6 倍。

SSD

SSD 全称 Single Shot MultiBox Detector, 是一种 one-stage 的通用物体检测算法,作者 Wei Liu,提出于 2016年。

这里用如下图片做检测:

运行结果如下:

有点可惜的是把狗狗给识别错了。

mobilenet_ssd

这个是 mobilenet 和 ssd 的结合,对移动设备更友好。

使用和 SSD 同样的图片进行检测:

可以看到狗狗检测对了,但是远处有个人漏检了。但是检测速度比 SSD 快了很多。

YuFaceDetectNet

这个是深圳大学于仕琪老师开源的 libfacedetection 的 Tengine 实现版本,libfacedetection 号称最快的人脸检测库。

测试原图如下:


测试结果:


MTCNN

MTCNN 是另外一种人脸检测方案,提出于 2016 年。

这里我们采用和 YuFaceDetectNet 同样的图片进行测试:

五张脸全部检测到了,而且时间和 YuFaceDetectNet 差距并不大。


文章评论0条评论)

登录后参与讨论
相关推荐阅读
COLOERFUL 2020-10-29 21:27
飞凌嵌入式 RK3399-C 开发板试用体验-补个开箱顺便跑个分
再补个实物图: 拿到这款板卡,第一时间就想让它和手里的LS1043和LS1046较量一番,LS1043和LS1046,这两块板子飞凌已经移植了coremark,各大网站对这两款...
COLOERFUL 2020-10-29 21:01
飞凌嵌入式 RK3399-C 开发板试用体验(.NET CORE的跨平台使用)
在使用QT实现了三个自定义控件后,我又查找了QT环境下实现可视化图表的一些优秀开源方案,发现QCustomPlot是一个不错的开源库,移植后效果也还不错。后面会继续尝试把基本的自定...
COLOERFUL 2020-09-22 19:40
ARM A72内核 NXP QorIQ架构系列 LS1028A优势实例测试-飞凌LS1028开发板评测
FET1028A-C核心板基于 NXP公司的Layerscape LS1028A设计,是对Layerscape 产品线系列化的完善。 Layersc...
COLOERFUL 2020-09-21 23:35
飞凌LS1028开发板性能pk-LS1028A tsn以太网优势分析
在 OK1012A- C 、 OK1043A-C 、 OK1046A-C 之后, 飞凌嵌入式推出了&...
COLOERFUL 2020-09-16 13:37
雷达测速仪-高速广域雷达测速方案解析-
   超速成为交通事故的首要杀手,特别是像高速公路这些速度快的道路,超速引起的交通事故就更加频繁了。所以安装测速仪的目的就是为了有效减少因超速引起的交通事故。(&...
广告
我要评论
0
2
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /2 下一条