嵌入式爱好者

查看: 10770|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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


3 o/ ?5 n# g0 ~9 Z' J

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

- E" ]6 F) g, @. M9 `( ?5 ^% ^# F
5 K4 I4 J% M- ?; k4 {

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

& U8 s. H& l0 y% Y6 j. T! g' K

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


+ |5 t* }( e0 a+ i! C1 L

一、 NPU的图像识别例程

9 s1 C$ b& X# [- ^( W6 L" y

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

% Z9 B2 p2 W0 @# p0 L

" b" Z# y+ R1 W2 K3 W6 Q


! R% t  A' I, [' B4 }6 q9 a( z* U0 P

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

- a2 `- b6 b5 y8 g% o


# }: U/ G* K9 u/ K/ ^" S; @

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

" q: B0 y+ v) f! z, D) [6 ?; R% q
/ z1 a% T4 k6 \, d2 c9 c

6 I2 I$ Y; Z+ R/ N( {+ g* Y
  1. libm-2.30.so
    / v6 `4 t; H9 {- e( o
  2. libneuralnetworks.so.1.1.9
    6 _# h, k* [1 x2 N, T
  3. libnnrt.so.1.1.9
    1 x! w& s& Y. i$ V* \
  4. libArchModelSw.so# T+ Q$ `- F9 h- t1 {; ?) m, t! c
  5. libGAL.so
    5 M- g9 c+ z6 w4 h! p
  6. libNNArchPerf.so
    # b8 G8 h2 t: b" ~+ a% a
  7. libOpenVX.so.1.3.0
    7 {# r# r+ t: u- r9 v; W9 P
  8. libovxlib.so.1.1.0& Z, o3 [/ X% \6 o4 J
  9. libVSC.so
复制代码
6 p2 @7 `! m8 N* x$ f- d

2 J+ y" z9 R5 D/ M' m$ J, u% B

其中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 e3 o2 h5 O& P


1 `3 F; ~- g. q) ^, p! `; u
0 i3 A' r+ M% _4 r7 q3 A

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


' p  L+ A$ E# Y& K4 F. |0 r/ w/ ~4 @

二、TensorFlow例程验证

6 p6 @4 m; M) d2 t* h" j; \

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


5 L& m* Q5 \3 {' Z

6 }  I* }, D: N- v
  1. 0.780392: 653 military unIForm3 s4 a' z' O+ z- ~
  2. 0.105882: 907 Windsor tie; ]5 E3 s, |4 |2 {9 j! a+ A
  3. 0.0156863: 458 bow tie
    : [( c( {& j( y) M7 B3 O
  4. 0.0117647: 466 bulletproof vest
    ' b) A7 P- W! H& A
  5. 0.00784314: 835 suit
复制代码
9 Q$ D% c  i9 C. f: y/ G

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

8 z; P8 y  `% C- U, _# N* Q! |: x

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


$ e3 o. O( @- N# Z  w) S7 R" f- S3 z/ b% G


) k$ `! X) j* q

- c. y* n1 e& I: V, y0 B$ w" D

  1. 0.352941: 274 dingo% d( ~2 n- k" B# f( Y8 f/ U
  2. 0.254902: 265 Cardigan
    6 P5 i0 B4 P# `5 ?/ ?6 m3 b
  3. 0.184314: 264 Pembroke$ l0 ?- t) Y/ e8 t+ N$ J
  4. 0.0666667: 163 beagle
    - W) w/ R5 }. H: X, a' b. Z
  5. 0.0156863: 354 gazelle
复制代码

; l/ Y- ~7 {9 I( {: U& B7 M; {0 z3 W/ Q* ]/ l- A) Z
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
/ c. x" ~$ @, E6 B$ B+ e) Z) n9 ?$ P4 @( Z- y& u5 }

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

( C% j3 q& R7 w


' R5 ?+ u5 F: A3 P
  1. 0.160784: 639 maillot5 _) i4 }0 W# L8 _
  2. 0.137255: 436 bathtub
    * q& t3 O. I, I( T  `6 V8 m/ j
  3. 0.117647: 886 velvet- l& N6 y+ W9 ]: Z
  4. 0.0705882: 586 hair spray
    0 x1 Z( f9 |4 Q' p" R
  5. 0.0509804: 440 bearskin
复制代码

5 @) b# j2 k9 \' t* K5 `' c3 h6 l/ b$ A

. H4 ^) s  s8 B5 t7 v# D+ Q; q
  1. 0.972549: 644 mask8 p8 B: ^$ ^" Z' w4 l8 k' X
  2. 0.00392157: 918 comic book2 O4 C+ L/ i5 N- \$ F& c9 x/ l: a
  3. 0.00392157: 904 wig+ v. S& _. t$ f: R6 X; @
  4. 0.00392157: 797 ski mask& L, i7 V5 H; R6 V# {  z% @
  5. 0.00392157: 732 plunger# x  z( l& F) F: K2 @. P9 F
复制代码

8 n+ @) q& D4 c5 h, ?8 A3 E4 |! l6 y, V8 L


/ u% B- B" t. D- h1 h
  1. 0.380392: 583 grocery store
    1 E6 Z- [; n% d' |! K! ]
  2. 0.321569: 957 custard apple
    & H7 X% W+ N! p7 r6 P, }5 g  j
  3. 0.0862745: 955 banana( n6 c* c& F9 v0 c) b8 ~* N! r
  4. 0.0352941: 956 jackfruit' a6 x3 G; W% p6 F0 o9 v# @
  5. 0.027451: 954 pineapple
复制代码

. e2 Z: \1 l, z3 P
+ D! g3 I. q" R% r8 v

- `. \- E) T4 `& N
  1. 0.254902: 918 comic book
    ! y2 t' f9 j3 {$ L6 l
  2. 0.0470588: 771 running shoe. N, w5 p. @! j" _7 x- T+ W0 j7 B
  3. 0.0470588: 474 can opener
    / ^1 h8 d) n( m. B, q. F+ h, \
  4. 0.0470588: 412 apron
    7 b  F: u/ U) a9 \& u1 Q  `) w0 C
  5. 0.0392157: 794 shower cap
复制代码
3 {" X  o2 T" E6 `6 q1 t

