嵌入式爱好者

查看: 10891|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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

+ F+ V8 t) Y9 L; H

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

! R6 C0 Z: m- Q0 M" {

' d. P7 X6 F1 }6 g( `8 P9 H; @: E

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

; g! ?6 Y" j; Q; G3 w* _" j2 R: X

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

) R$ ^6 R' w+ ?

一、 NPU的图像识别例程


+ T$ s" q7 Q/ N

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


8 n& A# Z6 l! P

4 U2 s' B* U  k- U: |2 c

  m) x# X+ a" M6 P

" }) r0 t* b4 r8 E6 @2 q3 ~

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


. R2 k2 ~7 i  e% F2 k

5 y7 E3 T0 u3 _. U2 V) `

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

- i! W" D# ]% V: h% P$ D

; F  s& a/ G0 O+ x2 P  Q


7 l6 Q# V: b+ g/ d5 T. R% y
  1. libm-2.30.so5 _% w4 A  S: \9 X; A8 o2 _2 f
  2. libneuralnetworks.so.1.1.9
      W( w9 t0 W* H
  3. libnnrt.so.1.1.9
    + V, a! x1 h3 H8 q7 ~, a
  4. libArchModelSw.so/ O  L$ V5 f: Z# H% z& `0 u6 D4 ]0 a
  5. libGAL.so
    " D' e" l5 y1 k1 _* l/ P
  6. libNNArchPerf.so
    , c/ o2 b7 P* [$ I2 @5 m
  7. libOpenVX.so.1.3.0
    4 K; U+ T  j& J* S: I
  8. libovxlib.so.1.1.0
    , M& J! w9 @- X7 E' t
  9. libVSC.so
复制代码
- V+ a1 p; {7 y: G7 Z; U* V) t9 S- G

3 _3 I. m" a. j5 M  V1 J

其中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 \4 N1 ?2 }& u5 P. H8 ^  y9 H

1 F3 }  {9 j5 Q- F8 g
0 Z' |, }: z* @

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


& z- o6 I. S' ~

二、TensorFlow例程验证


% N' d9 ^. g+ C8 t4 L+ |

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


7 ~3 N. o! ^: o


" @/ I: ~4 a$ k2 B8 a4 X( r
  1. 0.780392: 653 military unIForm" z6 Y) s8 q" r1 b( d! r
  2. 0.105882: 907 Windsor tie$ `# Q# |( W! S3 \: o  i
  3. 0.0156863: 458 bow tie$ q- _% [; j* w
  4. 0.0117647: 466 bulletproof vest; k* \. P( H5 B
  5. 0.00784314: 835 suit
复制代码

1 S. J( S3 C! o1 p3 I( j

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

7 b, A+ x' ^) M

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


' Y$ J) @7 q& L5 }% a  d4 R/ [: s$ N) ~4 g7 R9 t2 S) z


8 k4 i" ~5 o; A% `) O0 k; H


6 A- N  r. y6 V* y( Q7 R! K# h, v  b

  1. 0.352941: 274 dingo
    ) H# o  a( @. ]$ H
  2. 0.254902: 265 Cardigan6 W9 B, h/ \1 g5 j" v- r# [1 d9 J
  3. 0.184314: 264 Pembroke
    6 m/ P0 G) B' p  b1 t
  4. 0.0666667: 163 beagle
    2 T3 H2 y' Y4 k& a
  5. 0.0156863: 354 gazelle
复制代码
5 Q4 ]- i. K& j# n/ q+ F+ w6 k
6 l5 n/ A' v! E& C% a2 Y% e
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
1 t7 y& o% w" ~* R$ E( H
% R! I9 D/ Z0 v, O

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

7 P1 z) Z2 t! n, S

) _! I% L% B- A1 h- e/ J, U2 Q. y
  1. 0.160784: 639 maillot
    , s4 o1 \9 ^) W* _" i5 P& Y
  2. 0.137255: 436 bathtub6 w! o* G& R' @0 n( B1 Y
  3. 0.117647: 886 velvet
    6 C8 r- N% U4 v
  4. 0.0705882: 586 hair spray  H% m: f, i6 F: m+ l
  5. 0.0509804: 440 bearskin
复制代码
7 S7 R' j! m  H5 L( g, A* A! a& j7 D

  U6 X- h) k* _" m" r* A% I

. Q6 \# {) d9 h( K3 P% N, X+ P5 V
  1. 0.972549: 644 mask
    1 E* }- P1 L  Z0 s7 U2 }( ~% b) P( V
  2. 0.00392157: 918 comic book: i; I3 G+ X; A+ z9 G
  3. 0.00392157: 904 wig9 }: w7 V! d. S1 V% V4 B
  4. 0.00392157: 797 ski mask
    * b+ j4 V0 u+ G5 w* W& x2 M5 C, T
  5. 0.00392157: 732 plunger( \( ]( c1 E( h) V5 G
复制代码

( o9 t' k) r8 Z
5 _: N1 I# o+ p9 Z2 O9 r


' ]7 ?0 j  T& a' \& A& X8 F/ w( y
  1. 0.380392: 583 grocery store
    - Z& E! ]% Z% s" m# @' q$ P5 c
  2. 0.321569: 957 custard apple
    8 O# v: ?, i4 }8 \6 L
  3. 0.0862745: 955 banana+ c+ c$ e4 q; q# W8 R1 N3 ]
  4. 0.0352941: 956 jackfruit. u# }: b1 m$ ^, U6 g0 L6 _* J
  5. 0.027451: 954 pineapple
复制代码
0 K& g. F7 O+ Z: j4 L8 L

) d; D1 g, s8 a/ x

8 g5 r* q* B$ q8 z3 P5 J/ o4 d6 S
  1. 0.254902: 918 comic book
    4 v; l  M- d0 T" U
  2. 0.0470588: 771 running shoe
      Q- I' W& w8 d5 r) v) a! y; O
  3. 0.0470588: 474 can opener0 {  z1 t$ c3 `- L
  4. 0.0470588: 412 apron
    * j% |  w  \. x5 z
  5. 0.0392157: 794 shower cap
复制代码
: B: e. _7 Y* e3 T: {$ V- Y
  }" S4 v0 k6 R7 c4 `


' ^* G' R0 ]* C: f8 @3 x
  1. 0.52549: 922 book jacket
    " n/ k- D# G' q# j+ l
  2. 0.0705882: 788 shield/ }1 p2 s0 d# j% K' H
  3. 0.0705882: 452 bolo tie' W- E" T1 K$ [0 _' V; z
  4. 0.0588235: 627 lighter
    $ A* ?0 s6 Z3 Z9 {, a! D6 F6 C8 [  n
  5. 0.0352941: 701 ** towel
复制代码

9 w( B0 i# ^5 l' ^  A' S% V8 i" I

( y7 g0 d; ~, v, P) d
  1. 0.121569: 656 miniskirt3 f/ U. L+ L% q  b
  2. 0.054902: 835 suit
    ' K( B7 t' k& z6 M* i* m! o. x
  3. 0.0470588: 852 television
    9 Y/ p1 {6 K; K. J  _# L
  4. 0.0470588: 440 bearskin
    & m$ d( _# w: Y+ h
  5. 0.0392157: 679 neck brace
复制代码
% N8 [8 f% m- [, L2 n

" a0 K$ E" c0 f; n/ c

& m* K6 L  X  a: l- u* B& s$ U
  1. 0.65098: 918 comic book
    ( t6 _1 r! R7 ^" v0 q7 @" a# v1 T* \
  2. 0.172549: 747 puck- C# [- Y2 U) T: a" U: @
  3. 0.0196078: 922 book jacket
    9 t! ?0 Q. E/ ~! M4 Y% m
  4. 0.0196078: 723 ping-pong ball# G5 l2 R# y& c" t5 n* v
  5. 0.0117647: 806 soccer ball
      ]! s" a5 E* H4 e: ^
复制代码
( H4 J/ H. s8 |8 j* D
6 S- j; t+ H3 z: ~# ~

  A/ H! x- j. g" W; D$ k1 M8 k
  1. ! N" d0 f% C2 X% f- L! L
  2. 0.678431: 918 comic book
    * Q4 F& x2 D( S2 k* y* ?1 @" n! l
  3. 0.0784314: 418 balloon
    8 Q) d9 F9 X4 _/ W0 ?7 z$ `
  4. 0.0470588: 880 umbrella
    : b' |) M$ U- ~7 l
  5. 0.0470588: 722 pillow
    ! e% m) g8 G! f( P" P$ [$ l) U* }
  6. 0.0156863: 644 mask
复制代码
0 `# m2 A" p: h; m

2 e* N" Z/ r  S% w. Y

. \- Y! Y3 |  C; ^8 R. Y
  1. 0.184314: 585 hair slide8 P+ f/ L. \$ n8 i3 V1 m
  2. 0.156863: 794 shower cap
    . y+ V0 U9 a- C$ g) q: H- M8 E
  3. 0.0941176: 797 ski mask/ |9 [2 v# A. v, v: C
  4. 0.0431373: 644 mask
    : ^) y: Y6 a0 a! e
  5. 0.0352941: 571 gasmask
复制代码

! N4 w$ w& t2 c1 w! j5 _7 ~2 i9 y0 g8 \7 f  y% S. e

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


4 \% g& h5 q6 p/ d( 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

  k1 d0 z, t; O$ l0 f$ N

: t0 Q7 a* Q' g- A' N+ x* ]# t) q
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 13:53

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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