嵌入式爱好者

查看: 12532|回复: 1

[帮助] 发烧友实测 | iMX8MP开发板移植官方NPU TensorFlow例程

[复制链接]

48

主题

55

帖子

308

积分

扫一扫,手机访问本帖
发表于 2022-1-27 10:59:04 | 显示全部楼层 |阅读模式

: N7 q: _+ ~) L

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

原文链接:https://www.forlinx.com/article_view_809.html

iMX8MPlus 核心板: https://www.forlinx.com/product/136.html


* ^; s- w3 i- h
4 c9 l! \/ v; e; [* t2 F5 ~; ~

飞凌嵌入式OKMX8MP-C开发板基于NXP i.MX 8M Plus处理器开发设计,该系列处理器专注于机器学习与视觉、高级多媒体以及具有高可靠性的工业自动化。旨在满足智慧城市工业互联网、智能医疗智慧交通等应用的需求。强大的四核或双核Arm® Cortex®-A53处理器,主频高达1.6GHz,带有神经处理单元(NPU),最高运行速率可达2.3TOPS。


4 {* Y6 i& j) q$ Q; y% q

本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15.0,主要介绍移植官方NPU TensorFlow例程。


4 W' y7 u+ n. Q: k( K; s  D9 \! ]: P* c

一、 NPU的图像识别例程

; W0 `9 ?# g. G4 d6 A9 o* n

在OKMX8MP-C 开发板提供的产品使用手册中,有一章是针对 iMX8MP 板上NPU的图像识别例程,位于EMMC分区的/usr/bin/tensoRFlow-lite-2.3.1/examples,我将EMMC分区mount为了/media分区,找到对应的例程位置。


7 Y; ], r/ Q+ A# B' A5 O8 c

1 ]8 b% K: a6 D2 ?, c/ _; m$ M% X* C


6 c6 t# c9 e, T. ]$ Y* b& S' `4 v5 q! G0 G* L

iMX8MP 开发板切换到EMMC启动,进入/usr/bin/tensorflow-lite-2.3.1/examples/目录下,运行测试example:

7 P9 [7 s7 j1 k8 q4 h- b

& g7 p" B1 |8 r- c) c: ?

再将 iMX8MP 开发板切回TF卡系统运行,提示报错,label_image程序的nnapi需要动态链接库支持:


, ?& g; c5 }$ }' H' ?) f5 s4 l2 v5 a: f1 x


' ^5 m7 V  D5 M" d9 W: A
  1. libm-2.30.so
    ) ?% ]" W, n' S3 b
  2. libneuralnetworks.so.1.1.9
    1 d/ I3 `. ]7 ~- A3 A
  3. libnnrt.so.1.1.9) x" c; a! o0 Q* i9 n
  4. libArchModelSw.so
    . C  ^+ y- \/ c7 G2 g
  5. libGAL.so
    ' c! O* P4 [' s7 o7 Q
  6. libNNArchPerf.so
    # x, R: y" K8 r1 C5 E7 o4 D
  7. libOpenVX.so.1.3.04 S$ {+ m9 x0 `: H0 l8 o5 e
  8. libovxlib.so.1.1.00 J/ \6 Q( h1 K6 `% Z) O4 t2 c9 ~% Q
  9. libVSC.so
复制代码
6 x% S0 I9 G0 q( e+ x

- Y+ s  l( `- m; `1 e* R! T7 n1 P9 ]

其中libm-2.30.so被链接为ld-linux-aarch64.so.1,位于/usr/lib/aarch64-linux-gnu/目录下,若在移植后的目标系统的/usr/lib/aarch64-linux-gnu/下没有该库文件的话,是会在运行时提示报错的。将上述所有动态链接库复制到正确位置(/usr/lib和/usr/lib/aarch64-linux-gnu/),再次运行:

3 K* e9 P1 Q5 m/ K


/ g9 u: k! m- s8 x  D3 p6 d0 F' x! p5 S5 Z6 f! {, o

可以看到没有任何报错,运行库环境移植成功,接下来可以在 iMX8MP 开发板上愉快地进行tensorflow例程的玩耍了。

7 q/ G* [( _8 i; T9 B# m1 K

二、TensorFlow例程验证


6 b9 ]4 V. K/ _! h3 c5 S, u

飞凌嵌入式iMX8MP官方资料中提供了许多测试例程,先用官方DEMO做一下验证,其验证结果如下。

& k( w. t  |/ l+ {


! B# P7 d6 c: M" m' S& D  h
  1. 0.780392: 653 military unIForm) u" M7 _, y4 z6 q8 M! v
  2. 0.105882: 907 Windsor tie
    * Y" X6 p. m: [3 K! h$ x+ \
  3. 0.0156863: 458 bow tie) ]7 I6 t0 |4 K
  4. 0.0117647: 466 bulletproof vest4 `* E, g$ R" T9 y3 q. n
  5. 0.00784314: 835 suit
复制代码
1 Y& b6 k. _9 a$ Y

78%结果吻合陆军制服,10%结果吻合温莎领带,1%结果吻合领结,1%结果吻合防弹背心,不到1%结果吻合西装,总的来说这个结果还是挺令人满意的,NPU的算力确实还可以,多次运行程序,得出的结果完全相同,说明 iMX8MP NPU计算时使用的是固定的/静态的图像识别库。

; h/ c: R  L) ]6 I5 o, I

