嵌入式爱好者

查看: 10925|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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

( T5 ~. n! l! U4 f

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


& r3 ]" {+ ]% \! m. e7 A+ |; F  X0 a+ `' x) B( ~! K9 m

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


: `9 ]9 ?4 y2 N* {' O

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

2 b3 O2 k. F2 F9 ?: i

一、 NPU的图像识别例程

3 Y# E- @8 U- z

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

4 C9 d" |# g! K# ^

/ E, G4 f( K  o; L

* |5 s; W( k6 E

, h: \* ]% ]+ z, h: S

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

, V& |8 V, b9 e: ]

  x" S9 W" }2 p* y5 t# o  o3 z. K

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

6 R& j! v% m& n, ?: d

  B) v) J0 R0 ^! V+ N5 F

: @( X# I: s1 J4 y& U; |6 j
  1. libm-2.30.so5 B0 y. \2 K3 s/ ~4 b5 i8 C* ?
  2. libneuralnetworks.so.1.1.9' G1 A( G/ @' J( v! N. J
  3. libnnrt.so.1.1.9
    7 y+ c! y, p, ?/ M) |# _
  4. libArchModelSw.so
    : i! V# v3 B, B' c" |" s3 A
  5. libGAL.so! \2 J# X! |, p
  6. libNNArchPerf.so
    # K# W( ?( G* d. u
  7. libOpenVX.so.1.3.0/ T! t) S' k  U9 G0 c
  8. libovxlib.so.1.1.0
    : n. ]# o0 H# o& u& G% H1 X3 x5 v
  9. libVSC.so
复制代码
# K- _! y, I5 w5 {. C) l
6 J  X& l, _! f; i

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


3 n5 y# H3 s" E7 Q2 D/ ?7 x


6 z% Z8 \0 F2 d4 N# g( G& c% d+ j, \# x& y5 R# T) Y  y: g* W

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

0 V  z( A  u( v4 y( q* N

二、TensorFlow例程验证


  }5 t( x6 Y1 n. o" x) u

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

4 P; ^- s+ h" j$ f5 S0 u: A0 f( U


9 P& b1 h# {0 R
  1. 0.780392: 653 military unIForm
    - p3 k: L- D* ~7 |: Y# L
  2. 0.105882: 907 Windsor tie
    6 R* R; c" H' D8 \
  3. 0.0156863: 458 bow tie
    4 w" k+ Z' g% T& D* q" c
  4. 0.0117647: 466 bulletproof vest8 z6 w9 `1 q6 ~* d- B: ?
  5. 0.00784314: 835 suit
复制代码

5 g. q! ?& i4 q

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

" e4 D& U; R$ V1 Z

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


' b& F+ k/ f( j' }/ I- {- m' o9 Y! F7 Q9 b

/ |% G9 ]! ^$ V% Z3 _


& m& ?2 O1 g# Q$ r3 W

  1. 0.352941: 274 dingo9 |$ q7 ]; v* U) c0 B& x7 R
  2. 0.254902: 265 Cardigan
    % M* S3 y1 U% H" j7 ]# ~
  3. 0.184314: 264 Pembroke2 |. z) ^8 d4 D5 Q. w/ n: ?4 v
  4. 0.0666667: 163 beagle7 u$ Y6 P9 \3 Z2 |1 T1 V
  5. 0.0156863: 354 gazelle
复制代码
6 r2 c  Q& ?! T" T

7 N3 M$ n/ a+ Z) M/ e35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。' P8 Z0 S- @* z1 i: {
6 |& a+ g. `! x: i1 G

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

3 K& f2 ]6 P! |! l

& t! o: ^# Y8 u
  1. 0.160784: 639 maillot/ T4 X: U  I2 G% r, J" j
  2. 0.137255: 436 bathtub
    + P! S7 p) _9 b7 P
  3. 0.117647: 886 velvet
    ! ^+ z0 z1 E9 q* [
  4. 0.0705882: 586 hair spray
    ; N8 o% d2 K" G/ ]6 B
  5. 0.0509804: 440 bearskin
复制代码
. D: I4 S8 y* Z( O0 v0 N9 B

3 f* p0 {9 J/ j$ F0 e% `5 q

