而且更加难能可贵的是 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 差距并不大。
原文链接:https://www.forlinx.com/article_view_542.html