嵌入式爱好者

查看: 12424|回复: 1

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

[复制链接]

48

主题

55

帖子

306

积分

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

1 G  t3 T; {7 L/ {/ Q

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


/ w# c; _5 X0 Y( w+ X7 \' P' e
6 b2 u' d( O8 d0 K0 D

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


! g3 \9 T% l7 s1 d2 h8 V3 \

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


# }. D8 a( t% @. C

一、 NPU的图像识别例程

2 P0 o( W5 D& n

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


9 R8 C$ g2 L9 j- [* i. Y


$ ^0 E8 U! W8 s; U, G, w2 e8 G


7 y& n! `7 J9 Z$ ]3 m; M8 p1 n3 g8 b7 D$ \

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

  X9 r0 d, s/ D8 I* N


; z. e/ d* Y( D2 v2 d6 Q9 q

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

6 a4 e' K9 ^/ P- R( @* d
/ w1 y; K. E0 I1 |& N" ?$ G% k

# s+ a' o! s+ y& \: S
  1. libm-2.30.so
    ) d9 N; X$ [3 {( q
  2. libneuralnetworks.so.1.1.9
    : j( |0 o0 C2 j! C1 Z9 Z+ R
  3. libnnrt.so.1.1.9
    5 s& [% B% H  C
  4. libArchModelSw.so. c7 A9 h8 m# L4 k* D+ @+ Y0 x
  5. libGAL.so" _2 X$ G) u! z3 d) F
  6. libNNArchPerf.so% {- a. \$ |* J8 {' v# ]2 u
  7. libOpenVX.so.1.3.0
    ( g4 i" Z% }' X3 _; T0 u; d
  8. libovxlib.so.1.1.07 O& ]( `- N6 G& u, T1 `( B
  9. libVSC.so
复制代码
7 I6 Q% O8 p4 Q9 Q  d# M

7 l: o  W+ K. R5 ]5 F8 Y

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

8 V) O3 k0 k2 n" F6 b7 o8 W


5 l& s" W0 |8 G  a) \# r, Q; N% e- X
1 o- Z' o5 v: R3 w; I% p

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

( ^8 Y" y" [) f' U5 ?4 P, r8 z

二、TensorFlow例程验证


" }1 q$ ]/ Y6 K1 J

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

- E1 s) _9 ^4 {

! N; m3 }% x  Y
  1. 0.780392: 653 military unIForm+ j  {/ o, W3 V1 f0 N! X/ K+ R
  2. 0.105882: 907 Windsor tie
    . e( o7 O" F" @2 h2 p3 F
  3. 0.0156863: 458 bow tie- N( D  w+ _" ]  R$ `5 X
  4. 0.0117647: 466 bulletproof vest8 z  K" i$ W# D
  5. 0.00784314: 835 suit
复制代码

/ k( D' b0 O' F8 \: h

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

4 U/ C. z" i' V! i

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


4 R; x& X3 L/ N, ~& k8 D! L% P
# E# z7 O1 v: |( w


9 g! V( j6 a5 ^


% L. l  O) c# Y

  1. 0.352941: 274 dingo- w6 h7 E- T2 E; U) D
  2. 0.254902: 265 Cardigan! Y$ I( Y4 p: X( a+ B, B+ S9 b
  3. 0.184314: 264 Pembroke2 G' O  H- m5 o8 ^# s8 C
  4. 0.0666667: 163 beagle4 ^: o* E! j* K) T, ?4 t
  5. 0.0156863: 354 gazelle
复制代码
- E1 d" y; P0 @5 m5 }# x4 {

( G1 B( h' P8 d  M5 G35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。1 Z3 q) }# d/ E; \7 M2 D" F% t5 J4 k
8 n& d  |5 S# @! r" X- a

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


1 k  X. j: O& M- v9 c3 F- X


7 y9 r" Y0 |$ o$ h+ b- J
  1. 0.160784: 639 maillot
    ! R5 D3 U$ u$ ?
  2. 0.137255: 436 bathtub- Q) ~7 ^% V/ s3 d" S
  3. 0.117647: 886 velvet: q8 u9 B" T! T4 m4 I9 O& F. g0 P
  4. 0.0705882: 586 hair spray; l; _/ u' L  ]5 w
  5. 0.0509804: 440 bearskin
复制代码
& X# ?$ b; _1 E6 |
- ]9 p. `( v* e* {0 f! B

+ R0 S  S- k0 M3 X1 U% }/ \7 ^/ L; v1 Q
  1. 0.972549: 644 mask
    3 W7 i$ C2 a4 C* t8 z
  2. 0.00392157: 918 comic book' M+ v7 ~, ^' {, u- l
  3. 0.00392157: 904 wig
    ! S7 Q; K  x" T2 P- Z
  4. 0.00392157: 797 ski mask" G9 X) ~- I3 o% Z: A
  5. 0.00392157: 732 plunger
    8 p8 e, N8 ^( g8 V- t4 T2 \
复制代码
: c. C+ @' D( f& |$ i9 ~. K- i

" }- g7 s; o; ^/ a% H1 o1 A


* d' l# @/ R  I% i6 ~
  1. 0.380392: 583 grocery store/ ?4 o1 s6 Y8 ^
  2. 0.321569: 957 custard apple
    : |$ @- _) D5 B# f
  3. 0.0862745: 955 banana
    : }5 s7 D8 @" T; ]0 y( v
  4. 0.0352941: 956 jackfruit
    ! v; f: _  U8 n( a
  5. 0.027451: 954 pineapple
复制代码
, v1 I8 j0 Q4 R! w; z* _  }- c
- n! s; }0 b9 t


' b9 V  t8 p' s, _8 r" E5 s
  1. 0.254902: 918 comic book5 G* Q' r6 F( g7 Y' y
  2. 0.0470588: 771 running shoe8 |9 q2 C* T6 P9 v" Y
  3. 0.0470588: 474 can opener
    * R$ z1 R$ E. L4 U9 i
  4. 0.0470588: 412 apron
    1 c% g% x/ ?. _- n" L
  5. 0.0392157: 794 shower cap
复制代码

, }' P1 ~  W- ^( G: B3 m) x
  V5 A: V. X% B. T5 K4 H2 C

2 T" y7 e( L! p. u' N" _
  1. 0.52549: 922 book jacket% D1 }' c  G. B5 J1 X, O7 a* l
  2. 0.0705882: 788 shield1 L7 T+ x; p- S2 H, K% A
  3. 0.0705882: 452 bolo tie
    : K/ V+ K8 C* K5 d$ O% n6 Y; ~
  4. 0.0588235: 627 lighter
    ' g8 K) Y  t9 x! w  u
  5. 0.0352941: 701 ** towel
复制代码
2 Z4 A/ O6 f' D9 G

- e8 {5 g5 J+ z/ z( q  P


% F0 B! C2 Z0 s* a5 f4 X
  1. 0.121569: 656 miniskirt  M9 u% y$ _3 J2 I' f
  2. 0.054902: 835 suit
    ( r" q: H3 ^7 A8 i- s/ {
  3. 0.0470588: 852 television/ L2 M6 c% t. P) m2 I* }: q7 \. D- ^
  4. 0.0470588: 440 bearskin: `  r! i& x9 J% b
  5. 0.0392157: 679 neck brace
复制代码
4 E7 r) d8 R& }) O8 R) H
& _9 q) E! B7 P! [& N9 K) r1 {) I

