本帖最后由 ALSET 于 2023-10-13 11:04 编辑
【米尔瑞萨RZ/G2L开发板-创新应用】 NCNN人工神经网络的移植测试开发 大信(QQ:8125036) 米尔瑞萨RZ/G2L开发板具有1/2xCortex-A55@1.2GHz+Cortex-M33@200MHz,配置,能够满足高性能和实时性需求。它集成了Arm Mali-G31 3D GPU,VPU支持H.264 1920*1080@30FPS视频编解码。该开发板比较适用在高级图形、高级成像、高级机器视觉、高端音频、高端语音、高端视频和高安全的嵌入式应用等跨领域的多种应用场景。 此将尝试使用该开发板进行图像神经网络框架NCNN的移植测试和应用开发测试。
一、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手机受众太狭窄。非开源也导致开发者无法自主扩展功能。
二、在YG2LX上移植编译ncnn 下面步骤就是着手移植NCNN到MYD-YG2LX开发板上来的过程: 1.从github 上拉取ncnn源码 在主机上执行命令: 2.添加MYD-YG2LX开发板拿的编译配置 工程在toolchains目录下,有一些其它开发板的编译配置参考文件,参照aarch64-linux-gnu.toolchain.cmake文件,复制一个,改名为yg2lx-linux-gnu.toolchain.cmake,并打开该文件根据MYD-YG2LX的编译器配置进行修改。 修改内容如下: set(CMAKE_SYSTEM_NAMELinux) set(CMAKE_SYSTEM_PROCESSORaarch64) set(CMAKE_C_COMPILER"aarch64-poky-linux-gcc") set(CMAKE_CXX_COMPILER"aarch64-poky-linux-g++") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY) set(CMAKE_C_FLAGS"-march=armv8-a --sysroot=/opt/ 5.10-hardknott/sysroots/cortexa53-crypto-poky-linux") set(CMAKE_CXX_FLAGS"-march=armv8-a --sysroot=/opt/ 5.10-hardknott/sysroots/cortexa53-crypto-poky-linux") # cache flags set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS}" CACHE STRING "c flags") set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
3.再使用cmake生成编译文件 添加完该开发板的编译工具链后,就可以使用cmake来生成编译所需的makefile文件了,这里使用板上的OPenCV库。在cmake时,可以指定除了编译ncnn库外,还可以编译ncnn例子程序。命令如下:
#!/usr/bin/env bash ##### yg2l mkdir -p build-for-yg2l pushd build-for-yg2l cmake ..-DCMAKE_BUILD_TYPE=Release -DNCNN_BUILD_EXAMPLES=ON-DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake make -j4 make install popd
编辑好之后,在开发板上直接执行该脚本: 查看目录下,已经顺利的生成了 Makefile文件。 4.使用make编译文件 然后可以正式编译ncnn库和测试样例程序了。直接执行 make –j4 就开始愉快的编译了。 编译libncnn库文件成功,会继续自动编译测试例程 examples 下的例子文件。 大约15多分钟,顺利的全部编译完成。 整个编译时,非常顺利,一次就得编译通过。 5.查看编译结果 编译完成后,在build目录下,可以看到 benchmark 目录,该目录下就是ncnn的基准测试工具,可以看到目标板执行文件已经编译出来。 再进入到 build/example 下,可以看到所有例程也编译出来了。
四、在YG2LX上运行测试ncnn 编译完成把可执行文件与模型文件一起传送到开发板里进行执行测试。首先把build/benchmark 下的benchmark 复制到开发板/home/workspace/ncnn 目录下,同时把工程根目录下的 benchmark目录下所有文件也复制到开发板 /home/root/ncnn 目录下, 然后就可以执行 benchmark 执行文件来测试开发板的NCNN标准计算能力。 先把开发环境下目标文件系统arm目录下/usr/lib下的libgomp.so.1文件复制到开发板的/usr/lib下,这个文件是并行计算库,ncnn编译时用到了这个库,这个库在多核处理器上能够支持执行并行计算。 在本开发板上执行benchmark,执行输出结果如下图: 所有的测试均能够跑通了,对比同类主处理器与主频下,MYD-YG2L开发板跑分在其它智商,表现相当不错,经过分析主要认为在同样主内核和主频下,处理器的性能与其架构密切相关,而该处理器架构无疑是领先的。
五、测试基于ncnn的应用 在MYD-YG2LX开发板上测试ncnn的应用例子,用ncnn下的例程来做测试,在上面编译完example后,在build目录下回产生example的目标板的可执行文件。编译出来的例子程序如下,把他们全部传到开发板上。 在把例子执行的模型和测试的资源文件传送到开发板的系统目录上。这些模型和参数文件在这个github地址上,下载相应的文件到当前目录下就可以。 1图片内容多目标分割识别 先上传一些测试的图片,这里先使用squeezenetssd 来测试图片内容识别,执行前先下载 squeezenet_ssd_voc.bin和 squeezenet_ssd_voc.param 到板上ncnn当前目录下然后执行: ./squeezenetssd./test.jpg 识别输出结果图如下: 2.使用Fastestdet模型测试目标识别 再使用另外一个模型 fastestdet 来检测一下,fastesdet 目标识别的效果 把 FastestDet.param模型文件传输到开发板上,执行: ./fastestdettest.jpg 输出结果如下: 用时56毫秒,并且识别结果也很理想。
六、ncnn开发测试总结 经过在MYD-YG2LX开发板上成功的快速的进行了cnn移植测试和应用开发,通过测试看ncnn在该开发板上运行顺利的运行起来,效果理想,并且运行效率很高,在同样内核与主频的开发板上,其识别速度领先。因而该开发板在对一些较为简单的AI视觉识别上可以上可以进行推理应用。 可见MYD-YG2LX开发板对ncnn有较高的性能表现,能够在视频分类,画面分割方面开发出很多实用的应用。依托MYD-YG2LX强大的性能使得AI应用实现更加容易,也可以结合其多媒体能力,从而组合设计出更多具有创意的产品出来。
|