嵌入式爱好者

查看: 12316|回复: 1

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

[复制链接]

48

主题

55

帖子

306

积分

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

% `$ Q3 e1 e8 O. T1 s

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

3 D5 l/ W/ M* o  e

& g0 F" @# H0 w% m

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

4 ~7 [# \! r& O

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

" J* W$ E5 r% w0 R

一、 NPU的图像识别例程


% c' M4 c9 f1 j1 E

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

% p+ x8 K" k+ W

, ^- u  F2 m/ z


: P" ~& r$ Z# [0 \
, Z* h/ L, g0 n9 _1 o

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

$ p: Z: B/ R. [9 o8 [


0 O! Q0 W/ {6 U

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


; g! u8 x9 V4 f) _& o# L. S0 j! `9 o, A$ s8 E# w

& \4 O& W; a1 H/ Z; i
  1. libm-2.30.so
    / _, D. F+ N* h% L7 c' _. o+ V
  2. libneuralnetworks.so.1.1.9
    ( J$ A( S- R; u- D: m) C
  3. libnnrt.so.1.1.9* A  M9 i. ^$ n! |4 \( X1 V
  4. libArchModelSw.so$ F4 U  W% I% S. p6 l
  5. libGAL.so. M7 d/ ?: ]6 H9 ?
  6. libNNArchPerf.so; I- r3 M9 ?. `  p' n% V
  7. libOpenVX.so.1.3.0
    + d- M5 G; \: ]. y% J. y' I
  8. libovxlib.so.1.1.0
    / B3 G; ~; Q" W* j+ n
  9. libVSC.so
复制代码
# E9 E2 P2 m$ S  T1 ?
; {4 P* |2 g* q; t" j$ c1 h

其中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 f5 m  l- ?; ?+ Z


& B8 a; S5 ~6 S3 O. c- [8 F- w3 I( I) k2 ?( h* w9 u; j

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

( e) g# [7 }" W+ A4 p9 {' G

二、TensorFlow例程验证

3 \1 d$ v' Y! B# _! `0 y; O8 P+ I7 K

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

0 v) d3 B7 H' v5 U


. |3 ?8 Y4 A: L* L" v5 e+ k( v
  1. 0.780392: 653 military unIForm
    & e: l9 q1 e8 L, c1 s$ F$ B3 z( _
  2. 0.105882: 907 Windsor tie
    1 @# m' t, D! h' N0 k
  3. 0.0156863: 458 bow tie2 [$ T0 D$ J' t7 ?
  4. 0.0117647: 466 bulletproof vest
    9 L: i4 s% k, t5 \* H- u9 z
  5. 0.00784314: 835 suit
复制代码
5 E& }+ ]- a8 G( V8 q

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

7 \7 @* _7 n  V% P4 b0 {1 r& H. k5 i" W# J

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

2 f  K/ F3 Y* K  V! I' u

( `3 L6 M% S& i& J8 G

# E) j5 f0 {3 D, h

5 \4 w+ C4 e/ ~( ^  W

  1. 0.352941: 274 dingo
    2 W/ k1 e% K. A/ z
  2. 0.254902: 265 Cardigan& I- j0 ?7 |+ q
  3. 0.184314: 264 Pembroke
    : y2 `: O* w; g7 A* L5 M
  4. 0.0666667: 163 beagle
    1 y  u. }! J/ E
  5. 0.0156863: 354 gazelle
复制代码

! M  `# ?, B! Q; W
! j; ?" x: @- L# J; c0 q) v35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
8 }" A; I7 \# G* B1 ~( T
& a# `" Z0 {; L1 m) {* [+ s' i3 ]; k

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


" J$ o$ _* ^) M


2 w$ A; [" ~4 `8 H8 C3 F
  1. 0.160784: 639 maillot) k, r  z7 b1 H
  2. 0.137255: 436 bathtub
    2 a4 i0 e7 P# |  y  q
  3. 0.117647: 886 velvet
    6 }4 L! v/ P0 e4 i9 k% ]% \: l
  4. 0.0705882: 586 hair spray0 w5 q- h- L" ^+ `+ C( g; o
  5. 0.0509804: 440 bearskin
复制代码

4 j4 r5 A9 R3 z  K
! k9 ~$ I$ ^) ~

