|

( Z9 b1 m% t# {& y" b作者|donatello1996 来源 | 电子发烧友 题图|飞凌嵌入式 原文链接:https://www.forlinx.com/article_view_809.html iMX8MPlus 核心板: https://www.forlinx.com/product/136.html
7 H8 _: \. F1 }( D' |: b/ \; P( B4 }
$ S% l6 A0 ?8 m飞凌嵌入式OKMX8MP-C开发板基于NXP i.MX 8M Plus处理器开发设计,该系列处理器专注于机器学习与视觉、高级多媒体以及具有高可靠性的工业自动化。旨在满足智慧城市、工业互联网、智能医疗、智慧交通等应用的需求。强大的四核或双核Arm® Cortex®-A53处理器,主频高达1.6GHz,带有神经处理单元(NPU),最高运行速率可达2.3TOPS。 ( H# V! |7 O1 I5 ]
本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15.0,主要介绍移植官方NPU TensorFlow例程。
8 s8 e% C+ B4 w; o6 `! F& p- p一、 NPU的图像识别例程
+ b/ r* A$ u, a在OKMX8MP-C 开发板提供的产品使用手册中,有一章是针对 iMX8MP 板上NPU的图像识别例程,位于EMMC分区的/usr/bin/tensoRFlow-lite-2.3.1/examples,我将EMMC分区mount为了/media分区,找到对应的例程位置。 ! C4 h$ g4 Z* W5 L

E, T' n% z' |, e% r
" i4 B' U2 o- E6 ^1 m8 D9 q m: q8 k9 o: e! ~7 y6 a
将 iMX8MP 开发板切换到EMMC启动,进入/usr/bin/tensorflow-lite-2.3.1/examples/目录下,运行测试example: 9 T& J9 F( P% ?9 G- d
 . d* X2 Q, P5 E1 x9 W- Q
再将 iMX8MP 开发板切回TF卡系统运行,提示报错,label_image程序的nnapi需要动态链接库支持:
; B7 ^: K ~& R% T& D( c9 p& q5 u& D; [" D6 _
 4 O0 d$ S( M. f6 T) L8 ~1 v
- libm-2.30.so
' L( A7 M: g. s8 U' T. a" ?; ^ - libneuralnetworks.so.1.1.9
9 R7 \( C- f- I' `* T - libnnrt.so.1.1.9
5 b" U i( L& h7 L- f - libArchModelSw.so
9 {; G5 ?& ]3 t$ b! ^3 V - libGAL.so$ F6 {# @; k( x9 I) A' ?
- libNNArchPerf.so/ }) I' h! t1 s. u
- libOpenVX.so.1.3.0
4 c) O' g7 m7 F. A1 P( |% s) } - libovxlib.so.1.1.0$ ^+ h& r, ^- Z# w' k
- libVSC.so
复制代码 . p, h6 U' Q! R; b: F' l
, r. _. ^1 ?3 Q8 z0 e其中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/),再次运行: ( Y" @/ J* s6 e2 G

* L2 ?! m6 j- v9 H
3 z2 I2 @5 G- j9 `. z& M3 e+ y9 p3 K$ ~. |可以看到没有任何报错,运行库环境移植成功,接下来可以在 iMX8MP 开发板上愉快地进行tensorflow例程的玩耍了。 1 a1 G( _1 b( _' I8 v, f# h
二、TensorFlow例程验证 ) I3 I% H+ L9 j' O, l3 k: B& [
飞凌嵌入式iMX8MP官方资料中提供了许多测试例程,先用官方DEMO做一下验证,其验证结果如下。
" j+ K2 v+ J' E! i# E& T # C0 _) T$ J5 V5 {
- 0.780392: 653 military unIForm& r9 g/ z8 Q8 h2 A
- 0.105882: 907 Windsor tie( `& d( H/ s! \- P7 T
- 0.0156863: 458 bow tie
9 ?, l1 ?! A. ~! E - 0.0117647: 466 bulletproof vest
: t9 m% F& T$ e" H - 0.00784314: 835 suit
复制代码
: D% ~6 r* z, @( T" x/ }; n78%结果吻合陆军制服,10%结果吻合温莎领带,1%结果吻合领结,1%结果吻合防弹背心,不到1%结果吻合西装,总的来说这个结果还是挺令人满意的,NPU的算力确实还可以,多次运行程序,得出的结果完全相同,说明 iMX8MP NPU计算时使用的是固定的/静态的图像识别库。 5 y) D9 Q7 M7 T
我这边突发奇想,用这个Demo去测一下我自己的论坛头像,看看结果: 7 U4 Y( Y8 Y W1 J Y7 G6 o. D
/ j! O4 t. O: x5 L& C4 t" a" o
! Y+ Z e* [' a7 S
# \6 |. j2 D$ u- p% u3 @. Q
- 0.352941: 274 dingo! p, A( C6 C5 y# A1 k( {) {
- 0.254902: 265 Cardigan; _& v4 R) M @
- 0.184314: 264 Pembroke
8 A* J+ W- B I0 z - 0.0666667: 163 beagle; c0 S* A; Q: M
- 0.0156863: 354 gazelle
复制代码 9 G2 C* a2 |) [! f
3 ?+ N1 ]- ^8 D8 x2 b8 g p$ r35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。
- d2 M3 c2 d" F5 R) C3 _- h: @' _/ W$ h' \
再来试试另外几张图片,为了检验iMX8MP NPU的人工智能算力到底行不行,集齐了十张图,豪华尊享。由于源码不开放,所以无法移植源码到自己的例程中: % q5 b9 @6 g1 z/ z

# I0 s. s/ k* v$ E- 0.160784: 639 maillot
; M( P3 v4 d: K8 g0 a; k - 0.137255: 436 bathtub
1 ?2 f9 F6 e. M* j6 O8 X. b+ n - 0.117647: 886 velvet" f$ m. z: R5 b1 A' t
- 0.0705882: 586 hair spray& y" a+ \8 W( @1 W
- 0.0509804: 440 bearskin
复制代码
$ L: e: I: y4 r
2 h6 ~/ y* x6 c9 w
/ T; h2 l( O9 J- Z2 ?( Q2 z- 0.972549: 644 mask
. S, e' }$ X; ?/ X) d/ S1 }7 F - 0.00392157: 918 comic book' H# Q9 G' ?) ?
- 0.00392157: 904 wig
7 Y& l$ c6 W; V- X - 0.00392157: 797 ski mask
2 V0 A) l' ?" { - 0.00392157: 732 plunger
. t0 c2 F" B$ y. @4 e% e8 f
复制代码
" v; K/ v6 C* j" z& E, ~; g% D, v# f( m' G% C5 D p) o
 $ c, h- p/ G* t
- 0.380392: 583 grocery store2 z* ` [9 [$ u8 s
- 0.321569: 957 custard apple
; J$ V3 V+ c6 n - 0.0862745: 955 banana
- S+ V& y; c: j3 Z2 V' ^9 o - 0.0352941: 956 jackfruit; [" m' Q( @- c) w5 H
- 0.027451: 954 pineapple
复制代码 ! Z# V' ^& A1 {; K
8 E: f n* A& o& w( t( d7 x
 ; l: _7 R G M
- 0.254902: 918 comic book2 A# y0 H+ u# m# b
- 0.0470588: 771 running shoe/ b1 ?! o6 [( T" N: G1 Y/ Y
- 0.0470588: 474 can opener) j4 F) O+ @0 y0 @
- 0.0470588: 412 apron
% s# M6 N& V& `( c- n - 0.0392157: 794 shower cap
复制代码
* j; P, t0 s; v: {# ~) @- G
7 V) v5 [& B7 F3 n7 _ 9 M; h5 z& p- }! y9 F# D
- 0.52549: 922 book jacket, x7 n6 W% Y! d5 Q, _
- 0.0705882: 788 shield
) T; X' i. J5 g- l% ]/ j4 Y - 0.0705882: 452 bolo tie& o; |3 N* i9 W) {* d
- 0.0588235: 627 lighter# o. l/ f& P' |4 N$ P
- 0.0352941: 701 ** towel
复制代码 + |2 t& B! t/ P- Y" n* z5 E
1 N5 n* x; Y! h! B

( [3 g" f, A( D4 i* P, J! J( m8 U* H" l- 0.121569: 656 miniskirt/ N0 x# j4 V' A- |/ v
- 0.054902: 835 suit
/ z& ^8 Y0 j" M - 0.0470588: 852 television
, ?9 i3 ^) P, G4 j) J7 g - 0.0470588: 440 bearskin* H# f0 Q/ Y- K; |6 X
- 0.0392157: 679 neck brace
复制代码
) E, S" w% G7 R( s2 T* h- U. n' T+ F' `+ F, Z
 0 I# `& m$ s! x
- 0.65098: 918 comic book! O/ K' p+ s1 F4 g1 t% ?/ m7 i+ J
- 0.172549: 747 puck
. ]& G- c0 E9 l# `" D4 B# i! z { - 0.0196078: 922 book jacket$ R3 N3 h% b, `- l( w& K9 k
- 0.0196078: 723 ping-pong ball
5 x5 R/ {" W; c4 z, ] - 0.0117647: 806 soccer ball
& E7 O- Z3 R5 n9 u8 X
复制代码 2 f; `; [! H( P2 r
4 L3 Y5 g' \9 p0 P
* Q' w# M* [. E, p1 _
8 |+ A1 O4 e$ E% y1 V: v- 0.678431: 918 comic book: V0 u& }* J: H0 G, I' g+ ~
- 0.0784314: 418 balloon% b- B8 ?* F! v7 ] K/ K. k- B: |
- 0.0470588: 880 umbrella) q3 O7 Z5 M; `
- 0.0470588: 722 pillow
* p! }/ N7 H5 ~7 m8 q - 0.0156863: 644 mask
复制代码
# B/ u: x" P( R: T; ^" n8 [- L% _
3 c2 x) P- k9 Z' v) ?5 v1 M* Q R; N, c6 P6 R9 Y% X( |$ l
- 0.184314: 585 hair slide
' {5 `% Y5 t2 \% j& \ - 0.156863: 794 shower cap
9 f8 b3 Z7 ^2 I n ~, D - 0.0941176: 797 ski mask1 T2 p, j, \: V1 k& A2 e! k0 q
- 0.0431373: 644 mask
( l$ y% ? `, U3 K5 D1 d! T - 0.0352941: 571 gasmask
复制代码 ) `& R' Q9 K9 m) N, g
7 Q% w/ u _, F- G3 M" o6 L, u! J十张图片的识别结果均以编码方式呈现,从识别的概率结果来看,飞凌的这款 iMX8MP 开发板的NPU的算力还是非常强的。
: [6 F6 m# ^' 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 7 X0 M/ U! x8 O+ p
% m; K' d3 G' X* P7 |2 c! t3 m0 a
|