|

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

& F7 w. s( Z4 i) Q( }) S0 D% g5 [( }. h1 E P
将 iMX8MP 开发板切换到EMMC启动,进入/usr/bin/tensorflow-lite-2.3.1/examples/目录下,运行测试example:
: j2 {# Q# N' R+ _ 4 t/ ^! [! `# G# F* y
再将 iMX8MP 开发板切回TF卡系统运行,提示报错,label_image程序的nnapi需要动态链接库支持:
) w7 o4 E. {' W" P. n: Y4 f3 T1 q! q# i7 h" a
 . t. O" j6 o/ M$ `2 H( t
- libm-2.30.so
- J; M+ l( C% T - libneuralnetworks.so.1.1.9
/ O6 r* T9 Y9 X: J5 v2 m- [ - libnnrt.so.1.1.90 \: {' Y n7 i# {; L
- libArchModelSw.so2 \8 |* S/ w( M( f
- libGAL.so: k# g! R! n1 `) g/ b+ E, @% G
- libNNArchPerf.so0 d( K9 z3 O o+ v4 X( b+ z
- libOpenVX.so.1.3.0
* L* t9 ?) K2 P6 x& i4 x# [. u - libovxlib.so.1.1.0
/ ~6 L3 i0 w6 \( ^ - libVSC.so
复制代码
' b+ N5 S! k0 A4 v- b5 f: v2 n; l7 Z* x& k- @+ {
其中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 N# x+ m2 a' r2 W1 F9 |- z
 , M9 c, S7 x# v! W8 }$ K
5 n4 C7 ~; K+ z! ]可以看到没有任何报错,运行库环境移植成功,接下来可以在 iMX8MP 开发板上愉快地进行tensorflow例程的玩耍了。 9 \4 d; P y! J
二、TensorFlow例程验证
/ K$ a3 \+ z8 F6 K! N飞凌嵌入式iMX8MP官方资料中提供了许多测试例程,先用官方DEMO做一下验证,其验证结果如下。
* y" q9 w2 N+ h0 C; ?. w
) g- W7 o# O" \- 0.780392: 653 military unIForm2 u1 n7 c6 I0 s. t9 {% t) p5 Q
- 0.105882: 907 Windsor tie1 e1 B9 y6 P# Z/ j
- 0.0156863: 458 bow tie
3 S: e" o G4 T$ x - 0.0117647: 466 bulletproof vest+ G3 e. O# R6 z0 s6 q
- 0.00784314: 835 suit
复制代码
1 W. |; r9 k! U4 i. O$ W78%结果吻合陆军制服,10%结果吻合温莎领带,1%结果吻合领结,1%结果吻合防弹背心,不到1%结果吻合西装,总的来说这个结果还是挺令人满意的,NPU的算力确实还可以,多次运行程序,得出的结果完全相同,说明 iMX8MP NPU计算时使用的是固定的/静态的图像识别库。 : i/ i5 E. e- Y! N- G3 g# R$ V% E
我这边突发奇想,用这个Demo去测一下我自己的论坛头像,看看结果: ) }: O* S6 d8 ?
5 X( ?9 \+ S# I2 G

* P% j( a' [- ~3 q( C8 @ p" `* z
, G% g& u, T) G2 |" a
- 0.352941: 274 dingo4 H. F6 N: v, ]5 o
- 0.254902: 265 Cardigan
' F. r: u) o6 V0 ]$ Q- m - 0.184314: 264 Pembroke5 B. H6 [0 t$ g4 W; }
- 0.0666667: 163 beagle
# I4 |& B" ~% ^3 a3 T. a - 0.0156863: 354 gazelle
复制代码
# ^: c- J2 [5 f R% o6 N0 n: H% X) L2 V& [1 q& o6 @. w
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。2 i* X& B7 k2 |
* F; P5 {" W" b2 N1 `( F9 d
再来试试另外几张图片,为了检验iMX8MP NPU的人工智能算力到底行不行,集齐了十张图,豪华尊享。由于源码不开放,所以无法移植源码到自己的例程中:
0 H* X7 d) F$ k2 s X5 c
 ! D1 @0 c4 B9 Y: P
- 0.160784: 639 maillot7 A: b9 ]8 p6 H) N# u, V
- 0.137255: 436 bathtub
: d; D1 {" A `2 j7 q - 0.117647: 886 velvet k- F% m8 `& h
- 0.0705882: 586 hair spray
! Q, W0 b+ ?# k0 s0 ? A - 0.0509804: 440 bearskin
复制代码 8 ~ _" V, i% d: S/ O6 G! W$ w
# Z* d% L8 U3 G# o/ U2 p( j

# X% B) w- `/ q& _' S" `! t5 \- 0.972549: 644 mask, F+ B# w; ] e1 E/ u
- 0.00392157: 918 comic book
) X; b" u X$ q - 0.00392157: 904 wig
0 [+ Y& J) j a, i- O1 m - 0.00392157: 797 ski mask
6 F) e; [1 r% y - 0.00392157: 732 plunger
% x4 A% J+ z' z& B
复制代码
- ^7 R0 b6 |9 E6 Y# Y. y2 z; O R7 Z% z
 ( m# y1 b9 O) W. h8 z# D
- 0.380392: 583 grocery store
6 D0 [8 `+ m* Q: `, L0 Z - 0.321569: 957 custard apple- ~ M9 z. }% b- w
- 0.0862745: 955 banana$ n3 [) D1 ?6 C4 Y) t
- 0.0352941: 956 jackfruit; g4 E) z2 n; q
- 0.027451: 954 pineapple
复制代码
& O9 h1 z3 a3 I3 h
& b/ {+ s. ^) X) O) W $ A+ a) Z' C7 p9 D$ U' L
- 0.254902: 918 comic book
; X N/ A- e& `1 C - 0.0470588: 771 running shoe
7 `2 g) v2 C1 l1 z* h - 0.0470588: 474 can opener
: v$ ~' z+ U7 R8 }' H/ ^ - 0.0470588: 412 apron
% J% y. F) ^. P5 L - 0.0392157: 794 shower cap
复制代码
& {* S( a+ U6 C- k8 q
% n( E; s! u4 |6 @! B% f# l& C5 d( \ 4 D/ n$ e/ o; r9 S. _0 J
- 0.52549: 922 book jacket9 b7 X( }5 N* o
- 0.0705882: 788 shield
?) G3 a3 d; M( s - 0.0705882: 452 bolo tie
6 ~ l( r1 V4 C0 B - 0.0588235: 627 lighter
; ~+ w3 }" G p- k4 } - 0.0352941: 701 ** towel
复制代码 . w0 A, w6 y0 j1 I# b
6 T0 ]- w. L7 S7 N S8 e
8 N- U l# Y/ d. F8 {# G( ?- 0.121569: 656 miniskirt/ [( g: Z! l' @2 Q8 L
- 0.054902: 835 suit8 }: n9 I3 q% p- `( z% e2 x1 r4 V
- 0.0470588: 852 television4 w: E! E2 J( Z0 e1 G& D5 a$ r
- 0.0470588: 440 bearskin
& ]( N( x9 x5 t5 l, H; q3 r - 0.0392157: 679 neck brace
复制代码
, g5 k, }& C' x7 _5 F) z/ {) `+ R' o _( T

1 s' D4 Q& _- F) I0 ^; [- 0.65098: 918 comic book+ W9 k5 D* h# n4 \! C( Y
- 0.172549: 747 puck
7 l' D2 v7 ~* j, ]4 D5 j9 B - 0.0196078: 922 book jacket! H H( i& Q, g5 ?
- 0.0196078: 723 ping-pong ball: \, ^" e k( _/ x
- 0.0117647: 806 soccer ball: U7 p$ _; h: ]' C
复制代码 3 D7 b6 s0 @7 b0 }
( k% X9 G. M) V- Y9 U0 j
 ! p2 r( |9 d, L
- 8 P6 J7 Z6 T- s2 A5 F% \5 B- s
- 0.678431: 918 comic book
+ ?7 V6 { M9 Q8 J! k - 0.0784314: 418 balloon! x: m5 @' B" s; D% C
- 0.0470588: 880 umbrella
* L8 |7 g& x& B3 a; z# |4 o - 0.0470588: 722 pillow
. B. f! V0 o9 `! h, U# E/ A( g4 k - 0.0156863: 644 mask
复制代码 1 D% Z, f0 ^' Q# c5 |
. r8 D) P5 P; _9 j
 * s( |, e `5 C7 I. T$ H
- 0.184314: 585 hair slide
* o7 l$ [$ r- i& M) A/ @) ^ - 0.156863: 794 shower cap, Z( a+ s3 b9 f: A% }1 R- F7 h Y3 U y
- 0.0941176: 797 ski mask0 W/ n& ?) f( {$ [
- 0.0431373: 644 mask
' q D, c3 m3 U8 Q8 F! [ - 0.0352941: 571 gasmask
复制代码 9 S- T6 h* u4 D. a1 K
7 w1 i: e% H; w) H6 U: t2 A
十张图片的识别结果均以编码方式呈现,从识别的概率结果来看,飞凌的这款 iMX8MP 开发板的NPU的算力还是非常强的。 3 b* S0 D- Y c
据官方介绍,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
" P8 U( ]0 ^* |2 f& n" ?) b0 w) I: `2 Y
|