嵌入式爱好者

查看: 11144|回复: 1

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

[复制链接]

46

主题

53

帖子

296

积分

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

1 J! O6 {$ i0 t4 ^

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


/ @, Z, r# o3 i# x+ L3 {2 `+ ^4 q4 k! Q- L9 _

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


; p& X" o4 I6 z# ?1 w

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

1 o$ h8 W5 t- v: H+ b5 e# r9 g

一、 NPU的图像识别例程

8 }2 c0 w+ S1 N

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


* m4 e$ w2 a% ]; I& d2 X

3 R2 o3 p  [% d% l

! h2 C* r" O- C. _( ~) _# e6 t

% ~- b% A5 }5 o' g9 L2 y

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

$ b- j; t, h: k4 {' t9 K9 E: A

, t! N, D* A) \

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

8 i  g& l& j( d) {" Y

! T1 N1 L# H5 t5 x# R" ~6 s1 b

8 b: z5 n; u+ T$ G$ H! k
  1. libm-2.30.so
    ( P$ D4 H1 a& C# b$ P9 O4 }9 s
  2. libneuralnetworks.so.1.1.9
    ) l6 d6 k% T5 d
  3. libnnrt.so.1.1.9
    8 R6 @+ R% i, Q1 o2 w
  4. libArchModelSw.so
    ( g' m' V. p" `; q( v9 f3 P. e6 y/ o
  5. libGAL.so
    4 L+ i1 Q2 u! X# ^
  6. libNNArchPerf.so
    + U9 [4 ^7 }% r; X$ U; b
  7. libOpenVX.so.1.3.06 m' i/ Q3 s5 G4 X
  8. libovxlib.so.1.1.0% I& F1 B; t( g7 e$ P( `' y# I5 V
  9. libVSC.so
复制代码

  c' {$ g9 l8 C) d/ i. |3 L
2 V* L. D5 a1 G" s$ M4 W

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


( _  w4 w, E& Z  A/ ~


9 N% _# G! N3 D/ G* g( F$ e. U$ Y" Z+ h& E6 ?3 T( w2 h& W

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


: Q' O4 M8 z  }( q$ I

二、TensorFlow例程验证

2 s; H* R: ~' w, d' W5 W3 d

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

( r8 \- f( j7 Z& V: z2 Y9 _

% _5 M) M6 V% W) _; e& g1 S
  1. 0.780392: 653 military unIForm( r: Y4 [' \6 g) b
  2. 0.105882: 907 Windsor tie
    5 z4 C. P# L& ?: J" e0 n
  3. 0.0156863: 458 bow tie
    5 O+ V: h& f& q
  4. 0.0117647: 466 bulletproof vest5 w" O8 I1 |1 }* w$ m& j
  5. 0.00784314: 835 suit
复制代码

& f! g5 b# e) `* J; |

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

& G) K. t" h; x1 q) I

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


3 H; C' g6 s3 W- U  {$ q& o7 k% C- [8 I* \* f1 r

; K2 ^1 j8 e4 p' ^: {% Z

7 `6 q8 r% \$ p7 y) t

  1. 0.352941: 274 dingo3 i* A% [" j# _) X. b# Y
  2. 0.254902: 265 Cardigan
    2 k) C  E# N& [1 h; W4 l7 }: L
  3. 0.184314: 264 Pembroke
    : y2 |, z8 u7 S( e) K; J1 I: o
  4. 0.0666667: 163 beagle
    + Q: _. V  y9 M7 [: F
  5. 0.0156863: 354 gazelle
复制代码
' K# t' V& [: J+ e' e  D

9 D3 A) {  M) y& t( i! t35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。5 E- i, y% p  G- O, B

! y" Z# A7 c8 ^  [2 a0 [' i

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


- H+ C. ?: e4 {9 u

* L, Z5 e" p. a& t
  1. 0.160784: 639 maillot
    * C3 @0 `6 d& U1 ]9 X; v1 P/ A
  2. 0.137255: 436 bathtub+ V1 _+ |. _3 n7 E* Y# V, b; N
  3. 0.117647: 886 velvet- d' U+ f! {% Q9 w% q* Y7 X
  4. 0.0705882: 586 hair spray
    & W  P5 i8 v4 I4 d3 q
  5. 0.0509804: 440 bearskin
复制代码
3 l9 L4 C. }6 C( X5 }+ i7 x8 H: N
$ R! K2 u" e0 A, A' t

) O  L" {0 [+ ^3 p
  1. 0.972549: 644 mask
    # e2 r7 y. \" j6 P. i
  2. 0.00392157: 918 comic book4 m( b2 u" N  G+ {7 {: j- h
  3. 0.00392157: 904 wig5 W6 E( s  I; Y
  4. 0.00392157: 797 ski mask8 T. w; u# _5 l3 _0 d
  5. 0.00392157: 732 plunger+ V% |6 a4 b7 _
复制代码

) s/ g5 _, s% b8 \3 @6 D3 ^! A7 V8 _; u& E& o: D

4 l, N  Y  Q  |0 f" G8 I  ?  [
  1. 0.380392: 583 grocery store
    ; v9 \$ R5 q, f$ H
  2. 0.321569: 957 custard apple
    : n. X7 C* D- T; U6 M. @1 s* v
  3. 0.0862745: 955 banana
    * p! h' B" m/ O2 V8 D/ L/ K8 [
  4. 0.0352941: 956 jackfruit; c( J9 b! }5 K
  5. 0.027451: 954 pineapple
复制代码
+ V% ]2 M' H+ ]" v3 A+ e/ S& Z
0 R7 N# I9 x7 B7 Y, @4 e8 i

