yolov8训练pt模型转换onnx部署Android系统
并将best.onnx复制到该文件夹的对应位置,地址栏输入cmd后,在打开的命令行窗口输入onnx2ncnn.exe best-sim.onnx best.param best.bin回车即可,原文件夹生成了需要的bin文件和param文件。再将bin param文件复制到相应AndroidStudio ncnn-android-yolov8项目中,生成app进行测试。压缩后会生成一个best-s
yolov8训练的模型文件转换至Android应用使用
模型.pt -onnx-ncnn转换训练模型
下面1,2两点说到的源码最好备份一下,训练模型时需要恢复原始代码,否则训练可能会报错,这里修改只是为了转换模型使用
- ultralytics/ultralytics/nn/modules/block.py中的class C2f(nn.Module)如下:
def forward(self, x):
x = self.cv1(x)
x = [x, x[:, self.c:, ...]]
x.extend(m(x[-1]) for m in self.m)
x.pop(1)
return self.cv2(torch.cat(x, 1))
- ultralytics/ultralytics/nn/modules/head.py中的class Detect(nn.Module)改动如下:
def forward(self, x):
shape = x[0].shape # BCHW
for i in range(self.nl):
x[i] = torch.cat((self.cv2[i](x[i]), self.cv3[i](x[i])), 1)
if self.training:
return x
elif self.dynamic or self.shape != shape:
self.anchors, self.strides = (x.transpose(0, 1) for x in make_anchors(x, self.stride, 0.5))
self.shape = shape
# 中间部分注释掉,return语句替换为
return torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2).permute(0, 2, 1)
- 安装onnx包,在终端运行下面命令
pip install onnx coremltools onnx-simplifier
- 根据官方文档,创建demo.py,将pt权重文件转换成onnx格式,代码如下
# 将模型导出为 ONNX 格式
from ultralytics import YOLO
model = YOLO("runs/detect/train4/weights/best.pt")
success = model.export(format="onnx", simplify=True, opset=11)
opset的参数(11、12、13),使用其他会造成手机上运行出现很多框重叠错误识别
- 对onnx文件进行压缩,进入到onnx文件所在目录,运行下面命令
python -m onnxsim best.onnx best-sim.onnx
压缩后会生成一个best-sim.onnx的文件,这一步是必须的,如果这一步不做,后面ONNX转NCNN可能会报错
完成上面步骤包含pt文件的weights目录下会生成对应文件best
- 将onnx文件转换成param、bin文件,并将best.onnx复制到该文件夹的对应位置,地址栏输入cmd后,在打开的命令行窗口输入onnx2ncnn.exe best-sim.onnx best.param best.bin回车即可,原文件夹生成了需要的bin文件和param文件
再将bin param文件复制到相应AndroidStudio ncnn-android-yolov8项目中,生成app进行测试
参考代码:
https://github.com/Tencent/ncnn
https://github.com/FeiGeChuanShu/ncnn-android-yolov8

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)