0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

手把手带你玩转—i.MX8MP开发板移植官方NPU TensorFlow例程

飞凌嵌入式 2022-01-10 16:32 次阅读

作者|donatello1996

来源 | 电子发烧友

题图|飞凌嵌入式

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

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

一、NPU的图像识别例程

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

4a5dff88-6fd6-11ec-86cf-dac502259ad0.jpg

4a914f64-6fd6-11ec-86cf-dac502259ad0.jpg

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

4ad0b01e-6fd6-11ec-86cf-dac502259ad0.jpg


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

4af9867e-6fd6-11ec-86cf-dac502259ad0.jpg

libm-2.30.solibneuralnetworks.so.1.1.9libnnrt.so.1.1.9libArchModelSw.solibGAL.solibNNArchPerf.solibOpenVX.so.1.3.0libovxlib.so.1.1.0libVSC.so

其中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/),再次运行:


4b47624a-6fd6-11ec-86cf-dac502259ad0.jpg


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

二、TensorFlow例程验证

先用飞凌嵌入式官方DEMO做一下验证,其验证结果如下。

0.780392: 653 military unIForm0.105882: 907 Windsor tie0.0156863: 458 bow tie0.0117647: 466 bulletproof vest0.00784314: 835 suit

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

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

4bbc2422-6fd6-11ec-86cf-dac502259ad0.jpg

0.352941: 274 dingo0.254902: 265 Cardigan0.184314: 264 Pembroke0.0666667: 163 beagle0.0156863: 354 gazelle

35%的野狗,25%的毛衣,18%的Pembroke???,6%的小猎犬(beagle),1%的羚羊,看到羚羊(gazelle)我属实蚌埠住了,哈哈。

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

4be37144-6fd6-11ec-86cf-dac502259ad0.jpg

0.160784: 639 maillot0.137255: 436 bathtub0.117647: 886 velvet0.0705882: 586 hair spray0.0509804: 440 bearskin

4c0de8c0-6fd6-11ec-86cf-dac502259ad0.jpg

0.972549: 644 mask0.00392157: 918 comic book0.00392157: 904 wig0.00392157: 797 ski mask0.00392157: 732 plunger

4c35b6fc-6fd6-11ec-86cf-dac502259ad0.jpg

0.380392: 583 grocery store0.321569: 957 custard apple0.0862745: 955 banana0.0352941: 956 jackfruit0.027451: 954 pineapple

4c616d38-6fd6-11ec-86cf-dac502259ad0.jpg

0.254902: 918 comic book0.0470588: 771 running shoe0.0470588: 474 can opener0.0470588: 412 apron0.0392157: 794 shower cap

4c942cdc-6fd6-11ec-86cf-dac502259ad0.jpg

0.52549: 922 book jacket0.0705882: 788 shield0.0705882: 452 bolo tie0.0588235: 627 lighter0.0352941: 701 paper towel

4cd8d314-6fd6-11ec-86cf-dac502259ad0.jpg

0.121569: 656 miniskirt0.054902: 835 suit0.0470588: 852 television0.0470588: 440 bearskin0.0392157: 679 neck brace

4d08fbfc-6fd6-11ec-86cf-dac502259ad0.jpg

0.65098: 918 comic book0.172549: 747 puck0.0196078: 922 book jacket0.0196078: 723 ping-pong ball0.0117647: 806 soccer ball

4d3f4176-6fd6-11ec-86cf-dac502259ad0.jpg

0.678431: 918 comic book0.0784314: 418 balloon0.0470588: 880 umbrella0.0470588: 722 pillow0.0156863: 644 mask

4d721452-6fd6-11ec-86cf-dac502259ad0.jpg

0.184314: 585 hair slide0.156863: 794 shower cap0.0941176: 797 ski mask0.0431373: 644 mask0.0352941: 571 gasmask

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

据官方介绍,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张图像的图像分类。

作者简介

donatello1996,某大型企业资深嵌入式工程师,电子发烧友论坛技术大牛,同时也是飞凌嵌入式多年铁粉,曾基于飞凌多款板卡产出过优质测评文章或使用心得。本期三篇文章为donatello1996在使用OKMX8MP-C开发板过程中精心产出的干货,在此对donatello1996表示感谢。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4417

    浏览量

    93915
