Tencent /ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform

★ 24,033⑂ 4,544
C++Created 2017-06-30
24,033
stars
+10+10+125
4,544
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

!ncnn

 ncnn





ncnn is a high-performance neural network inference framework optimized for mobile, embedded, and desktop deployment.
It has no third-party runtime dependencies, runs across CPU and Vulkan GPU backends, and provides tools such as pnnx for converting PyTorch and ONNX models to ncnn.
Developers can deploy deep learning models efficiently on phones, PCs, browsers, and edge devices.
ncnn is currently being used in many Tencent applications, such as QQ, Qzone, WeChat, Pitu, and so on.

ncnn 是一个面向移动端、嵌入式和桌面端部署优化的高性能神经网络推理框架。
ncnn 无第三方运行时依赖,支持 CPU 和 Vulkan GPU 后端,并提供 pnnx 等工具将 PyTorch 和 ONNX 模型转换为 ncnn 模型。
基于 ncnn,开发者可以将深度学习模型高效部署到手机、PC、浏览器和边缘设备上。
ncnn 目前已在腾讯多款应用中使用,如:QQ,Qzone,微信,天天 P 图等。

---

 Quick Start

The recommended beginner path is PyTorch - pnnx - ncnn.





Install pnnx in a PyTorch environment

shell
pip3 install pnnx


Export a PyTorch model to ncnn

python
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,))


This generates model.ncnn.param and model.ncnn.bin.




Run with ncnn C++ API

cpp
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);


Or use Python

python
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)






See pnnx, use ncnn with PyTorch or ONNX, Python API, and examples for complete workflows.

---

 Community




技术交流 QQ 群
637093648 (超多大佬)
答案:卷卷卷卷卷(已满)


Telegram Group




Discord Channel






Pocky QQ 群(MLIR YES!)
677104663 (超多大佬)
答案:multi-level intermediate representation




他们都不知道 pnnx 有多好用群
818998520 (新群!)




---

 Download & Build status

https://github.com/Tencent/ncnn/releases/latest





  



  how to build ncnn library on Linux / Windows / macOS / Raspberry Pi3, Pi4 / POWER / Android / NVIDIA Jetson / iOS / WebAssembly / AllWinner D1 / Loongson 2K1000




Source


  






  



- Build for Android
- Build for Termux on Android




Android


  
  




  




Android shared


  
  






  



- Build for HarmonyOS with cross-compiling




HarmonyOS


  
  




  




HarmonyOS shared


  
  






  



- Build for iOS on macOS with xcode




iOS


  
  




  




iOS-Simulator


  
  






  



- Build for macOS




macOS


  
  




  




Mac-Catalyst


  
  




  




watchOS


  




  




wat

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON