ncnn - Von Tencent Open-Source-Framework für neuronale Netze auf mobilen Geräten
Projektübersicht
ncnn ist ein hochleistungsfähiges Framework für die Vorwärtsberechnung neuronaler Netze, das für mobile Geräte optimiert wurde. ncnn wurde von Grund auf für den Einsatz auf mobilen Geräten konzipiert. Es hat keine Abhängigkeiten von Drittanbietern, ist plattformübergreifend und auf mobilen CPUs schneller als alle derzeit bekannten Open-Source-Frameworks.
Projektadresse: https://github.com/Tencent/ncnn
Entwicklungsteam: Open-Source-Projekt der Tencent Corporation
Kernfunktionen
1. Ultimative Optimierung für mobile Geräte
- Für mobile Plattformen entwickelt: Von Anfang an speziell für mobile Geräte optimiert
- Keine Abhängigkeiten von Drittanbietern: Keine Abhängigkeit von BLAS, NNPACK oder anderen Berechnungs-Frameworks
- Reine C++-Implementierung: Gewährleistet plattformübergreifende Kompatibilität und hohe Leistung
2. Hervorragende Leistung
- ARM NEON-Optimierung auf Assembler-Ebene: Sorgfältige Optimierung auf Assembler-Ebene für extrem hohe Berechnungsgeschwindigkeit
- Feingranulare Speicherverwaltung: Sehr geringer Speicherbedarf, geeignet für ressourcenbeschränkte mobile Geräte
- Multicore-Parallelberechnung: Unterstützt ARM big.LITTLE CPU-Scheduling-Optimierung
3. Breite Plattformunterstützung
- Plattformübergreifend: Unterstützt mehrere Plattformen wie Android, iOS, Linux, Windows, macOS
- Unterstützung mehrerer Architekturen: Unterstützt verschiedene CPU-Architekturen wie ARM, x86
- GPU-Beschleunigung: Unterstützt GPU-Beschleunigung basierend auf der Vulkan-API
4. Umfangreiche Modellunterstützung
- Import von Modellen aus mehreren Frameworks: Kann Modelle aus Mainstream-Frameworks wie Caffe, PyTorch, MXNet, ONNX, Darknet, Keras, TensorFlow importieren
- Quantisierungsunterstützung: Unterstützt 8-Bit-Quantisierung und Halbpräzisions-Gleitkommaspeicherung
- Direktes Laden in den Speicher: Unterstützt das Laden von Netzwerkmodellen mit Zero-Copy-Referenzierung
Technische Architektur
Unterstützte Netzwerktypen
- Klassische CNN-Netzwerke: VGG, AlexNet, GoogleNet, Inception usw.
- Praktische CNN-Netzwerke: ResNet, DenseNet, SENet, FPN usw.
- Leichte CNNs: SqueezeNet, MobileNet-Serie, ShuffleNet-Serie, MNasNet usw.
- Gesichtserkennung: MTCNN, RetinaFace, SCRFD usw.
- Objekterkennung: YOLO-Serie, SSD-Serie, Faster-RCNN usw.
- Bildsegmentierung: FCN, PSPNet, UNet, YOLACT usw.
- Pose-Schätzung: SimplePose usw.
Plattformkompatibilitätsmatrix
Plattform/Hardware |
Windows |
Linux |
Android |
macOS |
iOS |
Intel CPU |
✔️ |
✔️ |
❔ |
✔️ |
/ |
Intel GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
AMD CPU |
✔️ |
✔️ |
❔ |
✔️ |
/ |
AMD GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
NVIDIA GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
Qualcomm |
❔ |
✔️ |
✅ |
/ |
/ |
ARM CPU |
❔ |
❔ |
✅ |
/ |
/ |
Apple CPU |
/ |
/ |
/ |
✔️ |
✅ |
✅ = Bekanntlich lauffähig und leistungsstark; ✔️ = Bekanntlich lauffähig; ❔ = Theoretisch möglich, aber nicht bestätigt; / = Nicht zutreffend
Tatsächliche Anwendungen
ncnn wird derzeit in mehreren Kernanwendungen von Tencent verwendet, darunter:
- QQ
- QZone (QQ-Raum)
- WeChat
- 天天P图 (TianTianPitu)
- Andere Tencent-Anwendungen
Entwicklungsumgebung
Beispielprojekte
- Android-Anwendungsbeispiele:
- SqueezeNet-Bildklassifizierung
- Stilübertragungsanwendung
- MobileNet-SSD-Objekterkennung
- MTCNN-Gesichtserkennung
- YOLOv5/YOLOv7-Objekterkennung
- SCRFD-Gesichtserkennung
Tool-Unterstützung
- Modellvisualisierung: Unterstützt die Verwendung von Netron zur Modellvisualisierung
- Benutzerdefinierte Schichten: Unterstützt die Registrierung und Implementierung benutzerdefinierter Schichten
- Quantisierungswerkzeuge: Bietet Werkzeuge zur Modellquantisierung
Community-Unterstützung
- Technische Austausch-QQ-Gruppen: 637093648, 677104663, 818998520
- Telegram-Gruppe und Discord-Kanal
- Detaillierte Dokumentation: Vollständige Wiki-Dokumentation und API-Referenz
Erste Schritte
Build-Unterstützung
ncnn unterstützt das Erstellen auf den folgenden Plattformen:
- Linux / Windows / macOS
- Raspberry Pi 3/4
- Android
- iOS
- WebAssembly
- NVIDIA Jetson
- 全志D1 (Allwinner D1)
- 龙芯2K1000 (Loongson 2K1000)
Schnelleinstieg
Es wird empfohlen, mit dem Tutorial Verwendung von ncnn mit AlexNet zu beginnen. Dieses Tutorial bietet detaillierte Schritt-für-Schritt-Anleitungen und ist besonders für Anfänger geeignet.
Projektvorteile
- Hervorragende Leistung: Übertrifft alle bekannten Open-Source-Frameworks in Bezug auf die Laufgeschwindigkeit auf mobilen CPUs
- Ressourcenschonend: Sehr geringer Speicherbedarf, geeignet für ressourcenbeschränkte Umgebungen
- Einfache Integration: Keine Abhängigkeiten von Drittanbietern, einfache Integration
- Produktionsvalidiert: In mehreren Tencent-Anwendungen mit Hunderten Millionen Benutzern validiert
- Kontinuierliche Wartung: Aktive Open-Source-Community und kontinuierliche Versionsaktualisierungen
- Breite Kompatibilität: Unterstützt den Import von Modellen aus Mainstream-Deep-Learning-Frameworks
ncnn ist die ideale Wahl für die Entwicklung von KI-Anwendungen auf mobilen Geräten, insbesondere für Entwickler und Unternehmen, die Deep-Learning-Modelle auf mobilen Geräten bereitstellen müssen.