& o6 X# ~+ Y7 z! s
  1. 0.972549: 644 mask3 w7 i+ [* S4 U0 ]& x9 z
  2. 0.00392157: 918 comic book4 z: M! S# U" I/ @
  3. 0.00392157: 904 wig; q, X1 o" w7 k
  4. 0.00392157: 797 ski mask
    " }& K3 l0 w1 ?& ^
  5. 0.00392157: 732 plunger
    ! [2 w1 _- z* j% i3 Q7 [9 v) Z
复制代码

' @. g* c9 f- ^7 ]9 E" _+ D4 ]) l) n! X: n( ?  T  w( R


( ]3 b! e6 ]2 `0 G, x+ J  \2 E
  1. 0.380392: 583 grocery store9 V6 p. S; J) B! [  y0 ]0 h' |
  2. 0.321569: 957 custard apple
    $ C/ e9 D  ]6 N) z( ]
  3. 0.0862745: 955 banana
    ) J' w& ]6 h/ @" v6 J$ o
  4. 0.0352941: 956 jackfruit
    1 [; [0 k3 n$ B2 b6 Y3 ~' }
  5. 0.027451: 954 pineapple
复制代码
# O& N8 X5 Z! _+ K! k, i. k4 R2 j

; m: R3 G7 u5 P% d/ b4 `& L


* T2 k; \! D8 ~' n: t" R
  1. 0.254902: 918 comic book3 |8 P2 s# ~% V
  2. 0.0470588: 771 running shoe
    / h2 N1 H" R! z; c' l$ q
  3. 0.0470588: 474 can opener/ H) ]! n' @  b) Z
  4. 0.0470588: 412 apron  ^' N( R* `. S9 {+ h+ V( @# b( T
  5. 0.0392157: 794 shower cap
复制代码
4 c' H. u, p* n& Z
, W+ ^3 f" J1 g- C/ e

4 v) C8 c. S' p4 l
  1. 0.52549: 922 book jacket
    3 T' n4 Z9 J8 a1 Y% v
  2. 0.0705882: 788 shield) l$ X" \8 e4 R; Y( ^
  3. 0.0705882: 452 bolo tie
    ( `. i* O9 S5 v: |, ^
  4. 0.0588235: 627 lighter
    7 e. [; i0 L0 e
  5. 0.0352941: 701 ** towel
复制代码

( y: r" S# t7 c/ @0 |; _, Z
6 j* H7 }/ e/ b  d* {% X

( d2 f# B4 h8 C% m
  1. 0.121569: 656 miniskirt7 E: {4 ]) s+ m8 C  Q/ q* T$ @
  2. 0.054902: 835 suit: `: ]' W% h' G( A
  3. 0.0470588: 852 television
    ! g9 g% ]2 M9 c4 Q) o% E5 Y" P
  4. 0.0470588: 440 bearskin, `  W# l. A" E2 e: H. S
  5. 0.0392157: 679 neck brace
复制代码
) `! o9 y1 p. f+ k4 |9 Q" w

; x% v: _4 ?4 z9 _# }3 g. F

$ _  S1 l/ f0 f. x8 X
  1. 0.65098: 918 comic book5 f9 T; d& a6 }' w- K7 {
  2. 0.172549: 747 puck; T% e, ~" R+ m5 e( d4 E9 {6 l# u
  3. 0.0196078: 922 book jacket
    : d+ D% w- _( G: a3 n
  4. 0.0196078: 723 ping-pong ball
    ' Y$ H$ ?# ^1 C/ t. S
  5. 0.0117647: 806 soccer ball
    $ q6 ^0 V8 |+ p2 n. m0 k5 Y9 Q
复制代码
- |0 V& y' f8 [* k. K' {9 [1 M

% B# N; l! d  A2 N

, z1 u% U: ]6 K! C" q

  1. " g) H! c" y% D* ~+ W
  2. 0.678431: 918 comic book3 {- a3 ?9 k: ~6 U# d3 i
  3. 0.0784314: 418 balloon% X: _& a7 ^# @. A6 |
  4. 0.0470588: 880 umbrella6 R# k$ l' p; p0 `9 B/ }/ n2 Q
  5. 0.0470588: 722 pillow
    $ l% j. J3 x& ]) z; \
  6. 0.0156863: 644 mask
复制代码

6 ~$ |6 I( Z6 W$ A3 ^3 F9 s4 ?" ^4 ^

6 X/ d& {" A: V0 B
  1. 0.184314: 585 hair slide1 g3 [- D& e1 t% K* v( U
  2. 0.156863: 794 shower cap( @2 V; G- b+ g' R0 i5 h
  3. 0.0941176: 797 ski mask
      y3 k$ _/ e% W; Y# T/ z% {
  4. 0.0431373: 644 mask
    : c. w' s* `7 b( x9 c
  5. 0.0352941: 571 gasmask
复制代码

. e7 B$ h8 n& A" u0 W# M& l
) ~# B7 |  o5 h$ E9 B

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


7 }- R. a( d& j: t# `+ {# q+ D9 p

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


9 B' N- j" J: X# T/ v
1 D3 f; t9 a! c
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-9 14:33

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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