【转载】在全志d1开发板上玩ncnn
-
文章转自 知乎
原文链接 https://zhuanlan.zhihu.com/p/386312071?utm_source=wechat_session&utm_medium=social&utm_oi=33855348146176&utm_campaign=shareopn&s_r=0
作者 nihui可在不修改本文章内容和banner图前提下,转载本文
这是我最后一次优化 risc-v 这 1.4w 行代码是我最后的倔强 你们不可能再看见我为这个 d1 写一行代码,不可能 这 96 个 cpp 文件,我要用到 2030 年
首先感谢全志科技公司送了我d1开发板,以及sipeed、rvboards在系统底层技术工作和支持,才有了ncnn AI推理库在risc-v架构上更好的优化 qwqwqwq
0x0 ncnn risc-v 优化情况
https://github.com/Tencent/ncnn
ncnn 是腾讯开源的神经网络推理框架
-
列表支持深度学习模型 caffe/mxnet/keras/pytorch(onnx)/darknet/tensorflow(mlir)
-
列表跨平台:Windows/Linux/MacOS/Android/iOS/WebAssembly/...
-
列表兼容多种 CPU 架构:x86/arm/mips/risc-v/...
-
列表支持 GPU 加速:NVIDIA/AMD/Intel/Apple/ARM-Mali/Adreno/...
-
列表支持各种常见的模型结构,比如 mobilenet/shufflenet/resnet/LSTM/SSD/yolo...
-
列表很强,qq群请移驾 ncnn github 首页README
因为据全(某)志(人)说,全志的用户基础都挺一般,可能不知道 ncnn 是什么东西,所以便罗嗦一番...
从上次发了开箱自拍jpg,到现在一个月了,ncnn risc-v vector 优化情况还算不错,大部分重要的优化都做了,剩下一些会留给社区学生pr,和慢慢变聪明的编译器
ncnn risc-v 目前使用 rvv-1.0 intrinisc 编写优化代码,并支持任意 vlen 的配置,面向未来顺便兼容了 d1开发板
-
列表rvv-0.7.1 某些 intrinisc 转换可能有效率问题
-
列表有遇到过 0.7.1 intrinisc 行为怪异只能写 C 代码绕过
-
列表gcc 还比较笨,每行 intrinisc 都会加一条无用的 setvli 指令
-
列表因为没法同时兼容 rvv-1.0 和 rvv-0.7.1,便没有写汇编
-
列表一些算子,如 hardswish/hardsigmoid/binaryop/eltwise/slice/... 待优化(欢迎pr!!!qaq)
下面这张图只是最近一周多的情况。如果跟最开始比,柱状图就太高了...
0x1 准备交叉编译工具链
去平头哥芯片开放社区下载 工具链-900 系列
平头哥芯片开放社区(OCC)比如 riscv64-linux-x86_64-20210512.tar.gz,下载后解压缩,设置环境变量
tar -xf riscv64-linux-x86_64-20210512.tar.gz export RISCV_ROOT_PATH=/home/nihui/osd/riscv64-linux-x86_64-20210512
0x2 下载和编译ncnn
为 d1 架构交叉编译 ncnn
因为编译器 bug,release 编译会导致运行时非法指令错误,必须使用 relwithdebinfo 编译哦
-
列表ncnn 已支持直接用 simpleocv 替代 opencv 编译出 examples
-
列表列表不需要配opencv啦!
-
列表不需要配opencv啦!
-
列表不需要配opencv啦!(重要,说了三遍)
git clone https://github.com/Tencent/ncnn.git cd ncnn mkdir build-c906 cd build-c906 cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/c906.toolchain.cmake -DCMAKE_BUILD_TYPE=relwithdebinfo -DNCNN_OPENMP=OFF -DNCNN_THREADS=OFF -DNCNN_RUNTIME_CPU=OFF -DNCNN_RVV=ON -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON .. make -j32
0x3 测试benchncnn
d1 默认的 TinaLinux 执行 ncnn 程序时会发生非法指令错误,必须使用 Debian 系统哦
- 列表vgg16 这类大型模型在内存不足时会发生 segmentation fault,是 d1开发板硬件条件不够,不管即可
将
ncnn/build-c906/benchmark/benchncnn
和ncnn/benchmark/*.param
拷贝到 d1开发板上./benchncnn 4 1 0 -1 0
0x4 测试example
将
ncnn/build-c906/examples/nanodet
和测试图片拷贝到 d1开发板上从这里下载 nanodet 模型文件并拷贝到 d1开发板上
https://github.com/nihui/ncnn-assets/tree/master/models
./nanodet test.jpg
输出检测结果信息,并保存在 image.png
0 = 0.82324 at 200.04 44.89 198.96 x 253.33 0 = 0.78271 at 32.98 63.45 178.15 x 232.92 56 = 0.45923 at 1.46 71.92 90.14 x 117.85 imshow save image to image.png waitKey stub
把image.png下载到本地查看,结果已经画在图片上了!d1开发板AI目标检测成功 w
0x5 mips大概也会安排啦,欢迎关注 ncnn github,加qq群交流!
https://github.com/Tencent/ncnn
qq群在 ncnn github 首页 readme 中~
-
-
快跟上大佬们的脚步~~~~
-
啊这
字数补丁
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号