* g+ }5 T# p. l) o" L% {9 U1 s
  1. 0.254902: 918 comic book
    2 z! s! ~1 B4 ~
  2. 0.0470588: 771 running shoe- F2 S7 w' y8 Q% }
  3. 0.0470588: 474 can opener
    ! e9 g" x5 z% ]7 ]9 c
  4. 0.0470588: 412 apron
    ! b5 ]0 Q) W; u4 j& z
  5. 0.0392157: 794 shower cap
复制代码

( a/ f4 f2 i! I7 J
$ E5 ^1 o$ [( f; |3 o

+ ?5 e+ E; r: C6 g( b/ \7 Q
  1. 0.52549: 922 book jacket
    7 s: e# o/ O- H# Y
  2. 0.0705882: 788 shield
    . ?6 V6 k( f* q& w0 C
  3. 0.0705882: 452 bolo tie
    7 @& o& K$ P* k$ v. R1 H3 Z
  4. 0.0588235: 627 lighter
    / \. P0 h1 z5 l4 g. a( Z
  5. 0.0352941: 701 ** towel
复制代码
- s, w8 y, T+ J. a( {8 @

9 c7 U" ]2 g8 H# _" s) M

* y! c$ h& \' h$ j; G
  1. 0.121569: 656 miniskirt
    # B6 J" @4 v. H& j- H! b9 S
  2. 0.054902: 835 suit/ Z$ I8 ^% x$ `& k/ _! E/ U5 C
  3. 0.0470588: 852 television
    6 y0 B' E; j& m" S6 p1 Q4 B
  4. 0.0470588: 440 bearskin
    1 O7 Q, B: n$ e( r& `9 }
  5. 0.0392157: 679 neck brace
复制代码
8 A2 G3 t; {" O1 t8 }' K- c) i
+ k$ T. q+ p+ ?; b

% a1 h+ l. g+ `9 G" q! s
  1. 0.65098: 918 comic book
    , v7 p, C# F6 n( U- [
  2. 0.172549: 747 puck$ j  I% j- N6 z+ m
  3. 0.0196078: 922 book jacket  I: o6 r. g6 n0 ?* \
  4. 0.0196078: 723 ping-pong ball5 E& I) f% h9 |  L0 ?) |* ^0 z
  5. 0.0117647: 806 soccer ball
    2 B  w3 W1 a1 k4 R& |! f( Z
复制代码
" W3 M: i4 v* y' [* r' C4 K

. x3 }8 \3 Z: `+ F* |6 ?

+ i& @( p3 y2 p& n. L

  1. / O; ~/ u7 K$ _3 ^+ f
  2. 0.678431: 918 comic book# _. E% x* J' h
  3. 0.0784314: 418 balloon# Y- n3 w% t* f6 d, ^. Y" K1 x
  4. 0.0470588: 880 umbrella* j  J% o5 }/ P4 V. X( u7 `
  5. 0.0470588: 722 pillow
    " P  J/ Y6 Z& E# [  W
  6. 0.0156863: 644 mask
复制代码
1 c  e: o; `8 |: `8 \
$ V0 y& d" N' v6 `


' f  }8 g6 G6 |3 {4 {" C
  1. 0.184314: 585 hair slide# I0 n0 q' u# Z7 g9 f4 |2 D
  2. 0.156863: 794 shower cap
    & }' O  S7 x/ {# D  v
  3. 0.0941176: 797 ski mask0 }* d9 Z) x, Q$ z2 {
  4. 0.0431373: 644 mask* g1 {& {: b2 r9 n6 r
  5. 0.0352941: 571 gasmask
复制代码
6 X5 R' Q# r3 w% S/ e

- w/ p9 \$ C6 p! C7 G( c

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

- B4 [/ I% w1 W) d. k" Y+ ?7 T9 F

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


, }- Z8 s7 H1 D
5 {6 U6 }. W  j- I4 r6 E
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-30 21:28

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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