当前位置: 首页 > news >正文

pt转onnx转ncnn模型(yolov8部署安卓)

在部署中遇到了若干问题,在此进行记录。。

首先pt转onnx模型

笔者使用的脚本代码进行转换(比较推荐,否则转换ncnn可能有问题)

from ultralytics import YOLO model = YOLO("./bestpc.pt") success = model.export(format ='onnx',simplify=True,opset=12)

转之前要进行对/ultralytics/nn/modules.py中的代码进行修改

找到C2f下的forward函数这样修改

def forward(self, x): # y = list(self.cv1(x).chunk(2, 1)) # y.extend(m(y[-1]) for m in self.m) # return self.cv2(torch.cat(y, 1)) 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))
找到Detect下的forward函数这样修改(yolov8——detect这样修改,分割项目不是)
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 pred = torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2).permute(0, 2, 1) return pred

修改完毕进行转换得到onnx模型

注意:!!我使用的yolov8代码的版本是ultralytics-8.0.50,使用较新的版本会导致模型转换后有很多问题,亲自踩坑

然后就是onnx转ncnn

好多教程都是使用一键转换的网站,但这个网站失效了,因此笔者配置onnx转换ncnn的环境进行转换,问题记录。。

# 准备基础环境 sudo apt install build-essential libopencv-dev cmake # 编译安装protobuf依赖库 git clone https://github.com/protocolbuffers/protobuf.git # 安装源文件 cd protobuf git submodule update --init --recursive # clone子模块的依赖 ./autogen.sh # 执行自动生成的shell脚本 ./configure # 配置文件shell脚本 make # 编译 make install # 编译安装 sudo ldconfig # 刷新

编译有问题多换换版本

1.配置NCNN库必要依赖

sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libvulkan-dev vulkan-utils libopencv-dev


2.编译NCNN
执行下列命令

git clone https://github.com/Tencent/ncnn.git cd ncnn git submodule update --init mkdir build cd build cmake .. make -j8 make install sudo ldconfig # 刷新


编译完成进入build文件夹在这里可以实现转换模型 (找到onnx2ncnn可执行文件)

./onnx2ncnn my.onnx my.param my.bin

换入你的安卓项目就大功告成了!

http://www.jsqmd.com/news/478556/

相关文章:

  • .vscode配置文件备份
  • 搞懂 ABAP 里的 Heap 引用与 Stack 引用:从内存语义到失效边界
  • 解决protobuf版本冲突:从ImportError到streamlit顺利运行的实战指南
  • 【工具-VMware Workstation-ubuntu】
  • ProcessHacker文件锁定检测:解决应用程序文件占用问题
  • pt转onnx转rknn(yolov5部署RK3566)
  • NotebookLM:Google Labs 如何用 AI 重塑知识管理体验
  • 读懂 ABAP 中的 tag interface:从语义标记到运行时契约的设计逻辑
  • 创业者必看:150+优质平台助你快速获取种子用户
  • Xcode 16及升级 Xcode 26 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
  • 深入解析JESD79-5中的模式寄存器操作:MRR与MRW实战指南
  • 读懂 ABAP 内部表的 table sharing:赋值、值传递与 copy-on-write 的底层逻辑
  • 如何在ToaruOS上畅玩经典游戏:从Pong到扫雷的完整指南
  • 每天一小时七天速成自己的AI聊天语言模型(Day 2:从运算符到循环)
  • 华为路由器NAT配置实战:从动态NAT到Easy IP的完整指南(附常见错误排查)
  • 从cloudscraper到FlareSolverr:一次攻克Cloudflare五秒盾的技术演进实录
  • Django-Oscar支付网关集成终极指南:支持多种支付方式的完整解决方案
  • 西电软工智能软件大作业实战:从选题到高分展示的全流程拆解
  • 不用翻墙!5分钟搞定PX4开发环境搭建(附百度云资源)
  • 把 Program Directives 用到位:谈透 ABAP Doc 与 Pragmas,让 ABAP 源码既清晰又可检查
  • Memos捷径(Shortcuts)用法介绍
  • KALI网络故障排查:解决DNS解析失败与网络不可达的实用指南
  • 群晖NAS部署HomeAssistant全攻略:从内网穿透到智能家居远程管理
  • IC设计转行指南:零基础如何快速掌握RTL设计与后端流程(附免费学习资源)
  • 把 ABAP CDS View Entity 的 session_variable 讲透:从 $session 语法到 Clean Core 设计实践
  • Transformer架构解析:从位置编码到注意力机制的核心实现
  • Linux安全调试实战:如何用-no-pie选项绕过ASLR内存随机化
  • 避坑指南:VSCode中CLine插件连接OpenAI和Claude 3.5 API的常见错误及解决方法
  • 把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析
  • 吃透 ABAP 里的 reference semantics:从引用变量、动态对象到项目实践的一次系统梳理