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

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

3天内不再提示

嵌入式Linux入门级板卡的神经网络框架ncnn移植与测试-米尔i.MX6UL开发板

米尔电子 2023-02-21 10:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本篇测评由电子发烧友的优秀测评者“ALSET”提供。

c757321e-b186-11ed-ad0d-dac502259ad0.gif电子发烧友网发布了一款试用产品:米尔 MYD-Y6ULX-V2 开发板,基于 NXP i.MX6UL/i.MX6UL L处理器,该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发,测试ncnn在此开发板上的性能与应用测试。c765827e-b186-11ed-ad0d-dac502259ad0.png

01.

什么是ncnn

ncnn 是腾讯优图推出的在手机端极致优化的高性能神经网络前向计算框架。也能够在移动设备上的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑移动端的部署和使用。无第三方依赖,跨平台,其中手机端 cpu的速度快于目前所有已知的开源框架。基于ncnn,能够将深度学习算法轻松移植到手机端和移动设备上高效执行,开发人工智能应用。以腾讯内部应用为例,ncnn目前已在QQ,Qzone,微信,天天P图等上得到应用。ncnn支持大部分常用的CNN 网络:Classical CNN: VGG AlexNetGoogleNet Inception …Practical CNN: ResNetDenseNet SENet FPN …Light-weight CNN:SqueezeNet MobileNetV1/V2/V3 ShuffleNetV1/V2 MNasNet …Detection: MTCNNfacedetection …Detection: VGG-SSDMobileNet-SSD SqueezeNet-SSD MobileNetV2-SSDLite …Detection: Faster-RCNNR-FCN …Detection: YOLOV2 YOLOV3MobileNet-YOLOV3 …Segmentation: FCN PSPNetUNet …腾讯优图实验室是主要研究计算机视觉技术,ncnn的许多应用方向也都在图像方面,如人像自动美颜,照片风格化,超分辨率,物体识别。腾讯优图ncnn提供的资料显示:对比目前已知的同类框架,ncnn是cpu框架中最快的,安装包体积最小,跨平台兼容性中也是最好的。以苹果主推的CoreML为例,CoreML是苹果主推的 iOS gpu计算框架,速度非常快,但仅支持 iOS11以上的 iphone手机受众太狭窄。非开源也导致开发者无法自主扩展功能。

02.

ncnn功能简介

ncnn支持卷积神经网络,支持多输入和多分支结构,可计算部分分支无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架纯 C++ 实现,跨平台,支持 android ios 等ARM NEON 汇编级良心优化,计算速度极快精细的内存管理和数据结构设计,内存占用极低支持多核并行计算加速,ARM big.LITTLE cpu 调度优化。支持基于全新低消耗的 vulkan api GPU 加速整体库体积小于 700K,并可轻松精简到小于 300K可扩展的模型设计,支持 8bit 量化和半精度浮点存储,可导入 caffe/pytorch/mxnet/onnx 模型支持直接内存零拷贝引用加载网络模型可注册自定义层实现并扩展。ncnn与同类框架对比c7912a6e-b186-11ed-ad0d-dac502259ad0.png

03.

在i.MX6ull上移植编译ncnn

工程地址:
githubhttps://github.com/Tencent/ncnn 从工程的readme文件看,该工程已经支持很多嵌入式CPU的架构,其中就有arm 32位版本。c7c1c1d8-b186-11ed-ad0d-dac502259ad0.png既然支持arm32位,那么ixm6ull处理器也应该支持,即着手编译MYD-Y6ULX-V2开发板上的版本。1.从github 上拉取ncnn源码在主机上执行命令:Sudo git clonehttps://github.com/Tencent/ncnn.gitc7d3e822-b186-11ed-ad0d-dac502259ad0.png可见是一个 cmake工程,那么尝试cmake 编译。2.初次使用camke编译先进入ixml6ull的SDK下,切换到交叉编译环境,然后创建 build 目录,进入build目录下,执行cmake命令cmake ../从输出信息上看 cmake失败,查看cmake 日志,发现错误原因是cmake在生成开发板的makefile文件时,需要指定使用的编译工具链。3.添加imx6ull开发板的编译配置根据脚本的过程,在toolchains目录下,有很多其它开发板的编译配置文件,参照其它开发板的配置文件,添加一个该开发板的配置文件。文件名:arm-poky-linux-gnueabi.cmake内容如下:

set(CMAKE_SYSTEM_NAME Linux)set(CMAKE_SYSTEM_PROCESSOR arm)set(CMAKE_C_COMPILER "arm-poky-linux-gnueabi-gcc")set(CMAKE_CXX_COMPILER "arm-poky-linux-gnueabi-g++")set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon --sysroot=/home/lutherluo/workspace/fsl-imx-fb/5.10-gatesgarth/sysroots/cortexa7t2hf-neon-poky-linux-gnueabi")
set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon --sysroot=/home/lutherluo/workspace/fsl-imx-fb/5.10-gatesgarth/sysroots/cortexa7t2hf-neon-poky-linux-gnueabi")
# cache flagsset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")