我这边突发奇想,用这个Demo去测一下我自己的论坛头像,看看结果:


; k# f5 F4 _( Z7 L/ d6 Q  G( H5 g: Q0 v* J0 n) i+ G1 r9 r% g* ~

1 C2 P$ y* V+ y5 m


: {8 T. r! W% V* b  I* q8 A

  1. 0.352941: 274 dingo
    $ Y5 E# x+ y* E( S4 P( S
  2. 0.254902: 265 Cardigan
    * B+ c% o, [; c& t/ W, M
  3. 0.184314: 264 Pembroke
    # S) t* g5 [5 i* B9 I; _/ M
  4. 0.0666667: 163 beagle
    . Z* ]% c3 ]: D
  5. 0.0156863: 354 gazelle
复制代码

5 e9 I% N; i+ d
( @# a% b) K# Q& F% J, N$ D* h35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。; H  _7 h5 P6 F; `) m$ t
; w3 F2 U/ o8 o* C, \

再来试试另外几张图片,为了检验iMX8MP NPU的人工智能算力到底行不行,集齐了十张图,豪华尊享。由于源码不开放,所以无法移植源码到自己的例程中:


8 ~& D" c" k7 V1 ?, g$ |


+ C3 i. L. m4 j% K4 n. i
  1. 0.160784: 639 maillot6 S+ i) H7 w( ?
  2. 0.137255: 436 bathtub
    ' g, B8 |$ }" }6 X2 c
  3. 0.117647: 886 velvet1 J( U- D- J3 ~; b' I( _
  4. 0.0705882: 586 hair spray
    ) ^( A; a9 R! j8 T0 {* O) y
  5. 0.0509804: 440 bearskin
复制代码

, M  \3 |; f& z: J$ N( \, n7 }3 T# M

! b+ s! R% H* w" ~0 U$ s; y- s
  1. 0.972549: 644 mask
    , y/ G/ h1 N/ L% ~
  2. 0.00392157: 918 comic book
    9 M- b$ c4 `- z/ n+ U
  3. 0.00392157: 904 wig- g" J$ |# S3 C* S
  4. 0.00392157: 797 ski mask
    , \; C5 J/ w0 k5 w, ^9 t+ X
  5. 0.00392157: 732 plunger
    * H6 T$ b! k0 H+ m* q& n' X! M* ]) s  S
复制代码

  o! f2 C- J; r  R8 G; c" T- p: M. A$ Y4 D0 O

% n! _+ l4 ~, j% g" h* K! ^
  1. 0.380392: 583 grocery store. |5 G3 F# h' @
  2. 0.321569: 957 custard apple
    0 J# R) E% v/ h" r' W" r
  3. 0.0862745: 955 banana
    : t! q, r! Y8 q- _
  4. 0.0352941: 956 jackfruit
    / H2 }. T* c. G. ~4 z
  5. 0.027451: 954 pineapple
复制代码
0 S0 A# Z0 d. q) N
& A4 t+ Q  P6 F' _6 H4 L, r

* M( v" A2 @: f& U  G' I5 ^
  1. 0.254902: 918 comic book
    * e4 l$ C3 B3 F- |( Z
  2. 0.0470588: 771 running shoe- \5 V/ `0 ]/ i) i/ F
  3. 0.0470588: 474 can opener- e0 _9 K% n# t3 t0 h. G
  4. 0.0470588: 412 apron- g' C) z% C8 ~: k# d/ Z4 D- ]" L
  5. 0.0392157: 794 shower cap
