嵌入式爱好者

查看: 10908|回复: 1

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

[复制链接]

46

主题

53

帖子

295

积分

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

$ E& l6 Y) C/ Y* d& v

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

& a3 Y7 U- X$ q& A6 q+ _* z

( z. V: @; X* t( n

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


+ F+ t" N4 g( l: ]3 D

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

3 l4 g& ]4 P* t# [* m) v( ?5 G

一、 NPU的图像识别例程


  j$ R2 b( ?& Y6 M( }6 A$ X* O

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


4 I% E& j3 e  S; j: U

9 d& j; ^( x" a  u# J! q; V

# P2 u# u$ a. E

" o3 |6 j% B3 U! k, ^

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

' K! T, o9 J+ r: z

: N" v. P) t" j% u$ V1 O

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


! g$ ]% l6 N8 D8 Y/ `# W( F# H5 B% [& z
6 t. D9 I) j% H3 H( Z) _8 [* i


) x: p1 w- Z8 x( d9 v
  1. libm-2.30.so
    0 f' S  I% |2 [- C- f
  2. libneuralnetworks.so.1.1.99 Q' r' z2 b  R/ w
  3. libnnrt.so.1.1.9: ?. Y1 }: @. P& ~
  4. libArchModelSw.so1 f9 O+ l+ }( I
  5. libGAL.so
    7 j( r2 v) `! }# H% n' `9 T3 b4 e
  6. libNNArchPerf.so
    & j( i! A/ x* V3 U. n( D% [
  7. libOpenVX.so.1.3.0
    ) b8 ~! N) r; d' L4 y. q; V
  8. libovxlib.so.1.1.0
    ) X1 e& C  @  _$ @- V9 Y* B, D
  9. libVSC.so
复制代码

+ ^7 J. S4 Z# U) a9 _+ e+ Z. g
- m; L1 v4 t9 E6 V0 N3 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/),再次运行:

3 \5 u  H, d) J/ C' _


