查看: 12539|回复: 1

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

48

主题

6

回帖

282

积分

飞凌-marketing 发表于 2022-1-27 10:59:04 | 显示全部楼层 |阅读模式


1 ?; J  Y2 N; O1 B; {( p0 v* H

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

; w. V' ]+ ^+ j
4 S$ x# g3 N0 ^+ r$ y9 j9 K

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


+ b/ ~+ |/ R( i, D7 u: C7 B

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

" K. D1 u6 U/ w/ H8 a5 w

一、 NPU的图像识别例程

( r9 P# F/ o6 W) e

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

; X8 @, E- s* ]' Y/ ?* r: W5 A1 ?


# E9 }8 A& W! @


; c, }+ H, Z/ y3 A3 l. E
* n" }6 s/ n8 F) b4 D$ x

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

( Q  M8 V% w* q& x$ c% u


$ r! \# C4 _1 s( S  N: A( S/ i

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


/ I. ^0 H" i' p# w5 I
; P! R$ t  J% g* ?: |

5 s& N- s, y  {6 f6 H0 W8 f+ y
  1. libm-2.30.so
    ( n& c" B8 N  G3 {/ ?& ^
  2. libneuralnetworks.so.1.1.9
    : n3 z  H. Q4 w1 \
  3. libnnrt.so.1.1.9& U0 E& o3 I  L( A
  4. libArchModelSw.so
    6 D+ }; L+ e9 V' b1 |( M4 |
  5. libGAL.so" }) B6 R$ e# j8 I# x
  6. libNNArchPerf.so
    - U% G! H6 j  u1 ]/ C' g
  7. libOpenVX.so.1.3.0( [+ V, }  F. K% v+ |+ Z+ c
  8. libovxlib.so.1.1.0* g1 W, J  T/ T& L
  9. libVSC.so
复制代码

( T2 H0 v' t# c2 l1 y* {6 Q$ \/ z

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

, m% y0 Q( D# e$ V( J4 \% q1 l


0 A5 w* v- i5 u& G
: C% ]" |' E9 X

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

0 p1 p5 y* L3 |8 @/ u

二、TensorFlow例程验证

0 T5 r/ y* P# i8 \0 s

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

. U. ?7 p6 d# r1 M$ T" z

$ w3 X, i. |" H
  1. 0.780392: 653 military unIForm, D# O$ t. k$ T' Q, E
  2. 0.105882: 907 Windsor tie
    ( B, ?7 {# Y! U. N. `: h
  3. 0.0156863: 458 bow tie
      J9 V" B5 }) O0 z! t
  4. 0.0117647: 466 bulletproof vest
    * e5 v8 }2 A# W1 n
  5. 0.00784314: 835 suit
复制代码

% f' r8 y: [2 Z, d! F& i

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

5 q, R% c! D% n# W% d& b) A! b4 |0 p

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

( b1 X5 s3 D$ V& Y
. M5 {! n( L* t

! n. o/ |) ]8 ~% P+ \" y+ [


  d$ l( ]3 h* `* W* S, h

  1. 0.352941: 274 dingo
    4 L, V9 I% ~; M1 B
  2. 0.254902: 265 Cardigan
    7 B. z7 f' ]. m" D2 N
  3. 0.184314: 264 Pembroke: J# n1 P/ Y6 W9 \) Q$ C6 [
  4. 0.0666667: 163 beagle
    + e  [5 y% c0 W; v6 x
  5. 0.0156863: 354 gazelle
复制代码

  X  D8 N5 w& \# c; R$ e/ {5 A! ?: W) J
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。, C/ M, a6 ]8 r4 {; L6 O8 S! \
4 @! b8 A& X4 Z/ [( Y/ E

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


) D- ]8 ^4 r- T. @; O2 C( a" V9 r

$ H# H, K# b) N' _- c5 w5 w
  1. 0.160784: 639 maillot
    / ?4 e: t% p, ?' n6 c8 P1 {
  2. 0.137255: 436 bathtub% c1 {# i# J' `, ^* x8 q; l9 k) h
  3. 0.117647: 886 velvet9 k/ i' p2 r% L) f" T' s; _
  4. 0.0705882: 586 hair spray
    ) M# t2 j, b4 A; g
  5. 0.0509804: 440 bearskin
复制代码

2 k% w2 S3 W/ P9 Y8 R  a1 F3 b/ V! m

8 p( R$ B. ?/ c
  1. 0.972549: 644 mask
    , d" t: G8 {5 ?9 w" n3 _: g
  2. 0.00392157: 918 comic book% @6 Y4 z( e/ H3 O
  3. 0.00392157: 904 wig
    9 A$ h: R2 ]) [
  4. 0.00392157: 797 ski mask% ^( s$ X- M8 w& J6 M) ?
  5. 0.00392157: 732 plunger
    3 n/ U7 F- j8 |8 k
复制代码
& R( C: t5 c& \& S3 A
- E, {$ z5 g3 _+ f3 M9 ?% o% ^

# n6 P  n+ V5 ^
  1. 0.380392: 583 grocery store/ |  i4 a( A2 F6 I: W0 u7 T9 W
  2. 0.321569: 957 custard apple- D9 s0 v$ Y( l$ Y
  3. 0.0862745: 955 banana
    2 U- k! Q  S" o+ N
  4. 0.0352941: 956 jackfruit1 m& l- d' ^. u$ p! g: e
  5. 0.027451: 954 pineapple
复制代码
7 R' ^9 v, w' V2 s

* Z) N1 ?( v  w1 U3 k9 K

* p' W( T8 b: r7 o/ N7 j4 C
  1. 0.254902: 918 comic book
    3 ~% h# c' u6 k) q7 Q$ s6 r# W
  2. 0.0470588: 771 running shoe+ c- q, l4 b  j' g
  3. 0.0470588: 474 can opener# L7 s& x: j0 ~9 H
  4. 0.0470588: 412 apron
    - O8 K% G4 f8 F9 G
  5. 0.0392157: 794 shower cap
复制代码
$ M3 L3 P- V/ }8 i# g+ O& V; e
' h% }2 h9 T% ?  p% `  R


: [2 @8 ]# M+ m+ Z: S/ \& N
  1. 0.52549: 922 book jacket1 S0 ~" {% s& R7 F# g& v0 N# u1 M
  2. 0.0705882: 788 shield3 Q# d3 y% T+ n
  3. 0.0705882: 452 bolo tie
    5 ^! K. G5 N% {5 J' M. K4 g
  4. 0.0588235: 627 lighter
    1 `' M0 ?$ N4 X& c+ i# l  S
  5. 0.0352941: 701 ** towel
复制代码

1 l: \4 V; e+ k( I! I: A9 C! u" O
( R1 O1 V4 M4 D8 @. }


2 M$ Z- A+ X6 n6 z
  1. 0.121569: 656 miniskirt
    & l3 x9 d* P+ n  b
  2. 0.054902: 835 suit
    $ ^5 i9 P2 I7 S) s  o" }: S  ]
  3. 0.0470588: 852 television- @7 V) {4 m2 s9 W# R# V- O! M8 r5 V
  4. 0.0470588: 440 bearskin5 m2 t* \& e/ h) d& p8 T
  5. 0.0392157: 679 neck brace
复制代码

. ^) o% R: X$ t; K9 U' r5 H' Y3 e1 o: j

5 X% K+ m, c1 ~7 N
  1. 0.65098: 918 comic book
    % d% z3 q0 U0 {0 G
  2. 0.172549: 747 puck
    - U' ?) ^3 J3 N! h, j7 g
  3. 0.0196078: 922 book jacket
    , y$ G8 [# j0 {* r0 f
  4. 0.0196078: 723 ping-pong ball
    3 B+ q7 y" T3 e  x
  5. 0.0117647: 806 soccer ball
    8 `% o) m! N2 F. \  p
复制代码

3 J, v# D3 o  p# ^/ s0 e+ r4 ^) G
; k: n: j/ w; h! ~  z- K: g7 H$ r

. W0 t0 [7 ~  n5 t" X( g

  1. + |- A4 J4 {- A' y' o+ r
  2. 0.678431: 918 comic book, p+ d9 U+ H$ ^, U/ s+ U; E
  3. 0.0784314: 418 balloon
    5 T' h' d$ y, v% m$ ~. N
  4. 0.0470588: 880 umbrella  A$ Z6 D. \$ U  y
  5. 0.0470588: 722 pillow
    ; n. k) L! P4 A$ y, R
  6. 0.0156863: 644 mask
复制代码
8 }: ^/ ]( C- S8 T  K+ E+ \
( D* p% S  Z5 q4 |


5 ]% i4 W" U$ }& a0 D
  1. 0.184314: 585 hair slide# y8 ~1 O; ^9 N& A* z
  2. 0.156863: 794 shower cap
    - ~9 ]; s" S& D8 u: |7 p
  3. 0.0941176: 797 ski mask
    ' Q2 ]9 R& ~2 U) y
  4. 0.0431373: 644 mask7 ]+ L/ O! G$ M- [
  5. 0.0352941: 571 gasmask
复制代码

- y# m' U0 Z) Y5 x0 U
9 d* \; S3 z1 y) v4 k

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

% }: G: i: u( v7 Q9 v

据官方介绍,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) w8 y5 w! c% A
! E7 l# g' M% y- j% y# P
回复

使用道具 举报

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

本版积分规则