iMX8MPlus和iMX8QM机器学习框架eIQ性能对比

iMX8MPlus和iMX8QM机器学习框架eIQ性能对比ByToradex胡珊逢机器学习算法对算力要求较高,通常会采用GPU,或者专用的处理器如NPU进行加速运算。NXP先后推出的两款处理器iMX8QuadMax和iMX8MPlus分别可以采用GPU和NPU对常用的机器学习算法例如TensorFlowLite等进行加速。文章将使用NXPeIQ框架在两个处理器上测试不同算法的性能。这里我们将使用Toradex的ApalisiMX8QM4GBWBITV1.1C和VerdiniMX8MPl…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

By Toradex 胡珊逢

机器学习算法对算力要求较高,通常会采用 GPU ,或者专用的处理器如 NPU 进行加速运算。NXP 先后推出的两款处理器iMX8QuadMax  和 iMX8M Plus 分别可以采用 GPU 和 NPU 对常用的机器学习算法例如 TensorFlow Lite 等进行加速。文章将使用 NXP eIQ 框架在两个处理器上测试不同算法的性能。

这里我们将使用 Toradex 的 Apalis iMX8QM 4GB WB IT V1.1C 和 Verdin iMX8M Plus Quad 4GB WB IT V1.0B 两个模块。BSP 为 Linux BSP V5.3 。eIQ 采用 zeus-5.4.70-2.3.3 版本。Toradex 默认 Yocto Project 编译环境并没有直接集成  eIQ 软件,可以参考这里添加 meta-ml layer 并进行编译。然后修改  meta-ml/recipes-devtools/python/python3-pybind11_2.5.0.bb 中的Python 版本为 3.8 。最后可以生成  multimedia image。

————————————-

EXTRA_OECMAKE = “-DPYBIND11_TEST=OFF \ 
-DPYTHON_EXECUTABLE=${RECIPE_SYSROOT_NATIVE}/usr/bin/python3-native/python3.8 \ “

————————————-

使用 Toradex Easy Installer 将生成的镜像安装到  Apalis iMX8QM 4GB WB IT V1.1C 和 Verdin iMX8M Plus Quad 4GB WB IT V1.0B 两个模块上。

测试的内容参考 NXP 的 i.MX_Machine_Learning_User’s_Guide 文档进行,包括 TensorFlow Lite、Arm NN、ONNX、PyTorch。由于目前  OpenCV 还只能运行在 iMX8QuadMax  和 iMX8M Plus 的 CPU 上,无法使用 GPU 或者 NPU 加速,所以本次不做测试。另外,在使用 Arm NN 测试 Caffe 模型时有两个限制。第一,batch size 必须为 1。例如  deploy.prototxt 文件修改为

————————————-

name: “AlexNet”

layer {

  name: “data”

  type: “Input”

  top: “data”

  input_param { shape: { dim: 1 dim: 3 dim: 227 dim: 227 } }

}

————————————-

第二, Arm NN 不支持所有的 Caffe 语法,一些老的神经网络模型文件需要更新到最新的  Caffe 语法。下面是 PC 上用于转换的 Python3 脚本。

————————————-

import caffe

net = caffe.Net(‘lenet.prototxt’, ‘lenet_iter_9000-orignal.caffemodel’, caffe.TEST)

net.save(‘lenet_iter_9000.caffemodel’)

————————————-

在两个模块上测试结果如下。

TensorFlow Lite

l Apalis iMX8QM

label_image

————————————-

root@apalis-imx8:/usr/bin/tensorflow-lite-2.4.0/examples# USE_GPU_INFERENCE=1 ./label_image -m mobilenet_v1_1.0_224_quant.tflite -i grace_hopper.bmp -l labels.txt -a 1

INFO: Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: resolved reporter
INFO: Created TensorFlow Lite delegate for NNAPI.
INFO: Applied NNAPI delegate.
INFO: invoked
INFO: average time: 12.407 ms 
INFO: 0.784314: 653 military uniform
INFO: 0.105882: 907 Windsor tie
INFO: 0.0156863: 458 bow tie
INFO: 0.0117647: 466 bulletproof vest
INFO: 0.00784314: 668 mortarboard

————————————-

benchmark_model

————————————-

root@apalis-imx8:/usr/bin/tensorflow-lite-2.4.0/examples# ./benchmark_model –graph=mobilenet_v1_1.0_224_quant.tflite –use_nnapi=true

STARTING!

