嵌入式爱好者

查看: 11350|回复: 1

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

[复制链接]

46

主题

53

帖子

296

积分

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

' m$ S- R, \7 t5 U; q

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

( S  F! W/ i0 i& L: |1 A( ]- y7 q
) w. g+ s) D6 U: [7 K

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

) U( E, `* R# {

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


% L! c+ \- K/ |% H

一、 NPU的图像识别例程

- x/ V& ~$ ]2 S

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


9 i% U7 i9 H' @/ P" a


7 f  l0 ^" @9 N

" X8 U( ~# y8 c3 l3 i& w  R. @

9 D. j$ R. `! n( f+ m

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

. P" [" ?, h. x9 A8 E/ Y/ v. ]


- @5 H; I1 ^7 Q! y# I3 U( W

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

: ?$ Y3 D; o" @: F# H
. q7 C+ E2 J8 a  A7 c& |9 j


9 X" F" Z0 p; Y8 N% R2 L5 Q
  1. libm-2.30.so
    + \0 Y9 d' }2 X$ ~/ F8 o# H- e
  2. libneuralnetworks.so.1.1.9; M7 J5 c1 q. Q$ n
  3. libnnrt.so.1.1.98 M, c2 w. A$ R1 j- _: M$ ?
  4. libArchModelSw.so
    8 O5 e+ r2 i! C5 @% x: v4 F
  5. libGAL.so
      L/ N# L  c% G4 _2 j& V4 r6 k
  6. libNNArchPerf.so
    9 y4 J4 J5 E6 N& w3 h
  7. libOpenVX.so.1.3.0
    0 _0 N0 I/ y9 D2 \
  8. libovxlib.so.1.1.0
    ) `; [! Y; b7 r% \7 v1 w- m
  9. libVSC.so
复制代码
# c% H% Y7 `: m2 \7 R7 m  X
, D) Z% x8 C3 p. P8 A! d

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


, W, D$ i% i0 p2 [9 ^( h+ F0 }

0 r$ K0 N: }0 F# k

