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應用開發的理想選擇,特別適合需要在移動設備上部署深度學習模型的開發者和企業。