复制代码
2 D. @- D: q" O# @& F) b- `2 b) A

, @; O4 O5 `" E


9 B4 B2 U5 E( _! v1 w7 ~" i
  1. 0.52549: 922 book jacket
      ~2 y+ j0 Z7 a; [+ L( u, q/ P
  2. 0.0705882: 788 shield
    # W( v# t9 T: p: B
  3. 0.0705882: 452 bolo tie" e- K! @+ B4 g, _/ I: ]4 [
  4. 0.0588235: 627 lighter8 G  Z- d( @) O" K: c- ]3 ]: v
  5. 0.0352941: 701 ** towel
复制代码

: o8 H# T, P. ^: v( K+ N/ e. p5 I" H- m: h8 o

- p' a* W- r2 q, t  N! K# L. e
  1. 0.121569: 656 miniskirt0 I4 ?. V5 e2 Y
  2. 0.054902: 835 suit
    0 y# M/ [; q/ V
  3. 0.0470588: 852 television# x) z, ^; R% y0 m/ B+ |/ N' p2 U- {
  4. 0.0470588: 440 bearskin
    ) J  [$ ]% T9 o7 [( d% ^
  5. 0.0392157: 679 neck brace
复制代码

* x/ Y/ u8 D" {, @! n* W, r! \7 a6 |# t

4 H+ k, x( T7 h- c+ t: I) Q
  1. 0.65098: 918 comic book
    ; X7 T( T8 I% C# z* P; C" `
  2. 0.172549: 747 puck- q# e0 t6 T" t, B( Y
  3. 0.0196078: 922 book jacket
    & n. Z6 h' q8 h
  4. 0.0196078: 723 ping-pong ball
    0 n. L8 X" S6 T* c" c
  5. 0.0117647: 806 soccer ball
    8 V$ ]' z8 @% s. f# v7 U$ c9 C, P
复制代码

) E( C1 ^0 p4 V
$ m  L  D; K1 v. B6 ~


6 d1 P# T, _6 A, O

  1. % v% x; P1 ~% |; n0 F9 C1 `. V/ {
  2. 0.678431: 918 comic book+ B! p0 Y" ^% e* l6 V+ G9 z
  3. 0.0784314: 418 balloon2 I; Y, w" u. [
  4. 0.0470588: 880 umbrella
    4 w/ c, p  y* Z& T* q* o5 ]; P
  5. 0.0470588: 722 pillow
    : g; W* B. _, G
  6. 0.0156863: 644 mask
复制代码

5 i) k' ^2 J6 J+ K# @/ P& h! S. c' R

9 \% d3 }  }& h; U
  1. 0.184314: 585 hair slide
    4 K' a; o) n# b% E8 P) H1 R# H; M( _
  2. 0.156863: 794 shower cap
    . X4 B  l, d! |, E/ \
  3. 0.0941176: 797 ski mask3 \2 b" i, n$ o* p% A! X1 e+ ~
  4. 0.0431373: 644 mask
    7 R2 U+ Z& T- Y
  5. 0.0352941: 571 gasmask
复制代码
- S7 R0 V( m6 h+ I+ e/ H

& ~, F) I2 R$ g# t

十张图片的识别结果均以编码方式呈现,从识别的概率结果来看,飞凌的这款 iMX8MP 开发板的NPU的算力还是非常强的。

( E" Y6 N2 T4 v( W" ^7 s

据官方介绍,i.MX 8M Plus处理器内置NPU,可达到2.3 TOPS(Tera Operations Per Second,1TOPS代表处理器每秒钟可进行一万亿次操作)算术处理,并实现先进的AI算法处理。并且NXP为i.MX 8M Plus处理器的NPU提供了一些特定用例,例如能够处理40,000多个英文单词,MobileNet v1模型可以每秒处理超过500张图像的图像分类。

原文链接:https://www.forlinx.com/article_view_809.html

iMX8MPlus 核心板: https://www.forlinx.com/product/136.html


# [9 _$ J% Y; N8 X0 l* X7 e$ n* Y2 B! H. @/ t
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2026-9-13 19:25

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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