Log parameter values verbosely: [0]
Graph: [mobilenet_v1_1.0_224_quant.tflite]
Use NNAPI: [1]
NNAPI accelerators available: [vsi-npu]
Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: Created TensorFlow Lite delegate for NNAPI.
Explicitly applied NNAPI delegate, and the model graph will be completely executed by the
delegate.
The input model file size (MB): 4.27635
Initialized session in 16.746ms.
Running benchmark for at least 1 iterations and at least 0.5 seconds but terminate if exceeding 150
seconds.
count=17 first=305296 curr=12471 min=12299 max=305296 avg=29650 std=68911
Running benchmark for at least 50 iterations and at least 1 seconds but terminate if exceeding 150 seconds.
count=81 first=12417 curr=12430 min=12294 max=12511 avg=12405.6 std=39
Inference timings in us: Init: 16746, First inference: 305296, Warmup (avg): 29650, Inference (avg): 12405.6
Note: as the benchmark tool itself affects memory footprint, the following is only APPROXIMATE to the actual memory footprint of the model at runtime. Take the information at your discretion.
Peak memory footprint (MB): init=1.85938 overall=55.1406

————————————-

l Verdin iMX8M Plus

label_image

————————————-

root@verdin-imx8mp:/usr/bin/tensorflow-lite-2.4.0/examples# USE_GPU_INFERENCE=0 ./label_image -m mobilenet_v1_1.0_224_quant.tflite -i grace_hopper.bmp -l labels.txt -a 1
INFO: Loaded model mobilenet_v1_1.0_224_quant.tflite
INFO: resolved reporter
INFO: Created TensorFlow Lite delegate for NNAPI.
INFO: Applied NNAPI delegate.
INFO: invoked
INFO: average time: 2.835 ms 
INFO: 0.768627: 653 military uniform
INFO: 0.105882: 907 Windsor tie
INFO: 0.0196078: 458 bow tie
INFO: 0.0117647: 466 bulletproof vestINFO: 0.00784314: 835 suit

————————————-

benchmark_model

————————————-

root@verdin-imx8mp:/usr/bin/tensorflow-lite-2.4.0/examples# ./benchmark_model –graph=mobilenet_v1_1.0_224_quant.tflite –use_nnapi=true 
STARTING! 
Log parameter values verbosely: [0] 
Graph: [mobilenet_v1_1.0_224_quant.tflite] 
Use NNAPI: [1] 
NNAPI accelerators available: [vsi-npu] 
Loaded model mobilenet_v1_1.0_224_quant.tflite 
INFO: Created TensorFlow Lite delegate for NNAPI. 
Explicitly applied NNAPI delegate, and the model graph will be completely executed by the delegate. 
The input model file size (MB): 4.27635 
Initialized session in 16.79ms. 
Running benchmark for at least 1 iterations and at least 0.5 seconds but terminate if exceeding 150 seconds. 
count=1 curr=6664535 
Running benchmark for at least 50 iterations and at least 1 seconds but terminate if exceeding 150 seconds. 
count=367 first=2734 curr=2646 min=2624 max=2734 avg=2650.05 std=16 
Inference timings in us: Init: 16790, First inference: 6664535, Warmup (avg): 6.66454e+06, Inference (avg): 2650.05 
Note: as the benchmark tool itself affects memory footprint, the following is only APPROXIMATE to the actual memory footprint of the model at runtime. Take the information at your discretion. 
Peak memory footprint (MB): init=1.79297 overall=28.5117 

————————————-

Arm NN

l Apalis iMX8QM

CaffeAlexNet-Armnn

————————————-

root@apalis-imx8:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeAlexNet-Armnn –data-dir=data –model-dir=models
Info: ArmNN v22.0.0
Info: Initialization time: 0.14 ms
Info: Network parsing time: 1397.76 ms
Info: Optimization time: 195.13 ms
Info: = Prediction values for test #0
Info: Top(1) prediction is 2 with value: 0.706226
Info: Top(2) prediction is 0 with value: 1.26573e-05
Info: Total time for 1 test cases: 0.264 seconds
Info: Average time per test case: 263.701 ms
Info: Overall accuracy: 1.000
Info: Shutdown time: 56.83 ms

————————————-

CaffeMnist-Armnn

————————————-

root@apalis-imx8:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeMnist-Armnn –data-dir=data –model-dir=models