c7fc735a-b186-11ed-ad0d-dac502259ad0.png
4.再使用cmake生成编译文件添加完该开发板的编译工具链后,就可以使用cmake来生成编译所需的makefile文件了。在cmake时,可以指定除了编译ncnn库外,还可以编译ncnn例子程序。命令如下:cmake-DCMAKE_BUILD_TYPE=Release -DNCNN_SIMPLEOCV=ON-DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-poky-linux-gnueabi.cmake-DNCNN_BUILD_EXAMPLES=ON ..c81e8f26-b186-11ed-ad0d-dac502259ad0.png查看目录下,已经顺利地生成了 Makefile文件。5.使用make编译文件然后可以正式编译ncnn库和测试样例程序了。直接执行make –j4就开始愉快地编译了。c83ee064-b186-11ed-ad0d-dac502259ad0.pngc85e6ae2-b186-11ed-ad0d-dac502259ad0.png编译libncnn库文件成功,会继续自动编译 examples 下的例子文件。c88b5c1e-b186-11ed-ad0d-dac502259ad0.png大约10多分钟,顺利地全部编译完成。在编译测试用例时,会出现库格式错误的提示,此时需要设置一下交叉编译环境下的库归档工具,系统默认使用的是arm-poky-linux-gnueabi-ar 工具,这个工具产生的 .a文件有问题,经过测试使用 arm-poky-linux-gnueabi-gcc-ar 即可。只需要在执行切换交叉环境脚本后,再单独执行一下以下命令即可修改该问题:export ar=arm-poky-linux-gnueabi-gcc-ar再进行编译即可。6.查看编译结果编译完成后,在build目录下,可以看到 benchmark 目录,该目录下就是ncnn的基准测试工具,可以看到目标板执行文件已经编译出来。c8aa8652-b186-11ed-ad0d-dac502259ad0.png再进入到 build/example 下,可以看到所有例程也编译出来了。c8c2f8ea-b186-11ed-ad0d-dac502259ad0.png

04.

板上运行测试ncnn

编译完成把可执行文件与模型文件复制到开发板里进行测试。
把 build/benchmark 下的benchmark 复制到开发板/home/root/ncnn 目录下,同时把工程根目录下的benchmark 目录下所有文件也复制到开发板 /home/root/ncnn目录下,
c8efc924-b186-11ed-ad0d-dac502259ad0.png然后就可以执行 benchmark 执行文件来测试开发板的人工神经网络的计算能力。
先把开发环境下目标文件系统arm目录下/usr/lib下的libgomp.so.1文件复制到开发板的/usr/lib下,这个文件是并行计算库,ncnn编译时用到了这个库,这个库在多核处理器上能够支持执行并行计算。然后再在本开发板执行benchmark,执行输出结果如下图:
c90ae51a-b186-11ed-ad0d-dac502259ad0.png可见大部分的模型能够跑通了,有部分模型运行出现异常。
从抛出的分值可以评估该开发板的神经网络推理计算能力了。
这个分值是一个模型推理一次的耗时,所以数值越小意味着算力越强。考虑到这个开发板是一个arm v7入门级的开发板,这样的性能已经超乎预料了。


05.

测试基于ncnn的应用

