嵌入式爱好者

查看: 11372|回复: 1

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

[复制链接]

46

主题

53

帖子

296

积分

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


( Z9 b1 m% t# {& y" b

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


7 H8 _: \. F1 }( D' |: b/ \; P( B4 }
$ S% l6 A0 ?8 m

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

( H# V! |7 O1 I5 ]

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


8 s8 e% C+ B4 w; o6 `! F& p- p

一、 NPU的图像识别例程


+ b/ r* A$ u, a

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

! C4 h$ g4 Z* W5 L


  E, T' n% z' |, e% r


" i4 B' U2 o- E6 ^1 m8 D9 q  m: q8 k9 o: e! ~7 y6 a

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

9 T& J9 F( P% ?9 G- d

. d* X2 Q, P5 E1 x9 W- Q

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


; B7 ^: K  ~& R% T& D( c9 p& q5 u& D; [" D6 _

4 O0 d$ S( M. f6 T) L8 ~1 v
  1. libm-2.30.so
    ' L( A7 M: g. s8 U' T. a" ?; ^
  2. libneuralnetworks.so.1.1.9
    9 R7 \( C- f- I' `* T
  3. libnnrt.so.1.1.9
    5 b" U  i( L& h7 L- f
  4. libArchModelSw.so
    9 {; G5 ?& ]3 t$ b! ^3 V
  5. libGAL.so$ F6 {# @; k( x9 I) A' ?
  6. libNNArchPerf.so/ }) I' h! t1 s. u
  7. libOpenVX.so.1.3.0
    4 c) O' g7 m7 F. A1 P( |% s) }
  8. libovxlib.so.1.1.0$ ^+ h& r, ^- Z# w' k
  9. libVSC.so
复制代码
. p, h6 U' Q! R; b: F' l

, r. _. ^1 ?3 Q8 z0 e

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

