1. 前言
- 之前一直是在電腦端運(yùn)行YOLOv5,但在戶外調(diào)試的時(shí)候不太方便,因此考慮把YOLOv5的代碼移植到手機(jī)端。
- 這個(gè)部署的流程其實(shí)很簡(jiǎn)單:原始pt權(quán)重>中間onnx權(quán)重>ncnn權(quán)重>修改Android Studio源碼>得到安卓APP>結(jié)束。如果你感覺博客教程太長(zhǎng)了,那么很有可能是中間的圖片太多,以及之前自己部署的時(shí)候踩坑環(huán)節(jié)太多,這些部分你都可以直接跳過去。放心好了,我把自己踩過的坑的正確方法全部修正放在正文中了,踩坑和實(shí)驗(yàn)環(huán)節(jié)自己全部放在[報(bào)錯(cuò)]章節(jié)了,盡量減少大家在部署的過程中遇到的坑的數(shù)量。
2. 模型轉(zhuǎn)換
2.1. NCNN
2.1.1. 簡(jiǎn)介
NCNN是一個(gè)騰訊開源的優(yōu)化到極致的高性能神經(jīng)網(wǎng)絡(luò)前向計(jì)算框架,可以把電腦端生成在深度學(xué)習(xí)模型移植到手機(jī)端,支持的模型非常多
NCNN官方的定義:NCNN是騰訊公司開源的一個(gè)專為手機(jī)端極致優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)前向計(jì)算框架。NCNN從設(shè)計(jì)之初,就深刻考慮手機(jī)端的部署和使用,無需第三方依賴,跨平臺(tái),手機(jī)端CPU的速度快于目前所有已知的開源框架?;贜CNN,開發(fā)者能夠?qū)⑸疃葘W(xué)習(xí)算法輕松移植到手機(jī)端高效執(zhí)行,開發(fā)出人工智能APP,將AI帶到你的指尖。
目前NCNN已經(jīng)支持大部分的CNN網(wǎng)絡(luò),包括本文中用到的YOLOv5,
可以從這個(gè)網(wǎng)頁上進(jìn)行查看支持的具體平臺(tái)
Releases · Tencent/ncnn · GitHub
我們接下來主要以帶加速的ncnn-android-vulkan.zip展開
2.1.2. ncnn
GitHub Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform
2.1.3. ncnn-android-yolov5
GitHub nihui/ncnn-android-yolov5: The YOLOv5 object detection android example
2.2. 項(xiàng)目準(zhǔn)備
2.2.1. 安裝Android studio
這個(gè)百度上有很多對(duì)應(yīng)的經(jīng)驗(yàn)體,隨便找一個(gè)教程,然后切換一下國(guó)內(nèi)源,即可安裝成功,這里不做贅述
這里需要說明一點(diǎn),我們應(yīng)該安裝NDK、Cmake
- 這里根據(jù)自己的手機(jī)版本來選擇對(duì)應(yīng)的開發(fā)環(huán)境
- 最后點(diǎn)擊應(yīng)用安裝
2.2.2. 下載解壓源碼
下載解壓NCNN和ncnn-android-yolov5工程
- Releases · Tencent/ncnn · GitHub
- 把ncnn-20221128-android-vulkan里面的文件復(fù)制一份到ncnn-android-yolov5-master的\app\src\main\jni目錄下
2.3. 安卓源碼重新編譯
2.3.1. 構(gòu)建工程
用Android studio 打開這個(gè)ncnn-android-yolov5-master項(xiàng)目的build.gradle文件
- 之后Android studio會(huì)幫我們構(gòu)建整個(gè)工程,耐心等待他走完
2.3.2. 修改源碼
2.3.2.1. 修改CMakeLists.txt中的路徑
- 打開ncnn-android-yolov5-master\app\src\main\jni\CMakeLists.txt
- 將第五行的路徑改為自己的路徑
- 也就是將
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20201218-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
- 改為
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib/cmake/ncnn)
- 也就是把作者的根目錄給刪除掉
- 修改之后
- 簡(jiǎn)單說明一下:ANDROID_ABI對(duì)應(yīng)的是不同架構(gòu)下的文件夾名稱
2.3.2.2. 重新重新ysnc project
2.3.2.3. 安裝APP到手機(jī)端
點(diǎn)擊這個(gè)開始按鈕即可
- 可以看到,手機(jī)端已經(jīng)安裝好這個(gè)APP了
- 點(diǎn)開看一下界面
2.4. demo效果測(cè)試
-
我們選擇一張有物體的圖片,點(diǎn)擊識(shí)別
-
可以看到,已經(jīng)可以用目標(biāo)檢測(cè)框把這個(gè)鼠標(biāo)給框出來了
-
如果我們想查看手機(jī)識(shí)別的精確結(jié)果,可以點(diǎn)擊這個(gè)run狀態(tài)欄(需要注意,這個(gè)操作必須是手機(jī)通過數(shù)據(jù)線連接電腦才行)
-
這個(gè)時(shí)候再在手機(jī)端進(jìn)行選圖識(shí)別,電腦端就會(huì)打印出識(shí)別所用的精確時(shí)間
這里CPU識(shí)別一張圖片用112毫秒,GPU識(shí)別一張圖片需要201毫秒,這是什么鬼?可能是GPU模型比較大吧,導(dǎo)入的速度會(huì)慢一點(diǎn),處理單張圖片看不出來區(qū)別,處理視頻的時(shí)候應(yīng)該還是GPU更好。
2.5. 換成自己的訓(xùn)練模型
- 當(dāng)我們訓(xùn)練好了自己的檢測(cè)模型后,就需要一種中介,通過它在不同的框架之間進(jìn)行轉(zhuǎn)換,Open Neural Network Exchange 簡(jiǎn)稱 ONNX,意思是開放神經(jīng)網(wǎng)絡(luò)交換格式,它就是我們需要的中介。
- 其實(shí)這個(gè)修改源碼所需的工作量也沒多少,
2.5.1. 轉(zhuǎn)換自己訓(xùn)練的pt權(quán)重為ncnn格式
我們采用.pt ->onnx->ncnn的路線來轉(zhuǎn)換自己訓(xùn)練的模型
2.5.1.1. 導(dǎo)出需要的onnx文件
2.5.1.1.1. 首先,安裝onnx包
- pip install onnx coremltools onnx-simplifier
2.5.1.1.2. 使用YOLOv5自帶的export.py進(jìn)行轉(zhuǎn)換
- 執(zhí)行export.py操作前,修改weights和data的路徑
- 這里有一點(diǎn)非常重要,一定要選擇train模式去掉后處理,否則最終生成的APP會(huì)閃退(自己在這個(gè)問題上看了好長(zhǎng)好長(zhǎng)一段時(shí)間才摸索出來的經(jīng)驗(yàn))
- 執(zhí)行export.py操作后,會(huì)在權(quán)重文件夾下面生成一個(gè)onnx文件
- 如果PyCharm直接運(yùn)行無法生成onnx的話,使用下面的腳本命令應(yīng)該就可以成功了
export.py --weights weights/yolov5s.pt --include torchscript onnx
python export.py --train --weights weights/yolov5s.pt --include torchscript onnx
2.5.1.1.3. 對(duì)onnx文件進(jìn)行壓縮
- python -m onnxsim best.onnx best-sim.onnx
- 壓縮完之后會(huì)生成一個(gè)best-sim.onnx的文件
- 這一步是必須的,如果這一步不做,后面ONNX轉(zhuǎn)NCNN可能會(huì)報(bào)錯(cuò)
2.5.1.2. 將onnx文件轉(zhuǎn)換成param文件
2.5.1.2.1. 使用protobuf進(jìn)行轉(zhuǎn)換(過程繁瑣不推薦)
- 之前方法就是使用protobuf來完成這個(gè)onnx文件到ncnn權(quán)重的轉(zhuǎn)換,但是現(xiàn)在有更好的解決方法,轉(zhuǎn)換效率更高速度、更快,也更傻瓜化;以前的這種protobuf雖然也可以用,但是對(duì)于大多數(shù)來說,應(yīng)該只是一種極客的情懷罷,建議選用另一種方式,如果你堅(jiān)持要用這種方式的話,那么就繼續(xù)往下看吧
- 這個(gè)過程在Ubuntu系統(tǒng)上完成,可以使用真的Ubuntu系統(tǒng)或者使用虛擬機(jī)
- 我這里使用的是VMware虛擬機(jī)
- 首先準(zhǔn)備基礎(chǔ)環(huán)境
sudo apt install build-essential libopencv-dev cmake git
- 安裝完畢
- 編譯安裝 protobuf 依賴庫
- 需要注意的是,下面的命令都需要在管理員權(quán)限下運(yùn)行,否則很有可能會(huì)運(yùn)行失?。ㄟ@一步有很多坑,我把自己能運(yùn)行成功的代碼貼上來了,但不保證大家都能運(yùn)行成功。如果還是不可避免出奇奇怪怪的錯(cuò)誤的話,那么去我下面的報(bào)錯(cuò)記錄中查找或者自己上網(wǎng)上找對(duì)應(yīng)的博客排查吧)
su
git clone -b v3.20.1-rc1 https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make install
sudo ldconfig
- 最終安裝完之后會(huì)顯示出protobuf版本號(hào)
protoc --version
- 編譯ncnn
- 目的是生成onnx 轉(zhuǎn) ncnn 的命令行工具
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build
cd build
cmake ..
make -j8
make install
- 下載、編譯完成
- 轉(zhuǎn)換模型
- 編譯安裝完成后,就可以使用 onnx2ncnn 工具進(jìn)行轉(zhuǎn)換了
- 把自己之前壓縮好的best-sim.onnx放在ncnn/build/tools/onnx文件夾下
- 之后切換到這個(gè)目錄下,執(zhí)行下面的操作
./onnx2ncnn best-sim.onnx yolov5s.param yolov5s.bin
- 操作成功后會(huì)生成yolov5s.bin和yolov5s.param兩個(gè)文件
- 到這里,坑最多的轉(zhuǎn)換部分就算完成了
2.5.1.2.2. 使用onnxsim的在線端進(jìn)行轉(zhuǎn)換(過程簡(jiǎn)單,強(qiáng)烈推薦)
-
這種方式簡(jiǎn)直是我們做深度學(xué)習(xí)模型移植到安卓手機(jī)端的神器,整個(gè)過程里沒有復(fù)雜的部署,也沒有什么坑,有的只是人性化的操作界面,簡(jiǎn)單幾個(gè)按鈕就可以把整個(gè)流程給走完,節(jié)省好幾個(gè)小時(shí)的時(shí)間,以及中間的無數(shù)大小坑,溢美之詞不能再多了。
-
一鍵轉(zhuǎn)換 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine
-
是在本地運(yùn)行的,所以自己的模型是不會(huì)被泄露
- 使用
- 選擇對(duì)應(yīng)的參數(shù),上傳文件,點(diǎn)擊轉(zhuǎn)換
- 轉(zhuǎn)換成功
- 點(diǎn)擊下載
- 此外還可以選擇轉(zhuǎn)換為fp16模型,這樣最終產(chǎn)生的模型大小只有原來的二分之一
- 選擇對(duì)應(yīng)的參數(shù),上傳文件,點(diǎn)擊轉(zhuǎn)換
- 效果對(duì)比
- 差異還挺明顯的呀
- 使用
2.5.2. 修改項(xiàng)目源碼
2.5.2.1. 替換原來的param文件
- 將剛才生成的yolov5s.bin、yolov5s.param文件放到ncnn-android-yolov5-master\app\src\main\assets文件夾下,并替換原來的文件
2.5.2.2. 修改param文件中的參數(shù)
- 打開yolov5s.param,搜索Reshape層,將后面對(duì)應(yīng)的 0=6400、0=1600、0=400 均修改為 0=-1 ,這是為了解決實(shí)際中出現(xiàn)的多檢測(cè)框的問題
- 修改前
- 修改后
2.5.2.3. 修改yolov5ncnn_jni.cpp文件
2.5.2.3.1. 將ncnn-android-yolov5-master\app\src\main\jni文件夾下的yolov5ncnn_jni.cpp的分類類別名改成自己模型的實(shí)際類別名
- 修改前
- 修改后
2.5.2.3.2. 修改stride 16和32部分
- 修改源碼文件yolov5ncnn_jni.cpp中Permute 節(jié)點(diǎn)的 output
- 將param文件中permute部分與stride部分中blob_name后面的數(shù)字對(duì)應(yīng)起來
- param文件中搜索permute會(huì)出來3個(gè)結(jié)果,我們選擇
- 我們使用Notre打開這個(gè)yolov5s.param文件,找到permute節(jié)點(diǎn),這個(gè)permute節(jié)點(diǎn)一共有3個(gè),分別是128,256,512尺寸的,我們需要的是256和512的輸出維度
- 修改前
- 修改后
2.6. 測(cè)試
-
連上手機(jī),點(diǎn)擊run按鈕,編譯安裝調(diào)試
-
可以看到了手機(jī)端安裝了對(duì)應(yīng)的APP
點(diǎn)開
- 我們選擇一張圖片進(jìn)行,然后點(diǎn)識(shí)別,可以看到已經(jīng)可以正常的空穴普通的目標(biāo)了,而且置信度還挺高的
- 2022.12.10-23:44:02
- 終于把自己訓(xùn)練好的YOLOV5模型移植到手機(jī)端了,累死我了。但愿今晚有個(gè)好夢(mèng)~
3. 問題
3.1. 為什么不同人轉(zhuǎn)換出來的模型大小不一樣?
- 可能是在轉(zhuǎn)換的過程中,有的人使用FP16吧
.pt->onnx->onnxsim->ncnn, - 在export.py的時(shí)候是否去掉了后處理
添加 --train 參數(shù),去掉后處理
export.py --weights yolov5s.pt --include torchscript --train
3.2. NCNN可以運(yùn)行的權(quán)重是fp32還是fp16的?
- fp32和fp16都可以運(yùn)行
4. 報(bào)錯(cuò)
4.1. Android Studio報(bào)錯(cuò)
-
CMake ‘3.10.2’ was not found in PATH or by cmake.dir property.
點(diǎn)擊下方的install即可 -
By not providing “Findncnn.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “ncnn”, but CMake did not find one.
看一下自己ncnn-20221128-android-vulkan的代碼是否放對(duì)了位置,需要放到ncnn-android-yolov5-master的\app\src\main\jni目錄下 -
No toolchains found in the NDK toolchains folder for ABI with prefix:** arm-linux-androideabi**
在ABI的NDK工具鏈文件夾中沒有找到帶有前綴:arm-linux-androideabi的工具鏈
原因分析:最新版ndk(version=25.1.8937393)的toolchains文件夾中無arm-linux-androideabi文件
解決辦法
- 下載老版本NDK21,
- 打開本地Android SDK所在路徑,解壓到指定目錄就行(如果沒有這個(gè)目錄,就新建一個(gè))
/ndk-bundle/toolchains
- developer.android.com/ndk/downloads/?hl=zh cn
- 修改項(xiàng)目根目錄的local.properties文件
- 可以看到這個(gè)文件中原來沒有NDK的路徑,我們?yōu)槠涫謩?dòng)指定一個(gè)
- 這個(gè)路徑是安卓SDK下面的路徑,具體根據(jù)自己的實(shí)際情況進(jìn)行選擇
ndk.dir=C\:\\Users\\Lenovo\\AppData\\Local\\Android\\Sdk\\platform-tools\\ndk-bundle
- 同時(shí)安裝低版本的ndk(如version=21.3.6528147),將低版本ndk中toolchains 文件夾下的arm-linux-androideabi等文件復(fù)制到25.1.8937393版本ndk的toolchains 文件夾中
- 之后再構(gòu)建項(xiàng)目就不報(bào)錯(cuò)了
-
Update NDK version to 25.1.8937393 and sync project
這個(gè)很好理解嘛,也就是自己的NDK的版本太低了,下載最新版的NDK即可 -
Location specified by ndk.dir (C:\Users\Lenovo\AppData\Local\Android\Sdk\platform-tools\ndk-bundle) did not contain a valid NDK and and couldn’t be used
沒有包含有效的NDK
實(shí)際原因是NDK的路徑不對(duì)
確保NDK的兩個(gè)路徑是正確的 -
-
-
這樣之后再進(jìn)行sync projec就可以正常了
-
-
OSError: [WinError 1455] 頁面文件太小,無法完成操作。 #OSError
電腦上開的東西太多了,關(guān)掉一些就好了
或者設(shè)置虛擬內(nèi)存
4.2. onnx轉(zhuǎn)換報(bào)錯(cuò)
- export.py轉(zhuǎn)換之后沒有生成onnx的文件
可能是因?yàn)樽约菏褂玫腜yCharm進(jìn)行這個(gè)操作,里面有一些參數(shù)沒有傳遞到,可以自己手動(dòng)去看,直到找到到底哪里的參數(shù)傳遞出了問題(我感覺這個(gè)工作沒有太大重復(fù)價(jià)值,就沒做) - 也可以直接使用腳本轉(zhuǎn)換,這樣一般就可以轉(zhuǎn)換成功了
export.py --weights weights/yolov5s.pt --include torchscript onnx
4.3. 編譯protobuf報(bào)錯(cuò)
- make: *** No rule to make target ‘install’。 停止。
可能是中間有些文件沒有下載下來,刪除掉protobuf文件夾,再重新運(yùn)行一遍安裝命令也許就可以成功了
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make install
sudo ldconfig
或者自己先手動(dòng)把這個(gè)倉庫下載下來,然后再進(jìn)行安裝
- GitHub - protocolbuffers/protobuf: Protocol Buffers - Google’s data interchange format
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make install
sudo ldconfig
- 應(yīng)該是從git submodule update --init --recursive 這一步后面就都開始錯(cuò)了,因?yàn)闆]有找到autogen.sh文件
- 2022.12.06-09:38:20
- 自己又安裝了一遍,發(fā)現(xiàn)這邊git submodule update --init --recursive 這一步其實(shí)并沒有太大問題
- 2022.12.06-09:41:43
- 最終,百度找到原因了,autogen.sh是一個(gè)shell腳本,用來簡(jiǎn)化生成configure的,需要事先配置好,而不是在這個(gè)程序中才搞的。
- autogen.sh_zhangatong的博客-CSDN博客_autogen.sh
- 那么直接安裝autogen.sh的相關(guān)組件即可
sudo apt-get install autoconf automake libtool
- 最終找到原因了,下載的protobuf源碼中沒有autogen.sh文件
- 這是因?yàn)樾掳姹镜捻?xiàng)目中已經(jīng)沒有了這個(gè)autogen.sh,
- 而舊版本上面還有
- 我們下載的時(shí)候使用舊版本即可
git clone -b v3.20.1-rc1 https://github.com/protocolbuffers/protobuf.git
- 可以看到這個(gè)問題已經(jīng)不報(bào)錯(cuò)了
4.4. 編譯NCNN報(bào)錯(cuò)
- Makefile:127: recipe for target ‘a(chǎn)ll’ failed make: *** [all] Error 2
Ubuntu下編譯ncnn的時(shí)候說這個(gè)問題
這是因?yàn)榫幾g的時(shí)候找不到鏈接目錄
更新到gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~16.04) 解決問題了。 - NCNN編譯報(bào)錯(cuò) · Issue #4255 · Tencent/ncnn · GitHub
- 可以看到這個(gè)錯(cuò)誤已經(jīng)消失了(雖然后面依然有錯(cuò)誤,但最起碼是解了燃眉之急)
- CMake Error at CMakeLists.txt:48 (project):No CMAKE_CXX_COMPILER could be found.
應(yīng)該是自己更新了gcc之后,g++找不到了
重新安裝對(duì)應(yīng)版本的g++即可
或者建立軟連接
sudo ln -s /usr/bin/g++-5 /usr/bin/g++ -f
- 之后就不報(bào)錯(cuò)了
4.5. 手機(jī)APP報(bào)錯(cuò)
-
手機(jī)APP可以安裝成功,也可以打開,但是點(diǎn)擊識(shí)別的時(shí)候閃退
可以使用IDE調(diào)試,看一下到底報(bào)的是什么錯(cuò)誤
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 28976 (cent.yolov5ncnn), pid 28976 (cent.yolov5ncnn) -
這個(gè)問題,大概率還是修改Permute參數(shù)的時(shí)候不對(duì),要相信自己,再照著前面的教程看一下,一定可以修改成功的。
此外,不要用虛擬機(jī)運(yùn)行,直接用手機(jī)運(yùn)行
使用自己的模型會(huì)報(bào)錯(cuò),yolov5-5.0 · Issue #32 · nihui/ncnn-android-yolov5 · GitHub
不同版本的YOLOv5 修改的方式是不一樣 -
請(qǐng)問如何使用自己訓(xùn)練和轉(zhuǎn)換后的param和bin文件呢? · Issue #39 · nihui/ncnn-android-yolov5 · GitHub
-
YOLOv5 5.0 的修改方法參考這篇帖子
-
借助NCNN,在Android上運(yùn)行YOLOv5目標(biāo)檢測(cè) - 迷途小書童的Note迷途小書童的Note
-
YOLOv5 6.0 的修改方法參考這篇帖子
-
記錄歷經(jīng)三天將自己的yolov5模型部署到Android安卓手機(jī)_魯木子的博客-CSDN博客_yolov5部署到手機(jī)
-
手機(jī)APP無法通過APP文件安裝
那還是通過Android Studio進(jìn)行安裝吧 -
不閃退,但是也無法識(shí)別
效果 -
調(diào)試yolov5ncnn_jni.cpp文件中的prob_threshold閾值, -
將其改成0.01看能否出來框
-
-
如果可以出來框,那么表明就是閾值的問題,如果不能出來框的話,那就是其他地方的問題
換一張圖試一下 -
有時(shí)候識(shí)別不出來,可能是因?yàn)閳D像中的物體不符合定義中的類別,再換一張圖片,有可能就可以識(shí)別出來了
-
比如自己識(shí)別不出來這個(gè)口罩里,但是卻可以識(shí)別出來這個(gè)男的
-
-
文章來源:http://www.zghlxwxcb.cn/news/detail-406502.html
5. 資源
- 可以直接運(yùn)行的NCNN項(xiàng)目
5.1. 口罩項(xiàng)目
https://www.lanzoui.com/iWoBt0hzt9hi 訪問碼:24647
下載下來之后,需要更改一下自己的Android SDK路徑文章來源地址http://www.zghlxwxcb.cn/news/detail-406502.html
6. 參考資料
- 在Android上運(yùn)行YOLOv5目標(biāo)檢測(cè)_嗶哩嗶哩_bilibili
- 記錄歷經(jīng)三天將自己的yolov5模型部署到Android安卓手機(jī)_魯木子的博客-CSDN博客_yolov5部署到手機(jī)
- 【教程】YOLOv5模型轉(zhuǎn)化-Android端部署__less is more的博客-CSDN博客_yolov5 安卓部署
- 借助NCNN,在Android上運(yùn)行YOLOv5目標(biāo)檢測(cè) - 迷途小書童的Note迷途小書童的Note
-
5. android里面調(diào)用tflite_嗶哩嗶哩_bilibili
錄歷經(jīng)三天將自己的yolov5模型部署到Android安卓手機(jī)_魯木子的博客-CSDN博客_yolov5部署到手機(jī)](https://blog.csdn.net/qq_44696500/article/details/124195375) - 【教程】YOLOv5模型轉(zhuǎn)化-Android端部署__less is more的博客-CSDN博客_yolov5 安卓部署
- 借助NCNN,在Android上運(yùn)行YOLOv5目標(biāo)檢測(cè) - 迷途小書童的Note迷途小書童的Note
- 5. android里面調(diào)用tflite_嗶哩嗶哩_bilibili
- yolov5ncnn實(shí)時(shí)檢測(cè) · Issue #2 · nihui/ncnn-android-yolov5 · GitHub
到了這里,關(guān)于YOLOv5使用NCNN將模型部署到Android端教程(1)部署自己的訓(xùn)練模型到Android實(shí)現(xiàn)靜態(tài)圖片檢測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!