嵌入式爱好者

查看: 10959|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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

; T0 _+ c: E9 E

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


1 W# V9 I0 `$ l" J: H- j) f4 U% U% T: ?* F1 {4 [

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

( ^* P. [# D% c) Q

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


* I. w, _4 @( b) U1 G

一、 NPU的图像识别例程

. @+ ?# v7 I9 b2 x' X* H! ]8 _3 g8 z

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


  S$ ^6 @, E7 @/ E


) i( J% g- Q+ g& w0 i

. O; m2 E9 C0 J/ ]! v' W( O
9 _: O- b: y9 U, @/ |, u

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

% X0 b  V- s+ n  ?: A; i  A' h. r4 C

8 y1 Q6 T3 h. Q

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

$ ]# y# X0 P2 y3 n9 x6 H7 A8 j

/ b$ w" ?# i4 [- v/ R

7 q: m9 L8 U7 v+ s3 R8 I5 G( x
  1. libm-2.30.so# ~: \; i. {3 p5 o# v
  2. libneuralnetworks.so.1.1.9
    3 g  W8 y/ A( t
  3. libnnrt.so.1.1.9  N! |: V- R8 l
  4. libArchModelSw.so
    ) K: E6 s7 I+ d+ z' u2 r
  5. libGAL.so! H+ ^+ L) k$ m# @" e/ w
  6. libNNArchPerf.so& k3 D* Q0 w' @
  7. libOpenVX.so.1.3.0
    + K: M) ?9 |' v# z% e3 a
  8. libovxlib.so.1.1.05 X/ O7 |1 P/ d5 Z
  9. libVSC.so
复制代码

  c4 P2 ^  y# L) E& A5 B$ W
& b* y) p% O/ }: t, L  \

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


4 |& x0 |0 |; `' p' Z2 e* L% |7 d

8 H$ C4 b8 ]* ?. x
1 w! ~8 |' ]1 L7 T. r

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

7 h, r3 ?3 |# W: `

二、TensorFlow例程验证

- _2 E7 g+ \  N. K  h9 O, C  U+ Z

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

, Y) P$ l, [8 m# B, r9 d' O


" b6 E* b& n) u9 _4 |- w+ Y
  1. 0.780392: 653 military unIForm
    5 O8 `' m) l9 A- V( M
  2. 0.105882: 907 Windsor tie
    6 G9 x  Q5 V/ ~& I7 p6 K! G
  3. 0.0156863: 458 bow tie
    + Q0 M# X; O7 }
  4. 0.0117647: 466 bulletproof vest1 D9 p- B8 K1 r" V7 i7 T& |' {
  5. 0.00784314: 835 suit
复制代码

9 b" H' L: J. ~8 F

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

' d" I7 i: h; l

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


% m+ p" x& l; Z2 M/ [
  [. e" T  D2 M2 e, W

9 z& J. ?* ?/ |


, [: E# Q0 |% N* P7 S( Y, E4 i

  1. 0.352941: 274 dingo
    / i% I* q9 E7 u1 n
  2. 0.254902: 265 Cardigan' Y, T$ D3 q3 h% K, f* W
  3. 0.184314: 264 Pembroke
    4 t( g0 R5 Y% R7 v# l1 ?  c  s9 ?6 ?' A
  4. 0.0666667: 163 beagle- |$ L9 k/ D: z
  5. 0.0156863: 354 gazelle
复制代码

7 M4 O3 X; k/ K! t- g) R4 l* d$ g8 ~3 [% U7 Q$ k1 p
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
) N- \* G+ l/ r6 N; R! T( V) ]
* ]6 j3 s1 G4 [' E1 S9 H' ]) f

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

- e" q! F7 k; s/ x: R


* W) ~- T# ?; F4 a9 l9 A
  1. 0.160784: 639 maillot% k- F% t/ ^- \8 ?3 U
  2. 0.137255: 436 bathtub
    & t$ B: M: q1 S4 c+ E0 U- F3 o8 A, X
  3. 0.117647: 886 velvet
    ! C+ O+ W8 k1 \3 K
  4. 0.0705882: 586 hair spray) P$ b1 l" ~( [
  5. 0.0509804: 440 bearskin
复制代码
+ h7 \1 p5 A$ t9 P" A1 K. ]6 w$ s

: T) v9 s9 n) }

3 }( T+ ]* q3 \! L; v, |% c& I
  1. 0.972549: 644 mask/ ^- ^- z2 m( f/ j& Y+ P; k# D
  2. 0.00392157: 918 comic book
    1 C) t+ a( `1 G
  3. 0.00392157: 904 wig2 I* M; W0 D# P1 i
  4. 0.00392157: 797 ski mask
    ' m# O- W4 {( m9 P+ l! d, J2 H7 O
  5. 0.00392157: 732 plunger: k2 _2 C2 U* H* l0 t1 M9 v& `
复制代码
; w. b8 ^& e4 `

4 e3 p, }- c" y4 y1 W4 x2 D


