Convert Figma logo to code with AI

Tencent logoncnn

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

20,095
4,134
20,095
1,088

Top Related Projects

8,581

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba

4,909

MACE is a deep learning inference framework optimized for mobile heterogeneous computing platforms.

4,613

Tengine is a lite, high performance, modular inference engine for embedded device

The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies.

11,580

Open deep learning compiler stack for cpu, gpu and specialized accelerators

Quick Overview

ncnn is a high-performance neural network inference framework optimized for mobile platforms. Developed by Tencent, it is designed to run deep learning models on mobile devices efficiently, with a focus on speed and low memory footprint.

Pros

  • Extremely fast inference speed on mobile devices
  • Low memory footprint, suitable for resource-constrained environments
  • Cross-platform support (Android, iOS, Windows, Linux, macOS)
  • Supports a wide range of deep learning models and operations

Cons

  • Steeper learning curve compared to some other inference frameworks
  • Limited documentation and examples, especially for beginners
  • Requires manual model conversion for some popular deep learning frameworks
  • Smaller community compared to more mainstream frameworks like TensorFlow Lite

Code Examples

  1. Loading and running a model:
#include "net.h"

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");

ncnn::Mat in(224, 224, 3);
// Fill 'in' with input data

ncnn::Mat out;
ncnn::Extractor ex = net.create_extractor();
ex.input("data", in);
ex.extract("output", out);
  1. Creating a custom layer:
class MyCustomLayer : public ncnn::Layer
{
public:
    MyCustomLayer()
    {
        one_blob_only = true;
    }

    virtual int forward(const ncnn::Mat& bottom_blob, ncnn::Mat& top_blob, const ncnn::Option& opt) const
    {
        // Implement your custom layer logic here
        return 0;
    }
};

DEFINE_LAYER_CREATOR(MyCustomLayer)
  1. Using Vulkan compute:
ncnn::create_gpu_instance();

ncnn::VulkanDevice* vkdev = ncnn::get_gpu_device();
ncnn::Net net;
net.opt.use_vulkan_compute = true;
net.set_vulkan_device(vkdev);

// Load and run model as usual

ncnn::destroy_gpu_instance();

Getting Started

  1. Clone the repository:

    git clone https://github.com/Tencent/ncnn.git
    
  2. Build the project:

    cd ncnn
    mkdir build && cd build
    cmake ..
    make
    
  3. Include ncnn in your project:

    #include "net.h"
    
  4. Link against the built library and include the necessary headers in your project's build configuration.

Competitor Comparisons

8,581

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba

Pros of MNN

  • Supports a wider range of platforms, including iOS, Android, Windows, Linux, and macOS
  • Offers more comprehensive model conversion tools, supporting various deep learning frameworks
  • Provides a higher-level API for easier integration and usage

Cons of MNN

  • Generally slower performance compared to ncnn, especially on mobile devices
  • Larger binary size, which may impact app size more significantly
  • Less focus on minimalism and lightweight design

Code Comparison

MNN example:

auto interpreter = std::shared_ptr<Interpreter>(Interpreter::createFromFile(modelPath));
auto session = interpreter->createSession();
auto input = interpreter->getSessionInput(session, nullptr);
interpreter->runSession(session);

ncnn example:

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");
ncnn::Mat in(224, 224, 3);
ncnn::Mat out;
net.extract("output", out);

Both libraries aim to provide efficient neural network inference on mobile and embedded devices. ncnn focuses on minimalism and performance, particularly excelling on mobile platforms. MNN offers broader platform support and more comprehensive tools but may sacrifice some performance for flexibility. The choice between them depends on specific project requirements, target platforms, and performance needs.

4,909

MACE is a deep learning inference framework optimized for mobile heterogeneous computing platforms.

Pros of mace

  • Supports a wider range of deep learning frameworks, including TensorFlow, Caffe, and ONNX
  • Provides comprehensive performance optimization for various mobile platforms
  • Offers a user-friendly command-line interface for model conversion and deployment

Cons of mace

  • Larger library size compared to ncnn
  • Steeper learning curve for beginners due to more complex architecture
  • Less frequent updates and community contributions

Code Comparison

mace:

MaceEngine mace_engine(device_type);
mace_engine.Init(net_def, input_nodes, output_nodes, device_context);
mace_engine.Run(inputs, &outputs);

