嵌入式爱好者

查看: 11454|回复: 1

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

[复制链接]

46

主题

53

帖子

297

积分

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

7 J! t  p7 S0 l; m7 P% h

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


7 B/ N( |7 K) q0 y
2 ?1 A. H1 E! [3 v4 Z4 v7 e

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

2 A5 H* w1 R: S1 o7 o* i

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


0 _7 n' H9 z$ e7 b+ l" V6 U

一、 NPU的图像识别例程

, f/ b7 g! ]% W7 ]! F* v3 S

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

. _- u0 [+ _% ]


9 D4 T/ N; X( \$ v, l% x0 {: ^4 w


: X% a3 Z1 i& t1 }9 F+ d" `
# V; T; R4 U) _( b

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


7 ]$ B7 ?3 I+ V& A. F. }

( N1 I" q; o& H4 a) V' U

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

$ l- H2 T* E: t1 A* v/ A

% K4 F% r. `5 R' a% `5 x0 w# j


2 ~5 u9 ~) a4 m4 L& ]0 Q- |- ^
  1. libm-2.30.so
      ^+ f+ Q5 E# d  B# y/ E
  2. libneuralnetworks.so.1.1.9" A0 V6 g; [1 Y. s4 R( R
  3. libnnrt.so.1.1.9
    " M* z# M/ Q  d9 ~2 H/ a# v
  4. libArchModelSw.so
      W" T8 N: [  F
  5. libGAL.so% e( `" c$ t" }% ]1 ?
  6. libNNArchPerf.so' Z  m# z! E5 M  y
  7. libOpenVX.so.1.3.0
    5 n/ R  ]6 p" t) v0 `( E
  8. libovxlib.so.1.1.0
    0 A4 @$ v# D& x8 ~/ C& l
  9. libVSC.so
复制代码
, D# R5 _; y$ R$ c! L+ {

' w5 Z$ i( E5 \+ M

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


! L1 X+ H$ c$ F# q) {. ~" C  h

2 z) {' E- L9 k5 d; `  p8 ^6 v
, h3 m" r+ i! F  d& M

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

2 t3 W7 M$ ^: p8 Z9 v

二、TensorFlow例程验证


0 x: k$ V. _6 W/ i1 `0 _

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

8 `' Q4 b* z2 E2 u


5 j/ B# H# ^+ [- M; Z+ s* ^0 t5 p& ]
  1. 0.780392: 653 military unIForm
    4 x6 ^5 @8 C) J1 r6 b2 [
  2. 0.105882: 907 Windsor tie
    & H. V+ ]! Z* M3 n! ~
  3. 0.0156863: 458 bow tie: ]* v2 n. j1 |, c& J; v
  4. 0.0117647: 466 bulletproof vest: e& x) L- I# N1 [2 g1 \5 X
  5. 0.00784314: 835 suit
复制代码

! k' `+ Q6 a3 S3 ^6 p0 m9 F

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


! x$ |1 }9 V( @, l0 x

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

& X2 L6 B' i6 A( F( l5 N' H
3 o7 s/ S, p/ f4 F- Q8 W9 c9 n

4 s3 K. n; k( F' a8 `3 f


" K8 k& D, E: p0 z% Y1 c

  1. 0.352941: 274 dingo
    0 I+ S) l, }$ `
  2. 0.254902: 265 Cardigan
    . k) R: S: {2 d. n+ P( I
  3. 0.184314: 264 Pembroke0 e+ k+ I2 U- U* B) n- T
  4. 0.0666667: 163 beagle
    4 ?, y7 W. y/ ~7 l0 W% M, v; C# {) N
  5. 0.0156863: 354 gazelle
复制代码
% l& v. |: [% H; H& b7 a! \' {
4 z- d9 y. {+ J; v- ^
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。! X' g' i5 ~  e9 ^" J1 ]- i( @: i9 w

9 D9 ]; |3 K% D2 g' a7 a3 ^1 p

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


' |8 v8 e) k# ~! Z2 y. b


% g" C: ]: w% J* p% g/ g* {1 z
  1. 0.160784: 639 maillot( j, j) d! s* _
  2. 0.137255: 436 bathtub8 X. [9 V7 C) Y- E
  3. 0.117647: 886 velvet1 P4 G$ @: w* u% V3 V; k8 _
  4. 0.0705882: 586 hair spray
    0 v! v7 o0 O& K0 d) u
  5. 0.0509804: 440 bearskin
复制代码

) u  B& n& b4 g8 W" @2 l' H: U0 h0 d


" S; |$ w, S- P; c1 i  _; A
  1. 0.972549: 644 mask
    / e1 @& ]' Z$ ?" b
  2. 0.00392157: 918 comic book9 _% ^) m2 X, }, M9 Q8 l
  3. 0.00392157: 904 wig
    ) c" B) }1 x  Q6 u7 x
  4. 0.00392157: 797 ski mask3 T% @9 S/ ?& i( }% g+ V8 W
  5. 0.00392157: 732 plunger
    3 y" ~" h, C+ s) ~
复制代码
( N, O4 i# |. J- i  t* Z& |0 y
- K# _) Y# m7 |  U( [

8 S1 a' F* e1 x! o* s1 b( i: k1 g
  1. 0.380392: 583 grocery store
    ' D, f6 K; f; U. q
  2. 0.321569: 957 custard apple6 k' q2 v- d, v2 I7 {" P( |
  3. 0.0862745: 955 banana
    2 s/ i8 q6 q% l$ w$ w1 G
  4. 0.0352941: 956 jackfruit: n( l+ f( \6 O6 _5 X
  5. 0.027451: 954 pineapple
复制代码

+ {& z7 v& d: k/ X0 ]7 ]) R' V9 ]$ s0 X6 |2 V0 G- F" n


2 K/ E. j/ Z- p% v5 N) U5 L' |
  1. 0.254902: 918 comic book" t! t# g" m+ L9 B6 y2 f( A
  2. 0.0470588: 771 running shoe+ }8 z  `" B/ @& Y9 c" _9 N- K
  3. 0.0470588: 474 can opener7 K7 ~# R, `3 V2 V+ J9 }1 G( o
  4. 0.0470588: 412 apron
    7 b0 l6 n* B5 x4 z7 U
  5. 0.0392157: 794 shower cap
