嵌入式爱好者

查看: 12066|回复: 1

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

[复制链接]

48

主题

55

帖子

305

积分

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


, c0 L9 P9 ^/ g! o/ A# s

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


; Q. d1 n& Q& \7 c' X6 u1 ~/ u" C

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


6 o% M) {. X$ [2 v8 h8 o, p

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


) V* E* i5 g4 w0 U* H1 O9 Z; }

一、 NPU的图像识别例程

3 `/ X) Y* |* V7 S1 l9 [

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

& g: f3 A. @6 p


( ]8 m9 O; F/ W


* c" g" Q$ ^( g
- P  X5 M& l8 [' D. {

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

* i/ I/ m7 T7 u/ L! Y' _( \

7 g  `* ^/ X( q0 O

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

  R6 ]0 \! u+ q3 f4 U

- T! _3 c+ X- v7 z  e+ e! ~- L


$ }  X7 i( Z- [- V/ D, f7 d+ r
  1. libm-2.30.so8 }* u9 @' H1 I6 @7 ~
  2. libneuralnetworks.so.1.1.9
    6 q( [# Z! p5 _, n' X& u& v
  3. libnnrt.so.1.1.9
      r' ~) j( T$ c, u- i! J, l7 Z: {
  4. libArchModelSw.so" q' Q& u, S  _* |5 D/ ?/ Z
  5. libGAL.so
    9 z! n( v. @. P  j
  6. libNNArchPerf.so" Y* R1 G' y, M# v5 J
  7. libOpenVX.so.1.3.0/ N/ U$ j% c5 P7 W  i& @
  8. libovxlib.so.1.1.0
    - P( c6 ?, M: \2 p5 W/ K4 p
  9. libVSC.so
复制代码
7 q5 O/ c7 x/ ~0 ?

# M' s4 ~: ^: d: u" E

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


' k) \: \1 X& P+ G2 ]' s$ W


" j$ b* X' v* }& x( @, F9 E8 n1 }1 C0 c. W) U

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

6 A; X& R  Q2 t6 V% P% Y/ `3 E) Y0 l

二、TensorFlow例程验证

0 }0 R* z/ k' r4 X9 `3 o9 v

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

4 E0 D* a, ^3 U" Y' {; o

6 b" T: Q7 l4 T+ A
  1. 0.780392: 653 military unIForm
    2 K* W  j' {8 N- w
  2. 0.105882: 907 Windsor tie1 m. q! Z2 M' |, o( d
  3. 0.0156863: 458 bow tie
    . n& p- ~! W, A1 ?- K% @, ?
  4. 0.0117647: 466 bulletproof vest4 n  x1 w4 ]9 D9 g
  5. 0.00784314: 835 suit
复制代码

3 @+ c/ [4 b- w& q  }7 `

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

/ t" [  z; @& y/ c  K

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

  j- }6 S# A& L! f8 s6 u

- A. l8 @; C$ M


" p4 ~0 ~1 c* g  Z6 R! {5 U4 ^

( |1 w1 W) D3 l5 B0 L; Z5 j% l; j

  1. 0.352941: 274 dingo3 i0 b% f* K3 c3 E, t% @
  2. 0.254902: 265 Cardigan3 }4 q0 V( Q0 v+ B5 K/ G
  3. 0.184314: 264 Pembroke6 Z! g2 n& K% f! x) w6 T0 u7 D
  4. 0.0666667: 163 beagle* C- y, q3 l3 P* e" `- t" P
  5. 0.0156863: 354 gazelle
复制代码

# T2 t- e' b" z/ s5 A+ E- ?% F/ T  F+ N, @. C. X
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。! S$ W, [. ^3 e
* p: U7 W* ~5 c! A/ G# j3 H

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

2 i8 I) a( \8 H2 V; M- s5 G1 G


3 s3 {, u/ H. K1 D& {7 K
  1. 0.160784: 639 maillot( @( N/ {  L9 {0 e+ X
  2. 0.137255: 436 bathtub/ q5 g+ M6 K+ R: F( N' R" F% d
  3. 0.117647: 886 velvet
    + g6 R! o8 y( L  {4 u2 k& k! q
  4. 0.0705882: 586 hair spray3 V4 u' v( i( Y* x
  5. 0.0509804: 440 bearskin
复制代码

2 W) e: ]: @; @4 z4 K4 @' ?9 q0 Z3 }! A2 E0 p, P4 ?3 c8 D( B. ]2 g


, n& x: C9 N( S+ W. o  K
  1. 0.972549: 644 mask
    : x7 E. A! M1 A5 u0 \
  2. 0.00392157: 918 comic book" T5 x9 Z% H0 v- T9 H+ D2 m
  3. 0.00392157: 904 wig% n( k& ]- ]* y9 q/ M$ N" V8 W7 p
  4. 0.00392157: 797 ski mask1 R% Z8 E# B, j- \' {
  5. 0.00392157: 732 plunger
    , K. F  M( C) K) g8 t
复制代码
& A. J. H5 M- M5 J# \% j  `% W7 G5 d
" A: l9 t; N4 Y8 Y8 r2 C3 u' M

1 X7 e2 Z: L1 j
  1. 0.380392: 583 grocery store
    3 B" H# e9 v( m, }- g/ R9 T
  2. 0.321569: 957 custard apple9 C3 o, B- T4 X8 C" P# w( p
  3. 0.0862745: 955 banana$ f! o$ D9 `2 y3 i* Y4 K
  4. 0.0352941: 956 jackfruit9 c1 Z4 M- j) g+ w$ }1 L  a. B( p; z
  5. 0.027451: 954 pineapple
复制代码

& |2 A3 u# ]- a$ {' H" W: v7 t/ e& `* \2 _3 |' M% a


, W  [4 _/ Z" q. ~( {1 C2 E( a9 E
  1. 0.254902: 918 comic book
    8 b& h* {2 x( m! ^; T% g
  2. 0.0470588: 771 running shoe
    5 x1 G" v4 p- p" g, L5 q
  3. 0.0470588: 474 can opener1 f; o7 F% r* c3 R
  4. 0.0470588: 412 apron: n. r7 F( d* `
  5. 0.0392157: 794 shower cap
复制代码
0 n! w  C* _5 ?) I( o

% J% w, e, d) f; b9 ?9 i! P

0 o. T1 ~& k4 H1 U
  1. 0.52549: 922 book jacket
    5 m3 d+ x; o6 k: B
  2. 0.0705882: 788 shield
    3 p1 U( x  H  H6 n/ Y. k0 K- e
  3. 0.0705882: 452 bolo tie
    5 x/ Y. K& p3 A& n+ W
  4. 0.0588235: 627 lighter
    5 F) f/ l/ n+ D# ?- [2 H
  5. 0.0352941: 701 ** towel
复制代码

3 X1 p: A* R" O. \8 p* V9 Y
; I8 {+ |$ H( x  z7 Z5 U3 p/ E


% x6 r: R( {6 K% }, @! e, J$ E
  1. 0.121569: 656 miniskirt
    / Z4 _( i+ o5 {* C, h# B
  2. 0.054902: 835 suit: Y3 s9 s0 K( _  O
  3. 0.0470588: 852 television( _: y7 N. o* c8 y1 l/ G
  4. 0.0470588: 440 bearskin
    # ]: ?( o+ `# w. F$ z
  5. 0.0392157: 679 neck brace
复制代码

3 G9 ^' Q' v  Z* Q7 O9 {5 e- D  }- E

3 c7 x! D" ?, N1 x
  1. 0.65098: 918 comic book
    & h. s8 e) N3 O# ?! c& F9 a% J
  2. 0.172549: 747 puck3 S3 c9 v4 [) p& E9 P  x
  3. 0.0196078: 922 book jacket0 f- ?! f2 }/ T- l) s
  4. 0.0196078: 723 ping-pong ball
    % i7 T7 p4 c, ~7 z1 I/ N2 V: H
  5. 0.0117647: 806 soccer ball
    0 c* @; d& x7 w9 K* {' X$ F# V
复制代码

# g+ p4 l" F# A" a' ~
7 w3 y9 O  P1 h5 k

6 K' @; M9 x- u# }7 m5 k
  1. 2 v) G8 V! R/ D  o/ H4 h& w) F
  2. 0.678431: 918 comic book! j) l3 [2 x* D2 G. i
  3. 0.0784314: 418 balloon
    + x  |; V7 }" e; ~& L6 o
  4. 0.0470588: 880 umbrella
    ( `. L$ e1 y& E3 y4 Q
  5. 0.0470588: 722 pillow5 B$ S# E1 X3 v
  6. 0.0156863: 644 mask
复制代码
5 o2 I2 Q% @, A

7 h6 s. s8 s7 q

$ I* Y6 t! i1 P
  1. 0.184314: 585 hair slide' C& W7 h  e! }5 U
  2. 0.156863: 794 shower cap
    ( j% X+ T+ F* y( b: a* |3 J
  3. 0.0941176: 797 ski mask
    , y; y% Q* m2 F. {( D; I, _. p" ]
  4. 0.0431373: 644 mask
      f, Z+ A9 W( D; Q/ P6 V& l& M' r
  5. 0.0352941: 571 gasmask
复制代码

5 W, a" D" w! }3 Q8 C" R, l7 X; `" n) b4 ~( p" W7 E4 ^! V% T9 Z# E

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

% l* u# f/ I& }& x9 x- }' K) i3 l9 i

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


, w6 p) z# a- y7 ^! U  ~: m# W- L7 x: u& |% h/ _# z( w
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-26 08:56

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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