5 n8 F: p, E* ]' B! w; o+ T# P- Z
  1. 0.65098: 918 comic book
    ) G1 F, v$ L7 |1 S+ X& D' [1 b/ j( i
  2. 0.172549: 747 puck+ M8 P% T0 _% J" ?) y" @) J
  3. 0.0196078: 922 book jacket
    ' m% _; k: ~+ F5 }0 K' }
  4. 0.0196078: 723 ping-pong ball" B5 g2 d! @3 F: O
  5. 0.0117647: 806 soccer ball
    6 n$ `2 ]* ^6 d# G
复制代码
: M3 E5 B; n2 M9 G$ D5 M& F: \5 y
) e$ p5 U* g. M) W0 W3 t


, [$ M- R! E( M- W) @  h5 j5 }* G

  1. ' s+ {. y9 B$ Z. c0 R$ D
  2. 0.678431: 918 comic book
    4 P1 W5 Y7 G( [8 V1 a/ i# g$ M
  3. 0.0784314: 418 balloon
    * j7 k* g, k+ u) K( a) B, j
  4. 0.0470588: 880 umbrella- r0 }$ ~( ^1 U1 g
  5. 0.0470588: 722 pillow
    9 l& ]$ W# l9 h3 ?5 I4 C
  6. 0.0156863: 644 mask
复制代码

% D" I7 D8 P" E4 V. d& j' S' [
- u- z' S9 n7 e. y# b. F6 D' _

% a! Q" V- L: {" ?! F4 d
  1. 0.184314: 585 hair slide
    $ C/ L/ V4 Z" Z; c" T6 {. ~
  2. 0.156863: 794 shower cap0 q1 O. e3 E/ J5 ?* G% {
  3. 0.0941176: 797 ski mask
    4 n6 a4 M' P5 @! i/ G
  4. 0.0431373: 644 mask  S" g7 }6 u5 v* h
  5. 0.0352941: 571 gasmask
复制代码

( N, ]/ }- T* L- X9 w% s
8 X" d; q4 a' }* k8 B: w$ @

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

. r$ y9 r/ z  N( 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


! p! s* X+ J# x. X& z% X; j
6 m( M0 t. e6 }
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-9 16:21

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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