复制代码
8 m- v3 d* _0 z+ K+ d

3 _$ O1 e- k5 y# f


, j! }3 R3 k& ^$ t4 |8 F
  1. 0.52549: 922 book jacket" V; @0 k( T5 K  b' z
  2. 0.0705882: 788 shield6 U) m5 H1 P' V+ a9 Y
  3. 0.0705882: 452 bolo tie3 `) U! v- X. f$ Z1 n. l
  4. 0.0588235: 627 lighter
    . |" a2 s: O) X! x
  5. 0.0352941: 701 ** towel
复制代码

- z. v8 D& H0 S' I
9 _; a( A( G, p8 [- t  c+ @' P0 n

' ?; C( S( D6 d, ~1 N
  1. 0.121569: 656 miniskirt
    ) o7 B% K* G; c& P
  2. 0.054902: 835 suit
    # }8 }  K2 `9 ?
  3. 0.0470588: 852 television
    1 V& [/ p, c" T' A, d
  4. 0.0470588: 440 bearskin7 B& s! y2 E9 G4 L
  5. 0.0392157: 679 neck brace
复制代码
  ^. z* _! W) ^. t

) r+ T) t; Y8 `2 J2 ~" v* X


1 j; R3 N5 u: T' |4 _
  1. 0.65098: 918 comic book
    , T! V' D# U+ T
  2. 0.172549: 747 puck
    5 M' ~3 A. b4 B$ t+ V
  3. 0.0196078: 922 book jacket
    4 \+ y4 V, h6 d
  4. 0.0196078: 723 ping-pong ball
    " a. T8 _. i  S( }
  5. 0.0117647: 806 soccer ball
    " M: t3 G' a4 H8 R9 T4 n, i, f
复制代码
: Z3 N/ D( P5 }
9 M- R, b0 y8 L


. g/ }7 ?" e8 [/ k

  1. . L+ O  j% y7 K7 v3 Q0 p$ H3 B* V
  2. 0.678431: 918 comic book! r/ t" ~$ J3 ~; \# f" F( {; K
  3. 0.0784314: 418 balloon$ r) B  D0 `2 o; g$ y2 K
  4. 0.0470588: 880 umbrella
    / S  Q7 {5 |6 t# d7 V& w/ |
  5. 0.0470588: 722 pillow; u0 f, J( X# d5 ~9 _. Q0 `
  6. 0.0156863: 644 mask
复制代码

4 [3 l9 d. I; e* s1 N1 m- r
' v$ E4 m. Q9 f8 A9 ]5 w

/ i3 k# F7 }5 @- C; g
  1. 0.184314: 585 hair slide
    6 _, ~! U( ^' W2 p' b% m- d2 D- p
  2. 0.156863: 794 shower cap8 R! E" ^: g( B+ U. O
  3. 0.0941176: 797 ski mask
    ! v- y  A. a, \9 ]
  4. 0.0431373: 644 mask
    # j0 P/ e. B) }4 w1 h) f
  5. 0.0352941: 571 gasmask
复制代码
4 H: f6 v4 y0 R* Z

% u: F: }" U3 k7 z* I7 s+ @2 Q

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

6 r: Y/ |4 \$ Y# L6 \  U

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


4 o9 C6 B* _  v+ P
; E" K  Q% Z* d8 S, M
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 12:10

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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