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

发布者:EE小广播最新更新时间:2023-02-17 来源: EEWORLD关键字:米尔  i  MX6UL  开发板  嵌入式  神经网络 手机看文章 扫描二维码
随时随地手机看文章

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


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



米尔 MYD-Y6ULX-V2 开发板,基于 NXP i.MX6UL/i.MX6ULL处理器,该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发,测试ncnn在此开发板上的性能与应用测试。 


image.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与同类框架对比 


image.png


03.在i.MX 6ull上移植编译ncnn


工程地址:


    githubhttps://github.com/Tencent/ncnn 从工程的readme文件看,该工程已经支持很多嵌入式CPU的架构,其中就有arm 32位版本。


image.png


 既然支持arm32位,那么ixm6ull处理器也应该支持,即着手编译米尔i.MX6UL/i.MX6UL开发板上的版本。

  1. 从github 上拉取ncnn源码在主机上执行命令:Sudo git clone https://github.com/Tencent/ncnn.git 可见是一个 cmake工程,那么尝试cmake 编译。


image.png


  1. 初次使用camke编译先进入ixml6ull的SDK下,切换到交叉编译环境,然后创建 build 目录,进入build目录下,执行cmake命令cmake ../从输出信息上看 cmake失败,查看cmake 日志,发现错误原因是cmake在生成开发板的makefile文件时,需要指定使用的编译工具链。

  2. 添加imx6ull开发板的编译配置根据脚本的过程,在toolchains目录下,有很多其它开发板的编译配置文件,参照其它开发板的配置文件,添加一个i.MX6UL开发板的配置文件。文件名: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")

 

image.png


4.再使用cmake生成编译文件添加完i.MX6UL/i.MX6ULL开发板的编译工具链后,就可以使用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 .. 查看目录下,已经顺利地生成了 Makefile文件。5.使用make编译文件然后可以正式编译ncnn库和测试样例程序了。


image.png


直接执行make –j4就开始愉快地编译了。 

image.png

image.png


 编译libncnn库文件成功,会继续自动编译 examples 下的例子文件。 

image.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的基准测试工具,可以看到目标板执行文件已经编译出来。 再进入到 build/example 下,可以看到所有例程也编译出来了。 


image.png



04.板上运行测试ncnn


编译完成把可执行文件与模型文件复制到i.MX6UL/i.MX6ULL开发板里进行测试。


把 build/benchmark 下的benchmark 复制到开发板/home/root/ncnn 目录下,同时把工程根目录下的benchmark 目录下所有文件也复制到i.MX6UL/i.MX6ULL开发板 /home/root/ncnn目录下,


image.png


 然后就可以执行 benchmark 执行文件来测试i.MX6UL/i.MX6ULL开发板的人工神经网络的计算能力。


先把开发环境下目标文件系统arm目录下/usr/lib下的libgomp.so.1文件复制到开发板的/usr/lib下,这个文件是并行计算库,ncnn编译时用到了这个库,这个库在多核处理器上能够支持执行并行计算。然后再在i.MX6UL/i.MX6ULL开发板执行benchmark,执行输出结果如下图:

 

image.png


可见大部分的模型能够跑通了,有部分模型运行出现异常。


从抛出的分值可以评估该开发板的神经网络推理计算能力了。


这个分值是一个模型推理一次的耗时,所以数值越小意味着算力越强。考虑到这个开发板是一个arm v7入门级的开发板,这样的性能已经超乎预料了。


05.测试基于ncnn的应用


这里在i.MX6UL/i.MX6ULL开发板上测试ncnn的应用例子,这里就用ncnn下的例程来做测试,在上面编译完example后,在build目录下会产生example的目标板的可执行文件。编译出来的例子程序如下,把他们全部传到开发板上。


image.png


 需要注意的是,除了ncnn的应用执行文件,在这些例子执行的时候,还需要模型和测试的资源文件,而这些文件体积都比较大,因此不能传送到开发板的系统目录上,需要单独存在扩展的存储空间上。


经过观察板上的文件系统,发现有3.1G的空间没有使用,此时可以使用fdisk 来格式化该空间,格式化成 ext4 格式,重启板子后,就可以看到这部分空间了,然后把ncnn的所有测试执行文件和资源文件传到该目录下,这样就够用了。


image.png


 在板上执行各个测试例子,会提示缺少相关模型文件和参数文件,这些模型和参数文件在这个github上面,下载相应的文件到当前目录下就可以。


https://github.com/nihui/ncnn-assets/tree/master/models


image.png


 1. 测试图片分类器


准备被测试图片,test,jpg ,传到上ncnn当前目录下

 

image.png


并且下载好 squeezenet_v1.1.param和 squeezenet_v1.1.bin 文件到 ncnn当前目录下,然后执行一下命令:


./squeezenet./test.jpg


很快就输出识别结果,输出结果如下图


