3 H2 K G! F0 S; R0 ~1 P- x作者|donatello1996 来源 | 电子发烧友 题图|飞凌嵌入式 原文链接:https://www.forlinx.com/article_view_809.html iMX8MPlus 核心板: https://www.forlinx.com/product/136.html / R i+ E6 v/ v) @$ _' _
% Z+ q S. b; w7 ]6 c" }飞凌嵌入式OKMX8MP-C开发板基于NXP i.MX 8M Plus处理器开发设计,该系列处理器专注于机器学习与视觉、高级多媒体以及具有高可靠性的工业自动化。旨在满足智慧城市、工业互联网、智能医疗、智慧交通等应用的需求。强大的四核或双核Arm® Cortex®-A53处理器,主频高达1.6GHz,带有神经处理单元(NPU),最高运行速率可达2.3TOPS。 7 h7 L; V, o3 l! S: F- T
本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15.0,主要介绍移植官方NPU TensorFlow例程。
2 a. h/ M; j3 }3 G$ O一、 NPU的图像识别例程 8 ]8 s8 U- k' ]
在OKMX8MP-C 开发板提供的产品使用手册中,有一章是针对 iMX8MP 板上NPU的图像识别例程,位于EMMC分区的/usr/bin/tensoRFlow-lite-2.3.1/examples,我将EMMC分区mount为了/media分区,找到对应的例程位置。
$ H% V f' M: x6 Q3 r. b6 B2 D" z$ m2 t6 ~! H( |! N, A9 X
: _! |. ` V, d: B6 S3 i3 r* y, f3 {6 g, n% O" d! }
将 iMX8MP 开发板切换到EMMC启动,进入/usr/bin/tensorflow-lite-2.3.1/examples/目录下,运行测试example:
" K% J+ I6 @* Y) Z0 i/ d* b) M F( T; m3 X) A( B
再将 iMX8MP 开发板切回TF卡系统运行,提示报错,label_image程序的nnapi需要动态链接库支持: 7 v7 r7 ?! o4 n/ d, U4 ~
8 O0 ]+ [ Y. [$ F) G, D( c8 Y9 Q, ]& D! \$ L, Q# C/ w, Z& O
- libm-2.30.so% ~6 }1 `' G( m5 }8 v" ~, s: Y- P( h
- libneuralnetworks.so.1.1.9* J8 b. ^% s( q6 G# w4 O% m
- libnnrt.so.1.1.96 `7 a: `3 B% i5 E
- libArchModelSw.so
6 v& | J' s3 K* H; C& K - libGAL.so
* j& ]) k8 U% j% i5 P - libNNArchPerf.so" x+ d+ F$ M! v2 e- @
- libOpenVX.so.1.3.0/ ^! v4 a+ G" x! a( N: G
- libovxlib.so.1.1.07 N/ L" m8 ^8 X( O/ \ ~
- libVSC.so
复制代码 1 L3 d, z. d# U* l' o
2 }/ q; ~6 i1 f7 P; H& ]( C
其中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/),再次运行:
. a/ E2 F* i* j6 B
/ V6 ` ?( Y6 V$ a( N8 c# `9 k& j0 @ q( ]1 J, m! G( t
可以看到没有任何报错,运行库环境移植成功,接下来可以在 iMX8MP 开发板上愉快地进行tensorflow例程的玩耍了。 % ~6 R& [5 I1 B, z x5 S4 z9 v
二、TensorFlow例程验证
9 ^+ B, l$ @* k: ?, d飞凌嵌入式iMX8MP官方资料中提供了许多测试例程,先用官方DEMO做一下验证,其验证结果如下。 $ \6 q9 Z I6 P
, d2 W! Q0 s0 X9 s/ ?- 0.780392: 653 military unIForm8 z2 q4 Q0 \) @& }
- 0.105882: 907 Windsor tie
; g! {% Q0 ?1 V' p; `$ ~ - 0.0156863: 458 bow tie
& Q3 p2 T# g9 s9 p1 a - 0.0117647: 466 bulletproof vest
/ f5 j* w- B# F4 K$ O+ q - 0.00784314: 835 suit
复制代码
, w9 l0 W* f! M4 M H0 ?78%结果吻合陆军制服,10%结果吻合温莎领带,1%结果吻合领结,1%结果吻合防弹背心,不到1%结果吻合西装,总的来说这个结果还是挺令人满意的,NPU的算力确实还可以,多次运行程序,得出的结果完全相同,说明 iMX8MP NPU计算时使用的是固定的/静态的图像识别库。
/ H+ x0 G. k0 e* V6 v; m S我这边突发奇想,用这个Demo去测一下我自己的论坛头像,看看结果: 0 f, ~% @( K' l# c
C: n2 A9 ]9 r8 S: ?. J5 g* ~# ^
0 V* t' o& m8 r1 f; n
/ v9 u( `, c' V7 R2 d/ |
- 0.352941: 274 dingo) D3 C& I2 g6 z' W: w
- 0.254902: 265 Cardigan/ F9 \, }7 D' _2 T
- 0.184314: 264 Pembroke
' q* C* o* f: C/ b) A! j" D! F - 0.0666667: 163 beagle
8 e- C0 H+ c- b0 M - 0.0156863: 354 gazelle
复制代码
5 H$ e0 ]& r) [( [/ {4 ?0 ?4 K
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。 }7 U* H {# @7 c5 R. `6 ~* X: K" B) g
! W$ I( H8 O N- Y) @, b再来试试另外几张图片,为了检验iMX8MP NPU的人工智能算力到底行不行,集齐了十张图,豪华尊享。由于源码不开放,所以无法移植源码到自己的例程中:
% l2 O, `4 W \) _6 |: o N % P; m- X" _7 \; @# S S
- 0.160784: 639 maillot: |% N: g( j+ {9 B Q
- 0.137255: 436 bathtub0 t+ c: [) P2 Y7 e+ r* u
- 0.117647: 886 velvet
5 s0 d5 B" L- T1 L& i9 Z - 0.0705882: 586 hair spray
$ I# L; `7 N% |' g - 0.0509804: 440 bearskin
复制代码
9 E- u9 G$ V, Z
/ H! Y! R( y4 N, o8 \" b3 k) n$ m( U u3 A/ w
- 0.972549: 644 mask
/ C& _9 n1 z( g7 n C - 0.00392157: 918 comic book) N) H& G" Z# m! t
- 0.00392157: 904 wig! G3 w5 F, f. e. I+ i% \/ w
- 0.00392157: 797 ski mask8 O, `& b" H# _$ P9 l
- 0.00392157: 732 plunger
( ]7 F/ w! v4 H
复制代码
4 @: \( K. V H5 Z, j4 o5 b+ {; x7 q' U9 g0 [
& |# q/ s% h" ~2 O$ |9 k/ z- 0.380392: 583 grocery store, ^ q+ s+ S) r
- 0.321569: 957 custard apple7 a7 W9 N$ k+ @2 c6 Z E, j
- 0.0862745: 955 banana
+ a6 @& m' b0 a3 v" N9 r - 0.0352941: 956 jackfruit, ?# ^ h6 n& w. J
- 0.027451: 954 pineapple
复制代码
2 t4 b3 Q# ]4 C0 F
8 v1 Z" @) Z" Y
3 J& x) p7 k' i& B4 t# Z# J- 0.254902: 918 comic book) V; K: f2 u7 {; a5 h4 s
- 0.0470588: 771 running shoe3 p* N4 ^5 u% w a( P+ D* {
- 0.0470588: 474 can opener
+ w0 v9 x- ~/ ^1 D: x3 t) I0 l' M - 0.0470588: 412 apron
: g% Q `: O" p7 i) d/ r; f) ] - 0.0392157: 794 shower cap
复制代码 ( S! C* b3 I. m O
5 h& V s2 ?& n: o0 |& n# k3 Z1 K4 V9 Z
- 0.52549: 922 book jacket) S6 f! q8 {0 K. |, A
- 0.0705882: 788 shield$ v! P/ o, _: K/ K
- 0.0705882: 452 bolo tie
5 U: {% P1 b0 R- j4 I5 @ _ - 0.0588235: 627 lighter
' {; [: Q4 V: X9 F - 0.0352941: 701 ** towel
复制代码 ) Z/ m/ ~6 q Z5 P' F
8 T, X" h; [& x' [5 p6 f- J4 r+ e c. h' M( z0 D! Y! d
- 0.121569: 656 miniskirt
. G. I- E& F( N - 0.054902: 835 suit' c4 D; ?6 } i" J
- 0.0470588: 852 television8 f' l* \ _4 @$ |8 F, u8 _" ~
- 0.0470588: 440 bearskin# X( z: B! v3 j( A
- 0.0392157: 679 neck brace
复制代码 2 S0 s$ G+ V2 f( Y7 U4 Q8 A
" F: x$ O6 @+ \% \7 i7 H; A1 {# ]' w) r. P+ W
- 0.65098: 918 comic book2 Q8 z `9 x' `: [/ t
- 0.172549: 747 puck' @* l! t, ~6 G
- 0.0196078: 922 book jacket
0 O- `2 b$ A* p1 P5 Q - 0.0196078: 723 ping-pong ball2 x3 h0 `* Y7 v
- 0.0117647: 806 soccer ball
* P8 O1 |8 b- [. r" g, }5 I8 D
复制代码 3 X# y( L6 M: O2 x% K) \; L0 n
" O! P* {( e* D. R
* Q k2 R: k8 N1 W# k
. ]4 r9 I9 [' S$ t, _! `- 0.678431: 918 comic book9 [6 ]' j( L2 p/ k& H8 f. G! |
- 0.0784314: 418 balloon0 n" x) s& m/ M$ U9 n
- 0.0470588: 880 umbrella
2 H7 b* Q! ] _ - 0.0470588: 722 pillow8 s! {4 k% ^4 z- v4 a
- 0.0156863: 644 mask
复制代码 / J$ l: e8 n, c5 P+ v1 U0 V
: B. y/ @* @( C
$ G. o: B1 p; C- 0.184314: 585 hair slide
0 T# U& s; B' `4 S) `% c8 d+ G - 0.156863: 794 shower cap3 u: M# b6 [ G
- 0.0941176: 797 ski mask
* l, I( i4 I v8 u* E( s, R - 0.0431373: 644 mask
& L) o7 V, t) z% q2 s6 \- b' q1 }, Z - 0.0352941: 571 gasmask
复制代码
2 E+ a; ]3 ]7 r
4 |5 ?$ n: E, O- W6 N' K8 G十张图片的识别结果均以编码方式呈现,从识别的概率结果来看,飞凌的这款 iMX8MP 开发板的NPU的算力还是非常强的。 1 _7 h9 v4 B1 t" v" e# W& {' h
据官方介绍,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 % O& h, ] W5 I1 L# O' h+ X
1 N: F/ `, ~- M4 k |