|

1 ?; J Y2 N; O1 B; {( p0 v* H作者|donatello1996 来源 | 电子发烧友 题图|飞凌嵌入式 原文链接:https://www.forlinx.com/article_view_809.html iMX8MPlus 核心板: https://www.forlinx.com/product/136.html ; w. V' ]+ ^+ j
4 S$ x# g3 N0 ^+ r$ y9 j9 K
飞凌嵌入式OKMX8MP-C开发板基于NXP i.MX 8M Plus处理器开发设计,该系列处理器专注于机器学习与视觉、高级多媒体以及具有高可靠性的工业自动化。旨在满足智慧城市、工业互联网、智能医疗、智慧交通等应用的需求。强大的四核或双核Arm® Cortex®-A53处理器,主频高达1.6GHz,带有神经处理单元(NPU),最高运行速率可达2.3TOPS。
+ b/ ~+ |/ R( i, D7 u: C7 B本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15.0,主要介绍移植官方NPU TensorFlow例程。 " K. D1 u6 U/ w/ H8 a5 w
一、 NPU的图像识别例程 ( r9 P# F/ o6 W) e
在OKMX8MP-C 开发板提供的产品使用手册中,有一章是针对 iMX8MP 板上NPU的图像识别例程,位于EMMC分区的/usr/bin/tensoRFlow-lite-2.3.1/examples,我将EMMC分区mount为了/media分区,找到对应的例程位置。 ; X8 @, E- s* ]' Y/ ?* r: W5 A1 ?

# E9 }8 A& W! @
; c, }+ H, Z/ y3 A3 l. E
* n" }6 s/ n8 F) b4 D$ x将 iMX8MP 开发板切换到EMMC启动,进入/usr/bin/tensorflow-lite-2.3.1/examples/目录下,运行测试example: ( Q M8 V% w* q& x$ c% u

$ r! \# C4 _1 s( S N: A( S/ i再将 iMX8MP 开发板切回TF卡系统运行,提示报错,label_image程序的nnapi需要动态链接库支持:
/ I. ^0 H" i' p# w5 I
; P! R$ t J% g* ?: | 5 s& N- s, y {6 f6 H0 W8 f+ y
- libm-2.30.so
( n& c" B8 N G3 {/ ?& ^ - libneuralnetworks.so.1.1.9
: n3 z H. Q4 w1 \ - libnnrt.so.1.1.9& U0 E& o3 I L( A
- libArchModelSw.so
6 D+ }; L+ e9 V' b1 |( M4 | - libGAL.so" }) B6 R$ e# j8 I# x
- libNNArchPerf.so
- U% G! H6 j u1 ]/ C' g - libOpenVX.so.1.3.0( [+ V, } F. K% v+ |+ Z+ c
- libovxlib.so.1.1.0* g1 W, J T/ T& L
- libVSC.so
复制代码
( T2 H0 v' t# c2 l1 y* {6 Q$ \/ z
其中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/),再次运行: , m% y0 Q( D# e$ V( J4 \% q1 l

0 A5 w* v- i5 u& G
: C% ]" |' E9 X可以看到没有任何报错,运行库环境移植成功,接下来可以在 iMX8MP 开发板上愉快地进行tensorflow例程的玩耍了。 0 p1 p5 y* L3 |8 @/ u
二、TensorFlow例程验证 0 T5 r/ y* P# i8 \0 s
飞凌嵌入式iMX8MP官方资料中提供了许多测试例程,先用官方DEMO做一下验证,其验证结果如下。 . U. ?7 p6 d# r1 M$ T" z
 $ w3 X, i. |" H
- 0.780392: 653 military unIForm, D# O$ t. k$ T' Q, E
- 0.105882: 907 Windsor tie
( B, ?7 {# Y! U. N. `: h - 0.0156863: 458 bow tie
J9 V" B5 }) O0 z! t - 0.0117647: 466 bulletproof vest
* e5 v8 }2 A# W1 n - 0.00784314: 835 suit
复制代码
% f' r8 y: [2 Z, d! F& i78%结果吻合陆军制服,10%结果吻合温莎领带,1%结果吻合领结,1%结果吻合防弹背心,不到1%结果吻合西装,总的来说这个结果还是挺令人满意的,NPU的算力确实还可以,多次运行程序,得出的结果完全相同,说明 iMX8MP NPU计算时使用的是固定的/静态的图像识别库。 5 q, R% c! D% n# W% d& b) A! b4 |0 p
我这边突发奇想,用这个Demo去测一下我自己的论坛头像,看看结果: ( b1 X5 s3 D$ V& Y
. M5 {! n( L* t
! n. o/ |) ]8 ~% P+ \" y+ [
d$ l( ]3 h* `* W* S, h
- 0.352941: 274 dingo
4 L, V9 I% ~; M1 B - 0.254902: 265 Cardigan
7 B. z7 f' ]. m" D2 N - 0.184314: 264 Pembroke: J# n1 P/ Y6 W9 \) Q$ C6 [
- 0.0666667: 163 beagle
+ e [5 y% c0 W; v6 x - 0.0156863: 354 gazelle
复制代码
X D8 N5 w& \# c; R$ e/ {5 A! ?: W) J
35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。, C/ M, a6 ]8 r4 {; L6 O8 S! \
4 @! b8 A& X4 Z/ [( Y/ E
再来试试另外几张图片,为了检验iMX8MP NPU的人工智能算力到底行不行,集齐了十张图,豪华尊享。由于源码不开放,所以无法移植源码到自己的例程中:
) D- ]8 ^4 r- T. @; O2 C( a" V9 r
 $ H# H, K# b) N' _- c5 w5 w
- 0.160784: 639 maillot
/ ?4 e: t% p, ?' n6 c8 P1 { - 0.137255: 436 bathtub% c1 {# i# J' `, ^* x8 q; l9 k) h
- 0.117647: 886 velvet9 k/ i' p2 r% L) f" T' s; _
- 0.0705882: 586 hair spray
) M# t2 j, b4 A; g - 0.0509804: 440 bearskin
复制代码
2 k% w2 S3 W/ P9 Y8 R a1 F3 b/ V! m
 8 p( R$ B. ?/ c
- 0.972549: 644 mask
, d" t: G8 {5 ?9 w" n3 _: g - 0.00392157: 918 comic book% @6 Y4 z( e/ H3 O
- 0.00392157: 904 wig
9 A$ h: R2 ]) [ - 0.00392157: 797 ski mask% ^( s$ X- M8 w& J6 M) ?
- 0.00392157: 732 plunger
3 n/ U7 F- j8 |8 k
复制代码 & R( C: t5 c& \& S3 A
- E, {$ z5 g3 _+ f3 M9 ?% o% ^
 # n6 P n+ V5 ^
- 0.380392: 583 grocery store/ | i4 a( A2 F6 I: W0 u7 T9 W
- 0.321569: 957 custard apple- D9 s0 v$ Y( l$ Y
- 0.0862745: 955 banana
2 U- k! Q S" o+ N - 0.0352941: 956 jackfruit1 m& l- d' ^. u$ p! g: e
- 0.027451: 954 pineapple
复制代码 7 R' ^9 v, w' V2 s
* Z) N1 ?( v w1 U3 k9 K * p' W( T8 b: r7 o/ N7 j4 C
- 0.254902: 918 comic book
3 ~% h# c' u6 k) q7 Q$ s6 r# W - 0.0470588: 771 running shoe+ c- q, l4 b j' g
- 0.0470588: 474 can opener# L7 s& x: j0 ~9 H
- 0.0470588: 412 apron
- O8 K% G4 f8 F9 G - 0.0392157: 794 shower cap
复制代码 $ M3 L3 P- V/ }8 i# g+ O& V; e
' h% }2 h9 T% ? p% ` R

: [2 @8 ]# M+ m+ Z: S/ \& N- 0.52549: 922 book jacket1 S0 ~" {% s& R7 F# g& v0 N# u1 M
- 0.0705882: 788 shield3 Q# d3 y% T+ n
- 0.0705882: 452 bolo tie
5 ^! K. G5 N% {5 J' M. K4 g - 0.0588235: 627 lighter
1 `' M0 ?$ N4 X& c+ i# l S - 0.0352941: 701 ** towel
复制代码
1 l: \4 V; e+ k( I! I: A9 C! u" O
( R1 O1 V4 M4 D8 @. }
2 M$ Z- A+ X6 n6 z- 0.121569: 656 miniskirt
& l3 x9 d* P+ n b - 0.054902: 835 suit
$ ^5 i9 P2 I7 S) s o" }: S ] - 0.0470588: 852 television- @7 V) {4 m2 s9 W# R# V- O! M8 r5 V
- 0.0470588: 440 bearskin5 m2 t* \& e/ h) d& p8 T
- 0.0392157: 679 neck brace
复制代码
. ^) o% R: X$ t; K9 U' r5 H' Y3 e1 o: j
 5 X% K+ m, c1 ~7 N
- 0.65098: 918 comic book
% d% z3 q0 U0 {0 G - 0.172549: 747 puck
- U' ?) ^3 J3 N! h, j7 g - 0.0196078: 922 book jacket
, y$ G8 [# j0 {* r0 f - 0.0196078: 723 ping-pong ball
3 B+ q7 y" T3 e x - 0.0117647: 806 soccer ball
8 `% o) m! N2 F. \ p
复制代码
3 J, v# D3 o p# ^/ s0 e+ r4 ^) G
; k: n: j/ w; h! ~ z- K: g7 H$ r . W0 t0 [7 ~ n5 t" X( g
+ |- A4 J4 {- A' y' o+ r- 0.678431: 918 comic book, p+ d9 U+ H$ ^, U/ s+ U; E
- 0.0784314: 418 balloon
5 T' h' d$ y, v% m$ ~. N - 0.0470588: 880 umbrella A$ Z6 D. \$ U y
- 0.0470588: 722 pillow
; n. k) L! P4 A$ y, R - 0.0156863: 644 mask
复制代码 8 }: ^/ ]( C- S8 T K+ E+ \
( D* p% S Z5 q4 |

5 ]% i4 W" U$ }& a0 D- 0.184314: 585 hair slide# y8 ~1 O; ^9 N& A* z
- 0.156863: 794 shower cap
- ~9 ]; s" S& D8 u: |7 p - 0.0941176: 797 ski mask
' Q2 ]9 R& ~2 U) y - 0.0431373: 644 mask7 ]+ L/ O! G$ M- [
- 0.0352941: 571 gasmask
复制代码
- y# m' U0 Z) Y5 x0 U
9 d* \; S3 z1 y) v4 k十张图片的识别结果均以编码方式呈现,从识别的概率结果来看,飞凌的这款 iMX8MP 开发板的NPU的算力还是非常强的。 % }: G: i: u( v7 Q9 v
据官方介绍,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 P) w8 y5 w! c% A
! E7 l# g' M% y- j% y# P
|