image.png


 输出结果前面的编号和分类号,具体可以参考:


mageNet20121000分类名称和编号


https://zhuanlan.zhihu.com/p/315368462


但不知本测试模型所用分类的版本是否和这个一致。


2  测试图片内容多目标识别


测试图片内容识别,先用上面的图,再使用 squeezenetssd 来执行。执行前先下载 squeezenet_ssd_voc.bin和 squeezenet_ssd_voc.param 到板上ncnn当前目录下,然后执行:

./squeezenetssd./test.jpg

大约3秒左右输出结果如图:

 输出的分类编号,可见代码的定义:


image.png


 同时输出了识别结果图:

 

image.png


再测试另外一张图;

 

image.png


执行结果如下:


image.png


 输出识别结果图:


image.png


 上面的识别,因为输出的第二个目标被第三个目标遮盖,第二个识别为“Dog”,所以识别准确度还是比较高的。


再测试了一张图:



输出:


image.png

image.png

  

识别效果也比较理想。


06.ncnn移植测试总结

经过在米尔i.MX6UL/i.MX6ULL开发板上,进行这次的ncnn移植测试,总体非常顺利,在移植中只需要针对开发板的编译器,修改添加相应的编译脚本即可顺利的编译ncnn库和所有例程。并不需要对代码做任何改动或者调整,因此过程很快,短暂的时间就可以完成ncnn这样一个神经网络框架在本开发板上运行起来。

对ncnn的benchmark的性能测试来看,因为本开发板仅为arm v7单核处理器,处于入门级的一款开发板,能跑出这样的成绩已经出乎意料。

 在对实际图像分类和图像内容识别测试中,其中图像分类仅百十毫秒就出结果,对多目标识别单张图在2秒左右,这对一些静态的环境下已经能够达到业务使用的需求了,再综合其硬件性能,可见效能比是非常高的。同时工程里还带有一些各种其它框架模型转化ncnn的工具,方便将其它模型转化到ncnn上来使用,非常方便。

 同时也测试出ncnn的良好的可移植性和对不同嵌入式硬件的支持较好,其它任何一个神经网络框架恐怕无法在这样一个系统上运行,因此也为这样一个有效的国产开源神经网络项目点赞。


米尔电子,专注嵌入式处理器模块设计和研发,是领先的嵌入式处理器模组厂商。米尔电子在嵌入式领域具有20年的行业技术经验,为客户提供专业的ARM工业控制板、ARM开发板、ARM核心板、ARM开发工具、充电桩计费控制单元及充电控制板等产品和技术服务。此外,米尔电子还可通过涵盖众多ARM处理器及操作系统的专业技术提供定制设计解决方案,通过专业且高效率服务帮助客户加速产品上市进程。更多了解:http://www.myir-tech.com/news/news.asp


关键字:米尔  i  MX6UL  开发板  嵌入式  神经网络 引用地址:米尔入门级i.MX6UL开发板的神经网络框架ncnn移植与测试

上一篇:恩智浦新款i.MX 95应用处理器将采用自家NPU IP
下一篇:ISSCC上公布了两款有意思的处理器——基因和3D渲染处理器

推荐阅读最新更新时间:2024-11-17 12:28

