嵌入式爱好者

查看: 12472|回复: 1

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

[复制链接]

48

主题

55

帖子

306

积分

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

2 B9 C2 c( D3 z1 x) Q+ |$ I

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


1 v- j" I4 f* Y2 e% D8 G
4 |0 P. Y7 n6 Z' v* ]2 o( I

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

5 l2 A' m% ~. I( K5 ]: ^- y

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


0 u& u7 b$ A5 D  j1 K

一、 NPU的图像识别例程

4 C4 j8 u/ u# U  S# z9 |% R2 _" Y

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

# h& F' n; s5 ?! d9 d


2 A. }8 W2 o8 Z+ S3 U1 c! d+ X# N


, k$ ?3 M' a& C9 Z0 ?; G7 J
+ K, ~4 e. J. j; |) X

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


2 ^/ S/ `3 _" t" d5 X7 [


2 l. @, V+ @5 c' T6 ^; g3 z& ~

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

# `4 C9 O; _, D; w( A
2 b1 g+ t  C) ?% l2 B& |

& A2 M7 Y( v6 T* v7 G  A1 g& o
  1. libm-2.30.so' z' _# |, M  ?: G# U
  2. libneuralnetworks.so.1.1.9
    2 X- h2 c  w9 S3 l
  3. libnnrt.so.1.1.9
    7 e+ o6 w6 S0 ]  c. C) A7 i
  4. libArchModelSw.so
    / ~) n0 P/ R* e- K+ Q1 x
  5. libGAL.so
    4 V/ {" L# \6 _# l
  6. libNNArchPerf.so
    2 H, f+ [' ?. I* b# s3 V: Z
  7. libOpenVX.so.1.3.0
    , p& x; P% P  W2 H( p9 t  I1 q
  8. libovxlib.so.1.1.0
    ( S9 Q+ U5 A6 M3 E$ ?/ W
  9. libVSC.so
复制代码

3 ]+ E! q  N# ~/ n! |8 @: ~6 D0 H9 {% G4 B6 `" R

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

- `7 |0 \+ l1 p% K8 c2 r9 Z2 H! d

. C# C: D! h) [/ H. U' f7 v

' V% Z3 k) ~& I) c0 H

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

; o3 W7 @2 X5 g2 \

二、TensorFlow例程验证

; o: a; Q: w- w+ _' E6 y' O- ^

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

- i" X7 A- q# c; n. n2 O# D

! n' a; `# m+ k# s  G" i1 i* R, g
  1. 0.780392: 653 military unIForm
    + y( P" Q2 q* L$ u8 D! m$ j1 q3 l
  2. 0.105882: 907 Windsor tie
    3 |7 {& \6 x; y" x
  3. 0.0156863: 458 bow tie9 Q# h1 q8 `7 n# `% f. W
  4. 0.0117647: 466 bulletproof vest4 @, C: v& J( W+ G$ V( z/ x
  5. 0.00784314: 835 suit
复制代码

/ ^1 W' b$ _! p9 E- R5 Z

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


. k$ _* n/ h: L4 m

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


; Y* F% {* D: f1 U. V! j- H! s9 ^' u+ a: Q( I6 c; a


; L- J/ l: n  B. q( C( s* K


7 j& m9 J! d& l

  1. 0.352941: 274 dingo8 P9 J; P( |  t* P' }( s3 X
  2. 0.254902: 265 Cardigan2 {7 |. S1 ~8 }7 ?7 V  B* G1 g: V
  3. 0.184314: 264 Pembroke) I7 x3 A5 V: u/ T( ^$ l$ y
  4. 0.0666667: 163 beagle
    7 I7 U- R" u/ K$ W# Z9 i
  5. 0.0156863: 354 gazelle
复制代码
+ C2 i# e% u1 G- A* j

0 a( h: X9 Q9 X7 d35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。, ?& N7 Z* |' a) v6 w/ u" }

, d4 {' ?8 T& F- @

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


% H* y) f- a. R" N" c


& [$ v- j9 Q- L* `' v) v' W
  1. 0.160784: 639 maillot
    4 z2 j5 q. N: a
  2. 0.137255: 436 bathtub0 T5 I/ l: g" f' Y6 R
  3. 0.117647: 886 velvet, n. P, c3 g! G; y7 R) J
  4. 0.0705882: 586 hair spray
    7 n8 [  Y1 H2 v0 L9 J3 v' o
  5. 0.0509804: 440 bearskin
复制代码

+ _4 T$ B: J0 j0 |+ @* R
. G/ V  n/ `5 c6 G8 F

0 M+ b/ b: H6 K3 n
  1. 0.972549: 644 mask
    2 {0 _# w3 L3 G3 n$ S
  2. 0.00392157: 918 comic book9 |& _+ [  I5 _5 n+ A
  3. 0.00392157: 904 wig
    % Q; z+ Y7 ?* I7 w) W6 |
  4. 0.00392157: 797 ski mask
    6 |. V$ O  u3 n/ L- F
  5. 0.00392157: 732 plunger: T6 f( [; r% V. s% o
复制代码

9 r* p# Y9 x) ~: ]- v& ?$ {( n
* g, B- ?  F: t$ ~+ |

1 R1 J% Z! u$ R$ q' a) F7 Y
  1. 0.380392: 583 grocery store
    3 ]5 {& a& l# K7 x; o
  2. 0.321569: 957 custard apple
    ; P- L1 J: x% R+ f
  3. 0.0862745: 955 banana* z( q2 \. u$ [- n. ?& k+ s
  4. 0.0352941: 956 jackfruit5 M7 q9 Z+ p: C8 V0 i
  5. 0.027451: 954 pineapple
复制代码
" `0 y/ ~& L6 {% m6 `
# W0 ]# L! J7 Y, X


- U0 _; j) m( a" \$ l: V( V( ^, |
  1. 0.254902: 918 comic book6 F6 K  {( [$ X& b6 X
  2. 0.0470588: 771 running shoe
    4 H2 Z( }/ x+ s, c3 q8 v
  3. 0.0470588: 474 can opener6 a' L' M3 w1 R# Y! z
  4. 0.0470588: 412 apron+ j* g/ f! ]: G1 A7 p
  5. 0.0392157: 794 shower cap
复制代码
9 J( q7 U/ U) y/ L# ^; |

# c' N: u. W) X% \


1 q% p- N- F  l' }5 T) {  _
  1. 0.52549: 922 book jacket: M% B9 b, F2 L: X% ^6 e; u+ M" w5 \
  2. 0.0705882: 788 shield
    / |+ x6 r" @2 K9 z$ P2 j6 t
  3. 0.0705882: 452 bolo tie
    ! g  K# M. D1 `- r
  4. 0.0588235: 627 lighter
    0 z8 g3 F8 H6 v1 `
  5. 0.0352941: 701 ** towel
复制代码

) \1 L, X& N! I+ C. K, L2 h+ w8 @' z" G; {* Q. O

+ |1 N* z; r% X2 ?
  1. 0.121569: 656 miniskirt- ^6 C" g* f% v& k. u$ Q2 F
  2. 0.054902: 835 suit; O1 ?3 _; q# v* c
  3. 0.0470588: 852 television6 Y; Y# K6 f8 T
  4. 0.0470588: 440 bearskin
    ) o2 E; \# L5 ^! @: d" n
  5. 0.0392157: 679 neck brace
复制代码
' b$ C2 M" O% u

+ s( I0 H9 Y. Q( |7 i( S: w# ?


1 B1 i, i) ]$ W( Y4 x
  1. 0.65098: 918 comic book
    9 M( h0 j- V1 n) v. H
  2. 0.172549: 747 puck
    1 ], J7 z& d7 |9 k
  3. 0.0196078: 922 book jacket
    ; X& a7 M8 \( P& g" z0 E8 |' S
  4. 0.0196078: 723 ping-pong ball
      X8 q! R0 V9 U% H" J
  5. 0.0117647: 806 soccer ball
    ' g  B  m% V5 {0 P, H. i
复制代码

  \2 w( i  Q& f  f. L2 W" I5 k7 t! {" n% g2 d" e

) P6 J) F; ^) b+ l9 _  f: p3 ~
  1. $ Z, A; G+ ^' j' D( F; w7 ^; W- R
  2. 0.678431: 918 comic book6 b: s2 I' [5 _" l
  3. 0.0784314: 418 balloon1 K; S5 I  B; K' a2 v) U
  4. 0.0470588: 880 umbrella0 r: L, n  c) m% \
  5. 0.0470588: 722 pillow
    7 z. W9 E" G  Y8 O
  6. 0.0156863: 644 mask
复制代码
' ]9 ~8 @) O4 P# ]; A8 z
& P1 y8 X) O4 h3 a3 U


0 }" i; ^+ T, {7 ]9 m1 S
  1. 0.184314: 585 hair slide  U! v$ e& r: D4 a! O6 B
  2. 0.156863: 794 shower cap
    4 [1 c" Y, Q# d; `* F0 x' p
  3. 0.0941176: 797 ski mask
    , o& }0 c  x, h! w
  4. 0.0431373: 644 mask
    / t+ R% N4 A2 L- V/ S7 M4 \
  5. 0.0352941: 571 gasmask
复制代码
/ A( i% U: U. c7 P% v0 |

5 c/ m) F' @2 i/ \  ]

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


' L5 U. j4 Z3 A

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

2 r9 Z9 s( a+ p7 {: S5 B

( ~5 \( B. s# G
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-24 19:01

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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