使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot系列】springboot中拦截器Interceptor使用

🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收…

目标检测中的常见指标

概念引入&#xff1a; TP&#xff1a;True Positive IoU > 阈值 检测框数量 FP: False Positive IoU < 阈值 检测框数量 FN: False Negative 漏检框数量 Precision:查准率 Recall:查全率&#xff08;召回率&#xff09; AP&am…

【EI会议征稿通知】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09; 2024年第八届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09;将在西安举行&#xff0c; 会期是2024年4月19-21日&#xff0c; 为期三天, 会议由西安科技大学主办。 欢迎参会&…

浅谈有源滤波器在有色工业中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 文摘:介绍了谐波的危害及类型&#xff0c;分析了有源滤波器的原理。 关键词:谐波&#xff1b;无源滤波器&#xff1b;有源滤波器 0引言 目前&#xff0c;许多变电所的负荷中含有大量的非线性负荷&#xff0c;如整流装置、交…

Python中User-Agent的重要作用及实际应用

摘要&#xff1a; User-Agent是HTTP协议中的一个重要字段&#xff0c;用于标识发送请求的客户端信息。在Python中&#xff0c;User-Agent的作用至关重要&#xff0c;它可以影响网络请求的结果和服务器端的响应。将介绍User-Agent在Python中的重要作用&#xff0c;并结合实际案…

【CMake】3.单项目单模块添加第三方依赖包示例工程

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 单项目单模块 - 添加第三方依赖示例工程 https://github.com/LABELNET/cmake-simple/tree/main/simple-deps 1. 单模块工程 第三方依赖 CMake 单模块工程&#xff0c;这是一个示例工程 simple-deps , 项目…

个人调用OCR

一、自己训练模型 二、调用现成API 此处介绍百度智能云API&#xff0c;因为有免费次数。&#xff08;原来一些网址在百度不是默认显示网址的&#xff0c;而是自己的网站名字&#xff09; 首页找到OCR 每个人每月能用1K次。&#xff08;有详细的API文档说明&#xff0c;不过跟…

docker 部署来自Hugging Face下机器翻译模型

机器翻译模型(Hugging Face官网) 模型翻译api服务代码 # 离线翻译服务代码 # -*-coding:utf-8-*-import os import json import logging from logging.handlers import RotatingFileHandler from datetime import datetime from flask import Flask, request,jsonify from geve…

FreeRTOS——软件定时器知识总结及其实战

1.软件定时器概念 是指具有定时功能的软件&#xff0c;可设置定时周期&#xff0c;当指定时间到达后要调用回调函数&#xff08;也称超时函数&#xff09;&#xff0c;用户在回调函数中处理信息。 2 软件定时器使用特点 1&#xff09;如果要使能软件定时器&#xff0c;需将c…

【XR806开发板使用】开发环境搭建、Hello工程以及开发事项

XR806开发板试用 很有幸能获得本次技术社区和全志组织的XR806开发板试用活动。之前开发的嵌入式应用都是在Windows平台上进行的&#xff0c;对于Linux下的开发并不熟悉&#xff0c;在社区里看到群友使用官方提供的docker环境进行开发&#xff0c;顺着群友的指导&#xff0c;找…

ROS学习笔记(11)进一步深入了解ROS第五步

0.前提 我在学习宾夕的ROS公开课的时候发现&#xff0c;外国的对计算机的教育和国内的是完全不一样的&#xff0c;当你接触了外国的课程后回头看自己学的会发现好像自己啥也没学。我这里可以放出来给大家看一下。 1.Python and C 2.Python PDB Tutorial&#xff1a;Python Deb…

产业认可 | 开源网安荣获 CCIA“2023 年度优秀会员单位”

​1月4日&#xff0c;“2023年度中国网络安全产业联盟成员大会暨理事会”在京召开&#xff0c;开源网安作为成员单位受邀出席本次大会。 在会上&#xff0c;联盟发布了关于2023年度表彰先进的决定&#xff0c;作为中国软件安全领域的创领者&#xff0c;开源网安在技术、实践和创…

计算机毕业设计-----ssm情缘图书馆管理系统

功能介绍 基于SSM的情缘图书馆管理系统。SSM框架&#xff0c;适合java初学者。 主要功能包括&#xff1a; 图书编目管理&#xff1a;图书编目、编目维护&#xff1b; 图书信息管理&#xff1a;图书录入、图书信息&#xff1b; 图书借阅管理&#xff1a;借阅图书、借阅信息…

OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了&#xff0c;必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

新耀莱要约收购接近尾声,此前共有4713万股接纳要约

新耀莱要约收购事件近期即将结束,引起了资本市场的广泛关注和讨论。作为曾经在汽车经销领域风光无限的企业,新耀莱如今面临衰退的结局,确实令人唏嘘。从财务数据的恶化到核心业务的萎靡,新耀莱的经营表现已无法令人乐观。而随着公司要约收购临近尾声,不少投资者都在担忧,新耀莱…

HTML5+CSS3小实例:文字涂抹动画

实例:文字涂抹动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><me…

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结&#xff1a; ①通过Service层与Dao层实现转账的练习&#xff1b; ②重点&#xff1a;由于每次使用连接就手动创建连接&#xff0c;用完后就销毁&#xff0c;这样会导致资源浪费&#xff0c;因此引入连接池&#xff0c;练习连接池的使用&#xff1b; …

太阳能组件紫外预处理试验箱

太阳能组件紫外预处理试验箱波长范围&#xff1a;280-400nm用于太阳能光伏组件的温湿度及相类似紫外预处理环境的试验&#xff0c;主要用于太阳能组件材料评估诸如聚合物和保护层等材料抗紫外辐照能力&#xff0c;在预处理试验过程中能够快速、真实地再现阳光、雨、露等环境及对…

Etcd安装以及操作

Etcd介绍 etcd 是一个高度一致的分布式键值 (key-value) 存储&#xff0c;它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举&#xff0c;即使在 领导者节点中也可以容忍机器故障。 etcd 是用 Go 语言编写的&a…

Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!

响应与Rest风格 1.11.1.1 环境准备步骤1:设置返回页面步骤2:启动程序测试 1.1.2 返回文本数据步骤1:设置返回文本内容步骤2:启动程序测试 1.1.3 响应JSON数据响应POJO对象响应POJO集合对象 知识点1&#xff1a;ResponseBody 2&#xff0c;Rest风格2.1 REST简介2.2 RESTful入门案…