嵌入式爱好者

查看: 10870|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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

) m- G% Y/ k: @; D: k

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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


. `# D9 o3 h  N: c/ H+ b
2 ?) h& I4 w2 Q1 ^9 ?0 u! J# b

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


! t' X4 P% g- ~1 v6 p; }/ N* @

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

- p0 J; U! `3 K% a" A7 a$ I% Y1 |, K

一、 NPU的图像识别例程

* O. o8 s' z! p/ r0 u1 y* M9 ~7 F

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

/ x3 L! }. F/ E. ]5 {$ ^, p1 T

; W) p% p1 z$ G3 F: [$ m


5 h% q# c* w7 }7 E& T
+ O; L& z. }- t% A- z8 j) T

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

0 K/ y: [. D0 ^; D) e- b

1 s9 I( V- L2 m

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

2 A1 j! m2 [7 a2 q8 N& u8 `# Y& z

9 }0 `, b$ C0 k, Y/ J4 g  i$ s

, X  M* I8 I) X; C) x! W
  1. libm-2.30.so: t) a; U, h( O
  2. libneuralnetworks.so.1.1.9
    7 l( U% p- G$ m- ^6 k
  3. libnnrt.so.1.1.9
    . ^0 x, e3 W- S8 D
  4. libArchModelSw.so
    $ G& V) l7 T% h/ o& z
  5. libGAL.so. Z, r& h  b2 z3 q% R- ?8 ]
  6. libNNArchPerf.so
    7 A6 A8 p* N" F) [: S4 [2 F; F! Y
  7. libOpenVX.so.1.3.0" `! k0 u6 y& H2 G7 e# Y& L. G" a
  8. libovxlib.so.1.1.0
    2 f6 p: u2 C6 L# M2 k& ~3 O
  9. libVSC.so
复制代码

7 j* G  k" S+ \$ e1 t( ^9 p# [+ p: i' x# o

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

' b+ C9 f9 k* t. V& I9 B  L


+ o1 x: w. ^2 R4 p" X( I- _5 e4 w$ f& e5 u, |7 E* ~. H

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

8 f2 k, N6 O5 y: z: x

二、TensorFlow例程验证

: ~9 U' H& M( p* @7 [9 w, w6 I' ^

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


9 }+ e7 |) |2 p

* ]$ r$ m/ e3 D9 ~5 r6 w# Q
  1. 0.780392: 653 military unIForm' a) a$ F3 g; p: a
  2. 0.105882: 907 Windsor tie
    ; ?$ V1 k& Y! Q! K# V5 t
  3. 0.0156863: 458 bow tie
    ! O4 \% l# R5 n/ D0 {" H" V
  4. 0.0117647: 466 bulletproof vest
    ) ~) ^  A/ H# e3 |% ^, b6 n
  5. 0.00784314: 835 suit
复制代码
+ F8 O4 a/ p3 b8 a& A5 b

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

/ Z  c; _+ W4 ^9 \! y! q2 r% b

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