这里在MYD-Y6ULX-V2开发板上测试ncnn的应用例子,这里就用ncnn下的例程来做测试,在上面编译完example后,在build目录下会产生example的目标板的可执行文件。编译出来的例子程序如下,把他们全部传到开发板上。
c918ca40-b186-11ed-ad0d-dac502259ad0.png需要注意的是,除了ncnn的应用执行文件,在这些例子执行的时候,还需要模型和测试的资源文件,而这些文件体积都比较大,因此不能传送到开发板的系统目录上,需要单独存在扩展的存储空间上。
经过观察板上的文件系统,发现有3.1G的空间没有使用,此时可以使用fdisk 来格式化该空间,格式化成 ext4 格式,重启板子后,就可以看到这部分空间了,然后把ncnn的所有测试执行文件和资源文件传到该目录下,这样就够用了。
c9429f1e-b186-11ed-ad0d-dac502259ad0.png在板上执行各个测试例子,会提示缺少相关模型文件和参数文件,这些模型和参数文件在这个github上面,下载相应的文件到当前目录下就可以。
https://github.com/nihui/ncnn-assets/tree/master/models
c95590ba-b186-11ed-ad0d-dac502259ad0.png1. 测试图片分类器
准备被测试图片,test,jpg ,传到上ncnn当前目录下
c970385c-b186-11ed-ad0d-dac502259ad0.png并且下载好 squeezenet_v1.1.param和 squeezenet_v1.1.bin 文件到 ncnn当前目录下,然后执行一下命令:
./squeezenet./test.jpg
很快就输出识别结果,输出结果如下图
c9c20696-b186-11ed-ad0d-dac502259ad0.png输出结果前面的编号和分类号,具体可以参考:
mageNet20121000分类名称和编号
https://zhuanlan.zhihu.com/p/315368462
但不知本测试模型所用分类的版本是否和这个一致。
2测试图片内容多目标识别
测试图片内容识别,先用上面的图,再使用 squeezenetssd 来执行。执行前先下载 squeezenet_ssd_voc.bin和 squeezenet_ssd_voc.param 到板上ncnn当前目录下,然后执行:
./squeezenetssd./test.jpg
大约3秒左右输出结果如图:
c9d05980-b186-11ed-ad0d-dac502259ad0.png输出的分类编号,可见代码的定义:
c9e73056-b186-11ed-ad0d-dac502259ad0.png同时输出了识别结果图:
c9f82136-b186-11ed-ad0d-dac502259ad0.png再测试另外一张图;
ca66c578-b186-11ed-ad0d-dac502259ad0.png执行结果如下:
ca9ee89a-b186-11ed-ad0d-dac502259ad0.png输出识别结果图:
cab3bd42-b186-11ed-ad0d-dac502259ad0.png上面的识别,因为输出的第二个目标被第三个目标遮盖,第二个识别为“Dog”,所以识别准确度还是比较高的。
再测试了一张图:
输出:
caec920c-b186-11ed-ad0d-dac502259ad0.pngcb05c2e0-b186-11ed-ad0d-dac502259ad0.png识别效果也比较理想。

06.

ncnn移植测试总结

