嵌入式爱好者

查看: 12361|回复: 1

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

[复制链接]

48

主题

55

帖子

306

积分

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

1 C' S) j7 p6 `- t

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


2 K2 N& w& u, V" @' I* \4 Y6 ^5 P- }* w: M% M

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

- A, {. Z/ m6 W! x$ W; g4 [: {

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

9 i. L, s  V* N# {; B9 G( z

一、 NPU的图像识别例程

* z4 O( s. O, R% Z& U

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


( J" U- w- P- \+ ]" z2 w  J! L' v


7 R1 g8 q$ h- ^$ I! _


; {" L* A/ y4 y# r6 C# z2 n& s7 v/ i# a) |2 ]  `0 ?* V

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


" e) N- t! V1 T: B" h6 z


3 @/ |7 {) s5 P& \$ K0 F" ~) a

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

( j2 e7 C( N* D4 q

. c+ A4 p: @; @! k/ ^. F. x7 Z

1 ^  W8 L* m; @0 z2 J5 Y
  1. libm-2.30.so8 j( V" R. J& b
  2. libneuralnetworks.so.1.1.9+ T! R$ k8 u& j
  3. libnnrt.so.1.1.9
    3 t2 Q. v+ [  Q
  4. libArchModelSw.so
    * Y( W* g% H  o" X
  5. libGAL.so
    $ r& Z6 l+ j' ~, r
  6. libNNArchPerf.so7 |& s) X: x7 d, L/ T2 {
  7. libOpenVX.so.1.3.0
    " y- R- a# j# Q5 I. g1 `- `
  8. libovxlib.so.1.1.0
    ( r2 M6 j. B9 Y; l) U+ M$ s5 q2 q; b
  9. libVSC.so
复制代码
, r, C6 U7 d# k
' S! ~+ S- r5 C

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


. D$ `3 x9 Z8 ]/ \

/ u+ j7 e6 k9 v4 Y" U
! d1 \& P" _7 q7 {" M# a! P1 I. m

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

$ P. m+ D! B0 Z: d" d% Z& q( F

二、TensorFlow例程验证


5 \. s! p+ F- _+ n% _" \6 e4 ]! r

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

; d: |  M: M$ _: ^3 S: c

7 X: g5 _  ~3 |& z* Z" j: L
  1. 0.780392: 653 military unIForm
    / t0 b2 Y( Y( p1 o3 w2 B; t
  2. 0.105882: 907 Windsor tie
    5 Q; v7 |2 }- V+ V$ a. P  F+ Y
  3. 0.0156863: 458 bow tie- Y$ w  D% M9 N$ O
  4. 0.0117647: 466 bulletproof vest
    % d( a; Y  L0 z% x5 m
  5. 0.00784314: 835 suit
复制代码

, m; Q* x9 J. `# h- _3 \

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

$ ~7 W1 M2 s5 P: D- F0 E5 g

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

7 p6 v- t* x2 ]# ]& f- C- O  z

4 h% ?4 r+ p+ a$ B  G- ?) y1 K


) I! K& S0 Z1 h5 E5 }4 Q


! G8 u2 c, h- ^: P3 @" e

  1. 0.352941: 274 dingo
    , K+ q( U5 Z7 v5 F
  2. 0.254902: 265 Cardigan
    - h3 {- \( X2 S! t
  3. 0.184314: 264 Pembroke
    - Q& U( e" U: d, ?, O8 m$ Q$ Q/ D5 W
  4. 0.0666667: 163 beagle
    ) ~! n: b5 J! {7 V) E, `
  5. 0.0156863: 354 gazelle
复制代码

1 Y2 R& a; g4 m5 p) m3 @; W" Z5 @1 o* v7 n
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。( |, \" c8 _: ~" q/ X1 ^! V

  U: V1 _: Z" i& z

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


! P4 s& C5 F7 ^6 B  E: O7 F+ k

6 f$ J% J; L3 O# s( r1 e9 h8 Y% E
  1. 0.160784: 639 maillot
    ' J1 S- n, V+ u2 I0 Z6 K
  2. 0.137255: 436 bathtub
    ' s# a( O1 ]: x
  3. 0.117647: 886 velvet
    / Q2 @0 o6 C2 N( J; |
  4. 0.0705882: 586 hair spray2 ]. m1 u( I0 M, |4 P# R' Y
  5. 0.0509804: 440 bearskin
复制代码

! `6 ^- ^+ `+ |1 j5 }& e, y" b  f1 T7 I6 _

4 m' K0 g1 Q, x3 R; c% t0 f
  1. 0.972549: 644 mask
    4 H2 D: W" _; |3 j+ C9 Z
  2. 0.00392157: 918 comic book6 D8 I  N1 K+ H
  3. 0.00392157: 904 wig$ P3 [1 q1 e% q( D( Z
  4. 0.00392157: 797 ski mask0 e+ B' n* x8 E6 P; H  P0 _
  5. 0.00392157: 732 plunger
    - P$ D" k5 k, u' i
复制代码

( [% c! G$ r1 Y" x2 t
9 w/ C: D9 K0 h+ r: w7 V% R

1 [+ F) L( @$ D" Y5 D5 f
  1. 0.380392: 583 grocery store
    4 _" P+ `) ^) I; s4 r3 A, E
  2. 0.321569: 957 custard apple  x$ x$ V, w9 c8 o
  3. 0.0862745: 955 banana+ k; n5 K+ A9 W2 Z4 w! x; V
  4. 0.0352941: 956 jackfruit, W: J4 s0 A9 q  W, k9 i: b
  5. 0.027451: 954 pineapple
复制代码

2 S- Q- v9 k0 m) P4 V& Q$ O% H/ c1 A6 b: D+ [7 w3 @3 _

( M0 J# Z+ \: s% r5 Y
  1. 0.254902: 918 comic book6 Z# Y$ R( o/ {/ {: H* D0 J; b
  2. 0.0470588: 771 running shoe; ~' c3 g' k6 t+ ?: v
  3. 0.0470588: 474 can opener
    3 I0 T0 [& v! B6 M4 q. `$ c
  4. 0.0470588: 412 apron$ C# M  C' a2 E' r+ S6 B
  5. 0.0392157: 794 shower cap
复制代码
3 x1 V6 {$ i/ I5 V7 ]" n: ?

2 y4 e; ?% S3 u( n4 K

- m) w# X: F" j( n" @
  1. 0.52549: 922 book jacket
    ' ~2 K* |8 T% Z1 [1 e9 A
  2. 0.0705882: 788 shield
    2 y1 G# Y2 i4 a( T
  3. 0.0705882: 452 bolo tie% w- a* q" s( d
  4. 0.0588235: 627 lighter
    * W7 U+ j, Q2 p4 I9 m
  5. 0.0352941: 701 ** towel
复制代码
5 g  W9 v) U& d5 F, y# S
: I1 ?1 w# A) g


- @6 P0 B' K/ d8 z$ k2 V  f% D4 d
  1. 0.121569: 656 miniskirt
      ]) v8 a# N% t1 f% A( o. q
  2. 0.054902: 835 suit
    ' V' n0 W, D) Y6 F2 I6 J! n1 w
  3. 0.0470588: 852 television
    ) [: T5 z* B1 p/ N8 u
  4. 0.0470588: 440 bearskin
    ) G3 R, l6 g8 C& W6 j
  5. 0.0392157: 679 neck brace
复制代码

. B  n; R. `6 f0 w* z
6 u( u2 N' j  t' u' K/ U$ u& n7 C


5 ]& u& p: J. [3 j' |
  1. 0.65098: 918 comic book9 F3 M" y& c0 R# {5 N
  2. 0.172549: 747 puck9 [" X9 H; ]$ _  c
  3. 0.0196078: 922 book jacket; w( C  g9 @9 M4 X+ L% X
  4. 0.0196078: 723 ping-pong ball
    : R6 \: D# k8 O/ C+ c6 \* p- l3 ^
  5. 0.0117647: 806 soccer ball7 z/ j0 W+ \) X: t5 n
复制代码

, `  H$ _5 P( S
( Q0 ?# B9 I3 e

7 r, {: u/ h% m6 X, `. y
  1. : b" \! P4 j: _; ^; m& N/ g
  2. 0.678431: 918 comic book
    4 g/ P7 V4 a" \2 @, v, k0 N
  3. 0.0784314: 418 balloon
    ! y6 ~, l" F0 @  [0 A  x, s0 E% ?
  4. 0.0470588: 880 umbrella! j+ {! D( ?3 j8 c
  5. 0.0470588: 722 pillow% i5 t. F  c4 Z2 [: J2 Q
  6. 0.0156863: 644 mask
复制代码

  q/ r+ I* s% M9 M8 ^/ P  W7 E7 |4 t0 k' t5 t& j

8 P/ e  P. \) }5 v6 w, r
  1. 0.184314: 585 hair slide
    5 a- E" P6 N. A! F& c* M6 @. b
  2. 0.156863: 794 shower cap7 i4 |9 d7 k0 U- t# n
  3. 0.0941176: 797 ski mask
    2 s: ^- h+ ]1 G, Y, w
  4. 0.0431373: 644 mask
    1 K& U; |( a- k4 l8 Q& k
  5. 0.0352941: 571 gasmask
复制代码

, p  y. g. L7 [6 g6 ^$ u( U" N2 e3 g* H

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

- C* _) P& u6 ]( r, q

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

6 w* z* j" k1 T' C

4 x% x& A% W1 ^
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-30 08:47

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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