淄博百度网站建设,网页建设与网站设计心德体会,做网站都有什么功能,wordpress手机端网站模板下载失败本篇测评由电子发烧友的优秀测评者“ALSET”提供。 米尔 MYD-Y6ULX-V2 开发板#xff0c;基于 NXP i.MX6UL/i.MX6UL L处理器#xff0c;该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发#xff0c;测试ncnn在此开发板上…本篇测评由电子发烧友的优秀测评者“ALSET”提供。 米尔 MYD-Y6ULX-V2 开发板基于 NXP i.MX6UL/i.MX6UL L处理器该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发测试ncnn在此开发板上的性能与应用测试。 01.
什么是ncnn
ncnn 是腾讯优图推出的在手机端极致优化的高性能神经网络前向计算框架。也能够在移动设备上的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑移动端的部署和使用。无第三方依赖跨平台其中手机端 cpu的速度快于目前所有已知的开源框架。
基于ncnn能够将深度学习算法轻松移植到手机端和移动设备上高效执行开发人工智能应用。以腾讯内部应用为例ncnn目前已在QQQzone微信天天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与同类框架对比 03.
在i.MX 6ull上移植编译ncnn
工程地址 githubhttps://github.com/Tencent/ncnn 从工程的readme文件看该工程已经支持很多嵌入式CPU的架构其中就有arm 32位版本。 既然支持arm32位那么ixm6ull处理器也应该支持即着手编译MYD-Y6ULX-V2开发板上的版本。
1.从github 上拉取ncnn源码
在主机上执行命令
Sudo git clone https://github.com/Tencent/ncnn.git 可见是一个 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 -marcharmv7-a -mfloat-abihard -mfpuneon --sysroot/home/lutherluo/workspace/fsl-imx-fb/5.10-gatesgarth/sysroots/cortexa7t2hf-neon-poky-linux-gnueabi)
set(CMAKE_CXX_FLAGS -marcharmv7-a -mfloat-abihard -mfpuneon --sysroot/home/lutherluo/workspace/fsl-imx-fb/5.10-gatesgarth/sysroots/cortexa7t2hf-neon-poky-linux-gnueabi)# cache flags
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING c flags)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING c flags) 4.再使用cmake生成编译文件
添加完该开发板的编译工具链后就可以使用cmake来生成编译所需的makefile文件了。在cmake时可以指定除了编译ncnn库外还可以编译ncnn例子程序。命令如下
cmake-DCMAKE_BUILD_TYPERelease -DNCNN_SIMPLEOCVON-DCMAKE_TOOLCHAIN_FILE../toolchains/arm-poky-linux-gnueabi.cmake-DNCNN_BUILD_EXAMPLESON .. 查看目录下已经顺利地生成了 Makefile文件。
5.使用make编译文件
然后可以正式编译ncnn库和测试样例程序了。
直接执行
make –j4
就开始愉快地编译了。 编译libncnn库文件成功会继续自动编译 examples 下的例子文件。 大约10多分钟顺利地全部编译完成。
在编译测试用例时会出现库格式错误的提示此时需要设置一下交叉编译环境下的库归档工具系统默认使用的是arm-poky-linux-gnueabi-ar 工具这个工具产生的 .a文件有问题经过测试使用 arm-poky-linux-gnueabi-gcc-ar 即可。
只需要在执行切换交叉环境脚本后再单独执行一下以下命令即可修改该问题
export ararm-poky-linux-gnueabi-gcc-ar
再进行编译即可。
6.查看编译结果
编译完成后在build目录下可以看到 benchmark 目录该目录下就是ncnn的基准测试工具可以看到目标板执行文件已经编译出来。 再进入到 build/example 下可以看到所有例程也编译出来了。 04.
板上运行测试ncnn
编译完成把可执行文件与模型文件复制到开发板里进行测试。 把 build/benchmark 下的benchmark 复制到开发板/home/root/ncnn 目录下同时把工程根目录下的benchmark 目录下所有文件也复制到开发板 /home/root/ncnn目录下 然后就可以执行 benchmark 执行文件来测试开发板的人工神经网络的计算能力。 先把开发环境下目标文件系统arm目录下/usr/lib下的libgomp.so.1文件复制到开发板的/usr/lib下这个文件是并行计算库ncnn编译时用到了这个库这个库在多核处理器上能够支持执行并行计算。然后再在本开发板执行benchmark执行输出结果如下图 可见大部分的模型能够跑通了有部分模型运行出现异常。 从抛出的分值可以评估该开发板的神经网络推理计算能力了。 这个分值是一个模型推理一次的耗时所以数值越小意味着算力越强。考虑到这个开发板是一个arm v7入门级的开发板这样的性能已经超乎预料了。
05.
测试基于ncnn的应用
这里在MYD-Y6ULX-V2开发板上测试ncnn的应用例子这里就用ncnn下的例程来做测试在上面编译完example后在build目录下会产生example的目标板的可执行文件。编译出来的例子程序如下,把他们全部传到开发板上。 需要注意的是除了ncnn的应用执行文件在这些例子执行的时候还需要模型和测试的资源文件而这些文件体积都比较大因此不能传送到开发板的系统目录上需要单独存在扩展的存储空间上。 经过观察板上的文件系统发现有3.1G的空间没有使用此时可以使用fdisk 来格式化该空间格式化成 ext4 格式重启板子后就可以看到这部分空间了然后把ncnn的所有测试执行文件和资源文件传到该目录下这样就够用了。 在板上执行各个测试例子会提示缺少相关模型文件和参数文件这些模型和参数文件在这个github上面下载相应的文件到当前目录下就可以。ncnn-assets/models at master · nihui/ncnn-assets · GitHub 1. 测试图片分类器 准备被测试图片,test,jpg ,传到上ncnn当前目录下 并且下载好 squeezenet_v1.1.param和 squeezenet_v1.1.bin 文件到 ncnn当前目录下然后执行一下命令 ./squeezenet./test.jpg 很快就输出识别结果输出结果如下图 输出结果前面的编号和分类号具体可以参考 mageNet20121000分类名称和编号 https://zhuanlan.zhihu.com/p/315368462 但不知本测试模型所用分类的版本是否和这个一致。2 测试图片内容多目标识别 测试图片内容识别先用上面的图再使用 squeezenetssd 来执行。执行前先下载 squeezenet_ssd_voc.bin和 squeezenet_ssd_voc.param 到板上ncnn当前目录下然后执行 ./squeezenetssd./test.jpg 大约3秒左右输出结果如图 输出的分类编号可见代码的定义 同时输出了识别结果图 再测试另外一张图 执行结果如下 输出识别结果图 上面的识别因为输出的第二个目标被第三个目标遮盖第二个识别为“Dog”所以识别准确度还是比较高的。 再测试了一张图 输出 识别效果也比较理想。 06.
ncnn移植测试总结
经过在MYD-Y6ULX-V2开发板上进行这次的ncnn移植测试总体非常顺利在移植中只需要针对开发板的编译器修改添加相应的编译脚本即可顺利的编译ncnn库和所有例程。并不需要对代码做任何改动或者调整因此过程很快短暂的时间就可以完成ncnn这样一个神经网络框架在本开发板上运行起来。
对ncnn的benchmark的性能测试来看因为本开发板仅为arm v7单核处理器处于入门级的一款开发板能跑出这样的成绩已经出乎意料。 在对实际图像分类和图像内容识别测试中其中图像分类仅百十毫秒就出结果对多目标识别单张图在2秒左右这对一些静态的环境下已经能够达到业务使用的需求了再综合其硬件性能可见效能比是非常高的。同时工程里还带有一些各种其它框架模型转化ncnn的工具方便将其它模型转化到ncnn上来使用非常方便。 同时也测试出ncnn的良好的可移植性和对不同嵌入式硬件的支持较好其它任何一个神经网络框架恐怕无法在这样一个系统上运行因此也为这样一个有效的国产开源神经网络项目点赞。