嵌入式爱好者

查看: 11801|回复: 1

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

[复制链接]

47

主题

54

帖子

300

积分

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

! o* V2 T) q1 N) |* j

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


" c; Q- v. h, o( _! @4 P. {$ N1 h8 J
; P& w/ `  c# \+ g

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


9 ~& U6 O+ n5 c7 w3 I) }* J* u

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


# N/ R( ]6 p5 r6 C  c7 b

一、 NPU的图像识别例程


4 q$ P8 T* S* Q6 S; l

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

; f, D% T% U2 }

7 O; c, R- i7 I4 m) |

6 R9 [: S6 K* \% l0 w+ p3 f
- u$ R9 Y- O% B  l

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


! f* N$ z& ]' J& \


) S; u& A, a  f  d) j9 I7 m1 L: h- n2 l

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


1 \, S" x8 }" N2 ?2 M
9 J. f- Z  b+ B; w! B, Y" T7 Q' p% Q

) R* \6 o) v# H! `
  1. libm-2.30.so
    , R, C$ [0 S0 D4 f3 P/ f
  2. libneuralnetworks.so.1.1.9
    ; U; h+ N$ {/ c# m: o1 U1 e
  3. libnnrt.so.1.1.9
      H5 K; Q9 L1 }( J8 e1 e
  4. libArchModelSw.so
    & v: J: E" c2 _8 N8 k, z! }6 g
  5. libGAL.so6 R2 }- u8 s, h$ \. }9 n
  6. libNNArchPerf.so( I7 J* f3 W0 \' n. x: T( {
  7. libOpenVX.so.1.3.0/ U( I" B: o) Z: J3 ^0 T8 ~# F  R3 j
  8. libovxlib.so.1.1.0
    " s: T' K: T+ |2 r+ c5 y) W+ Q
  9. libVSC.so
复制代码
* e9 a: l8 f8 F; @: n' M9 a/ g
0 m( C& G. ?  h$ V

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

# l1 B! d' P- G8 C3 D* {5 Z. u


; B! ?9 }6 F" q5 e" ?9 G6 R; t/ ~' H1 @0 W

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

4 `: o- J* O* A

二、TensorFlow例程验证

) _, d9 B* d# I. T

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

6 L# e1 C# _9 o& L


; b) d8 _: p5 p, Y1 O
  1. 0.780392: 653 military unIForm
    " T. A. }  A- r, L
  2. 0.105882: 907 Windsor tie
    0 Z9 w* `& I- V# ]6 o# U2 G$ s) y
  3. 0.0156863: 458 bow tie
      {" s0 d* p( T" e3 U
  4. 0.0117647: 466 bulletproof vest- g: _4 m8 {8 L3 Q
  5. 0.00784314: 835 suit
复制代码
) H* s0 e" X9 o- U; ?$ A9 P; \, H* d

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

% J" |& M, Y- t; R* ~  m( Y

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

" t3 S5 `& y5 P2 a
0 b6 q2 i1 I$ q& k2 E

0 X$ \5 L0 k+ s/ j/ d0 H% u

/ a7 Q2 _' O7 _* W/ y. ]

  1. 0.352941: 274 dingo- j, c1 p& A: A$ E5 X$ u9 O1 Q' f
  2. 0.254902: 265 Cardigan6 k9 E- \% H7 c  c
  3. 0.184314: 264 Pembroke& {, c; M6 x" i) W# X4 `
  4. 0.0666667: 163 beagle
    6 O# v+ W* {. y: z4 j' T- R
  5. 0.0156863: 354 gazelle
复制代码

$ z1 |. s1 P4 r; ]1 O/ k
6 C5 p- Z4 y+ N+ f3 N35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。/ ]$ {  Y: ]- n: Z* t
" X1 _4 g% E, {9 l

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

, F1 |, v, L/ R

/ d; M0 A% X: {: I- [9 I( s& }# {
  1. 0.160784: 639 maillot
    ; C1 P: F7 t: W: d  ]( Q
  2. 0.137255: 436 bathtub
    - m; m( i' @: G' `
  3. 0.117647: 886 velvet
    3 V5 L, v' ?* x: ?5 v; J
  4. 0.0705882: 586 hair spray5 y# [+ |$ l( p4 R9 k7 N9 X* N/ z
  5. 0.0509804: 440 bearskin
复制代码

( l: z, O/ j' O# ~& L: R- m& y1 Z+ e, d# o. Z; S

' ^% E9 F+ o+ W) a! V) g! N: l
  1. 0.972549: 644 mask
    * y- i) H% C# j( {
  2. 0.00392157: 918 comic book8 S7 I# S4 r+ O1 Z0 l% ^: t
  3. 0.00392157: 904 wig
    / [& h; e+ G8 X( R* O
  4. 0.00392157: 797 ski mask
    ) R  f2 A/ v; `3 A9 k
  5. 0.00392157: 732 plunger
    & s, o2 k6 d" v  Q* g
复制代码

# p- k+ W4 z: G* s, {$ t5 g2 }0 z8 r1 G, e' p- k# z

0 h  [7 Z; k2 T
  1. 0.380392: 583 grocery store
    7 _, ^" o# a- Y) {# T
  2. 0.321569: 957 custard apple$ ^; [4 f% a' B4 i
  3. 0.0862745: 955 banana1 U2 B$ h) I# M5 z$ k
  4. 0.0352941: 956 jackfruit( H5 p# m; v  N% E0 Y  ~
  5. 0.027451: 954 pineapple
复制代码
" y1 x4 J% x) X: j8 P! ^

% L4 q) ]" V9 t7 b& N4 E% d

* ?8 I+ @1 i! K" k
  1. 0.254902: 918 comic book5 o) U4 w4 y# o: g; q
  2. 0.0470588: 771 running shoe
    $ ]+ L2 v$ B9 C$ a( I. d" _: X
  3. 0.0470588: 474 can opener( \; B4 p* h" v
  4. 0.0470588: 412 apron
    * v2 K7 Z2 `( t+ L
  5. 0.0392157: 794 shower cap
复制代码

% h' Y, c9 J! D' q7 E5 S7 |6 c, I
7 x2 a% `& s! J* N/ L

' [3 O% }# X- [# x
  1. 0.52549: 922 book jacket
    / h1 D, |& I/ _+ Q/ Q, d
  2. 0.0705882: 788 shield( z5 b" B  ?- }# t5 ^1 P: i0 P
  3. 0.0705882: 452 bolo tie' r' V8 m2 ]- z- {1 k7 F5 X$ ~6 `
  4. 0.0588235: 627 lighter2 Z* o9 X1 s' L# {+ ]8 e6 e! ?5 V1 q
  5. 0.0352941: 701 ** towel
复制代码

$ L4 z- e0 c1 P* ?2 L  W8 @1 K- g5 ^+ X( ?


3 s' h7 J' \- k( |6 Z) W3 Y3 C+ ~# Y
  1. 0.121569: 656 miniskirt
    - w" E* o+ G9 a# k" w4 i* Y! o! C  x
  2. 0.054902: 835 suit
    1 r3 x: k  }, G) `# ?* m
  3. 0.0470588: 852 television- W8 h8 J) p  O! A  ]) z4 x
  4. 0.0470588: 440 bearskin
    / R/ V$ T6 }( o# ~! q6 g
  5. 0.0392157: 679 neck brace
复制代码

- u) I+ e/ c" y4 ?0 T7 i  p% p  L- C" ~5 U+ N" x* u8 ~

# N5 M$ X- e. \# J) H9 e4 I, j* \
  1. 0.65098: 918 comic book
    / m3 H/ M% a5 \9 [/ _' b" p
  2. 0.172549: 747 puck
    % L: S, v; Y$ v  q4 \4 l1 N
  3. 0.0196078: 922 book jacket4 [; ^" o' M  g$ }9 W2 g6 l* e% z
  4. 0.0196078: 723 ping-pong ball4 w3 h$ _9 c) @" b* x6 ]
  5. 0.0117647: 806 soccer ball
    ( @  M! h: Y6 c$ a: |0 z7 A
复制代码
5 N: d0 Q& w# t8 N

+ x" _$ T- W6 a; T


- g, f, a7 Q' n' B

  1. / y5 o9 g( V5 V$ E
  2. 0.678431: 918 comic book# t+ @1 L0 k4 U
  3. 0.0784314: 418 balloon
    1 x$ c; Z) j& G, B! z
  4. 0.0470588: 880 umbrella
    ) O# I) I) i& ?! y9 F
  5. 0.0470588: 722 pillow
    % l9 J  D+ b6 K
  6. 0.0156863: 644 mask
复制代码

8 }: ?( v0 V8 c. Z' F5 V' n3 R
. F! X* o, g- R: }' t2 f


2 {/ s& ]. ]2 q' r5 x
  1. 0.184314: 585 hair slide9 o6 w+ b) u' ^; S* ]# q
  2. 0.156863: 794 shower cap7 T; l0 n7 o- D: A6 U& ~
  3. 0.0941176: 797 ski mask1 L  Z, L  G. C: F: |" q& D
  4. 0.0431373: 644 mask
    # y4 f6 @. Z% u* j: F9 }  s* Z
  5. 0.0352941: 571 gasmask
复制代码
4 J; |4 a5 i4 _& g# U: K' |
. a7 r( I/ Q: o% E. G9 b

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

8 c( b7 z- ~% {4 F& m/ d

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


+ }" Y# X1 f" ]* X9 i# U( E. C# N1 y9 }$ \- W2 R9 L
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-7 11:06

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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