ncnn - Framework de Inferencia de Redes Neuronales para Dispositivos Móviles de Código Abierto de Tencent
Resumen del Proyecto
ncnn es un framework de cálculo directo de redes neuronales de alto rendimiento, optimizado al máximo para dispositivos móviles. ncnn está diseñado desde el principio teniendo en cuenta el despliegue y el uso en dispositivos móviles. No tiene dependencias de terceros, es multiplataforma y la velocidad en la CPU de los dispositivos móviles es más rápida que la de todos los frameworks de código abierto conocidos actualmente.
Dirección del proyecto: https://github.com/Tencent/ncnn
Equipo de desarrollo: Proyecto de código abierto de Tencent
Características Principales
1. Optimización Extrema para Dispositivos Móviles
- Diseñado para plataformas móviles: Optimizado específicamente para dispositivos móviles desde el principio.
- Sin dependencias de terceros: No depende de BLAS, NNPACK ni de ningún otro framework de cálculo.
- Implementación pura en C++: Garantiza la compatibilidad multiplataforma y el alto rendimiento.
2. Rendimiento Excepcional
- Optimización a nivel de ensamblador ARM NEON: Emplea una optimización meticulosa a nivel de ensamblador, lo que resulta en una velocidad de cálculo extremadamente rápida.
- Gestión de memoria precisa: El uso de memoria es extremadamente bajo, lo que lo hace adecuado para dispositivos móviles con recursos limitados.
- Cálculo paralelo multinúcleo: Admite la optimización de la programación de la CPU ARM big.LITTLE.
3. Amplia Compatibilidad con Plataformas
- Multiplataforma: Compatible con múltiples plataformas como Android, iOS, Linux, Windows, macOS.
- Soporte multiarquitectura: Compatible con diferentes arquitecturas de CPU como ARM, x86.
- Aceleración por GPU: Admite la aceleración por GPU basada en la API Vulkan.
4. Amplio Soporte de Modelos
- Importación de modelos de múltiples frameworks: Puede importar modelos de frameworks populares como Caffe, PyTorch, MXNet, ONNX, Darknet, Keras, TensorFlow.
- Soporte de cuantificación: Admite la cuantificación de 8 bits y el almacenamiento de punto flotante de media precisión.
- Carga directa en memoria: Admite la carga de modelos de red con referencia de copia cero.
Arquitectura Técnica
Tipos de Redes Soportadas
- Redes CNN clásicas: VGG, AlexNet, GoogleNet, Inception, etc.
- Redes CNN prácticas: ResNet, DenseNet, SENet, FPN, etc.
- CNN ligeras: SqueezeNet, MobileNet series, ShuffleNet series, MNasNet, etc.
- Detección facial: MTCNN, RetinaFace, SCRFD, etc.
- Detección de objetos: YOLO series, SSD series, Faster-RCNN, etc.
- Segmentación de imágenes: FCN, PSPNet, UNet, YOLACT, etc.
- Estimación de pose: SimplePose, etc.
Matriz de Compatibilidad de Plataformas
Plataforma/Hardware |
Windows |
Linux |
Android |
macOS |
iOS |
Intel CPU |
✔️ |
✔️ |
❔ |
✔️ |
/ |
Intel GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
AMD CPU |
✔️ |
✔️ |
❔ |
✔️ |
/ |
AMD GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
NVIDIA GPU |
✔️ |
✔️ |
❔ |
❔ |
/ |
Qualcomm |
❔ |
✔️ |
✅ |
/ |
/ |
ARM CPU |
❔ |
❔ |
✅ |
/ |
/ |
Apple CPU |
/ |
/ |
/ |
✔️ |
✅ |
✅ = Se sabe que funciona y tiene un rendimiento excelente; ✔️ = Se sabe que funciona; ❔ = Teóricamente factible pero no confirmado; / = No aplicable
Aplicaciones Prácticas
ncnn se utiliza actualmente en muchas aplicaciones centrales de Tencent, incluyendo:
- QQ
- QZone (QQ空间)
- WeChat
- 天天P图
- Otras aplicaciones de Tencent
Ecosistema de Desarrollo
Proyectos de Ejemplo
- Ejemplos de aplicaciones de Android:
- Clasificación de imágenes SqueezeNet
- Aplicación de transferencia de estilo
- Detección de objetos MobileNet-SSD
- Detección facial MTCNN
- Detección de objetos YOLOv5/YOLOv7
- Detección facial SCRFD
Soporte de Herramientas
- Visualización de modelos: Admite el uso de Netron para la visualización de modelos.
- Capas personalizadas: Admite el registro e implementación de capas personalizadas.
- Herramientas de cuantificación: Proporciona herramientas de cuantificación de modelos.
Soporte de la Comunidad
- Grupos de QQ para intercambio técnico: 637093648, 677104663, 818998520
- Grupo de Telegram y Canal de Discord
- Documentación detallada: Documentación wiki completa y referencia de la API.
Empezar a Usar
Soporte de Construcción
ncnn admite la construcción en las siguientes plataformas:
- Linux / Windows / macOS
- Raspberry Pi 3/4
- Android
- iOS
- WebAssembly
- NVIDIA Jetson
- 全志D1
- 龙芯2K1000
Inicio Rápido
Se recomienda comenzar con el tutorial Usar ncnn con AlexNet, que proporciona instrucciones paso a paso detalladas, especialmente adecuadas para principiantes.
Ventajas del Proyecto
- Rendimiento Excepcional: La velocidad de ejecución en la CPU de los dispositivos móviles supera a todos los frameworks de código abierto conocidos.
- Amigable con los Recursos: El uso de memoria es extremadamente bajo, lo que lo hace adecuado para entornos con recursos limitados.
- Fácil de Integrar: No tiene dependencias de terceros, la integración es sencilla.
- Validación en Producción: Validado en múltiples aplicaciones de Tencent con cientos de millones de usuarios.
- Mantenimiento Continuo: Comunidad de código abierto activa y actualizaciones de versiones continuas.
- Amplia Compatibilidad: Admite la importación de modelos de los principales frameworks de aprendizaje profundo.
ncnn es la opción ideal para el desarrollo de aplicaciones de IA en dispositivos móviles, especialmente adecuado para desarrolladores y empresas que necesitan implementar modelos de aprendizaje profundo en dispositivos móviles.