! F+ n" x# K7 C# ?# Z
  1. 0.380392: 583 grocery store
    4 W, t9 q- i: d7 {4 J
  2. 0.321569: 957 custard apple, q1 Q3 I9 A  l( U. B
  3. 0.0862745: 955 banana9 ?9 u% d. S$ O* D! a5 _* \  F
  4. 0.0352941: 956 jackfruit
    # j4 @4 ], }& R! ]
  5. 0.027451: 954 pineapple
复制代码
' J. O' _" _% w% R/ h

0 o4 L0 b. ~* r5 r% m


" x' ~7 t  p" R1 b! o
  1. 0.254902: 918 comic book7 \  T9 o# j/ A2 m( x& q
  2. 0.0470588: 771 running shoe  {2 p& h4 p% |" c. \" f" j' }
  3. 0.0470588: 474 can opener; S0 {+ r7 q' v
  4. 0.0470588: 412 apron6 @. F; @0 X% i+ }! J
  5. 0.0392157: 794 shower cap
复制代码

( J# s8 X  w  m8 q3 z  o
. M8 h! X4 ~7 _. n; l! D# u

& a% f4 a  K$ g* a2 p' K3 N% ]. {
  1. 0.52549: 922 book jacket7 l1 Z. F* }0 K! M5 B
  2. 0.0705882: 788 shield
    0 X4 k# h3 c% M- F1 I* p
  3. 0.0705882: 452 bolo tie
    ' ^" a1 f/ @8 f
  4. 0.0588235: 627 lighter) j$ R/ i- }2 K9 M& u5 p) |
  5. 0.0352941: 701 ** towel
复制代码

! M( J' L# ?# b: i
2 {6 e& h0 b  m8 b+ P/ o

3 _& u& q' Q5 M0 X: F7 m' D
  1. 0.121569: 656 miniskirt
    $ s+ [7 Q  I% _9 _. f; c
  2. 0.054902: 835 suit
    / R" I& y* b1 R1 M
  3. 0.0470588: 852 television
    + B  l- n4 z3 A, z) O
  4. 0.0470588: 440 bearskin! e, b6 ]1 _6 D* o+ H
  5. 0.0392157: 679 neck brace
复制代码
) T6 d! Y& ]% ~3 S
: ^$ m/ \) d: V

8 y' _+ o. D1 Y, V  v1 X
  1. 0.65098: 918 comic book  b$ E5 g1 \* |0 ]7 x, g
  2. 0.172549: 747 puck
    / ?) `1 K( U# T' A: f- a- @
  3. 0.0196078: 922 book jacket
    ' F1 j) p0 G, ?& V) S
  4. 0.0196078: 723 ping-pong ball+ t3 N8 x$ a& d5 E* C
  5. 0.0117647: 806 soccer ball) w' O" `7 k8 ~- f9 x
复制代码

% F! e; H. H# l" d8 v1 u5 K4 B/ Q2 D$ P2 ]% H; s' E


  {& C- z# o; Y

  1. + b) z& V( c/ S
  2. 0.678431: 918 comic book
    $ Q( D& {# g- v" }
  3. 0.0784314: 418 balloon
    2 }) P& [3 l! _% R5 w6 U6 M; B
  4. 0.0470588: 880 umbrella: ]: C9 A6 x8 p; y# [% x/ R9 Y
  5. 0.0470588: 722 pillow
    ' o7 a' @7 f+ d1 j# f4 W
  6. 0.0156863: 644 mask
复制代码
/ h" e2 M! H0 ~% ?4 J
. h- i9 q! L& T3 Z9 S9 R& K


& p1 L: O/ H9 r/ r* X( }
  1. 0.184314: 585 hair slide
      p3 S5 w( p2 Z9 l9 U8 _- p7 o
  2. 0.156863: 794 shower cap
    6 O% w, S  Z  Z
  3. 0.0941176: 797 ski mask
    4 o3 M0 X6 H. \; P" R6 y5 c
  4. 0.0431373: 644 mask: |, G) {) X& W2 R: E0 {% q
  5. 0.0352941: 571 gasmask
复制代码
! B' D1 f/ S. K. s/ b* R/ M

$ g" l' m) }: E3 g: o

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

. Z. [. e# f* L" z" x* W! D1 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

; t2 y9 Y9 T% u$ L; H( G/ v8 O
9 x- q  j. h8 P: ]5 B4 f2 u
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-11 09:57

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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