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

使用pnnx将Torch模型转换为ncnn

1. 引言

以往我们将Torch模型转换为ncnn模型,通常需经过Torch–>onnx,onnx–>ncnn两个过程。但经常会出现某些算子不支持的问题。
ncnn作者针对该问题,直接开发一个Torch直接转换ncnn模型的工具 (PNNX),以下为相关介绍及使用方法。

2. 介绍

PyTorch神经网络eXchange(PNNX)是PyTorch模型互操作性的开放标准。PNNX为PyTorch提供了一种开放的模型格式。它定义了计算图以及严格匹配PyTorch的高级运算符。

3. 使用

3.1 安装

  • Windows/Linux/macOS 64bit
  • python 3.7 or later
pip3 install pnnx

从下述链接下载pnnx预编译包:
https://github.com/pnnx/pnnx/releases

此包包括所需的所有二进制文件。它是可移植的,因此不需要CUDA或PyTorch运行时环境

3.2 使用 PyTorch 导出 TorchScript 格式模型

导出torchscript模型文件

第一步是从 PyTorch 导出 TorchScript 模型, 例如 mobilenet_v2 这一经典的网络:
save_net.py:

import torch
import torchvision.models as models#net = models.resnet18(pretrained=True)
net = models.mobilenet_v2(pretrained=True)
net = net.eval()x = torch.rand(1, 3, 224, 224)mod = torch.jit.trace(net, x)
torch.jit.save(mod, "mobilenet_v2.pt")

执行可得到模型文件 mobilenet_v2.pt。

3.3 用PNNX把torchscript模型转为ncnn模型

./pnnx mobilenet_v2.pt inputshape=[1,3,224,224]

运行后会生成下列文件

  • mobilenet_v2.pnnx.param PNNX graph definition
  • mobilenet_v2.pnnx.bin PNNX model weight
  • mobilenet_v2_pnnx.py PyTorch script for inference, the python code - for model construction and weight initialization
  • mobilenet_v2.pnnx.onnx PNNX model in onnx format
  • mobilenet_v2.ncnn.param ncnn graph definition
  • mobilenet_v2.ncnn.bin ncnn model weight
  • mobilenet_v2_ncnn.py pyncnn script for inference

3.4 模型可视化

直接用 netron 查看即可
在这里插入图片描述

4. 参考

https://blog.csdn.net/qq_39056987/article/details/121331430
https://zhuanlan.zhihu.com/p/427620428
https://zhuanlan.zhihu.com/p/427512763
https://github.com/pnnx/pnnx

http://www.lryc.cn/news/273633.html

相关文章:

  • linux卸载小皮面板phpstudy教程
  • 【萤火虫系列教程】1/5-Adobe Firefly 注册账号
  • 【docker】Dockerfile 指令详解
  • 内存管理机制
  • Jenkins工具使用
  • SpringBoot从配置文件中获取属性的方法
  • oracle物化视图
  • 基于ssm校园线上订餐系统的设计与实现论文
  • 鸿蒙南向开发—OpenHarmony技术编译构建框架
  • Android Jetpack学习系列——Navigation
  • 编程语言的新趋势
  • C++:类和对象(2)
  • 【React系列】网络框架axios库的使用
  • pygame学习(二)——绘制线条、圆、矩形等图案
  • TCL学习笔记(持续更新)
  • Xpath的问题:为什么在DOM中确定存在(可见)的元素,用//表达式匹配不到(附解决办法)
  • 有没有游泳可以戴的耳机?游泳耳机入耳式好,还是骨传导好
  • 【绘图软件】自用安装教程
  • AIGC时代-GPT-4和DALL·E 3的结合
  • springBoot集成RabbitMQ实现(直连模式\路由模式\广播模式\主题模式)的消息发送和接收
  • Attention机制
  • Rust 常用的第三方库
  • 构建高可用性Java应用:介绍分布式系统设计与开发
  • x-cmd pkg | gitui - git 终端交互式命令行工具
  • javaWeb案例知识点
  • SQL日期列更新操作详解
  • stable diffusion 基础教程-图生图
  • 如何获取高质量的静态住宅代理?常见问题与误区
  • 基于SpringBoot的旅游网站281
  • 做外贸没客户就静下来沉淀