% W# T0 D2 Y9 E, G: c

  }: B0 G, L& F' a. Z- _9 o
  1. 0.52549: 922 book jacket
    " J8 A8 b* r: f* Y% P
  2. 0.0705882: 788 shield+ n7 c* Y6 r% }* [; \, q, }
  3. 0.0705882: 452 bolo tie
    " L# Y2 }. X7 m! V; ~
  4. 0.0588235: 627 lighter
      i0 T3 t6 k9 B# ~
  5. 0.0352941: 701 ** towel
复制代码

2 p: A2 V% }% x4 m& ]: m' x) k' Y, H. u  j


: V" D) r& f6 G# D! {
  1. 0.121569: 656 miniskirt
    + V. L* i2 W0 z0 M* i6 G
  2. 0.054902: 835 suit$ l5 J: s3 H: V! k
  3. 0.0470588: 852 television
    ' w1 W6 W* y* g2 @* j
  4. 0.0470588: 440 bearskin
    " C& p! a  j7 [
  5. 0.0392157: 679 neck brace
复制代码
5 e, z" U$ [2 x7 f
1 h, M* o' W$ ?9 B( @6 w

3 t- N9 @4 t  G$ [# C2 G
  1. 0.65098: 918 comic book# ], A7 c. v+ x( t) Y4 A
  2. 0.172549: 747 puck
    + R, A  b% D! N3 j- D3 F/ [* V% s4 j
  3. 0.0196078: 922 book jacket
    * B2 s1 d2 S' F8 W2 Y
  4. 0.0196078: 723 ping-pong ball- s. F! `7 W1 {8 D& X. e
  5. 0.0117647: 806 soccer ball
    2 @4 e" \  t* B( h; X8 y
复制代码

+ l: `: A' |" s+ A: [9 _1 x6 F& F. N- h* o5 _8 ]! ?. U! C


% T8 K$ W: f& |

  1. 8 G7 Z3 }# M1 }! t5 h. V  v
  2. 0.678431: 918 comic book
    : J/ _; g$ b( b5 J, O
  3. 0.0784314: 418 balloon1 F% h# C6 P6 ]2 A  l
  4. 0.0470588: 880 umbrella% K, Z" T6 d2 L3 I3 U
  5. 0.0470588: 722 pillow
    9 I5 y2 D2 Q0 v0 k* a9 M# R' [2 m
  6. 0.0156863: 644 mask
复制代码

; n( G7 o# T, c7 Q+ o7 R7 u( V: t7 ]& r. Z


) A7 T8 r$ W  _) E( T! d5 a
  1. 0.184314: 585 hair slide4 ~2 R4 c" y  ]; w9 b
  2. 0.156863: 794 shower cap; M- ?7 x$ t3 s9 a
  3. 0.0941176: 797 ski mask5 O' ^/ ^4 e% q8 o+ A
  4. 0.0431373: 644 mask% L6 H5 c9 @6 i7 f* C; E6 t
  5. 0.0352941: 571 gasmask
复制代码
* a. s9 C- A8 y. c
1 w. X* [3 r3 ^0 h/ j1 ~, S

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


/ f9 D; v, H, l! _

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

, _* e' E. c: k1 v; R7 u2 o

# S/ q. [5 H  V2 O) @$ g5 I
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-30 17:17

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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