嵌入式爱好者

查看: 10960|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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


& r4 P/ T3 J& X$ @: O

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


3 L# ^5 u; k+ U2 i; A" O" Z' L* v

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


+ X+ P2 h7 W! l9 X/ g6 ^8 v

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


, f. C$ y2 B5 i; a7 i$ W' p

一、 NPU的图像识别例程


4 E# J8 P/ i% {& }

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


. N' U$ v6 Z" @% e5 I1 p9 e" }

9 M2 _$ k* e# y' n

+ k7 @9 ~" B; @+ X3 y1 ^

. C4 F& j' V$ J+ y$ M

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


7 u! P+ u; R# j- O1 \0 T


) Q5 x: y9 I8 m$ J3 [( ~# V

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


  S" M& Z) ~+ z" o7 r- P, J
& O0 F9 r! Z4 w0 y: Q+ h


, c/ T- ~, R/ J% l$ }
  1. libm-2.30.so
    , V# z; ~% N$ n: x
  2. libneuralnetworks.so.1.1.95 U. {) B# W* d$ P! w* b
  3. libnnrt.so.1.1.9
    + o( D& L) Y+ b
  4. libArchModelSw.so
    % Y. p$ X; ?/ o0 {
  5. libGAL.so. b0 |+ V. E4 Z. k7 x2 g
  6. libNNArchPerf.so' M1 R9 }: [" ?  J7 Y% N1 k7 |' l9 s( j
  7. libOpenVX.so.1.3.0( Z$ b( s( G+ t# d, B2 X& K
  8. libovxlib.so.1.1.0
    # s: Q1 M* }2 l+ ?0 n
  9. libVSC.so
复制代码

; ]$ U0 c7 r* ^9 h$ x6 f  Y
! b$ h2 O' b! D

其中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/),再次运行:

7 w" ?/ v( z7 M6 c4 J  w( \- B2 Q# l


& v! [. J0 E* |. g) s. P
# k) h  r9 `/ `" |) V/ e' W3 V

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


* _( K, I0 ?9 R7 Q9 V( y

二、TensorFlow例程验证


- A0 m- }: g, M5 X  |' S: _- |, x

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


* |! g% |% L; h3 o) {


) R9 o8 G# Y& ~6 c3 J* }
  1. 0.780392: 653 military unIForm8 m% `/ X  Y% ?7 M! r
  2. 0.105882: 907 Windsor tie- P9 `& j/ S! d+ G, s
  3. 0.0156863: 458 bow tie
    7 O; e9 r' i0 {; O( {4 K1 H4 f
  4. 0.0117647: 466 bulletproof vest+ w+ T0 G! x# w. q& d% ~- g, d
  5. 0.00784314: 835 suit
复制代码

1 O' b# N- j5 J5 Q* o' V! o( F$ O0 N

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


" {# p0 x$ R# v

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

. A. o2 S1 g1 c& b; t
. p* q) k& u4 d, j/ y0 _, R4 T


+ J) \* V8 I9 M4 o. E/ p6 }& o: a


( v; {* w. P1 U2 q8 C' Q1 x- x

  1. 0.352941: 274 dingo
    & c8 s5 n' L8 f1 V- i! o
  2. 0.254902: 265 Cardigan: U1 Y& p, s/ W; {
  3. 0.184314: 264 Pembroke
    % f% ^& m$ M# f" ~. ?3 T% i
  4. 0.0666667: 163 beagle
    ' E# z! k9 N4 g; Z* `# y
  5. 0.0156863: 354 gazelle
复制代码

& L9 @2 L" m) c. B" Q; \# X& e3 X& z: J1 y: H2 K
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
; J9 ], S+ t5 K3 P& m
8 [5 A4 R+ J( F1 ~

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


/ ~$ B' }: Q* }4 [

1 k7 t- A, H; O! m
  1. 0.160784: 639 maillot8 u* a7 r  `1 F& I$ C' p
  2. 0.137255: 436 bathtub
    % _( Z8 [2 j/ e$ c  V0 j
  3. 0.117647: 886 velvet0 t8 _  d4 _! G: p2 p& n& ^1 L
  4. 0.0705882: 586 hair spray5 Q" g; E" ^1 F% X
  5. 0.0509804: 440 bearskin
复制代码

+ ^4 o( c. I5 h3 M/ j+ R( Z4 D
/ m$ Q4 T" T1 g* u( W


' N* a! F  L! M' _( f
  1. 0.972549: 644 mask
    0 y) x  z7 m/ C7 `$ o3 A
  2. 0.00392157: 918 comic book. j% J* v# T& F" G; P4 q
  3. 0.00392157: 904 wig
    6 @0 e3 v$ r) b* E6 ^: F
  4. 0.00392157: 797 ski mask3 T! C0 {# `. T1 R2 f; `: Z
  5. 0.00392157: 732 plunger# F0 l- T9 n7 _
复制代码

( A# C  B* l2 q/ P6 B! |& w4 u
: X7 U) Q. @. ^. v# m+ {7 q


9 b0 ~* _, j5 o, a( C
  1. 0.380392: 583 grocery store
    - O  }7 y2 ~* W' y
  2. 0.321569: 957 custard apple( T6 _4 H3 q- T4 A2 ^3 q
  3. 0.0862745: 955 banana
    8 e3 Z- v/ x6 c$ E# S: O
  4. 0.0352941: 956 jackfruit
    . T9 g5 f7 U( |3 v7 K* ^
  5. 0.027451: 954 pineapple
复制代码
! i9 d0 h. ~1 }2 \  |, J

  R( F9 Z+ W2 d3 S* @" q. ]3 L


* b( ~5 K: J1 _) d1 L# C2 o
  1. 0.254902: 918 comic book
    ! E) ~; }' N$ A
  2. 0.0470588: 771 running shoe
    ( v* G9 V' g; k* h. n( F7 i- Y
  3. 0.0470588: 474 can opener
      E) e. e' I" F( t: D7 o
  4. 0.0470588: 412 apron7 Z. P6 e# C: ?9 ]5 Y
  5. 0.0392157: 794 shower cap
复制代码
$ ^, H9 c2 }' h( Y+ D
. M# e% v& \/ V9 @  V


2 o5 Z) w, v0 A
  1. 0.52549: 922 book jacket
    4 ^5 Z3 v7 {4 I
  2. 0.0705882: 788 shield
    & J2 W8 p( c+ l
  3. 0.0705882: 452 bolo tie9 c. o& }, H, s3 w
  4. 0.0588235: 627 lighter
    . \# J: d% E( t1 B" Z: y
  5. 0.0352941: 701 ** towel
复制代码

( l/ c' v: c% \$ R9 n0 {' C
7 d% a* C5 Z$ W0 K9 w8 M


" i! F5 T" v6 n4 T, V3 f
  1. 0.121569: 656 miniskirt0 m) ?9 z6 v! D
  2. 0.054902: 835 suit
    % m& ~) b( [  o; `1 [0 q; k
  3. 0.0470588: 852 television' [9 t: t, J6 _* b2 H( e: m$ G
  4. 0.0470588: 440 bearskin
    9 D7 r% j5 C: `
  5. 0.0392157: 679 neck brace
复制代码

+ H& ^) \4 l$ {8 \6 [; e
" o5 |/ m6 I% O* |0 t" x


: p! b- V' ]- |( _( p
  1. 0.65098: 918 comic book( \4 D. }1 s) J
  2. 0.172549: 747 puck7 l% v* r8 {$ Z! d: [7 K" Q6 a
  3. 0.0196078: 922 book jacket
    2 u1 R2 l2 e4 T
  4. 0.0196078: 723 ping-pong ball
    0 ]) }3 ^' l, [+ L
  5. 0.0117647: 806 soccer ball' P' d4 g! I4 b. ~, m  `2 j
复制代码

; a0 t- F  Z+ @# S) {& B0 q
4 N- ?. z- X5 _& r: x  h7 g# _

7 f+ ~- ^$ }! U0 G2 n& v6 U5 |

  1. 3 @( K- q, S. u: w
  2. 0.678431: 918 comic book' e- v( |6 b. [# E& p# W
  3. 0.0784314: 418 balloon3 {: i$ U$ }5 w6 q
  4. 0.0470588: 880 umbrella
    / E# S: e3 S; U+ V
  5. 0.0470588: 722 pillow0 B; H! m7 A; ?0 z% N# C  y
  6. 0.0156863: 644 mask
复制代码
4 o8 u" n" j  x# Z% g8 @2 }

# x( ^, G4 p" _; {: w3 _

1 g/ k5 H& }( _( m1 y
  1. 0.184314: 585 hair slide' N- s; H; H/ B: D- A
  2. 0.156863: 794 shower cap
    8 n1 B! p* A; ]3 j
  3. 0.0941176: 797 ski mask
    ! V6 o! o6 G& d: n  T" G
  4. 0.0431373: 644 mask& a" a& ]! K7 N9 K
  5. 0.0352941: 571 gasmask
复制代码

$ I4 l/ c& H  Q% ~8 a, y! n) L/ V+ ]8 Y& J1 w: m- u

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


& P& X! L/ Z9 ?5 u" g

据官方介绍,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

& ?* g- F$ Q9 r9 o! P
, f! m8 F; \2 s- j9 I8 i: E
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-11 11:59

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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