收藏 人收藏

    评论

    相关推荐

    【米尔-TIAM62开发板-接替335x-试用评测】+(五)手把手玩转U-Boot控制CPU管脚

    ,以确保正确使用GPIO。所以我接下来以米尔-TIAM62开发板为例,手把手实战U-Boot控制CPU管脚: 1.U-Boot终端命令玩转GPIO U-Boot可不是吃素的,它可以直接用命令来控制
    发表于 01-08 10:02

    手把手带您使用MCUXpresso Config Tools生成USB组合设备

    手把手带您使用MCUXpresso Config Tools生成USB组合设备
    的头像 发表于 10-31 16:55 745次阅读
    <b class='flag-5'>手把手</b>带您使用MCUXpresso Config Tools生成USB组合设备

    手把手教你学FPGA仿真

    电子发烧友网站提供《手把手教你学FPGA仿真.pdf》资料免费下载
    发表于 10-19 09:17 1次下载
    <b class='flag-5'>手把手</b>教你学FPGA仿真

    手把手教你基于RT-Thread Studio使用STM32单片机的PWM外设

    目前我使用的是STM32L475系列单片机,是ali当时在PDD 50块钱卖的一个开发板,其他STM32单片机参考即可,这里会手把手教大家基于RTT Studio 来使用PWM。
    的头像 发表于 09-28 15:12 2545次阅读
    <b class='flag-5'>手把手</b>教你基于RT-Thread Studio使用STM32单片机的PWM外设

    手把手教你制作无线充电器

    手把手教你制作无线充电器(无线充电原理+产品应用+DIY实例)
    发表于 09-28 07:48

    手把手教你pcb压合的整个流程,小白也能玩转电路板制作

    手把手教你pcb压合的整个流程,小白也能玩转电路板制作
    的头像 发表于 09-18 10:43 1645次阅读

    i.MX8MP开发板上实现SPI转CAN

    飞凌嵌入式OKMX8MP-C开发板有两路原生CAN总线,但用户在开发产品时可能需要用到更多的CAN,这该如何解决呢?今天小编将为大家介绍一种SPI转CAN的方法,供各位工程师小伙伴参考。 说明
    发表于 09-11 15:26

    在vivado上一直识别不了开发板的JATG接口怎么解决?

    我在vivado上一直识别不了开发板的JATG接口,也已经参考社区提供的解决方案尝试了:[size=1.75]RVMCU课堂「9」: 手把手教你玩转RVSTAR—常见问题,设备管理器显示如下,但是vivado还是识别不了,请大佬
    发表于 08-16 07:16

    手把手教您家用路由器应该如何挑选

    手把手教您家用路由器应该如何挑选
    的头像 发表于 07-26 09:20 949次阅读
    <b class='flag-5'>手把手</b>教您家用路由器应该如何挑选

    【飞凌i.MX9352开发板试用】+NPU功能测试

    官方手册上的是bmp格式的图片,jpg的测试了下,无法识别。 如下,这个是开发板上的图片 识别命令运行输出如下: 0.76是military uniform 0.12是Windsor tie
    发表于 06-09 22:28

    u-boot以i.MX8MP启动时,boot device是根据ROM中Boot_SW_Info的Boot Device Type来确定的吗?

    你好。 我有两个问题。 Q1:u-boot以i.MX8MP启动时,boot device是根据ROM中Boot_SW_Info的Boot Device Type来确定的吗? Q2
    发表于 06-08 08:41

    如何扩展imx8mp.dtsi中的i.mx8mp cpufreq设置以降低cpu温度?

    一、基本信息: i.mx8mp ,Linux5.10.35, Yocto hardknott 。 i.mx8mp 被设计为数据采集设备。 2、问题: 如何扩展 imx8mp.dtsi 中
    发表于 05-18 13:25

    i.MX8MP PCI问题如何解决?

    我已经购买了 Variscite 评估套件,所以我同时使用了 VAR-SOM-MX8M-PLUS 和 Symphony 。 我正在使用 Debian Bullseye 操作系统。图片
    发表于 05-18 06:33

    i.mx8mp是否意味着每个通道都可以支持768KHz/32位?

    i.mx8mp RM 文档中,P5944,我对 SAI 容量有些怀疑。 这是否意味着每个通道或通道都可以支持 768KHz/32 位,或者 SAI2/SAI5 模块总共可以支持 768KHz/32 位?
    发表于 05-04 07:04

    i.MX8MP能够解码来自8MP USB摄像头的MJPEG视频吗?

    我想确认 i.MX8MP 是否能够解码来自 8MP USB 摄像头的 MJPEG 视频并将其编码为 H.265。
    发表于 04-27 06:57