* J( V9 H% }: K7 _- p" E
  1. 0.972549: 644 mask
    7 l6 c) h1 z% o+ G% R3 d
  2. 0.00392157: 918 comic book
    ( v8 x7 _1 k- T3 N. K3 r2 V- L/ a
  3. 0.00392157: 904 wig
    6 B. j; v2 C/ z
  4. 0.00392157: 797 ski mask
    ; K& O! J" |8 Z! B. Z# C
  5. 0.00392157: 732 plunger% x  F& H. B) ~; `
复制代码
: p2 r7 c# z2 w; ]
& w% l- O- r; s


6 f& F0 z3 i# X5 \! T
  1. 0.380392: 583 grocery store( V/ }7 R: b3 Z. }6 g7 G
  2. 0.321569: 957 custard apple' t! e4 Z/ e: v8 S
  3. 0.0862745: 955 banana
    , h5 F3 ~5 N- h1 B# ~4 I$ T
  4. 0.0352941: 956 jackfruit2 D" b$ \6 s) b6 z/ W! z6 f9 V6 ^
  5. 0.027451: 954 pineapple
复制代码

! R9 A/ C5 h% I- u
5 Z; Q; y: H+ |$ |1 W

7 V/ `/ B* @7 c0 W2 V
  1. 0.254902: 918 comic book' J: b  B8 N7 O1 @! m' u: e
  2. 0.0470588: 771 running shoe
    8 c7 K2 c+ s" H5 F
  3. 0.0470588: 474 can opener
    - ~! ^. @6 S! U3 B! y, H/ {
  4. 0.0470588: 412 apron
    % b' s* D+ n' Y: B2 s, h
  5. 0.0392157: 794 shower cap
复制代码
5 S9 w% x/ a7 S; W6 x' D) X7 u
$ V% @9 U) W6 |7 G


8 Y/ i; r/ S. K# b" D6 ^! O
  1. 0.52549: 922 book jacket5 E3 T$ t# x, d
  2. 0.0705882: 788 shield
    : a% ^' D! I" p! d+ j+ Y
  3. 0.0705882: 452 bolo tie" K" x3 A1 n' C9 j: s- ^$ L; Q( ?
  4. 0.0588235: 627 lighter. v4 E6 O* m) F. Y, E4 V0 h
  5. 0.0352941: 701 ** towel
复制代码
( C& V; [: j  \- G
. G7 |2 S  \! D( a

! D; c! B; o+ h2 A
  1. 0.121569: 656 miniskirt2 `7 x$ s0 w! G: X" w. Z
  2. 0.054902: 835 suit/ P, x% I" F6 k# v9 b+ E* G
  3. 0.0470588: 852 television- Z+ h: W3 H2 g) O0 [# b
  4. 0.0470588: 440 bearskin
    ) {# E- P: W, G5 B1 T9 V
  5. 0.0392157: 679 neck brace
复制代码
6 @6 t; s2 f# r3 f  a+ y- I

! A% r  j$ e/ B5 \2 o) S


" @$ \0 V! }6 i) s! r
  1. 0.65098: 918 comic book' h8 a/ B4 h  S! f1 U
  2. 0.172549: 747 puck5 k6 P& E" y6 V! `" _3 f
  3. 0.0196078: 922 book jacket
    4 E3 H, Q% C4 ]( I0 p* Z
  4. 0.0196078: 723 ping-pong ball
    % o+ K$ }4 m7 A4 A: \
  5. 0.0117647: 806 soccer ball8 C2 D2 ?, t/ f7 D! t3 _0 M; E
复制代码

. x% t! \! O* B& o' a
0 m, p( p% E. S0 S0 \1 p+ E' V

, T) v3 e/ I4 _6 z' B" {' P5 u
  1. 5 e& Z# w9 O6 h& @
  2. 0.678431: 918 comic book5 M! N$ _& a+ h( Z; X1 N
  3. 0.0784314: 418 balloon
    . ~! E" V- e$ {3 b1 d# \2 \+ M& D/ w
  4. 0.0470588: 880 umbrella
    # R; y6 Y% u! d! J& R
  5. 0.0470588: 722 pillow# T0 l0 ]2 g. J2 D6 ^6 h
  6. 0.0156863: 644 mask
复制代码
. |$ t# {1 R$ m3 F9 J* H
5 H1 W- N% H8 B: w5 L5 ~

' }: s( k4 i# t
  1. 0.184314: 585 hair slide
    1 ~8 a1 O6 E& Z& J4 ]5 X
  2. 0.156863: 794 shower cap
    $ [8 o! ?* t- ^9 q# w3 a: x
  3. 0.0941176: 797 ski mask: O. |* i+ N- M9 P7 c# x& c' i
  4. 0.0431373: 644 mask( c+ s9 F1 [* @# X+ s
  5. 0.0352941: 571 gasmask
复制代码

, W. A6 `* m# c; p. `. q
! F* ], |/ ~+ e0 U* w

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


/ i4 Z2 U9 K5 {  }% k

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


" |8 H- y5 F. n6 {/ ]  u" \) q0 ?0 X  e. f( r' c9 `4 z' W
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 10:33

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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