ncnn

手机端跑深度模型,快、小、零依赖

开源 🏷️完全免费 🔧 仅开源项目,无在线服务,需自行部署 基础设施 🍴 复刻 4542 🐛 待处理 1295 👀 关注 565
GitHub ↗
GitHub 星标 ★ 24030
维护状态 活跃
是否开源 开源
定价模式 🏷️完全免费 开源免费(BSD 3-Clause 许可证)

项目预览

ncnn 项目界面预览图
图片来源:GitHub 官方仓库名片

项目数据

分类基础设施
开发团队Tencent
定价模式🏷️完全免费
价格说明开源免费(BSD 3-Clause 许可证)
访问状态🔧 仅开源项目,无在线服务,需自行部署
是否开源是
开源协议NOASSERTION
主要语言C++
技术栈/模型android,arm-neon,artificial-intelligence,caffe,darknet,deep-learning,high-preformance,inference,ios,keras,mlir,mxnet,ncnn,neural-network,onnx,pytorch,riscv,simd,tensorflow,vulkan
GitHub 星标★ 24030
上线时间2017-06-30 00:00:00
代码更新2026-11-06
仓库体积37.3 MB
本站数据更新2026-11-08
维护状态活跃
收录时间2026-11-08
浏览次数0

项目介绍

ncnn 是腾讯开源的高性能神经网络推理框架,专为手机与嵌入式设备设计。它解决的是深度学习模型在算力、内存和功耗都受限的移动端难以高效运行的问题:通过纯 C++ 实现、无第三方依赖,可轻松集成到 Android、iOS、Linux 等平台。核心能力包括:支持 Caffe、ONNX、Darknet、Keras、MXNet 等模型转换,内置针对 ARM NEON 的汇编级优化与 Vulkan GPU 加速,提供量化工具降低模型体积与内存占用,并支持多线程调度与内存池复用。框架还附带模型转换、量化、基准测试等配套工具,方便开发者把训练好的模型快速部署到端侧,广泛用于图像识别、人脸检测、超分等移动端 AI 场景。

Star 增长趋势

本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整

数据来源:GitHub API 逐日快照 · 收录于 2026-11-08 · 当前星标 ★ 24030

使用教程

ℹ 本教程由 AI 依据该项目 README 整理,个别步骤可能需要按你的环境微调。

难度:入门 约 10 分钟 部署方式:库/依赖 7 步

环境要求

  • Python 3 环境(用于安装 pnnx 与调用 Python API)
  • 已安装 PyTorch 的 Python 环境(pnnx 导出依赖)
  • C++ 编译环境(如需使用 net.h 的 C++ API)
  • ncnn 库文件(C++ 集成时需要,README 未给出构建命令)

安装与启动步骤

  1. 1准备 PyTorch 环境

    pnnx 需装在有 PyTorch 的 Python 环境里,先确认 Python 与 torch 可用。

  2. 2安装 pnnx

    用 pip3 安装 pnnx,它是 PyTorch 模型转 ncnn 模型的官方工具。

    pip3 install pnnx
  3. 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. 4执行导出

    运行脚本完成转换,注意在脚本所在目录执行,产物会写到当前目录。

    python3 export.py
  5. 5确认模型文件

    导出成功会生成 model.ncnn.param(结构)与 model.ncnn.bin(权重)两个文件。

    ls model.ncnn.param model.ncnn.bin
  6. 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);
  7. 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 输入张量对应的名字,示例为 in0in0
输出 blob 名是extractor 抽取结果对应的名字,示例为 out0out0

如何确认成功

运行导出脚本后当前目录出现 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

上一篇:spark-local-inference

下一篇:subnet-2

同类项目推荐

inference-gateway 开源

一个网关统一接入本地与云端大模型

An open-source, cloud-native, high-performance gateway unifying multiple LLM provide···

★ 214 2026-11-08
BentoML 开源

模型打包一键变线上服务,上线运维全不操心

The easiest way to serve AI apps and models - Build Model Inference APIs, Job queues···

★ 8935 2026-08-09
llamacore 开源

本地跑 GGUF 模型,点点鼠标就能聊、转、训、编排

Full-featured desktop client for llama.cpp. Chat with local GGUF models, manage llam···

★ 96 2026-10-16
dockit 开源

用大白话聊数据库,AI 帮你查 Elasticsearch、MongoDB 等,可视化监控一把梭。

Agentic desktop GUI client for Elasticsearch, OpenSearch, DynamoDB, MongoDB & EasySe···

★ 1143 2026-08-09
tpu-inference 开源

让 vLLM 推理直接跑在 TPU 上

Moving to vllm-project/vllm-jax. TPU inference for vLLM, with unified JAX and PyTorc···

★ 477 2026-10-25
vpscheck 开源

一键检测 VPS 解锁和性能,买前扫雷买后安心

️ VPS全能检测脚本,一键检测Netflix/Disney+/ChatGPT/Gemini等流媒体和AI服务解锁情况,···

★ 77 2026-08-09
TurboLLM 开源

一条命令把 Claude Code 接到自己显卡上跑

Run any local LLM engine, auto-tuned to your GPU — polished web UI + OpenAI/Anthrop···

★ 290 2026-09-16