嵌入式爱好者

查看: 11695|回复: 1

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

[复制链接]

46

主题

53

帖子

297

积分

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

1 P* D2 z+ |$ u8 [

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

) h5 b1 e; A! J! c0 F0 @$ K' Z9 \
- A% K& \& k+ U* R1 x/ ~

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

" L$ |/ }& m/ R& }7 d8 V& k

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


' D) T6 u5 n0 T* [

一、 NPU的图像识别例程

3 q; `9 [7 e( @

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

0 ]( Q; I" U  n5 ~) r" P0 u# n

. {% `* d6 E* x& T$ s* q

2 B  G$ j: K/ H- u# m

* m& T5 U4 Z0 N8 e. y! F  {( o

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

2 g# W$ k! l+ X( z: h6 c8 l


5 @' O, d: V/ {6 k

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

7 ?5 u3 U) f$ p7 F7 @

" I) s1 r& A$ \+ n" c


" @% R$ w3 d6 h- i  J/ G+ Z& z, b
  1. libm-2.30.so9 ]) L3 Z( A( i2 I/ F$ q
  2. libneuralnetworks.so.1.1.9
    9 |2 n4 X6 [/ B* z
  3. libnnrt.so.1.1.9" Z$ g9 A7 V- |2 |2 w5 U
  4. libArchModelSw.so2 N6 `% r$ r! `: _+ V
  5. libGAL.so2 h. J2 S- P3 C# n
  6. libNNArchPerf.so
    2 {/ {2 x" _3 l) h
  7. libOpenVX.so.1.3.0/ L( B$ Z( |% N) l9 S1 b8 N
  8. libovxlib.so.1.1.0* q6 c9 A8 j4 S" M& \$ i
  9. libVSC.so
复制代码

1 a/ |' L  d) K% S' b, r
9 U8 I+ i3 g9 v

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


1 M3 x$ p( j- t' g; a+ b: P

: u2 R. f2 i! ?
3 G$ W3 y% `4 v5 E6 Z3 {3 ~

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


0 z; J+ y7 s+ w9 I9 w" M

二、TensorFlow例程验证

3 K# e1 R! a8 P1 P% N4 `

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


* k% s) @/ L3 O) X# h8 _  h

, R' w4 O" V3 m
  1. 0.780392: 653 military unIForm+ M# e6 q( Y- E, J; r& S5 L: }
  2. 0.105882: 907 Windsor tie
    6 p& g4 n2 L* P+ @% J. S5 ^9 ]) K
  3. 0.0156863: 458 bow tie
    & [6 g; z% F* u+ Q5 ?5 q1 h) Y( E/ W
  4. 0.0117647: 466 bulletproof vest9 O; }0 ]$ N+ G9 k, d
  5. 0.00784314: 835 suit
复制代码
. a/ w4 e/ ~' }# N

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


2 `4 x- j; z" A! W+ W) e& R

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


9 ?$ y6 c9 H" V( F9 D' H+ |) q# `8 H, J/ y. b


, K3 x3 L5 Q: i8 Y9 l2 M

7 E+ ^4 }/ Q0 N* b5 _

  1. 0.352941: 274 dingo% v. e1 W' J  ]" v. K  p
  2. 0.254902: 265 Cardigan# N* H- m; [7 W6 y. t3 c8 u
  3. 0.184314: 264 Pembroke8 D% r3 `, V3 ?' K! F
  4. 0.0666667: 163 beagle
    $ d  T9 w$ O0 \1 F0 u' m  ~
  5. 0.0156863: 354 gazelle
复制代码

2 ^' v& }! W# }9 _/ d5 W, `2 z4 R' b6 E/ _( {- p
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。5 M# o6 P2 g( n" W+ M
3 c1 P5 \( A2 M2 v4 k; g; x

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

1 D: w  B! g# T& _, a7 U; z8 U3 ^

5 P& J! F' n% f1 I
  1. 0.160784: 639 maillot0 r4 Y/ x: i- n* g2 n8 n% m
  2. 0.137255: 436 bathtub
    & ?# E, K5 l$ {/ b% w: \  y
  3. 0.117647: 886 velvet
    ! N1 s  i3 F( X
  4. 0.0705882: 586 hair spray1 w0 N, ~# }- G( L5 c
  5. 0.0509804: 440 bearskin
复制代码
4 O# v) e, A& f8 @( g2 f
, W6 a2 M4 H* u& }7 @

" R0 Q1 j- v$ ~! p
  1. 0.972549: 644 mask3 O0 c7 q0 U) `
  2. 0.00392157: 918 comic book. t# ^3 ?. B3 i. G+ N; N' N/ p
  3. 0.00392157: 904 wig" K* \% |) s& a# T) c) z" X3 r$ O
  4. 0.00392157: 797 ski mask  ^; l- c' t' \( a' p
  5. 0.00392157: 732 plunger1 y, w/ Y1 S7 H' k7 L
复制代码
: m4 W1 [( Y- g8 s# Q9 X6 g7 |

, d0 U1 y% v. T, n


9 K& c4 V0 g# t& L% r5 v
  1. 0.380392: 583 grocery store2 V) o. W: `" w6 X. u0 e- t
  2. 0.321569: 957 custard apple& V& u; l6 b4 ]; j
  3. 0.0862745: 955 banana- y2 _+ W9 _0 }9 E8 S, W
  4. 0.0352941: 956 jackfruit
    * @& k) M8 @" X  \; u% N% I
  5. 0.027451: 954 pineapple
复制代码

" J  ^; f+ ^3 Y  r1 N
2 w1 |. v* [1 v; U( Z; h5 ~


  l8 F3 f+ q& E* j. \; z
  1. 0.254902: 918 comic book
    ( p/ X. F: Z( @9 z
  2. 0.0470588: 771 running shoe* |, `6 `2 s% ?/ m6 K# D
  3. 0.0470588: 474 can opener& ]$ C2 s8 C9 j4 Y0 \6 y
  4. 0.0470588: 412 apron) s0 j3 ?2 ?! @2 M  g
  5. 0.0392157: 794 shower cap
复制代码

% m, f! s. ?& O; J1 i5 x7 ~( T7 W# r


( S. N3 K4 ^# i& n! t
  1. 0.52549: 922 book jacket
    * q4 W7 |+ v6 X" u$ z/ I
  2. 0.0705882: 788 shield
    * G& h5 |# Z- m- U
  3. 0.0705882: 452 bolo tie& l5 v2 w/ R. K7 k$ R) [
  4. 0.0588235: 627 lighter- q. V  J% o: z( o
  5. 0.0352941: 701 ** towel
复制代码

; m" M& d5 d# \: P+ z! ~  ^6 A/ R" p

8 S8 d! J8 y- _) A- ?# Q2 j& @
  1. 0.121569: 656 miniskirt
    * G- P8 c: L, B5 z
  2. 0.054902: 835 suit/ k  \# U- v. L
  3. 0.0470588: 852 television
    $ G" ^. \" _+ ~) F( o2 H9 C
  4. 0.0470588: 440 bearskin$ o& @: V1 J9 W4 P
  5. 0.0392157: 679 neck brace
复制代码

' e$ ?1 p. c  `9 J- E+ t8 k- n8 W# Y& c6 ?4 u" b


1 O8 r8 X/ V3 s* O) v9 V) _
  1. 0.65098: 918 comic book1 v$ \4 I7 G. J, t( m9 K- s1 {
  2. 0.172549: 747 puck
    # E' N9 {+ d# Z9 s  D( ?% E6 e
  3. 0.0196078: 922 book jacket
      n5 z/ J+ \% S1 u& l2 ~! G1 t9 U
  4. 0.0196078: 723 ping-pong ball
    7 l# a; ?; s$ z
  5. 0.0117647: 806 soccer ball
    " y9 U0 R/ M: |5 k
复制代码

& O, i+ p, T) w5 ^* h+ S, i3 C: I: ^! n- \, V

3 _8 u' K& S) I; j
  1. ; e* M5 h/ Q' c) J- A* W; z) y3 `
  2. 0.678431: 918 comic book& e% H; S, `& o% k9 E' n( G. B
  3. 0.0784314: 418 balloon
    $ \; m0 [  h' P/ Q( @% H6 a
  4. 0.0470588: 880 umbrella  J  b- ?. S8 t# b3 N6 D
  5. 0.0470588: 722 pillow* V9 h* |3 K; @4 @8 e; S3 ^
  6. 0.0156863: 644 mask
复制代码

: f  M" J8 q  P- |5 }2 B+ R6 p/ [" O  L) S. v8 V0 ^2 a6 a# t" p3 N& V

" ~+ ^/ A2 Y! a9 ~
  1. 0.184314: 585 hair slide
    ( ~9 J. F3 ^4 ?2 c3 S" h/ E
  2. 0.156863: 794 shower cap
    : J! B" |9 E) O" w
  3. 0.0941176: 797 ski mask+ ?/ ~) x/ n* b
  4. 0.0431373: 644 mask
    5 g& T6 Q0 X2 C5 }
  5. 0.0352941: 571 gasmask
复制代码
; `4 d2 g& S* `; t

. X* O- B0 i8 F9 g- r8 x3 L5 M

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

. [, y$ {# h" }3 U+ h6 E) U

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

3 O( y0 A; f# x# G' A! w) T

. E9 @* }0 b* D% k6 z
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-15 07:15

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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