找回密码
 注册
关于网站域名变更的通知
查看: 1162|回复: 1
打印 上一主题 下一主题

飞凌嵌入式 基于NXP i.MX8MMini 运行tengine

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-8-24 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Heaven_1 于 2021-8-24 20:25 编辑
( L. D) k: c! H; U; y0 V
) D4 G; D2 P. b7 B9 \  N  V/ b6 uTengine 是 OPEN AI LAB 一款轻量级神经网络推理引擎,它针对 ARM 嵌入式平台进行了专门优化,对 Android、Linux 系统都提供了很好的支持。
/ q: x6 ]% ?9 y  d7 ~! I( J而且更加难能可贵的是 Tengine 并不依赖于专用 AI 芯片(即 Tengine 可以利用 GPU、NPU 这些具有专门 AI 加速功能的模块进行 AI 运算,也可以利用通用的 CPU 进行 AI 运算),很多 Arm 平台都可以通过 Tengine 框架对算力进行深度挖掘,从而高效的运行一些 AI 应用。
4 r( m( h+ g# z3 a- Z6 w! x% o  w5 z
5 h- @6 d( X1 {6 U  T0 F8 t# ]9 d0 {0 c( [1 M$ ?
本文就是想描述如何在OKMX8MM-C这一 Arm64 平台上搭建 Tengine AI 推理框架,并运行图像识别相关应用。首先在OKMX8MM-C上面移植了基于 Armbian 的 Debian 10 系统,运行的 u-boot 和 linux kernel 都是mainline的。' P8 S: g, L8 s  ]8 I

$ u& s) {7 F6 u1 w* L编译 Tengine0 j; @: `7 v% V' o7 c1 Z
OPEN AI LAB 在 Github 上提供了开源的 Tengine 版本,并提供了比较详细的参考文档,所以可以直接下载源码,根据文档进行编译。
9 j, k# r" j' `+ Y  W得益于 i.MX8MMini 强大的性能,我们可以直接在 i.MX8MMini 上下载代码,进行编译,免去交叉编译的诸多不便。
% p2 U; [% k" P! ]! |2 B; Y  H6 `: K' Q, T
1. 下载源码7 ?! n3 u% d0 u+ S
git clone --recurse-submodules https://github.com/OAID/tengine/9 T$ C$ [6 W) t4 p! r- M) a
注意 clone 的时候一定要带 --recurse-submodules 这个参数,否则会下载不完整。+ n3 {6 s; h7 }; \. L$ U* n" j8 o

( E8 t2 R7 b( i3 g/ N2. 安装依赖
- b  Z- W4 t( j6 hapt install libprotobuf-dev protobuf-compiler libopencv-dev  pkg-config
( u- n1 G& y' x. |5 N( n" r, a
, l% @$ p3 L" O2 Y+ l/ L3. 修改配置文件9 u2 m2 h  c- H
在源码的 default_config 目录下提供了基于 arm32、arm64、x86 这三个平台的配置文件。1 V" P: I/ W' `2 `% x, _" {
RK3399 是 Arm64, 所以对应的配置文件为:arm64_linux_native.config。; r" o! q# I. F+ [! q
这里要做的修改是,在配置文件中打开 BUILD_SERIALIZER=y 这个选项,否则后面运行的时候可能会遇到Shared library not found: libcaffe-serializer.so: cannot open shared object file: No such file or directory 这个错误。
3 Q, ?8 q( O- d+ _0 P0 ]( ~) H3 J+ S8 w  n% S' K
4. 编译& q6 A) o' o0 M+ j0 B2 `: L
在源码根目录执行如下命令进行编译:, o5 h2 U' ~2 ~" t# I
./linux_build.sh default_config/arm64_linux_native.config
. V4 k/ z- W9 A+ Y4 B' g2 _9 ~- w
( U9 ]2 n; t- v6 C) l+ \
5. 下载 model 文件
' x4 T0 x6 \/ V! d+ ]! L8 r) y运行这些 AI 应用的时候,需要加载对应的 model 文件,这些文件可以从 OPEN AI LAB 提供的网盘里下载:4 K  c* k4 v5 O  A, S
https://pan.baidu.com/s/1Ar9334MPeIV1eq4pM1eI-Q , 提取码为 hhgc 。: s4 Y6 i& K( w  X6 F2 E
下载完后需要把这些 model 文件放在 Tengine 源码根目录下的 models 文件夹,所有的 model 文件加在一起比较大,我只上传了后面测试需要用到的部分:1 @, K; A/ {: w$ p  z7 T6 f
3 u, N& r1 ~1 V5 r( |. J
6. 运行 benchmark$ v/ x& g0 P7 Z
编译完成后默认会在 build/benchmark/bin/ 目录下生成两个供测试用的 benchmark 文件,可以直接执行这两个文件,用来简单的测试,确实是否真正编译成功。
4 L: @; h$ t6 G./build/benchmark/bin/bench_sqz ./build/benchmark/bin/bench_mobilenet7 H- \- S4 B) y

! w8 [' H) r0 f5 o3 y. l2 l7 ?8 C' y$ \; G. T5 V6 {: G; N( q2 V0 ]
编译并运行测试 Demo# c$ Z5 Y# q1 i% f! \
Tengine 开放的源码里面还带了几个不错的 图像识别相关的测试 Demo,用来测试和进行 AI 相关的基础学习都很不错。
" f4 i: C5 e6 H& a  u# S这些 Demo 的源码在 examples 目录下,在编译之前我们需要修改一个编译脚本 linux_build.sh, 即根据实际情况,正确设置 Tengine 的所在路径,比如我下载编译的 Tengine 代码在 /root/rockdev/tengine 目录下:
/ R5 p2 _. D( [8 l$ `  |7 f
1 I( j) G, V+ i/ T5 s" d/ R6 b, q- g然后在 examples 目录下执行如下命令:! P9 ~: H( d* t. b6 \* i
mkdir buildcd build/../linux_build.sh make& l/ L- ~( i. Q0 K" S1 c) X! Y+ Y
, l7 l6 D7 q) N; d# }
编译完成,主要有 faster_rcnn 、lighten_cnn、 mobilenet_ssd、 mtcnn 、ssd、 yolov2、 YuFaceDetectNet 这几个测试 Demo。
% k! w6 d! `+ g( T# efaster_rcnn
0 p% ~7 w) x# L/ j+ f( B) ?# SFaster rcnn 是大神 Ross B. Girshick 在 RCNN 和 Fast RCNN 的基础上于 2016 年提出的新模型,综合性能更高,检测速度更快。4 }2 v+ k( p4 y; w4 ]3 a
Tengine 版本的 Demo 对下面的图片进行识别:
) M# W8 \% X7 L' O! W- _- ?# ]3 a& k( K
运行 faster_rcnn 可执行程序,会生成一张对检测到的物体进行标注后的图像:3 o( H$ [3 g! J: [+ t

9 i+ P  z5 f) D: K可以看到识别到了 Dog、bicycle、car 三个物体。
% X2 ^, ]8 N) z9 vYOLO v2
- B. E& c# F2 gYOLO 全称 You look only once,是 2016 年 CVPR 上发表的一篇目标检测论文。. A6 r& E. e7 n1 t, e0 R! c- o% D
YOLOV v2 发表于 2017 年的 CVPR 上,论文名称为《YOLO9000: Better, Faster, Stronger》,获得了 CVPR 2017 Best ** Honorable Mention 大奖。
4 B$ H8 w. d2 X! l这里用这个模型来检测和 RCNN 同样的图片:) q! u- P  D$ f9 T

, U4 k8 v- m) ~从这张图片看,准确性和 RCNN 相当,但是检测速度却快了 将近 6 倍。& U; C: z  B) m. p
SSD+ V  @  _$ M6 F( V/ L2 Z- ~3 x- S" w
SSD 全称 Single Shot MultiBox detector, 是一种 one-stage 的通用物体检测算法,作者 Wei Liu,提出于 2016年。
5 [2 [- v7 n1 J% I这里用如下图片做检测:
5 F3 E* J2 D" ]. B" ~0 M
/ M4 W) p7 c+ D3 V& l+ p0 u运行结果如下:
1 L7 g' H" }- B* N3 x. }8 j& h* m7 Z
有点可惜的是把狗狗给识别错了。
/ n. Y  N- O1 i1 P5 Gmobilenet_ssd' _) X+ n' @$ v) @: `2 P" z4 r! T
这个是 mobilenet 和 ssd 的结合,对移动设备更友好。
9 J0 }9 E8 Y0 `4 q3 f使用和 SSD 同样的图片进行检测:
  o8 c6 }' F* ~4 h6 S. t5 `; _- E" m1 Q8 J$ S- n) p
可以看到狗狗检测对了,但是远处有个人漏检了。但是检测速度比 SSD 快了很多。8 d+ t- B  {% {/ h
YuFaceDetectNet' L, b4 Q& }. s2 \8 c
这个是深圳大学于仕琪老师开源的 libfacedetection 的 Tengine 实现版本,libfacedetection 号称最快的人脸检测库。
  v/ }6 {  b  o- W: A测试原图如下:( ]" A& {  y+ S' a8 P! u: O1 G

& s' L* Z2 d) g9 V# {8 B2 u) G0 _+ Z# g6 o
测试结果:# i( Q/ e; ^( c% \
* Z' G/ e  @  r' b( h9 m
8 J6 h0 o) L4 X7 f, F3 h5 J
MTCNN
  Z5 ~* U$ @3 i  n4 R% X( dMTCNN 是另外一种人脸检测方案,提出于 2016 年。
& G" g/ z; a5 o2 m  @9 O) T这里我们采用和 YuFaceDetectNet 同样的图片进行测试:! q% O; D/ j4 N$ Z4 t
* p1 v5 ?' }8 K5 M8 k
五张脸全部检测到了,而且时间和 YuFaceDetectNet 差距并不大。* J; Y! C: T* O1 U

* v( `+ P! c& N2 v# w% Y3 R& r3 k  A; I8 Q. C9 i# a5 e% e$ d4 l

该用户从未签到

2#
发表于 2021-8-24 20:04 | 只看该作者
针对ARM嵌入式平台进行了专门优化
5 |% B0 q3 f9 u  h  R9 p! C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 15:04 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表