经过在MYD-Y6ULX-V2开发板上,进行这次的ncnn移植测试,总体非常顺利,在移植中只需要针对开发板的编译器,修改添加相应的编译脚本即可顺利的编译ncnn库和所有例程。并不需要对代码做任何改动或者调整,因此过程很快,短暂的时间就可以完成ncnn这样一个神经网络框架在本开发板上运行起来。
对ncnn的benchmark的性能测试来看,因为本开发板仅为arm v7单核处理器,处于入门级的一款开发板,能跑出这样的成绩已经出乎意料。
在对实际图像分类和图像内容识别测试中,其中图像分类仅百十毫秒就出结果,对多目标识别单张图在2秒左右,这对一些静态的环境下已经能够达到业务使用的需求了,再综合其硬件性能,可见效能比是非常高的。同时工程里还带有一些各种其它框架模型转化ncnn的工具,方便将其它模型转化到ncnn上来使用,非常方便。
同时也测试出ncnn的良好的可移植性和对不同嵌入式硬件的支持较好,其它任何一个神经网络框架恐怕无法在这样一个系统上运行,因此也为这样一个有效的国产开源神经网络项目点赞。

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

    关注

    5186

    文章

    20159

    浏览量

    328999
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218016
  • 开发板
    +关注

    关注

    25

    文章

    6132

    浏览量

    113519
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    既要稳定性,还要性价比的工业开发板米尔i.MX91

    之前我介绍过NXPi.MX8系列的开发板,最近它的下一代产品i.MX9系列产品也有了,我就拿到了这个基于NXPi.MX9系列的米尔MYD-L
    的头像 发表于 11-20 08:05 798次阅读
    既要稳定性,还要性价比的工业<b class='flag-5'>级</b><b class='flag-5'>开发板</b> — <b class='flag-5'>米尔</b><b class='flag-5'>i.MX</b>91

    如何移植EtherCAT Igh--基于米尔RK3576开发板

    本文将介绍基于米尔电子MYD-LR3576开发板米尔基于瑞芯微RK3576开发板)的移植E
    的头像 发表于 09-26 08:04 9457次阅读
    如何<b class='flag-5'>移植</b>EtherCAT Igh--基于<b class='flag-5'>米尔</b>RK3576<b class='flag-5'>开发板</b>

    【干货分享】米尔NXP i.MX 91开发板移植运行IGH EtherCAT主站

    米尔基于NXPi.MX91的核心开发板,搭载新一代入门级NXPi.MX91处理器,内核Cor
    的头像 发表于 09-02 08:04 675次阅读
    【干货分享】<b class='flag-5'>米尔</b>NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>开发板</b><b class='flag-5'>移植</b>运行IGH EtherCAT主站

    【Milk-V Duo S 开发板免费体验】RISC-V核心NCNN基准测试

    by step) 地展示了如何在一块全新的Milk-V Duo S 开发板开发板上,跑个 ncnn 神经网络推理框架的 demo。 首先从
    发表于 08-24 23:46

    【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选

    对于初入 FPGA 与嵌入式系统开发领域的工程师而言,一款兼具专业性与易用性的入门级开发板是快速建立技术认知、提升实践能力的关键工具。璞致电子科技(上海)有限公司深耕 SDR 及 AR
    的头像 发表于 08-08 14:53 799次阅读
    【PZ7020-StarLite <b class='flag-5'>入门级</b><b class='flag-5'>开发板</b>】——FPGA <b class='flag-5'>开发</b>的理想起点,<b class='flag-5'>入门</b>与工业场景的双重优选

    【免费试用】米尔NXP i.MX 91入门级Linux开发板免费试用

    米尔电子基于NXPi.MX91处理器推出了开发套件MYD-LMX91,套件由核心MYC-LMX91和底板MYB-LMX91组成。随同开发
    的头像 发表于 06-24 08:04 455次阅读
    【免费试用】<b class='flag-5'>米尔</b>NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>入门级</b><b class='flag-5'>Linux</b><b class='flag-5'>开发板</b>免费试用

    5分钟学会网络服务搭建!飞凌i.MX9352开发板 + Linux 6.1实战示例

    本文就将以飞凌嵌入式OK-MX9352-C开发板(搭载了在工业物联网领域广泛应用的NXP i.MX9352处理器)为平台,介绍如何在Linux
    的头像 发表于 06-13 16:42 1082次阅读
    5分钟学会<b class='flag-5'>网络</b>服务搭建!飞凌<b class='flag-5'>i.MX</b>9352<b class='flag-5'>开发板</b> + <b class='flag-5'>Linux</b> 6.1实战示例

    618盛夏狂欢,米尔电子携手恩智浦开启年度技术盛宴!

    即日起-2025.06.30,米尔恩智浦多系列开发板限时折扣!米尔基于i.MX91、i.MX93、i.M
    的头像 发表于 06-13 08:03 723次阅读
    618盛夏狂欢,<b class='flag-5'>米尔</b>电子携手恩智浦开启年度技术盛宴!

    米尔NXP i.MX 91核心发布,助力新一代入门级Linux应用开发

    积累,赋能新一代入门级嵌入式Linux应用。提供1GB LPDDR4 8GB eMMC 的核心开发板,核心
    发表于 05-30 11:20

    NXP系列-米尔 i.MX91核心开发板,新一代入门级Linux应用

    NXP i.MX91赋能新一代入门级Linux应用, 低成本、低功耗NXP i.MX91处理器:内核Cortex-A55,主频1.4 GHz;支持新的LPDDR4内存,确保平台使用寿命
    发表于 05-29 16:35 1次下载

    新品!米尔NXP i.MX 91核心,赋能新一代入门级Linux应用

    推出的米尔基于‌NXPi.MX91核心开发板‌(MYC-LMX91),延续了米尔嵌入式模组
    的头像 发表于 05-29 08:01 2522次阅读
    新品!<b class='flag-5'>米尔</b>NXP <b class='flag-5'>i.MX</b> 91核心<b class='flag-5'>板</b>,赋能新一代<b class='flag-5'>入门级</b><b class='flag-5'>Linux</b>应用

    NXP i.MX 91开发板#支持快速创建基于Linux®的边缘器件

    NXP Semiconductors FRDM i.MX 91开发板设计用于评估i.MX 91应用处理器,支持快速创建基于Linux ^®^ 的边缘器件。该
    的头像 发表于 05-19 10:55 2029次阅读
    NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>开发板</b>#支持快速创建基于<b class='flag-5'>Linux</b>®的边缘器件

    基于RV1126开发板移植NCNN部署库方法

    移动端优化的开源神经网络推断库。能实现无第三方依赖,跨平台操作,在手机端CPU运算速度在开源框架中处于领先水平。基于该平台,开发者能够轻松将深度学习算法移植到手机端,输出高效的执行,进
    的头像 发表于 04-16 15:24 473次阅读
    基于RV1126<b class='flag-5'>开发板</b><b class='flag-5'>移植</b><b class='flag-5'>NCNN</b>部署库方法

    NXP入门级Linux应用开发板,FRDM i.MX 91详解

    FRDM平台新品发布 FRDM i.MX 91开发板是一款低成本、体积小巧的开发板,集成了恩智浦i.MX 91应用处理器和IW610 Wi-Fi 6
    的头像 发表于 03-14 09:43 2821次阅读
    NXP<b class='flag-5'>入门级</b><b class='flag-5'>Linux</b>应用<b class='flag-5'>开发板</b>,FRDM <b class='flag-5'>i.MX</b> 91详解

    恩智浦推出FRDM i.MX 93开发板

    备受嵌入式开发者青睐的恩智浦FRDM开发平台,迎来了一位新成员——FRDM i.MX 93开发板,这也是第一块配备i.MX MPU的FRDM
    的头像 发表于 02-21 14:22 2938次阅读