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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2021-8-24 20:25 编辑   [, Q( S; [* L

& O: o% p# E) b7 s: `2 K# [7 kTengine 是 OPEN AI LAB 一款轻量级神经网络推理引擎,它针对 ARM 嵌入式平台进行了专门优化,对 Android、Linux 系统都提供了很好的支持。
. {1 Y  o6 }" k) v而且更加难能可贵的是 Tengine 并不依赖于专用 AI 芯片(即 Tengine 可以利用 GPU、NPU 这些具有专门 AI 加速功能的模块进行 AI 运算,也可以利用通用的 CPU 进行 AI 运算),很多 Arm 平台都可以通过 Tengine 框架对算力进行深度挖掘,从而高效的运行一些 AI 应用。
, d2 h+ r: v+ y  s0 V1 U" s
# m( `* z" I6 L6 \" ?* f5 ^/ H1 Z5 X6 z8 j/ t: p! w6 ?" q7 \  [' C
本文就是想描述如何在OKMX8MM-C这一 Arm64 平台上搭建 Tengine AI 推理框架,并运行图像识别相关应用。首先在OKMX8MM-C上面移植了基于 Armbian 的 Debian 10 系统,运行的 u-boot 和 linux kernel 都是mainline的。% S0 H; q  y& M2 V5 c
$ X9 w9 U* c7 L' J) X( C, |
编译 Tengine
  c- x9 ~' |2 n1 s* iOPEN AI LAB 在 Github 上提供了开源的 Tengine 版本,并提供了比较详细的参考文档,所以可以直接下载源码,根据文档进行编译。
+ F1 N+ O& @3 G6 X) R$ i得益于 i.MX8MMini 强大的性能,我们可以直接在 i.MX8MMini 上下载代码,进行编译,免去交叉编译的诸多不便。
' J" w7 `9 j( B$ \% {' a  X! d& v. C8 P/ ?- y9 [( _3 q4 P
1. 下载源码
3 H$ I- z: p9 h% h1 b/ y: j: kgit clone --recurse-submodules https://github.com/OAID/tengine/
+ T$ X; ?. |1 C+ R' g% r注意 clone 的时候一定要带 --recurse-submodules 这个参数,否则会下载不完整。( o! {( `5 V4 k
  n" q" ~+ B* e5 C4 K
2. 安装依赖
# ]4 C" e/ ~+ t) {$ Vapt install libprotobuf-dev protobuf-compiler libopencv-dev  pkg-config& Z/ Q+ z: X- ?% ~1 i5 Q& F9 ?: @

. p/ F0 _" @* H) D" G0 V, Q3. 修改配置文件6 u( Y3 x. x6 n1 J0 e& U+ P
在源码的 default_config 目录下提供了基于 arm32、arm64、x86 这三个平台的配置文件。
! B# j9 `! R9 A( a8 cRK3399 是 Arm64, 所以对应的配置文件为:arm64_linux_native.config。
* e4 C& u- J+ n+ `' m! E5 N# `这里要做的修改是,在配置文件中打开 BUILD_SERIALIZER=y 这个选项,否则后面运行的时候可能会遇到Shared library not found: libcaffe-serializer.so: cannot open shared object file: No such file or directory 这个错误。; z# b+ W3 }! ~4 A" o

- G5 [5 N$ [% q4. 编译1 B8 p, @: s' u  ~% R
在源码根目录执行如下命令进行编译:( t+ u8 t7 m: _  P9 k- c
./linux_build.sh default_config/arm64_linux_native.config
( Y+ A2 j% y5 \' m: g
& U5 X+ p7 w  ?+ W8 D& m6 ~, k0 s1 Q+ o1 u" t7 o! Q* `
5. 下载 model 文件" u: K7 [9 X) E% _2 ]0 x
运行这些 AI 应用的时候,需要加载对应的 model 文件,这些文件可以从 OPEN AI LAB 提供的网盘里下载:
' H- [* ?5 f9 c' _  l9 ^& ghttps://pan.baidu.com/s/1Ar9334MPeIV1eq4pM1eI-Q , 提取码为 hhgc 。
5 h5 R% X. v- P7 @1 S9 C# ^  c' O下载完后需要把这些 model 文件放在 Tengine 源码根目录下的 models 文件夹,所有的 model 文件加在一起比较大,我只上传了后面测试需要用到的部分:
5 W7 I: `) j' Y3 l
- p* J! l- R% }& |1 m6. 运行 benchmark- ^. G; X& t3 ~% j; b9 z& E: ?
编译完成后默认会在 build/benchmark/bin/ 目录下生成两个供测试用的 benchmark 文件,可以直接执行这两个文件,用来简单的测试,确实是否真正编译成功。) O6 e  ^; t" i" E3 k
./build/benchmark/bin/bench_sqz ./build/benchmark/bin/bench_mobilenet+ |; G1 i% i  z# t
7 ~5 d( `9 V: E" j3 c5 V

9 }/ `# d, Q) g+ D" d编译并运行测试 Demo8 Q% J1 M# w( y+ M5 N  y9 u1 A, J
Tengine 开放的源码里面还带了几个不错的 图像识别相关的测试 Demo,用来测试和进行 AI 相关的基础学习都很不错。; x1 V0 }5 c) [- p% ?
这些 Demo 的源码在 examples 目录下,在编译之前我们需要修改一个编译脚本 linux_build.sh, 即根据实际情况,正确设置 Tengine 的所在路径,比如我下载编译的 Tengine 代码在 /root/rockdev/tengine 目录下:6 |0 P% D3 v) [

/ U& F# i  [$ L' y6 q& M" ~然后在 examples 目录下执行如下命令:) l) u+ S6 s8 `* b0 e2 r* s" \+ A
mkdir buildcd build/../linux_build.sh make
; y; K( ?+ @- L% H0 H. _
5 q6 d* R3 y/ {+ F; n3 d2 ^编译完成,主要有 faster_rcnn 、lighten_cnn、 mobilenet_ssd、 mtcnn 、ssd、 yolov2、 YuFaceDetectNet 这几个测试 Demo。6 |, J. h7 L7 Q: p' Q
faster_rcnn6 C1 y+ I! z3 |9 B: ~% @, Q1 y
Faster rcnn 是大神 Ross B. Girshick 在 RCNN 和 Fast RCNN 的基础上于 2016 年提出的新模型,综合性能更高,检测速度更快。
; J9 v6 ?/ F6 G% O% J1 ]$ t8 l" GTengine 版本的 Demo 对下面的图片进行识别:& f% z1 h( V* `' a# J' N* X( G

  E9 H) o, [+ A$ S3 I; @! F运行 faster_rcnn 可执行程序,会生成一张对检测到的物体进行标注后的图像:
# J+ Y8 n3 `  E* K( X2 z; e* X. @# C; [( k! V
可以看到识别到了 Dog、bicycle、car 三个物体。
( V6 i' q" n3 q- I5 b" z# [" NYOLO v2
; T" d+ |' D  `7 w* `8 D* VYOLO 全称 You look only once,是 2016 年 CVPR 上发表的一篇目标检测论文。
6 [( J. `( u( E9 t! u8 UYOLOV v2 发表于 2017 年的 CVPR 上,论文名称为《YOLO9000: Better, Faster, Stronger》,获得了 CVPR 2017 Best ** Honorable Mention 大奖。, k' T1 q6 }7 k
这里用这个模型来检测和 RCNN 同样的图片:  c3 O8 w- I" {; U+ N0 B) ?, S4 \

3 w' R1 T9 g7 w从这张图片看,准确性和 RCNN 相当,但是检测速度却快了 将近 6 倍。! b0 z3 A6 i) I
SSD) m# _0 C; ]# o4 B8 p9 o/ a
SSD 全称 Single Shot MultiBox detector, 是一种 one-stage 的通用物体检测算法,作者 Wei Liu,提出于 2016年。0 I* w* z1 Q  F6 o, s! {8 v3 I# B
这里用如下图片做检测:
' b! j6 f3 R. r/ z
- @& P4 ^; m2 U, v运行结果如下:
" M! S9 g) n6 m9 f6 x# X( k$ L5 }5 m
有点可惜的是把狗狗给识别错了。, q/ g1 L; f; `; Q+ N' o# X( ^
mobilenet_ssd+ g) a8 u2 {/ ^) N( ~6 R$ I/ h8 U
这个是 mobilenet 和 ssd 的结合,对移动设备更友好。: o- c# l- \: c, W+ m% A
使用和 SSD 同样的图片进行检测:
+ v3 {9 u  o7 c! r0 G& Q" k3 q' e! g' [* {% e3 V3 H
可以看到狗狗检测对了,但是远处有个人漏检了。但是检测速度比 SSD 快了很多。
/ H" d% h6 U1 a: j+ @YuFaceDetectNet
% W' @) X. F* O  ?这个是深圳大学于仕琪老师开源的 libfacedetection 的 Tengine 实现版本,libfacedetection 号称最快的人脸检测库。8 q# i6 H) D5 Z6 p6 K0 S9 j
测试原图如下:  \! r! m0 U) g+ `% F

* n2 e6 j2 g! d9 |# Z/ W) C. w
. \' X: E$ f$ z. C测试结果:
" x$ D3 n! ^2 |" T- _" J2 T! F; J# D1 p( e. X6 X

+ J, w2 [8 `1 t1 _6 t+ T  OMTCNN
6 H+ V- L* P  v$ O( u8 mMTCNN 是另外一种人脸检测方案,提出于 2016 年。
4 a5 o. K5 k7 _% [! h7 o# y这里我们采用和 YuFaceDetectNet 同样的图片进行测试:
' x8 ]* T( X  d* b. G! W0 Q
8 P0 X5 W# `0 X3 w# v4 Y五张脸全部检测到了,而且时间和 YuFaceDetectNet 差距并不大。- m2 a6 L, `3 {& `; t1 f
, T. `# t( W# \; V: e' h6 K( l

) x2 h' U* H0 A$ {* |4 {$ c

该用户从未签到

2#
发表于 2021-8-24 20:04 | 只看该作者
针对ARM嵌入式平台进行了专门优化. j( J0 j& j3 y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 05:50 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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