( Y" @/ J* s6 e2 G


* L2 ?! m6 j- v9 H
3 z2 I2 @5 G- j9 `. z& M3 e+ y9 p3 K$ ~. |

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

1 a1 G( _1 b( _' I8 v, f# h

二、TensorFlow例程验证

) I3 I% H+ L9 j' O, l3 k: B& [

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


" j+ K2 v+ J' E! i# E& T

# C0 _) T$ J5 V5 {
  1. 0.780392: 653 military unIForm& r9 g/ z8 Q8 h2 A
  2. 0.105882: 907 Windsor tie( `& d( H/ s! \- P7 T
  3. 0.0156863: 458 bow tie
    9 ?, l1 ?! A. ~! E
  4. 0.0117647: 466 bulletproof vest
    : t9 m% F& T$ e" H
  5. 0.00784314: 835 suit
复制代码

: D% ~6 r* z, @( T" x/ }; n

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

5 y) D9 Q7 M7 T

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

7 U4 Y( Y8 Y  W1 J  Y7 G6 o. D
/ j! O4 t. O: x5 L& C4 t" a" o

! Y+ Z  e* [' a7 S


# \6 |. j2 D$ u- p% u3 @. Q

  1. 0.352941: 274 dingo! p, A( C6 C5 y# A1 k( {) {
  2. 0.254902: 265 Cardigan; _& v4 R) M  @
  3. 0.184314: 264 Pembroke
    8 A* J+ W- B  I0 z
  4. 0.0666667: 163 beagle; c0 S* A; Q: M
  5. 0.0156863: 354 gazelle
复制代码
9 G2 C* a2 |) [! f

3 ?+ N1 ]- ^8 D8 x2 b8 g  p$ r35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
- d2 M3 c2 d" F5 R) C3 _- h: @' _/ W$ h' \

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

% q5 b9 @6 g1 z/ z


# I0 s. s/ k* v$ E
  1. 0.160784: 639 maillot
    ; M( P3 v4 d: K8 g0 a; k
  2. 0.137255: 436 bathtub
    1 ?2 f9 F6 e. M* j6 O8 X. b+ n
  3. 0.117647: 886 velvet" f$ m. z: R5 b1 A' t
  4. 0.0705882: 586 hair spray& y" a+ \8 W( @1 W
  5. 0.0509804: 440 bearskin
复制代码

$ L: e: I: y4 r
2 h6 ~/ y* x6 c9 w


/ T; h2 l( O9 J- Z2 ?( Q2 z
  1. 0.972549: 644 mask
    . S, e' }$ X; ?/ X) d/ S1 }7 F
  2. 0.00392157: 918 comic book' H# Q9 G' ?) ?
  3. 0.00392157: 904 wig
    7 Y& l$ c6 W; V- X
  4. 0.00392157: 797 ski mask
    2 V0 A) l' ?" {
  5. 0.00392157: 732 plunger
    . t0 c2 F" B$ y. @4 e% e8 f
复制代码

" v; K/ v6 C* j" z& E, ~; g% D, v# f( m' G% C5 D  p) o

$ c, h- p/ G* t
  1. 0.380392: 583 grocery store2 z* `  [9 [$ u8 s
  2. 0.321569: 957 custard apple
    ; J$ V3 V+ c6 n
  3. 0.0862745: 955 banana
    - S+ V& y; c: j3 Z2 V' ^9 o
  4. 0.0352941: 956 jackfruit; [" m' Q( @- c) w5 H
  5. 0.027451: 954 pineapple
复制代码
! Z# V' ^& A1 {; K
8 E: f  n* A& o& w( t( d7 x

; l: _7 R  G  M
  1. 0.254902: 918 comic book2 A# y0 H+ u# m# b
  2. 0.0470588: 771 running shoe/ b1 ?! o6 [( T" N: G1 Y/ Y
  3. 0.0470588: 474 can opener) j4 F) O+ @0 y0 @
  4. 0.0470588: 412 apron
    % s# M6 N& V& `( c- n
  5. 0.0392157: 794 shower cap
复制代码

* j; P, t0 s; v: {# ~) @- G
7 V) v5 [& B7 F3 n7 _

9 M; h5 z& p- }! y9 F# D
  1. 0.52549: 922 book jacket, x7 n6 W% Y! d5 Q, _
  2. 0.0705882: 788 shield
    ) T; X' i. J5 g- l% ]/ j4 Y
  3. 0.0705882: 452 bolo tie& o; |3 N* i9 W) {* d
  4. 0.0588235: 627 lighter# o. l/ f& P' |4 N$ P
  5. 0.0352941: 701 ** towel
复制代码
+ |2 t& B! t/ P- Y" n* z5 E
1 N5 n* x; Y! h! B


( [3 g" f, A( D4 i* P, J! J( m8 U* H" l
  1. 0.121569: 656 miniskirt/ N0 x# j4 V' A- |/ v
  2. 0.054902: 835 suit
    / z& ^8 Y0 j" M
  3. 0.0470588: 852 television
    , ?9 i3 ^) P, G4 j) J7 g
  4. 0.0470588: 440 bearskin* H# f0 Q/ Y- K; |6 X
  5. 0.0392157: 679 neck brace
复制代码

) E, S" w% G7 R( s2 T* h- U. n' T+ F' `+ F, Z

0 I# `& m$ s! x
  1. 0.65098: 918 comic book! O/ K' p+ s1 F4 g1 t% ?/ m7 i+ J
  2. 0.172549: 747 puck
    . ]& G- c0 E9 l# `" D4 B# i! z  {
  3. 0.0196078: 922 book jacket$ R3 N3 h% b, `- l( w& K9 k
  4. 0.0196078: 723 ping-pong ball
    5 x5 R/ {" W; c4 z, ]
  5. 0.0117647: 806 soccer ball
    & E7 O- Z3 R5 n9 u8 X
复制代码
2 f; `; [! H( P2 r

4 L3 Y5 g' \9 p0 P


* Q' w# M* [. E, p1 _

  1. 8 |+ A1 O4 e$ E% y1 V: v
  2. 0.678431: 918 comic book: V0 u& }* J: H0 G, I' g+ ~
  3. 0.0784314: 418 balloon% b- B8 ?* F! v7 ]  K/ K. k- B: |
  4. 0.0470588: 880 umbrella) q3 O7 Z5 M; `
  5. 0.0470588: 722 pillow
    * p! }/ N7 H5 ~7 m8 q
  6. 0.0156863: 644 mask
复制代码

# B/ u: x" P( R: T; ^" n8 [- L% _
3 c2 x) P- k9 Z' v) ?5 v1 M* Q

  R; N, c6 P6 R9 Y% X( |$ l
  1. 0.184314: 585 hair slide
    ' {5 `% Y5 t2 \% j& \
  2. 0.156863: 794 shower cap
    9 f8 b3 Z7 ^2 I  n  ~, D
  3. 0.0941176: 797 ski mask1 T2 p, j, \: V1 k& A2 e! k0 q
  4. 0.0431373: 644 mask
    ( l$ y% ?  `, U3 K5 D1 d! T
  5. 0.0352941: 571 gasmask
复制代码
) `& R' Q9 K9 m) N, g

7 Q% w/ u  _, F- G3 M" o6 L, u! J

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


: [6 F6 m# ^' K

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

7 X0 M/ U! x8 O+ p
% m; K' d3 G' X* P7 |2 c! t3 m0 a
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 11:53

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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