ncnn:

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");
ncnn::Extractor ex = net.create_extractor();
ex.input("input", in);
ex.extract("output", out);

Both libraries provide straightforward APIs for loading and running models, but mace's interface is slightly more verbose. ncnn's approach is more compact and may be easier for quick implementations. However, mace's structure allows for more flexibility in specifying device types and contexts, which can be beneficial for complex deployment scenarios.

4,613

Tengine is a lite, high performance, modular inference engine for embedded device

Pros of Tengine

  • Supports a wider range of hardware platforms, including ARM, RISC-V, and x86
  • Offers a more comprehensive set of operators and network models
  • Provides better support for quantization and model compression techniques

Cons of Tengine

  • Less optimized for mobile devices compared to ncnn
  • Smaller community and fewer third-party contributions
  • Documentation may be less comprehensive or up-to-date

Code Comparison

ncnn:

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");
ncnn::Mat in = ncnn::Mat::from_pixels(image_data, ncnn::Mat::PIXEL_BGR, w, h);
ncnn::Mat out;
net.extract("output", out);

Tengine:

graph_t graph = create_graph(NULL, "tengine", "model.tmfile");
tensor_t input_tensor = get_graph_input_tensor(graph, 0, 0);
set_tensor_shape(input_tensor, dims, 4);
set_tensor_buffer(input_tensor, input_data, img_size);
run_graph(graph, 1);
tensor_t output_tensor = get_graph_output_tensor(graph, 0, 0);

Both repositories focus on efficient neural network inference on various platforms, with ncnn being more specialized for mobile devices and Tengine offering broader hardware support. The code examples demonstrate the different approaches to loading and running models in each framework.

The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies.

Pros of ComputeLibrary

  • Optimized for ARM architectures, providing excellent performance on ARM-based devices
  • Comprehensive support for various neural network operations and algorithms
  • Extensive documentation and examples for easier integration

Cons of ComputeLibrary

  • Limited cross-platform support compared to ncnn's wider compatibility
  • Steeper learning curve due to its more complex API and architecture
  • Larger codebase and potentially higher resource requirements

Code Comparison

ncnn:

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");

ncnn::Mat in(224, 224, 3);
ncnn::Mat out;
net.extract("input", in, "output", out);

ComputeLibrary:

arm_compute::graph::Graph graph;
arm_compute::graph::frontend::Stream stream(graph);
stream << arm_compute::graph::frontend::InputLayer(input_shape)
       << arm_compute::graph::frontend::ConvolutionLayer(...)
       << arm_compute::graph::frontend::OutputLayer();

Both libraries offer efficient neural network inference on mobile and embedded devices. ncnn focuses on cross-platform compatibility and ease of use, while ComputeLibrary provides optimized performance specifically for ARM architectures with a more comprehensive set of operations.

11,580

Open deep learning compiler stack for cpu, gpu and specialized accelerators

Pros of TVM

  • More comprehensive and flexible, supporting a wider range of hardware targets and optimization techniques
  • Offers automatic optimization and tuning capabilities for better performance across different platforms
  • Provides a higher-level API and supports multiple frontend frameworks (e.g., TensorFlow, PyTorch)

Cons of TVM

  • Steeper learning curve due to its complexity and extensive features
  • Larger codebase and potentially higher resource requirements for compilation and deployment

Code Comparison

TVM example (Python):

import tvm
from tvm import relay

# Define a simple network
data = relay.var("data", relay.TensorType((1, 3, 224, 224), "float32"))
weight = relay.var("weight")
conv2d = relay.nn.conv2d(data, weight)
func = relay.Function([data, weight], conv2d)

# Compile the network
target = "llvm"
with tvm.transform.PassContext(opt_level=3):
    lib = relay.build(func, target)

NCNN example (C++):

#include "net.h"

ncnn::Net net;
net.load_param("model.param");
net.load_model("model.bin");

ncnn::Mat in(224, 224, 3);
ncnn::Mat out;
net.extract("output", out, in);

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

ncnn

ncnn

License Download Total Count codecov

ncnn is a high-performance neural network inference computing framework optimized for mobile platforms. ncnn is deeply considerate about deployment and uses on mobile phones from the beginning of design. ncnn does not have third-party dependencies. It is cross-platform and runs faster than all known open-source frameworks on mobile phone cpu. Developers can easily deploy deep learning algorithm models to the mobile platform by using efficient ncnn implementation, creating intelligent APPs, and bringing artificial intelligence to your fingertips. ncnn is currently being used in many Tencent applications, such as QQ, Qzone, WeChat, Pitu, and so on.

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。 ncnn 从设计之初深刻考虑手机端的部署和使用。 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。 基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行, 开发出人工智能 APP,将 AI 带到你的指尖。 ncnn 目前已在腾讯多款应用中使用,如:QQ,Qzone,微信,天天 P 图等。


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

https://t.me/ncnnyes

Discord Channel

https://discord.gg/YRsxgmF

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

Android

Android shared

HarmonyOS

HarmonyOS shared
iOS

iOS-Simulator

macOS

Mac-Catalyst

watchOS

watchOS-Simulator

tvOS

tvOS-Simulator

visionOS

visionOS-Simulator

Apple xcframework

Ubuntu 20.04

Ubuntu 22.04

Ubuntu 24.04

windows
VS2015

VS2017

VS2019

VS2022

WebAssembly

Linux (arm)

Linux (aarch64)

Linux (mips)

Linux (mips64)

Linux (ppc64)

Linux (riscv64)

Linux (loongarch64)


Support most commonly used CNN network

支持大部分常用的 CNN 网络


HowTo

use ncnn with alexnet with detailed steps, recommended for beginners :)

ncnn 组件使用指北 alexnet 附带详细步骤,新人强烈推荐 :)

use netron for ncnn model visualization

use ncnn with pytorch or onnx

ncnn low-level operation api

ncnn param and model file spec

ncnn operation param weight table

how to implement custom layer step by step


FAQ

ncnn throw error

ncnn produce wrong result

ncnn vulkan


Features

  • Supports convolutional neural networks, supports multiple input and multi-branch structure, can calculate part of the branch
  • No third-party library dependencies, does not rely on BLAS / NNPACK or any other computing framework
  • Pure C++ implementation, cross-platform, supports Android, iOS and so on
  • ARM NEON assembly level of careful optimization, calculation speed is extremely high
  • Sophisticated memory management and data structure design, very low memory footprint
  • Supports multi-core parallel computing acceleration, ARM big.LITTLE CPU scheduling optimization
  • Supports GPU acceleration via the next-generation low-overhead Vulkan API
  • Extensible model design, supports 8bit quantization and half-precision floating point storage, can import caffe/pytorch/mxnet/onnx/darknet/keras/tensorflow(mlir) models
  • Support direct memory zero copy reference load network model
  • Can be registered with custom layer implementation and extended
  • Well, it is strong, not afraid of being stuffed with 卷 QvQ

功能概述

  • 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支
  • 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架
  • 纯 C++ 实现,跨平台,支持 Android / iOS 等
  • ARM Neon 汇编级良心优化,计算速度极快
  • 精细的内存管理和数据结构设计,内存占用极低
  • 支持多核并行计算加速,ARM big.LITTLE CPU 调度优化
  • 支持基于全新低消耗的 Vulkan API GPU 加速
  • 可扩展的模型设计,支持 8bit 量化 和半精度浮点存储,可导入 caffe/pytorch/mxnet/onnx/darknet/keras/tensorflow(mlir) 模型
  • 支持直接内存零拷贝引用加载网络模型
  • 可注册自定义层实现并扩展
  • 恩,很强就是了,不怕被塞卷 QvQ

supported platform matrix

  • ✅ = known work and runs fast with good optimization
  • ✔️ = known work, but speed may not be fast enough
  • ❔ = shall work, not confirmed
  • / = not applied
WindowsLinuxAndroidmacOSiOS
intel-cpu✔️✔️❔✔️/
intel-gpu✔️✔️❔❔/
amd-cpu✔️✔️❔✔️/
amd-gpu✔️✔️❔❔/
nvidia-gpu✔️✔️❔❔/
qcom-cpu❔✔️✅//
qcom-gpu❔✔️✔️//
arm-cpu❔❔✅//
arm-gpu❔❔✔️//
apple-cpu///✔️✅
apple-gpu///✔️✔️
ibm-cpu/✔️///

Project examples



License

BSD 3 Clause