. g2 m& p% U  D( b6 C! |
- {7 L, E( W4 ~$ Q/ k, S


. O# k1 n, e& B6 e3 J5 H! n


6 R8 R. C) {* G: ?" a0 b

  1. 0.352941: 274 dingo
    $ O) O% D- D- g$ V
  2. 0.254902: 265 Cardigan# f) H3 }3 a9 r( g
  3. 0.184314: 264 Pembroke+ x  p' u* Y5 m
  4. 0.0666667: 163 beagle
    3 h6 w1 D6 E5 S3 X
  5. 0.0156863: 354 gazelle
复制代码
3 `9 w1 \3 ]- h
5 f: [4 M  `( H5 I
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。7 a( _: |9 n: v: Y# {
, C0 k& s- [; T. V5 }

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


% b4 Y& ]% ]4 S$ z1 e! J


0 N# ?' R# t% W( `% o/ e6 M5 e
  1. 0.160784: 639 maillot  n! B4 _" g4 Q. |2 y: A
  2. 0.137255: 436 bathtub$ [- N5 n# C8 \3 o: k9 H! \
  3. 0.117647: 886 velvet. d! T. t2 n3 [- \
  4. 0.0705882: 586 hair spray
    " _: ]6 E% v" k1 C+ a
  5. 0.0509804: 440 bearskin
复制代码

. S% u3 _# c* O& o5 O2 Y0 ]; ~! Z6 K" l5 [# q


4 j% N9 d# w+ y; E0 p4 M' X+ L
  1. 0.972549: 644 mask
    # w) B# _* V, E
  2. 0.00392157: 918 comic book
    7 M' p+ D' ~( F1 @* j( S- H
  3. 0.00392157: 904 wig' X) C& |. {! H1 p
  4. 0.00392157: 797 ski mask
    ; h8 J$ a" e: K; x& |1 b
  5. 0.00392157: 732 plunger
    7 R  V; L; |  z
复制代码

: {. t8 I% d1 |) T; M$ ^4 ]$ H) e% y4 k. @


1 R; K! q* t$ {1 N0 c5 a
  1. 0.380392: 583 grocery store5 w8 |& K" Y. c
  2. 0.321569: 957 custard apple4 g- U5 v% M. I0 L8 e
  3. 0.0862745: 955 banana$ r* O. X9 V( }; L+ c
  4. 0.0352941: 956 jackfruit8 F1 |  h. i( O) C1 C, _
  5. 0.027451: 954 pineapple
复制代码
( n2 n  z$ h- r: |9 K( W
  u; B+ T( B. J7 p& i


7 v/ }; C7 y6 m& W' y' q) B
  1. 0.254902: 918 comic book
      t! w/ L+ t8 \: b/ P) P
  2. 0.0470588: 771 running shoe+ d; n# N% q5 R
  3. 0.0470588: 474 can opener
    8 C2 t2 N+ j* g9 Y4 m" N! J% ?
  4. 0.0470588: 412 apron0 U6 C, a, ]; ?& K9 c
  5. 0.0392157: 794 shower cap
复制代码

3 _# g- J- Z, o- ]2 H: p% L; k2 l( n* g. Z7 @9 \; H) j0 a

' I5 P) C$ w: u, u9 F5 B( x
  1. 0.52549: 922 book jacket7 f5 y1 c( h4 w1 m) j- ?
  2. 0.0705882: 788 shield, E+ a' t0 C+ _- F, o$ Z$ q9 \5 @
  3. 0.0705882: 452 bolo tie* x& v6 ]: N  t+ f1 I! a5 ~$ w
  4. 0.0588235: 627 lighter* u, q* ^% S$ A
  5. 0.0352941: 701 ** towel
复制代码
& t& M2 l7 H/ n; v% U0 u+ d0 f
2 M8 Q5 O0 f( u# M

% ~& b9 L& p6 ~
  1. 0.121569: 656 miniskirt1 s) a# a; K1 Q3 I! c( _6 h' J
  2. 0.054902: 835 suit+ D5 S  s9 t# i2 g4 u) T
  3. 0.0470588: 852 television
    1 u6 x0 ~! Q- P5 i3 @+ j" X
  4. 0.0470588: 440 bearskin/ M( d* U7 g0 \9 r6 Z
  5. 0.0392157: 679 neck brace
复制代码
( [" }. G9 k# O% c" l2 }  n

8 d6 X5 O! z/ {( G) @1 G. I( e

" X% X7 s+ T5 }) }
  1. 0.65098: 918 comic book' Z+ e1 U) o% c: s6 B7 T  r+ H
  2. 0.172549: 747 puck
    7 e. b, N6 \: ~' i# r4 y0 g1 q! M" y
  3. 0.0196078: 922 book jacket
    & a' z$ t" L/ S% j8 ]# t- U2 U
  4. 0.0196078: 723 ping-pong ball- n+ w7 Q& ~4 a& z( m
  5. 0.0117647: 806 soccer ball! l! x5 [1 V" R; l: g
复制代码
) g- s4 f0 @  C8 l6 w3 [. X
. D- h) ~% ^# v3 k& A

6 j6 u2 v1 o/ v  B" i+ V
  1. & N- t5 N7 {$ p% O& p
  2. 0.678431: 918 comic book
      x$ ^& ]$ B' d3 x4 X& T
  3. 0.0784314: 418 balloon
    3 F$ o, h/ h; _
  4. 0.0470588: 880 umbrella0 X7 k9 `; k1 q( F
  5. 0.0470588: 722 pillow( f" y# c( K$ p$ I
  6. 0.0156863: 644 mask
复制代码
, P( i- k8 M# T2 h4 T/ T  F
# E& p& c, G' P* j7 X

/ n  g7 ]( G" M* {- N. @
  1. 0.184314: 585 hair slide
    & Z9 F- m6 A9 |  q  Q
  2. 0.156863: 794 shower cap
    % ?8 n$ ~% k* U! X) v
  3. 0.0941176: 797 ski mask3 I1 b8 ~0 p  Y# M; l$ e7 ^
  4. 0.0431373: 644 mask; f" d2 C6 [( D2 b0 j
  5. 0.0352941: 571 gasmask
复制代码
) {- j) d: H/ G$ v# Q
$ W6 e5 `+ o! K. T1 l' Y

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


: e% D8 W0 \+ _7 C9 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


, J* Z4 p. O$ a: `+ d# l& t2 |# Z# e2 @; P( p% V  `
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 20:57

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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