本來(lái)繼上集(【芒果派MangoPi MQ Quad】利用MangoPi MQ Quad部署一個(gè)網(wǎng)絡(luò)攝像頭-電子發(fā)燒友網(wǎng) (elecfans.com))后,繼續(xù)寫(xiě)公網(wǎng)視頻傳輸,后來(lái)一直沒(méi)找到合適的公網(wǎng)穿透工具,找了幾個(gè)要么不免費(fèi),要么各種驗(yàn)證,還是放棄吧。
得益于四核A53的性能,NCNN跑起來(lái)應(yīng)該問(wèn)題不大,本文主要介紹NCNN在MangoPi MQ Quad上的部署和測(cè)試。
一、NCNN介紹
ncnn 是一個(gè)為手機(jī)端極致優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)前向計(jì)算框架。 ncnn 從設(shè)計(jì)之初深刻考慮手機(jī)端的部署和使用。 無(wú)第三方依賴,跨平臺(tái),手機(jī)端 cpu 的速度快于目前所有已知的開(kāi)源框架。 基于 ncnn,開(kāi)發(fā)者能夠?qū)?a target="_blank">深度學(xué)習(xí)算法輕松移植到手機(jī)端高效執(zhí)行, 開(kāi)發(fā)出人工智能 APP,將 AI 帶到你的指尖。 ncnn 目前已在騰訊多款應(yīng)用中使用,如:QQ,Qzone,微信,天天 P 圖等。
ncnn: ncnn ncnn 是騰訊優(yōu)圖實(shí)驗(yàn)室首個(gè)開(kāi)源項(xiàng)目,是一個(gè)為手機(jī)端極致優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)前向計(jì)算框架 (gitee.com)
二、源碼下載&編譯
(一)源碼下載
NCNN的github(github.com/Tencent/ncnn)拉源碼。
root@orangepizero2:~# git clone https://github.com/Tencent/ncnn.git Cloning into 'ncnn'... remote: Enumerating objects: 31640, done. remote: Counting objects: 100% (5982/5982), done. remote: Compressing objects: 100% (498/498), done. remote: Total 31640 (delta 5754), reused 5489 (delta 5484), pack-reused 25658 Receiving objects: 100% (31640/31640), 22.19 MiB | 2.33 MiB/s, done. Resolving deltas: 100% (26851/26851), done. Updating files: 100% (3195/3195), done.
(二)源碼編譯
考慮到四核A53的能力,加上NCNN本身也支持板上直接編譯,所以就不去PC上搞交叉編譯了。
Debian包自帶gcc,所以就不需要在MangoPi MQ Quad編譯安裝了,頂多更新下。
按照下面順序:
cd ?ncnn-root-dir??> mkdir -p build-aarch64-linux-gnu cd build-aarch64-linux-gnu cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake .. make -j$(nproc)
操作及l(fā)og如下:
root@orangepizero2:~/ncnn/build-aarch64-linux-gnu# cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake .. -- CMAKE_TOOLCHAIN_FILE = /root/ncnn/toolchains/aarch64-linux-gnu.toolchain.cmake -- CMAKE_INSTALL_PREFIX = /root/ncnn/build-aarch64-linux-gnu/install -- NCNN_VERSION_STRING = 1.0.20230721 -- The C compiler identification is GNU 10.2.1 -- The CXX compiler identification is GNU 10.2.1 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Performing Test NCNN_COMPILER_SUPPORT_GNU_INLINE_ASM -- Performing Test NCNN_COMPILER_SUPPORT_GNU_INLINE_ASM - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM_VFPV4 -- Performing Test NCNN_COMPILER_SUPPORT_ARM_VFPV4 - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_FP16 -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_FP16 - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_DOTPROD -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_DOTPROD - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_FP16FML -- Performing Test NCNN_COMPILER_SUPPORT_ARM82_FP16FML - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM84_BF16 -- Performing Test NCNN_COMPILER_SUPPORT_ARM84_BF16 - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM84_I8MM -- Performing Test NCNN_COMPILER_SUPPORT_ARM84_I8MM - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVE -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVE - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVE2 -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVE2 - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEBF16 -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEBF16 - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEI8MM -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEI8MM - Success -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEF32MM -- Performing Test NCNN_COMPILER_SUPPORT_ARM86_SVEF32MM - Success -- Target arch: arm 64bit -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success -- Performing Test COMPILER_HAS_DEPRECATED_ATTR -- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success -- Found OpenMP_C: -fopenmp (found version "4.5") -- Found OpenMP_CXX: -fopenmp (found version "4.5") -- Found OpenMP: TRUE (found version "4.5") -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed -- Check if compiler accepts -pthread -- Check if compiler accepts -pthread - yes -- Found Threads: TRUE -- Configuring done -- Generating done -- Build files have been written to: /root/ncnn/build-aarch64-linux-gnu root@orangepizero2:~/ncnn/build-aarch64-linux-gnu# make -j4 Scanning dependencies of target ncnn-generate-spirv [ 0%] Built target ncnn-generate-spirv Scanning dependencies of target ncnn [ 1%] Building CXX object src/CMakeFiles/ncnn.dir/benchmark.cpp.o [ 1%] Building CXX object src/CMakeFiles/ncnn.dir/allocator.cpp.o [ 2%] Building CXX object src/CMakeFiles/ncnn.dir/blob.cpp.o [ 2%] Building CXX object src/CMakeFiles/ncnn.dir/c_api.cpp.o [ 3%] Building CXX object src/CMakeFiles/ncnn.dir/command.cpp.o [ 3%] Building CXX object src/CMakeFiles/ncnn.dir/cpu.cpp.o [ 4%] Building CXX object src/CMakeFiles/ncnn.dir/datareader.cpp.o [ 4%] Building CXX object src/CMakeFiles/ncnn.dir/gpu.cpp.o [ 5%] Building CXX object src/CMakeFiles/ncnn.dir/layer.cpp.o [ 5%] Building CXX object src/CMakeFiles/ncnn.dir/mat.cpp.o .... [ 99%] Building CXX object src/CMakeFiles/ncnn.dir/layer/copyto.cpp.o [100%] Linking CXX static library libncnn.a [100%] Built target ncnn Scanning dependencies of target benchncnn [100%] Building CXX object benchmark/CMakeFiles/benchncnn.dir/benchncnn.cpp.o [100%] Linking CXX executable benchncnn [100%] Built target benchncnn root@orangepizero2:~/ncnn/build-aarch64-linux-gnu# ll total 56 drwxr-xr-x 3 root root 4096 Jul 21 15:36 benchmark -rw-r--r-- 1 root root 28856 Jul 21 15:19 CMakeCache.txt drwxr-xr-x 5 root root 4096 Jul 21 15:36 CMakeFiles -rw-r--r-- 1 root root 1917 Jul 21 15:19 cmake_install.cmake -rw-r--r-- 1 root root 7466 Jul 21 15:19 Makefile drwxr-xr-x 3 root root 4096 Jul 21 15:35 src
等了大約10分鐘,畢竟編譯速度比不上X86,檢查下生成的可執(zhí)行文件,正常:
root@orangepizero2:~/ncnn/build-aarch64-linux-gnu# file benchmark/benchncnn benchmark/benchncnn: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1,x 3.7.0, not stripped
三、測(cè)試
將生成的可執(zhí)行文件拷貝到原目錄的benchmark/文件夾中,因?yàn)檫@里面有測(cè)試需要的模型數(shù)據(jù)。
root@orangepizero2:~/ncnn/build-aarch64-linux-gnu/benchmark# cd ../../benchmark/ root@orangepizero2:~/ncnn/benchmark# ls alexnet.param efficientnet_b0.param mnasnet.param mobilenet_v2.param proxylessnasnet.param resnet50_int8.param sq benchncnn efficientnetv2_b0.param mobilenet_int8.param mobilenetv2_yolov3.param README.md resnet50.param sq benchncnn.cpp FastestDet.param mobilenet.param mobilenet_v3.param regnety_400m.param shufflenet.param sq blazeface.param googlenet_int8.param mobilenet_ssd_int8.param mobilenet_yolo.param resnet18_int8.param shufflenet_v2.param vg CMakeLists.txt googlenet.param mobilenet_ssd.param nanodet_m.param resnet18.param squeezenet_int8.param vg
執(zhí)行一下,幾個(gè)模型測(cè)試都跑個(gè)遍:
責(zé)任編輯:彭菁
-
攝像頭
+關(guān)注
關(guān)注
60文章
4927瀏覽量
97433 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3533瀏覽量
43306
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【免費(fèi)試用22期】芒果派MangoPi MQ Quad
【芒果派MangoPi MQ Quad】+初次刷機(jī)
【芒果派MangoPi MQ Quad】開(kāi)箱與Debian系統(tǒng)體驗(yàn)
【芒果派MangoPi MQ Quad】安卓10系統(tǒng)體驗(yàn)
【芒果派MangoPi MQ Quad】開(kāi)箱+資料準(zhǔn)備
【芒果派MangoPi MQ Quad】利用MangoPi MQ Quad部署一個(gè)網(wǎng)絡(luò)攝像頭
【芒果派MangoPi MQ Quad】NCNN在MangoPi MQ Quad上的部署和測(cè)試
【芒果派MangoPi MQ Quad】開(kāi)箱+系統(tǒng)測(cè)試
【芒果派MangoPi MQ Quad】Android10的體驗(yàn)
【幸狐 Core3566 模組試用體驗(yàn)】NCNN在Core3566 模組上的部署和測(cè)試
【芒果派MangoPi MQ Quad】開(kāi)箱+系統(tǒng)測(cè)試

評(píng)論