
Modelo de detección de objetos sin anclaje liviano súper rápido y de alta precisión. Tiempo real en dispositivos móviles.

Nanodet es un modelo de detección de objetos sin anclaje de una etapa de estilo FCOS que utiliza la pérdida focal generalizada como pérdida de clasificación y regresión.
En Nanodet-plus, proponemos una estrategia de asignación de etiquetas novedosa con un simple módulo de orientación de asignación (AGM) y un cesionador de etiqueta suave dinámica (DSLA) para resolver el problema de asignación de etiquetas óptimo en el entrenamiento de modelos livianos. También presentamos una pirámide de características de luz llamada Ghost-Pan para mejorar la fusión de características de múltiples capas. Estas mejoras aumentan la precisión de detección de Nanodet anterior por 7 Mapa en el conjunto de datos de Coco.
Nanodet-plus 知乎中文介绍
Nanodeto 知乎中文介绍
QQ : : 908606542 (答案 : 炼丹)
| Modelo | Resolución | mapa val 0.5: 0.95 | Latencia de la CPU (i7-8700) | Latencia del brazo (4xa76) | Chocolas | Parámetros | Tamaño del modelo |
|---|---|---|---|---|---|---|---|
| Nanodet-m | 320*320 | 20.6 | 4.98 ms | 10.23 ms | 0.72g | 0.95m | 1.8MB (FP16) | 980kb (int8) |
| Nanodet-plus-m | 320*320 | 27.0 | 5.25 ms | 11.97 ms | 0.9g | 1.17m | 2.3Mb (FP16) | 1.2Mb (int8) |
| Nanodet-plus-m | 416*416 | 30.4 | 8.32 ms | 19.77 ms | 1.52G | 1.17m | 2.3Mb (FP16) | 1.2Mb (int8) |
| Nanodet-plus-m-1.5x | 320*320 | 29.9 | 7.21ms | 15.90 ms | 1.75 g | 2.44m | 4.7Mb (FP16) | 2.3Mb (int8) |
| Nanodet-plus-m-1.5x | 416*416 | 34.1 | 11.50 ms | 25.49ms | 2.97g | 2.44m | 4.7Mb (FP16) | 2.3Mb (int8) |
| Yolov3 diminuto | 416*416 | 16.6 | - | 37.6ms | 5.62g | 8.86m | 33.7Mb |
| Yolov4 | 416*416 | 21.7 | - | 32.81 ms | 6.96g | 6.06m | 23.0 MB |
| Yolox-nano | 416*416 | 25.8 | - | 23.08 ms | 1.08g | 0.91m | 1.8MB (FP16) |
| Yolov5-n | 640*640 | 28.4 | - | 44.39ms | 4.5g | 1.9m | 3.8MB (FP16) |
| FBNETV5 | 320*640 | 30.4 | - | - | 1.8g | - | - |
| Móvil | 320*320 | 25.6 | - | - | 0.9g | - | - |
Descargue modelos previamente capacitados y encuentre más modelos en el zoológico del modelo o en archivos de lanzamiento
El rendimiento del brazo se mide en la CPU del brazo de Kirin 980 (4xa76+4xa55) basada en NCNN. Puede probar la latencia en su teléfono con NCNN_Android_Benchmark.
El rendimiento de la CPU de Intel se mide Intel Core-I7-8700 basado en OpenVino.
El mapa de nanodet (0.5: 0.95) se valida en el conjunto de datos Coco Val2017 sin aumento de tiempo de prueba.
El mapa Yolov3 y Yolov4 se refiere de la red parcial de escala-yolov4: escala cruzada.
[2023.01.20] Actualización a Pytorch-Lightning-1.9. La versión mínima de Pytorch se actualiza a 1.10. Soporte de capacitación FP16 (gracias @crisp-snakey). Support Ignore Label (gracias @Zero0kiriyu).
[2022.08.26] Actualización a Pytorch-Lightning-1.7. La versión mínima de Pytorch se actualiza a 1.9. Para usar la versión anterior de Pytorch, instale nanodet <= v1.0.0-alfa-1
[2021.12.25] ¡Liberación de nanodet-plus ! Agregar AGM (asignar módulo de guía) y DSLA (cesionador de etiqueta suave dinámica) para mejorar el mapa 7 con solo un poco de costo.
Encuentre más notas de actualización en las notas de actualización.

El proyecto de demostración de Android está en la carpeta Demo_android_NCNN . Consulte la Guía de demostración de Android.
Aquí hay una mejor implementación NCNN-Android-Nanodet
La demostración de C ++ basada en NCNN está en la carpeta Demo_ncnn . Consulte la Guía de demostración de CPP.
La inferencia usando el marco MNN de Alibaba está en la carpeta Demo_mnn . Consulte la Guía de demostración de MNN.
La inferencia usando OpenVino está en la carpeta Demo_openvino . Consulte la Guía de demostración de OpenVino.
https://nihui.github.io/ncnn-webassembly-nanodet/
Primero, instale los requisitos y el nanodeto de configuración después de la guía de instalación. Luego descargue el peso del pretrano de Coco desde aquí
Punto de control del pretrénico de coco
El peso previamente entrenado fue entrenado por la config/nanodet-plus-m_416.yml .
python demo/demo.py image --config CONFIG_PATH --model MODEL_PATH --path IMAGE_PATHpython demo/demo.py video --config CONFIG_PATH --model MODEL_PATH --path VIDEO_PATHpython demo/demo.py webcam --config CONFIG_PATH --model MODEL_PATH --camid YOUR_CAMERA_IDAdemás, proporcionamos un cuaderno aquí para demostrar cómo hacer que funcione con Pytorch.
conda create -n nanodet python=3.8 -y
conda activate nanodetconda install pytorch torchvision cudatoolkit=11.1 -c pytorch -c conda-forgegit clone https://github.com/RangiLyu/nanodet.git
cd nanodetpip install -r requirements.txtpython setup.py developNanodet admite una variedad de columnas. Vaya a la carpeta de configuración para ver los archivos de configuración de entrenamiento de muestra.
| Modelo | Columna vertebral | Resolución | Mapa de coco | Chocolas | Parámetros | Peso previo al entrenamiento |
|---|---|---|---|---|---|---|
| Nanodet-m | Shufflenetv2 1.0x | 320*320 | 20.6 | 0.72g | 0.95m | Descargar |
| Nanodet-plus-m-320 ( nuevo ) | Shufflenetv2 1.0x | 320*320 | 27.0 | 0.9g | 1.17m | Peso | Control |
| Nanodet-plus-m-416 ( nuevo ) | Shufflenetv2 1.0x | 416*416 | 30.4 | 1.52G | 1.17m | Peso | Control |
| Nanodet-plus-m-1.5x-320 ( nuevo ) | Shufflenetv2 1.5x | 320*320 | 29.9 | 1.75 g | 2.44m | Peso | Control |
| Nanodet-plus-m-1.5x-416 ( nuevo ) | Shufflenetv2 1.5x | 416*416 | 34.1 | 2.97g | 2.44m | Peso | Control |
Aviso : La diferencia entre Weight y Checkpoint es que el peso solo proporciona parámetros en el tiempo de inferencia, pero el punto de control contiene parámetros de tiempo de entrenamiento.
Zoológico modelo heredado
| Modelo | Columna vertebral | Resolución | Mapa de coco | Chocolas | Parámetros | Peso previo al entrenamiento |
|---|---|---|---|---|---|---|
| Nanodet-M-416 | Shufflenetv2 1.0x | 416*416 | 23.5 | 1.2g | 0.95m | Descargar |
| Nanodet-M-1.5x | Shufflenetv2 1.5x | 320*320 | 23.5 | 1.44g | 2.08m | Descargar |
| Nanodet-M-1.5x-416 | Shufflenetv2 1.5x | 416*416 | 26.8 | 2.42G | 2.08m | Descargar |
| Nanodet-m-0.5x | Shufflenetv2 0.5x | 320*320 | 13.5 | 0.3g | 0.28m | Descargar |
| Nanodet-t | Shufflenetv2 1.0x | 320*320 | 21.7 | 0.96g | 1.36m | Descargar |
| Nanodet-G | Red CSP personalizada | 416*416 | 22.9 | 4.2g | 3.81m | Descargar |
| Nanodet-eficiente | Eficientenet-lite0 | 320*320 | 24.7 | 1.72g | 3.11m | Descargar |
| Nanodet-eficiente | Eficientenet-lite1 | 416*416 | 30.3 | 4.06g | 4.01m | Descargar |
| Nanodet-eficiente | Eficientenet-lite2 | 512*512 | 32.6 | 7.12g | 4.71m | Descargar |
| Nanodet-repvgg | Repvgg-A0 | 416*416 | 27.8 | 11.3g | 6.75m | Descargar |
Preparar el conjunto de datos
Si las anotaciones de su conjunto de datos son formato PASCAL VOC XML, consulte Config/nanodet_custom_xml_dataset.yml
De lo contrario, si las anotaciones de su conjunto de datos son Formato Yolo (DarkNet TXT), consulte Config/Nanodet-plus-M_416-yolo.yml
O convierta las anotaciones de su conjunto de datos en formato de Coco (detalles del formato de anotación de Coco).
Preparar el archivo de configuración
Copie y modifique un archivo de configuración YML en la carpeta config/.
Cambie save_dir a donde desea guardar el modelo.
Cambiar num_classes en model-> Arch-> Head .
Cambie la ruta de imagen y la ruta de anotación tanto en datos-> trenes como en datos-> val .
Establezca ID de GPU, trabajadores y tamaño por lotes en el dispositivo para que se ajuste a su dispositivo.
Establezca Total_epochs , LR y LR_SCHEDULE de acuerdo con su conjunto de datos y BatchSize.
Si desea modificar la red, el aumento de datos u otras cosas, consulte el detalle del archivo de configuración
Comience el entrenamiento
Nanodet ahora está usando Pytorch Lightning para entrenamiento.
Tanto para una sola-GPU como para GPU múltiples, ejecute:
python tools/train.py CONFIG_FILE_PATHVisualizar registros
Los registros de TensorBoard se guardan en save_dir que establece en el archivo de configuración.
Para visualizar los registros de TensorBoard, ejecute:
cd < YOUR_SAVE_DIR >
tensorboard --logdir ./Nanodet proporciona una demostración de Multi-Backend C ++ que incluye NCNN, OpenVino y MNN. También hay una demostración de Android basada en la biblioteca NCNN.
Para convertir el modelo Nanodet Pytorch en NCNN, puede elegir de esta manera: Pytorch-> Onnx-> NCNN
Para exportar el modelo ONNX, ejecute tools/export_onnx.py .
python tools/export_onnx.py --cfg_path ${CONFIG_PATH} --model_path ${PYTORCH_MODEL_PATH}Consulte Demo_ncnn.
Consulte Demo_openvino.
Consulte Demo_mnn.
Consulte Android_Demo.
Si encuentra útil este proyecto en su investigación, considere citar:
@misc { =nanodet ,
title = { NanoDet-Plus: Super fast and high accuracy lightweight anchor-free object detection model. } ,
author = { RangiLyu } ,
howpublished = { url{https://github.com/RangiLyu/nanodet} } ,
year = { 2021 }
}https://github.com/tencent/ncnn
https://github.com/open-mmlab/mmdetection
https://github.com/implus/gfocal
https://github.com/cmdbug/yolov5_ncnn
https://github.com/rbgirshick/yacs