2 X1 m7 ]% ]  U/ {# }" U4 R) A
3 M& P" V: K- j

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


; Y, c' P' j9 {. y3 s6 y

二、TensorFlow例程验证

: F6 J2 K' y+ C  @

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


1 m( ]: b7 w5 v! h5 G, u

8 s' K6 o! j/ H
  1. 0.780392: 653 military unIForm& a# M+ }$ u' R5 a; N( x
  2. 0.105882: 907 Windsor tie$ O' p' M" }) k: S  w! P
  3. 0.0156863: 458 bow tie
    " t: V) C' `6 j1 V% y4 }7 |+ W* t
  4. 0.0117647: 466 bulletproof vest
    $ t- t: g( [8 ^& T1 n
  5. 0.00784314: 835 suit
复制代码
/ n& ^% f9 O3 R0 `9 ~6 I

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


9 X4 h4 n8 e6 ?6 o5 @

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


6 D, A& m/ n6 T7 w3 S( o3 m' r6 N! f6 C7 P

8 B. y: |' D. k2 N

) d. P/ P9 a& [- h. @& e$ L6 S

  1. 0.352941: 274 dingo' Z, f# X: }8 D3 J
  2. 0.254902: 265 Cardigan5 T; r& ]3 b1 j) k+ H) k4 f
  3. 0.184314: 264 Pembroke/ u/ u. R$ t9 M5 J! S0 _- f! [
  4. 0.0666667: 163 beagle5 X! ?$ Y9 C4 L9 G7 u1 z
  5. 0.0156863: 354 gazelle
复制代码
2 m8 h' s" m' S

* n! Y2 V# J0 m2 [7 \35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
) }  k. ^  w: P/ e; d( u" ]% e; c# }4 O

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

# Q6 h* Y, W# L


* f$ {8 `, ]. u* g
  1. 0.160784: 639 maillot$ V' e0 T) W7 s$ F2 a
  2. 0.137255: 436 bathtub+ j: w. F6 |& I  s* s
  3. 0.117647: 886 velvet- l! I5 v4 W  h: _
  4. 0.0705882: 586 hair spray$ p' G! ~. _) L1 c, n! F/ |
  5. 0.0509804: 440 bearskin
复制代码

2 A6 \5 P8 J  J, t+ n1 h- g) f$ ?5 p; i9 t


! X) I9 G# S$ {8 s7 c
  1. 0.972549: 644 mask& M$ [, u2 w- z
  2. 0.00392157: 918 comic book! X, o9 Z: t4 n! p3 w
  3. 0.00392157: 904 wig
    / B( o% {: U& l
  4. 0.00392157: 797 ski mask% x4 c+ k$ d  d6 }* D7 [/ C
  5. 0.00392157: 732 plunger3 n- f) u3 X  |+ @! G; v& k# c
复制代码
' c, c4 a5 ?7 t: _3 [3 I

  F, C' B- ^& E) D! J

6 m7 F8 D7 ?8 M, w. i
  1. 0.380392: 583 grocery store2 n5 Q* e! J6 A  H
  2. 0.321569: 957 custard apple
    1 s1 h: f2 L5 }/ n; c  `( o9 a
  3. 0.0862745: 955 banana
    4 A! s& S* @3 C6 J: c
  4. 0.0352941: 956 jackfruit
    # [2 v+ C8 c" t
  5. 0.027451: 954 pineapple
复制代码

' r- P' ?* {+ q! |' m& M/ ~/ C5 O( f& R$ l

4 `* R. `' [1 p( z6 _9 e  K8 \. H3 `
  1. 0.254902: 918 comic book% ?$ S$ A( b3 H$ ^1 M
  2. 0.0470588: 771 running shoe
    ( J$ R9 l7 I+ I- ?" n5 I) U! `: n3 Z& U
  3. 0.0470588: 474 can opener
    , v4 \* `) z0 u9 g
  4. 0.0470588: 412 apron0 w" D/ k9 B( O  a/ E
  5. 0.0392157: 794 shower cap
复制代码
9 }& m& P/ l5 w
& h5 o- m  l9 _2 H9 X

& }/ x9 s7 @/ [7 R8 r( b9 B
  1. 0.52549: 922 book jacket
    3 O, X- X# U( A! x+ H3 g& t5 j
  2. 0.0705882: 788 shield! s7 }4 Y! R" a0 g7 l
  3. 0.0705882: 452 bolo tie5 D# |0 A: T# y' F. R- T' r2 G+ n
  4. 0.0588235: 627 lighter3 T& j: j- |/ f: Q; I
  5. 0.0352941: 701 ** towel
复制代码
2 p! I) x8 @4 \- o5 v  e

4 m( [  l& j! x% Z& Q" }9 R4 N9 v/ B

0 T0 g8 g) G6 ^2 T- V
  1. 0.121569: 656 miniskirt9 j4 Y4 J4 _3 {8 @( ]
  2. 0.054902: 835 suit
    6 \8 ~; G# N/ r2 I9 ^( m
  3. 0.0470588: 852 television
    7 R; U  T6 [. [1 u) Y+ Q8 G
  4. 0.0470588: 440 bearskin7 Z+ R8 o( |2 w
  5. 0.0392157: 679 neck brace
复制代码
, q$ J6 n9 a( Y. R& u: z) k# \7 N
. ]$ g  C( N4 P( s) h$ p

' \; B) ^3 O/ {
  1. 0.65098: 918 comic book
    " B# b4 u; E* K8 G( ]4 V
  2. 0.172549: 747 puck
    ) h/ s1 [7 w6 r1 Q9 `( i4 Y0 v2 q
  3. 0.0196078: 922 book jacket; k0 a5 R" M+ X- f  D0 j
  4. 0.0196078: 723 ping-pong ball
    ) M, K4 Q! f% V* ~. x
  5. 0.0117647: 806 soccer ball
    1 `" Q; w+ r4 S# u- e- e* M- U
复制代码

- L$ M  w/ i* l- V1 B) }: e0 M# d+ \% K

( W9 b( B6 }/ S; Q6 }2 H
  1. ) D1 B. F0 U$ I! E
  2. 0.678431: 918 comic book
    6 ]6 i( H: r2 x' Q
  3. 0.0784314: 418 balloon
    0 s( @" B2 g- G" {2 x
  4. 0.0470588: 880 umbrella
    % ]* i2 r% C  A" k9 S
  5. 0.0470588: 722 pillow
    9 h( f3 A$ h8 Q8 }
  6. 0.0156863: 644 mask
复制代码
' w" G' |* \# X* M: L
; d3 A! [  \" r' R8 Y& A* m) h: z


2 b1 j( P4 t7 A$ _
  1. 0.184314: 585 hair slide/ X/ W* E. m' V* j! N
  2. 0.156863: 794 shower cap
    0 u- x$ w' z( \: n' J' n* Z& I4 j
  3. 0.0941176: 797 ski mask
    6 h3 u3 J7 u7 ]! M( ~
  4. 0.0431373: 644 mask
    $ z$ X7 T- g/ _. X- i* \2 S9 B5 a
  5. 0.0352941: 571 gasmask
复制代码

* _9 j3 ?& S7 C5 X% W( [# O* A$ ]& {& S

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

7 `3 B# A. c0 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

8 {" Q9 C3 I7 j1 {$ }9 y
$ ?, g2 I  _: s/ l
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 04:44

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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