( g% |. S; l/ Z$ s# B  u5 Q( o

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

9 C2 J# z2 \9 O$ p' ?+ l! L

二、TensorFlow例程验证

, A, O+ _* |* @3 f7 B9 j

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


( `/ W( \. K- l* q4 |. P


6 b2 Y2 U' X% M! D1 _- |4 s, n
  1. 0.780392: 653 military unIForm
    ; Y! H, H1 U3 s) b( g
  2. 0.105882: 907 Windsor tie
    5 P* H' _" \9 Q% r- A! a' O
  3. 0.0156863: 458 bow tie
    ' k7 N3 K2 A' g* p
  4. 0.0117647: 466 bulletproof vest
    - m( u% w6 e  h/ }; N0 w/ X) {
  5. 0.00784314: 835 suit
复制代码

' b* |, a9 _1 |0 X& ^% X  C: ]

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


  p9 |" m4 t  t+ y& E. D; \

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

2 z" x8 E5 X7 I" T
; f$ |2 J* H$ @5 a1 y0 Z


* d1 l/ L3 g0 h4 g

* u3 W9 c: x& Z0 O' t9 V8 O, F) u  k

  1. 0.352941: 274 dingo5 @1 \/ J" P$ P6 I! E6 F
  2. 0.254902: 265 Cardigan
    # ?3 b2 e1 S9 r: d( W% G
  3. 0.184314: 264 Pembroke8 l7 k) [& k) [% I, H. M1 z
  4. 0.0666667: 163 beagle# Z- w: C& H  f9 O3 F+ |
  5. 0.0156863: 354 gazelle
复制代码

; u: z* K7 q& a/ p
7 @: @, \1 K8 v3 N& d+ p6 \5 D35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
2 k. F+ v% s8 e" A7 ?4 Q7 S( j
! x, ?0 _; ~2 W5 w$ Z1 U) b! Z) x

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

  [$ R  e" G) a' X) X- h

0 R* z; C% F: b9 ?- \  J
  1. 0.160784: 639 maillot! K- F: i* W& C/ p' V
  2. 0.137255: 436 bathtub# g$ ?. O4 b  ^" ?
  3. 0.117647: 886 velvet' t) g+ U% |* N4 c# F; t
  4. 0.0705882: 586 hair spray
    * W, m6 K; N! A# y( U5 Z
  5. 0.0509804: 440 bearskin
复制代码

8 r. H7 a2 R, c4 N. }6 y
9 n. L: n, L% A2 \; c- H! F6 z# |; Q


! \, j0 @. ]. k0 Q: n9 @
  1. 0.972549: 644 mask
    + {. b6 n% W3 g, I; }
  2. 0.00392157: 918 comic book' E- K- g+ j- f  F
  3. 0.00392157: 904 wig
    ; t: b* ]6 z4 P
  4. 0.00392157: 797 ski mask4 E5 r( x' R' v3 q
  5. 0.00392157: 732 plunger3 E+ o3 D  B8 R9 H, p$ t
复制代码
6 _# W0 o: K3 O
% _) b( {7 h$ I  _

5 T8 p& \0 o8 Z7 h( k
  1. 0.380392: 583 grocery store
    3 Y$ O' ~7 }0 r7 e# m) A! B) y9 s
  2. 0.321569: 957 custard apple2 [1 w5 `- E5 R6 e9 ]
  3. 0.0862745: 955 banana
    ! b) l2 p8 v5 {# @
  4. 0.0352941: 956 jackfruit5 v6 E0 T+ Y1 u) [
  5. 0.027451: 954 pineapple
复制代码
' y0 u+ o" j+ Z1 F5 P
9 S% J% z1 h6 i7 h# N8 \' U! Z- z

. m& O  z* B6 w8 Y
  1. 0.254902: 918 comic book
    7 r( s: z  p2 e. k5 m% n
  2. 0.0470588: 771 running shoe
    1 X  s) `/ ?8 W0 u4 [( ^, t
  3. 0.0470588: 474 can opener' z3 \% Q' @8 m/ W
  4. 0.0470588: 412 apron
    . h' f7 k9 k6 s4 N. I- C
  5. 0.0392157: 794 shower cap
复制代码
% O( {6 ~8 x, t- M& ~7 F9 t

4 i. _+ X) Q+ ^

6 P8 B9 c3 ^9 d* Q( \" Y+ f6 A
  1. 0.52549: 922 book jacket
    " `0 n3 w8 v! N$ c- h
  2. 0.0705882: 788 shield
    2 j7 h9 h* w  f5 g3 C. ]
  3. 0.0705882: 452 bolo tie% ]3 P( I& G( k2 `9 o( n, k! x
  4. 0.0588235: 627 lighter
    % k/ _0 M! [# S, K7 F, a
  5. 0.0352941: 701 ** towel
复制代码
# }: f) {( y! E. l" F5 y, ^& r' M

! x- c. ?  X; [$ I3 G% a& W' i+ [


  j& V5 I/ \: C3 m
  1. 0.121569: 656 miniskirt2 M" }+ O1 s! n/ s
  2. 0.054902: 835 suit
    3 @. d8 M$ _' {6 x
  3. 0.0470588: 852 television- z/ ?: ^# v$ E$ _
  4. 0.0470588: 440 bearskin
    3 s; L" n& O. `7 l
  5. 0.0392157: 679 neck brace
复制代码

+ c6 x: i; |  q+ A5 a, C+ d2 m4 D% i3 w' F8 H6 w2 Y2 ?

  }: }% r3 Z7 |  o8 {
  1. 0.65098: 918 comic book# U; d, ?- U( @6 @- q' [% A
  2. 0.172549: 747 puck
    9 m8 c2 w- X: [: \
  3. 0.0196078: 922 book jacket
    ' d, q! w, ]) U  Z2 l! \# A* B! B; B
  4. 0.0196078: 723 ping-pong ball) v; u' u, r% g5 i- u/ l
  5. 0.0117647: 806 soccer ball
    4 M8 @( @- W) P+ U: Q& H7 Y5 Q
复制代码
1 p1 E. U$ R4 E; H3 l! c

+ U. ~3 f$ u% H. v+ T- J

6 P7 c  U0 @; c1 H3 {1 z& O, P

  1. 0 y" F* N7 }) c9 l  j
  2. 0.678431: 918 comic book+ m# w! j* R: v* M( V' @5 s
  3. 0.0784314: 418 balloon
    3 n/ p. S3 `% v
  4. 0.0470588: 880 umbrella
    . J" Q7 D$ |/ o) K+ p
  5. 0.0470588: 722 pillow; s$ ]' A$ ^1 e
  6. 0.0156863: 644 mask
复制代码

4 N% J8 U( s7 n4 x: a; o8 W1 T8 x' Q" l6 S* s* V3 e


' S4 o6 J+ ]1 Y
  1. 0.184314: 585 hair slide
    5 H( _' o1 Q# m' O4 O6 {
  2. 0.156863: 794 shower cap4 f; h$ U) k3 }! O& H2 i
  3. 0.0941176: 797 ski mask) ?: f! c0 q2 i2 M/ T# W/ }5 P" E
  4. 0.0431373: 644 mask
    5 {4 W+ x) e8 ?; M( d7 o
  5. 0.0352941: 571 gasmask
复制代码
$ Y+ S+ A( d0 N; {

; E* i# }, P+ ^! D- x& j  G

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


* t& H+ O$ b2 W

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


$ C3 S7 F, O5 X' _
/ Z2 @  u3 K, K. p
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 14:04

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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