
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-11-08 · 当前星标 ★ 24030
使用教程
ℹ 本教程由 AI 依据该项目 README 整理,个别步骤可能需要按你的环境微调。
环境要求
- Python 3 环境(用于安装 pnnx 与调用 Python API)
- 已安装 PyTorch 的 Python 环境(pnnx 导出依赖)
- C++ 编译环境(如需使用 net.h 的 C++ API)
- ncnn 库文件(C++ 集成时需要,README 未给出构建命令)
安装与启动步骤
-
1准备 PyTorch 环境
pnnx 需装在有 PyTorch 的 Python 环境里,先确认 Python 与 torch 可用。
-
2安装 pnnx
用 pip3 安装 pnnx,它是 PyTorch 模型转 ncnn 模型的官方工具。
pip3 install pnnx -
3编写导出脚本
把示例模型与 pnnx.export 调用保存为 export.py,输入尺寸为 1x3x224x224。
import torch import torch.nn as nn import pnnx class Model(nn.Module): def __init__(self): super().__init__() self.conv = nn.Conv2d(3, 8, 1) self.relu = nn.ReLU() self.fc = nn.Linear(8, 4) def forward(self, x): x = self.conv(x) x = self.relu(x) x = x.mean((2, 3)) return self.fc(x) model = Model().eval() x = torch.rand(1, 3, 224, 224) pnnx.export(model, "model.pt", (x,)) -
4执行导出
运行脚本完成转换,注意在脚本所在目录执行,产物会写到当前目录。
python3 export.py -
5确认模型文件
导出成功会生成 model.ncnn.param(结构)与 model.ncnn.bin(权重)两个文件。
ls model.ncnn.param model.ncnn.bin -
6C++ 侧加载模型
引入 net.h,用 load_param/load_model 载入两个文件,再建 Extractor 推理。
#include "net.h" ncnn::Net net; net.load_param("model.ncnn.param"); net.load_model("model.ncnn.bin"); ncnn::Mat in(224, 224, 3); auto ex = net.create_extractor(); ex.input("in0", in); ncnn::Mat out; ex.extract("out0", out); -
7Python 侧加载模型
安装 ncnn 的 Python 绑定后,用 ncnn.Net 载入模型并抽出输出张量。
import numpy as np import ncnn net = ncnn.Net() net.load_param("model.ncnn.param") net.load_model("model.ncnn.bin") x = np.zeros((3, 224, 224), np.float32) mat = ncnn.Mat(x) ex = net.create_extractor() ex.input("in0", mat) ret, out = ex.extract("out0") print(np.array(out).shape)
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
load_param 路径 | 是 | 指定导出的 ncnn 模型结构文件路径 | model.ncnn.param |
load_model 路径 | 是 | 指定导出的 ncnn 模型权重文件路径 | model.ncnn.bin |
输入 blob 名 | 是 | extractor 输入张量对应的名字,示例为 in0 | in0 |
输出 blob 名 | 是 | extractor 抽取结果对应的名字,示例为 out0 | out0 |
如何确认成功
运行导出脚本后当前目录出现 model.ncnn.param 与 model.ncnn.bin;Python 示例能打印出输出张量形状即为成功。
常见问题
Q:导出后得到哪些文件?
A:会生成 model.ncnn.param(网络结构)和 model.ncnn.bin(权重参数),两者需一起使用,缺一不可。
Q:C++ 使用前需要准备什么?
A:需能引用 net.h 并链接 ncnn 库。README 未给出 ncnn 本体的构建命令,请按官方构建文档自行编译或引入预编译库。
Q:Python 示例依赖什么?
A:需先装好 numpy 与 ncnn 的 Python 绑定;README 示例直接 import ncnn,安装方式见仓库 python 目录说明。
Q:输入输出名不是 in0/out0 怎么办?
A:示例中的 in0/out0 是演示名,实际应以模型 param 文件中的输入输出 blob 名为准。
Q:其他框架的模型能转吗?
A:ncnn 同时提供 Caffe、ONNX、Darknet、Keras、MXNet 等模型的转换支持,可参考仓库 wiki 与 examples。
注意事项
- README 只给出 pnnx 安装与导出流程,ncnn 本体的编译安装需另查官方构建文档。
- pnnx 必须安装在含 PyTorch 的 Python 环境中,否则导出会失败。
- param 与 bin 文件必须同名配对加载,路径写错会导致加载失败。
- 建议在独立虚拟环境中安装依赖,避免与已有 PyTorch 版本冲突。
核心亮点
- 纯 C++ 实现且无第三方依赖,交叉编译和集成到 App 的成本低
- 针对 ARM NEON 手写汇编优化,移动端推理性能突出
- 自带模型转换与量化工具链,支持 Caffe/ONNX/Darknet 等主流格式
不足之处
- 以 C++ 接口为主,Python 等语言生态支持较弱,上手门槛偏高
- 新算子与前沿模型结构的支持跟进速度依赖社区贡献
- Vulkan 后端在不同 GPU 驱动上的兼容性与性能表现差异较大
适用场景
- 安卓/iOS App 内集成图像识别、人脸检测等端侧 AI 功能
- 嵌入式与 IoT 设备上部署轻量化视觉模型
- 对隐私敏感的场景下在本地完成推理,避免数据上传
替代项目
TFLite、MNN、ONNX Runtime
下一篇:subnet-2
同类项目推荐
inference-gateway
开源
一个网关统一接入本地与云端大模型
An open-source, cloud-native, high-performance gateway unifying multiple LLM provide···
BentoML
开源
模型打包一键变线上服务,上线运维全不操心
The easiest way to serve AI apps and models - Build Model Inference APIs, Job queues···
awesome-production-machine-learn···
开源
一站式找到ML生产落地所需的所有开源工具
A curated list of awesome open source libraries to deploy, monitor, version and scal···
llamacore
开源
本地跑 GGUF 模型,点点鼠标就能聊、转、训、编排
Full-featured desktop client for llama.cpp. Chat with local GGUF models, manage llam···
dockit
开源
用大白话聊数据库,AI 帮你查 Elasticsearch、MongoDB 等,可视化监控一把梭。
Agentic desktop GUI client for Elasticsearch, OpenSearch, DynamoDB, MongoDB & EasySe···
tpu-inference
开源
让 vLLM 推理直接跑在 TPU 上
Moving to vllm-project/vllm-jax. TPU inference for vLLM, with unified JAX and PyTorc···
spark-local-inference
开源
Rust 写的本地大模型推理服务底座,请求调度一把抓
vpscheck
开源
一键检测 VPS 解锁和性能,买前扫雷买后安心
️ VPS全能检测脚本,一键检测Netflix/Disney+/ChatGPT/Gemini等流媒体和AI服务解锁情况,···
TurboLLM
开源
一条命令把 Claude Code 接到自己显卡上跑
Run any local LLM engine, auto-tuned to your GPU — polished web UI + OpenAI/Anthrop···