Info: ArmNN v22.0.0
Info: Initialization time: 0.09 ms
Info: Network parsing time: 8.70 ms
Info: Optimization time: 2.67 ms 
Info: = Prediction values for test #0 
Info: Top(1) prediction is 7 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #1 
Info: Top(1) prediction is 2 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #5 
Info: Top(1) prediction is 1 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #8 
Info: Top(1) prediction is 5 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #9 
Info: Top(1) prediction is 9 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: Total time for 5 test cases: 0.015 seconds 
Info: Average time per test case: 2.927 ms 
Info: Overall accuracy: 1.000 
Info: Shutdown time: 1.56 ms 

————————————-

CaffeVGG-Armnn

————————————-

root@apalis-imx8:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeVGG-Armnn –data-dir=data –model-dir=models

Info: ArmNN v22.0.0 
Info: Initialization time: 0.08 ms 
Info: Network parsing time: 1452.35 ms 
Info: Optimization time: 491.98 ms 
Info: = Prediction values for test #0 
Info: Top(1) prediction is 2 with value: 0.692014 
Info: Top(2) prediction is 0 with value: 9.80887e-07 
Info: Total time for 1 test cases: 2.723 seconds 
Info: Average time per test case: 2722.846 ms 
Info: Overall accuracy: 1.000 
Info: Shutdown time: 115.74 ms

————————————-

l Verdin iMX8M Plus

CaffeAlexNet-Armnn

————————————-

root@verdin-imx8mp:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeAlexNet-Armnn –data-dir=data –model-dir=models

Info: ArmNN v22.0.0 
Info: Initialization time: 0.12 ms 
Info: Network parsing time: 1250.55 ms 
Info: Optimization time: 141.40 ms 
Info: = Prediction values for test #0 
Info: Top(1) prediction is 2 with value: 0.706225 
Info: Top(2) prediction is 0 with value: 1.26573e-05 
Info: Total time for 1 test cases: 0.110 seconds 
Info: Average time per test case: 110.124 ms 
Info: Overall accuracy: 1.000 
Info: Shutdown time: 15.04 ms

————————————-

CaffeMnist-Armnn

————————————-

root@verdin-imx8mp:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeMnist-Armnn –data-dir=data –model-dir=models

Info: ArmNN v22.0.0 
Info: Initialization time: 0.11 ms 
Info: Network parsing time: 8.96 ms 
Info: Optimization time: 3.01 ms 
Info: = Prediction values for test #0 
Info: Top(1) prediction is 7 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #1 
Info: Top(1) prediction is 2 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #5 
Info: Top(1) prediction is 1 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #8 
Info: Top(1) prediction is 5 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: = Prediction values for test #9 
Info: Top(1) prediction is 9 with value: 1 
Info: Top(2) prediction is 0 with value: 0 
Info: Total time for 5 test cases: 0.008 seconds 
Info: Average time per test case: 1.608 ms 
Info: Overall accuracy: 1.000 
Info: Shutdown time: 1.69 ms 

————————————-

CaffeVGG-Armnn

————————————-

root@verdin-imx8mp:/usr/bin/armnn-20.08/ArmnnTests# ../CaffeVGG-Armnn –data-dir=data –model-dir=modelsInfo: ArmNN v22.0.0

Info: Initialization time: 0.15 ms 
Info: Network parsing time: 2842.95 ms 
Info: Optimization time: 316.74 ms 
Info: = Prediction values for test #0 
Info: Top(1) prediction is 2 with value: 0.692015 
Info: Top(2) prediction is 0 with value: 9.8088e-07 
Info: Total time for 1 test cases: 1.098 seconds 
Info: Average time per test case: 1097.593 ms 
Info: Overall accuracy: 1.000 
Info: Shutdown time: 130.65 ms 

————————————-

ONNX

l Apalis iMX8QM

onnx_test_runner

————————————-

root@apalis-imx8:~# time onnx_test_runner -j 1 -c 1 -r 1 -e vsi_npu ./mobilenetv2-7/

result:  
Models: 1 
Total test cases: 3 
 Succeeded: 3 
 Not implemented: 0 
 Failed: 0 
Stats by Operator type: 
 Not implemented(0):  
 Failed: 
Failed Test Cases: 
 
real 0m0.643s 
user 0m1.513s 
sys 0m0.111s

————————————-

l Verdin iMX8M Plus

onnx_test_runner

————————————-

root@verdin-imx8mp:~# time onnx_test_runner -j 1 -c 1 -r 1 -e vsi_npu ./mobilenetv2-7/

result:  
Models: 1 
Total test cases: 3 
 Succeeded: 3 
 Not implemented: 0 
 Failed: 0 
Stats by Operator type: 
 Not implemented(0):  
 Failed: 
Failed Test Cases: 
 
real 0m0.663s 
user 0m1.195s 
sys 0m0.073s 

————————————-

 

 

PyTorch

l Apalis iMX8QM

pytorch_mobilenetv2.py

————————————-

root@apalis-imx8:/usr/bin/pytorch/examples# time python3 pytorch_mobilenetv2.py

(‘tabby, tabby cat’, 46.348018646240234) 
(‘tiger cat’, 35.17843246459961) 
(‘Egyptian cat’, 15.802857398986816) 
(‘lynx, catamount’, 1.161122441291809) 
(‘tiger, Panthera tigris’, 0.20774582028388977) 
 
real 0m8.806s 
user 0m7.440s 
sys 0m0.593s 

————————————-

l Verdin iMX8M Plus

pytorch_mobilenetv2.py

————————————-

root@verdin-imx8mp:/usr/bin/pytorch/examples# time python3 pytorch_mobilenetv2.py

(‘tabby, tabby cat’, 46.348018646240234) 
(‘tiger cat’, 35.17843246459961) 
(‘Egyptian cat’, 15.802857398986816) 
(‘lynx, catamount’, 1.161122441291809) 
(‘tiger, Panthera tigris’, 0.20774582028388977) 
 
real 0m6.313s 
user 0m5.933s 
sys 0m0.295s 

————————————-

汇总对比

iMX8MPlus和iMX8QM机器学习框架eIQ性能对比_web12949.png

根据具体测试应用不同,两者之间的性能差距大小不一。总体来看常用机器学习算法在 Verdin iMX8M Plus 的 NPU 上的表现会优于 Apalis iMX8QM 的 GPU。

总结

机器学习是较为复杂的应用,除了硬件处理器外,影响算法性能表现的还包括对模型本身的优化。尤其是对嵌入式系统有限的处理能力来讲,直接将 PC 上现成的模型拿过来用通常会表现不佳。同时根据项目需求选择合适计算机模块,毕竟 Verdin iMX8M Plus 和 Apalis iMX8QM 的用途侧重点不同。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180108.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • postgresql 索引类型[通俗易懂]

    postgresql 索引类型[通俗易懂]postgresql提供了B-tree,R-tree,GiST和hash索引类型。不同的索引类型适合特定的查询类型。绝大多数数据库都支持B-tree索引类型,postgresql默认的createindex语句也是创建B-tree索引。 R-tree:R树是一种用于处理多维数据的数据结构,用来访问二维或者更高维区域对象组成的空间数据.R树是一棵平衡树。树上有两类结点:叶子结点和非

    2022年5月25日
    138
  • php 递归算法

    php 递归算法通过递归实现阶乘functionmulti($n){

    2022年7月2日
    20
  • logback配置详解maxhistory(logback配置discrim)

    目录1、根节点包含的属性2、根节点的子节点 2.1、设置上下文名称: 2.2、设置loger、root 正文回到顶部1、根节点<configuration>包含的属性scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生…

    2022年4月11日
    542
  • 2020/7/7学习记录

    2020/7/7学习记录1.微信小程序text内容显示空格<text decode=”{{true}}”space=”{{true}}”>报名人数&nbsp;</text>decode=”{{true}}”space=”{{true}}2.

    2022年8月18日
    8
  • 口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想

    口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想前言       因为疫情迎来的史无前例大假期,从开始理直气壮的天天划手机,到中间百无聊赖的躺尸,再到之后实在憋得慌,就想找点什么事搞一搞。恰好这时,一直关注的极视角联合Intel公司举办了一个对口罩和安全帽进行识别的比赛,能免费用一个月的云服务器对于我这还在用跑个Demo都能卡死的老爷机来说还是相当具有吸引力的。于是…

    2022年5月19日
    40
  • ddns dnspod_dns和ddns的区别

    ddns dnspod_dns和ddns的区别NBNS——–NetBIOS漏洞【询问主机名】NBNS是网络基本输入/输出系统(NetBIOS)名称服务器的缩写。它也是TCP/IP协议的一部分。它负责将计算机名转化为对应的IP。其中,NamequeryNB是请求包,NamequeryresponseNB是响应包。双方的端口号均为137。NBNS在WIndows用的较少,Windows普遍采用LLMNR协议。在一个局域网中的两台主机,主机A的ip是:10.30.59.77,Mac地址为:HonHaipr_81:74:8A。主

    2022年8月31日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号