0) 参考资料:
https://github.com/Tencent/ncnn?tab=readme-ov-file
https://github.com/pnnx/pnnx
https://github.com/nihui/ncnn-android-yolov5
https://github.com/Tencent/ncnn?tab=readme-ov-file
1) :将xxx.pt模型转化成 xxx.onnx
ONNX(Open Neural Network Exchange)是一种开放格式,可以让你在不同深度学习框架之间转换和共享模型 ; ONNX 适用于边缘设备和移动端,部署到 移动设备(如 Android / iOS); Android 不能直接使用 ONNX 模型,但可以通过 ONNX Runtime 或 转换为 NCNN / TFLite / 在Linux环境下执行: pip install ultralytics 'onnx>=1.12.0', 'onnxslim', 'onnxruntime' python convert_pt2onnx() 得到 xxx.onnx 模型
def convert_pt2onnx():
OreModelPath = 'E:\code_py_workspace\mainApp\\v8n-pt_oreDusty320Cls1_imgsz640.pt'
model = YOLO(OreModelPath)
model.eval()
# first way of convertion
path = model.export(format="onnx", opset=14, dynamic=True)
print(path)
2) 将onnx模型转换成ncnn格式 ;
下载工具 https://github.com/pnnx/pnnx/releases
解压执行:pnnx your_model.torchscript.onnx inputshape=[1,3,224,224]
# 进入pnxx目录执行:
> pnnx E:\code_py_workspace\mainApp\\v8n-pt_oreDusty320Cls1_imgsz640.onnx inputshape=[1,3,224,224]
# 或者直接在windows cmd 窗口当中写绝对路径
> E:\code_arm_workspace\pnnx-20241223-windows>pnnx E:\code_py_workspace\mainApp\\v8n-pt_oreDusty320Cls1_imgsz640.onnx inputshape=[1,3,224,224]
(*)模型执行完成后,获得xxx.bin文件(可以在Android设备上运行)
3)在Android Studio编译项目的时候遇到的问题
# 在local.properties当中写(提前准备好sdk和ndk)
# sdk,ndk可以在AS当中的SDK Manager当中下载
sdk.dir=E\:\\android-sdk-windows
ndk.dir=E\:\\android-sdk-windows/ndk/26.1.10909125
# gradle-wapper properties文件当中指定gradle版本(distributionUrl=)
# 可以提前下载好放在本地
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
# distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=file\:///E:/android_software/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists