ncnn - 腾讯开源移动端神经网络推理框架
项目概述
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。
项目地址: https://github.com/Tencent/ncnn
开发团队: 腾讯公司开源项目
核心特性
1. 极致的移动端优化
- 为移动平台而生:从设计之初就专门针对移动设备进行优化
- 无第三方依赖:不依赖BLAS、NNPACK等任何其他计算框架
- 纯C++实现:确保跨平台兼容性和高性能
2. 卓越的性能表现
- ARM NEON汇编级优化:采用汇编级别的精心优化,计算速度极快
- 精细的内存管理:内存占用极低,适合资源受限的移动设备
- 多核并行计算:支持ARM big.LITTLE CPU调度优化
3. 广泛的平台支持
- 跨平台:支持Android、iOS、Linux、Windows、macOS等多个平台
- 多架构支持:支持ARM、x86等不同CPU架构
- GPU加速:支持基于Vulkan API的GPU加速
4. 丰富的模型支持
- 多框架模型导入:可导入Caffe、PyTorch、MXNet、ONNX、Darknet、Keras、TensorFlow等主流框架的模型
- 量化支持:支持8bit量化和半精度浮点存储
- 直接内存加载:支持零拷贝引用加载网络模型
技术架构
支持的网络类型
- 经典CNN网络:VGG、AlexNet、GoogleNet、Inception等
- 实用CNN网络:ResNet、DenseNet、SENet、FPN等
- 轻量级CNN:SqueezeNet、MobileNet系列、ShuffleNet系列、MNasNet等
- 人脸检测:MTCNN、RetinaFace、SCRFD等
- 目标检测:YOLO系列、SSD系列、Faster-RCNN等
- 图像分割:FCN、PSPNet、UNet、YOLACT等
- 姿态估计:SimplePose等
平台兼容性矩阵
| 平台/硬件 | Windows | Linux | Android | macOS | iOS |
|---|---|---|---|---|---|
| Intel CPU | ✔️ | ✔️ | ❔ | ✔️ | / |
| Intel GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| AMD CPU | ✔️ | ✔️ | ❔ | ✔️ | / |
| AMD GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| NVIDIA GPU | ✔️ | ✔️ | ❔ | ❔ | / |
| Qualcomm | ❔ | ✔️ | ✅ | / | / |
| ARM CPU | ❔ | ❔ | ✅ | / | / |
| Apple CPU | / | / | / | ✔️ | ✅ |
✅ = 已知可运行且性能优秀;✔️ = 已知可运行;❔ = 理论可行但未确认;/ = 不适用
实际应用
ncnn目前已在腾讯多款核心应用中使用,包括:
- QZone(QQ空间)
- 微信
- 天天P图
- 其他腾讯应用
开发生态
示例项目
- Android应用示例:
- SqueezeNet图像分类
- 风格迁移应用
- MobileNet-SSD目标检测
- MTCNN人脸检测
- YOLOv5/YOLOv7目标检测
- SCRFD人脸检测
工具支持
- 模型可视化:支持使用Netron进行模型可视化
- 自定义层:支持注册和实现自定义层
- 量化工具:提供模型量化工具
社区支持
- 技术交流QQ群:637093648、677104663、818998520
- Telegram群组和Discord频道
- 详细文档:完整的wiki文档和API参考
开始使用
构建支持
ncnn支持在以下平台上构建:
- Linux / Windows / macOS
- Raspberry Pi 3/4
- Android
- iOS
- WebAssembly
- NVIDIA Jetson
- 全志D1
- 龙芯2K1000
快速入门
推荐从使用ncnn运行AlexNet教程开始,该教程提供了详细的步骤说明,特别适合初学者。
项目优势
- 性能卓越:在移动端CPU上的运行速度超越所有已知开源框架
- 资源友好:内存占用极低,适合资源受限环境
- 易于集成:无第三方依赖,集成简单
- 生产验证:在腾讯多个亿级用户应用中得到验证
- 持续维护:活跃的开源社区和持续的版本更新
- 广泛兼容:支持主流深度学习框架的模型导入
ncnn是移动端AI应用开发的理想选择,特别适合需要在移动设备上部署深度学习模型的开发者和企业。