嵌入式爱好者

查看: 11955|回复: 1

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

[复制链接]

48

主题

55

帖子

304

积分

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

4 i0 x4 ^3 ?. C' F* z0 S

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

. Y+ k4 W, ^0 `9 H9 j

& i5 x' ~7 J; J3 p

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


% |% I- W' s) v# k, ]3 z( ~

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


( A" p, F- p2 [3 L1 I* t( D

一、 NPU的图像识别例程


* W& ^0 o* ]# _! j- x; J( j5 z

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


3 `8 P3 Q4 E2 ?0 V- H. l- z6 C5 I5 v


; M0 I; ?, q4 A) Y* f, V7 |

  C( T: G2 R8 C; G5 k; ?* M& x  Q

" N; {0 E& i1 ?: h! \2 b

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


* B# s( W" O1 q( ~

) g' t$ z" t4 V7 j& ]$ k3 ?6 O+ d

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


; o/ R9 [  f. W$ H
! {; }) {6 E1 L

5 m+ }- V( Q! q1 Z1 n2 g
  1. libm-2.30.so5 j$ o6 S; J6 r) r$ G$ ]& Q
  2. libneuralnetworks.so.1.1.9
    8 J1 w: t: H# \
  3. libnnrt.so.1.1.9
    * U* s/ J. u% n& g0 f* Q
  4. libArchModelSw.so
    ; l7 f/ h' e. Q) ]
  5. libGAL.so
    / s5 T- U, x- s6 U: U9 M
  6. libNNArchPerf.so/ M5 D% ?* v3 P) A1 A' c
  7. libOpenVX.so.1.3.0
    ; ?, I) C( m3 o& c1 K
  8. libovxlib.so.1.1.0+ J, S+ g$ \/ K  g' G. X2 @
  9. libVSC.so
复制代码
1 n7 _% J. r. v) H1 s- P" W( ?

6 \1 Q9 L- }  ?9 m  Y1 X

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

& j; Z) _9 Z% r- T


9 H) N0 A+ B! F% c* |: O" @* r3 H' T4 G% ^2 T, O- o- M7 _

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

* S4 e7 y' c1 [. }2 ]2 e

二、TensorFlow例程验证

) G  W: n' e9 Z

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


, }. Z/ u- T) \


! a; c% S" g7 k$ ?
  1. 0.780392: 653 military unIForm& |" f1 h1 N% @
  2. 0.105882: 907 Windsor tie/ q1 l8 R9 O+ d
  3. 0.0156863: 458 bow tie
    ; h$ P9 ]* W1 M: G& N1 T
  4. 0.0117647: 466 bulletproof vest& c& H  d& {; b) ?# G
  5. 0.00784314: 835 suit
复制代码

. ~1 O/ S( \) M3 z9 E; F! i

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

2 T( }5 b% d% {$ h7 k

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

* _. c4 s# W8 q: A5 A) g
: J( G- a2 o8 ^- {2 Y0 Y; b


- w* d3 U. e4 A; W$ D' s$ L) O

% A) U' E' H, P8 i+ i

  1. 0.352941: 274 dingo
    % q) ?- K7 z; `/ {( V( u! J
  2. 0.254902: 265 Cardigan' Y# d% T! Y3 x, D1 ]1 {' ^
  3. 0.184314: 264 Pembroke! U0 K- M8 U' ?. j# d5 g2 @
  4. 0.0666667: 163 beagle7 P/ \8 u- O; U4 J3 i
  5. 0.0156863: 354 gazelle
复制代码
4 M* d5 B+ `7 h2 N/ a0 [3 W6 Q

0 V& l9 g: C- G7 |5 M: `35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。1 C! }/ V3 C: r, g$ b% W- U: ^! a

2 p3 Z1 ~- R) S, B' T, F" T% T

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


6 u! P  k/ r' d# H; S; r7 [

  @+ F3 \; d$ W
  1. 0.160784: 639 maillot
    1 S7 C$ T, N& P8 U0 @/ w
  2. 0.137255: 436 bathtub
    . m- I- z1 L7 }0 L; F6 F! B$ P
  3. 0.117647: 886 velvet
    0 Y2 _' d. ^: S- w, Y+ a
  4. 0.0705882: 586 hair spray  V  ^& R4 ^; ]/ m4 e5 F
  5. 0.0509804: 440 bearskin
复制代码

+ M9 W# Q+ n$ Y9 u
( |6 G( J, m6 E/ o5 M


9 p4 ?! M' y$ D% Z' a8 c
  1. 0.972549: 644 mask
    1 H& g6 J6 h& e# m! N$ x: h6 j
  2. 0.00392157: 918 comic book/ X& c2 n: d7 ~2 [% @& U
  3. 0.00392157: 904 wig
    5 C2 |- C; j7 @8 {9 M0 ]8 Y
  4. 0.00392157: 797 ski mask
    $ }" e& z5 p; j/ ~' b6 T0 [
  5. 0.00392157: 732 plunger8 g6 J) G' \3 L$ s0 T
复制代码

  z# H; e1 _& J' z) R7 r
) W0 a; \$ C; ]% U0 D


+ K0 i/ O6 \; G+ b& E6 H
  1. 0.380392: 583 grocery store
    / }6 e' Y! n* Q9 i
  2. 0.321569: 957 custard apple
    7 g' L, m2 p/ G1 O$ s
  3. 0.0862745: 955 banana& Q- y3 V: c' s3 b4 s
  4. 0.0352941: 956 jackfruit
    - w/ Q/ d. s; ]& N
  5. 0.027451: 954 pineapple
复制代码
; w0 m" O1 n! A# v9 o3 K0 g

& d# o9 a* t. K- l) s$ c

$ J2 |+ v3 g8 N% C5 P
  1. 0.254902: 918 comic book
    4 B! p( V9 {6 x/ C! {
  2. 0.0470588: 771 running shoe
    ' U; \% o0 G0 s9 U: d8 N, B+ k
  3. 0.0470588: 474 can opener2 s6 ~2 a! ~- z
  4. 0.0470588: 412 apron
    - X  B$ T( c/ z& F
  5. 0.0392157: 794 shower cap
复制代码

% }1 e  R. r1 k5 q" ^' x# a, r: L3 G7 m- F$ A. M5 s


) K; Z- Z/ S; l9 V: e+ l
  1. 0.52549: 922 book jacket
    % @- g: i  R, u% Q) j8 w7 z
  2. 0.0705882: 788 shield% y( z! j6 s' F' b
  3. 0.0705882: 452 bolo tie
    % S4 E0 `' T" Y) \
  4. 0.0588235: 627 lighter  y( {/ |: T7 L
  5. 0.0352941: 701 ** towel
复制代码

! ^; L4 T+ w* F9 @& R3 f+ W
4 y2 A( v; U3 e- h; o. @; \


. a0 W" x+ k" b& L- R+ @
  1. 0.121569: 656 miniskirt
    # N. x* D$ l4 n; }( Z+ \
  2. 0.054902: 835 suit6 D/ t& p, l8 C2 ?1 k/ o+ j
  3. 0.0470588: 852 television
    ) z& c8 M% v! w% Z5 E0 @
  4. 0.0470588: 440 bearskin
      }4 x5 p+ C% J' O; _
  5. 0.0392157: 679 neck brace
复制代码

, m% M: W5 w4 i5 x
# a+ h; W( V: a( V6 ^0 w

* w# P# [* ^8 j  P5 P8 H! s0 R
  1. 0.65098: 918 comic book
    ( B2 Q5 @; t# h3 o3 H. q. c
  2. 0.172549: 747 puck6 m& w8 ?* U& R2 C- X$ o6 W
  3. 0.0196078: 922 book jacket7 Y' t* I' M" z9 E0 M
  4. 0.0196078: 723 ping-pong ball. y1 q7 a  Y  h
  5. 0.0117647: 806 soccer ball
    , s6 L) f; a2 f8 c& E2 j% L
复制代码

* k* R" ^# y; x/ {% o+ B0 A' z" Z5 G5 z9 }2 b


1 v- X" e' C0 `8 r) ]

  1. 9 m) j' p1 N. _
  2. 0.678431: 918 comic book# p6 q: \) a% p% D' R
  3. 0.0784314: 418 balloon# o- y, e1 g# i9 _( \; z0 m
  4. 0.0470588: 880 umbrella
    6 z, X% o& a7 z/ r
  5. 0.0470588: 722 pillow( X( f# ~6 W7 o5 o! H- H) x
  6. 0.0156863: 644 mask
复制代码
, D/ G& {+ I6 ~  X2 x2 [% S

1 l- |- `: j/ G" {/ C5 P


& B" s1 u' c& f; w% q
  1. 0.184314: 585 hair slide% d" D) l9 u4 B8 p9 |
  2. 0.156863: 794 shower cap- j  E6 h+ U- X; a
  3. 0.0941176: 797 ski mask
    & w5 `. [' E' c
  4. 0.0431373: 644 mask
    8 H6 k7 i6 t% _% F* ^9 f5 [
  5. 0.0352941: 571 gasmask
复制代码

. n/ v+ l6 d, s7 g* i* U) y+ B9 Q4 d

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

& t1 W' Q# F2 \- \6 F" `+ }" 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


! v% d( ^( |7 w5 H# ]' }3 q) o* Z! R( t1 g6 u+ O; m
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-3 05:57

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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