ATmega128 I/O存储器
ATmega128 的I/O 空间定义见P 342“ 寄存器概述” 。 ATmega128 的所有I/O 和外设都被放置在I/O 空间。所有的I/O 地址都可以通过 LD/LDS/LDD和ST/STS/STD指令来访问,在32个通用工作寄存器和I/O之间传输数据。地 址为$00 - $1F 的I/O 寄存器还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查单个位置位与否。当使用IN 和OUT 指令时地址必须在$00 - $3F 之间。如果 要象SRAM一样通过LD和ST指令访问I/O 寄存器,相应的地址要加上$20。ATmega128是一个复杂的微处理器,其支持的外设要比预留的64 个I/O( 通过
[单片机]
PIC18F8722模拟I2c总线读取SHT15数据程序
//模拟I2C总线与sht15传感器通信 //将测得数据通过串口输出(成功) //未加 CRC校验 #include pic18.h #define SCL RG0 //时钟总线 #define DATA RG1 //数据总线 #define SCL_DR TRISG0 //时钟方向 #define DATA_DR TRISG1 //数据方向 #define out 0 #define in 1 #define MT 0x03 //Measure Temperature #define MH 0x05 //Measure Humidity #define RR 0x07 //Read Status R
[单片机]
PIC18F8722模拟<font color='red'>I</font>2c总线读取SHT15数据程序
富士通携新品亮相工业计算机及嵌入式系统展
上海,2014年7月30日 –富士通半导体(上海)有限公司今日宣布,将参加在中国深圳召开的第三届工业计算机及嵌入式系统展(IPC & EMBEDDED EXPO 2014)。富士通半导体将携旗下铁电存储器FRAM、360°全景百万像素3D成像系统Omniview等产品线参展,此次展会将于2014年8月6日至8日在深圳会展中心拉开帷幕,富士通半导体的展位位于2号馆2D37。富士通半导体系统存储业务部门副总裁松宫正人先生还将在同期举办的CMET 2014 第七届中国国际医疗电子技术大会做题为“富士通FRAM-为您系统创新而生”的演讲。 第三届工业计算机及嵌入式系统展(IPC & EMBEDDED EXPO 2014)由创意时
[嵌入式]
基于嵌入式Linux的RFID安检系统的设计
RFID(射频识别)是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无需人工干预,可工作于各种恶劣环境下。RFID技术可识别高速运动物体并可同时识别多个标签, 操作快捷方便。非接触IC卡是目前RFID系统中最常用的一种电子标签,它诞生于20世纪90年代初,是世界上最近几年发展起来的一项新技术,它成功地将射频识技术和IC卡技术结合起来,解决了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。由于存在着磁卡和接触式IC卡不可比拟的优点,使之一经问世,便立即引起广泛的关注,并以惊人的速度得到推广应用,如我国的第二代公民身份证、公交卡、ETC免停车付费卡等。可以说RFID技术越来越多地应用到
[嵌入式]
ST推出新一代双核嵌入式多媒体微处理器
横跨多重电子应用领域、全球领先的系统级芯片开发商和供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出内置先进多媒体功能的新一代嵌入式微处理器。SPEAr1340是意法半导体双核ARM Cortex-A9微处理器系列的最新产品,锁定各种智能联网设备,如高分辨的视频会议设备、智能显示器以及互联网设备。 意法半导体的SPEAr1340集成性能强大的ARM Mali 200图形处理器,可在用户界面、导航系统、浏览器及游戏中执行2D和3D加速运算。新产品还内置一个硬件视频编码器和解码器,可支持主要的视频压缩标准(包括H.264, AVS和VP8),视频分辨率高达1080p和
[嵌入式]
ST推出新一代双核<font color='red'>嵌入式</font>多媒体微处理器
基于ARM处理器的嵌入式防火墙总体架构设计
集中式防火墙通常架构在内部网络与外部网络之间,用于对流入和流出网络的数据包进行实时检测,过 滤存在安全威胁的数据信息.集中式防火墙处理数据信息速度快、消耗低、延迟短,目前已经广泛应用于网络 规划建设中.但是,集中式防火墙的架构实现需要浪费大量资金成本,只能够对外部网络流入的安全威胁进行检测,无法保障内部网络的安全,而且其架构依赖于网 络拓扑结构,存在较多的问题和弊端。分布式防火墙能 够解决集中式防火墙实现过程中的诸多问题。 本文研究的是基于硬件的嵌入式防火墙实现机制,给出了基于ARM处理器的嵌入式防火墙安全保 护机制总体设计,提出了嵌入式防火墙软件架构和硬 件架构,详细分析了嵌入式防火墙实现过程中的关键 技术,包括芯片选型、硬
[单片机]
基于ARM处理器的<font color='red'>嵌入式</font>防火墙总体架构设计
基于嵌入式处理器的家庭蓝牙网关的实现
      引言   信息家电(IA,Information Appliances)是融合了计算机和通信技术的新型消费电子产品,随着信息家电进一步数字化、网络化、智能化和自动化的发展趋势,出现了家庭网络。而由于蓝牙技术低成本、低功耗、低复杂性、高效率、高可靠性、强互操作性和良好兼容性等特点,使其被家庭网络所接受。为了合理有效地管理网络中的家电,并使其顺利地实现与家庭网络以外的因特网、移动通信网甚至固定市话网之间的通信,蓝牙网关的如何实现则成为问题的关键。本文基于蓝牙技术,介绍了用Motorola公司的嵌入式处理器MCF5272来实现家庭蓝牙网关的具体方案。    一、蓝牙与家庭网络   蓝牙(Bluetooth)是
[嵌入式]
基于51的IIC通讯原理及协议详解(I2C)
IIC 的一些特征: 两条总线:串行数据总线(SDA)和串行时钟总线(SCL) 真正的多主机总线 连接到相同总线的ic数量只受到总线的最大电容400pF限制。 串行8位双向数据在标准模式下可达100K bit/s 快速模式400K bit/s,高速模式下3.4Mbit/s. 数据有效性规定: IIC总线在进行数据传输时,SCL在高电平区间,SDA上的电平必须保持稳定 SDA的数据的高或者低电平状态只有在SCL线的时钟信号是低电平时才能改变。 起始和停止条件: 起始:SCL高电平时,SDA由高电平向低电平切换。 停止:SCL高电平时,SDA由低电平向高电平切换。 模拟时序如下: 起始与终止: 应答与非应答: 总线上进行一次数据传
[单片机]
基于51的IIC通讯原理及协议详解(<font color='red'>I</font>2C)
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved