
Modèle de détection d'objets sans ancre léger et haute précision rapide et haute. En temps réel sur les appareils mobiles.

Nanodet est un modèle de détection d'objets sans ancre de style FCOS en une étape qui utilise une perte focale généralisée comme classification et perte de régression.
Dans Nanodet-plus, nous proposons une nouvelle stratégie d'attribution d'étiquette avec un module de guidage en attribution simple (AGM) et un assignateur dynamique d'étiquette Soft (DSLA) pour résoudre le problème d'attribution optimal d'étiquette dans la formation du modèle léger. Nous introduisons également une pyramide de fonctionnalité légère appelée Ghost-Pan pour améliorer la fusion de fonctionnalités multicouches. Ces améliorations augmentent la précision de détection de Nanodet précédente par 7 MAP sur l'ensemble de données CoCo.
Nanodet-plus 知乎中文介绍
Nanodet 知乎中文介绍
QQ 交流群 : 908606542 (答案 : 炼丹)
| Modèle | Résolution | cartographie 0,5: 0,95 | Latence du processeur (i7-8700) | Latence des bras (4xa76) | Flops | Paramètres | Taille du modèle |
|---|---|---|---|---|---|---|---|
| Nanodet-m | 320 * 320 | 20.6 | 4,98 ms | 10,23 ms | 0,72 g | 0,95 m | 1,8 Mo (FP16) | 980KB (INT8) |
| Nanodet-plus-m | 320 * 320 | 27.0 | 5,25 ms | 11,97 ms | 0,9 g | 1,17m | 2,3 Mo (FP16) | 1,2 Mo (INT8) |
| Nanodet-plus-m | 416 * 416 | 30.4 | 8,32 ms | 19,77 ms | 1,52 g | 1,17m | 2,3 Mo (FP16) | 1,2 Mo (INT8) |
| Nanodet-plus-m-1,5x | 320 * 320 | 29.9 | 7,21 ms | 15,90 ms | 1,75 g | 2,44m | 4,7 Mo (FP16) | 2,3 Mo (INT8) |
| Nanodet-plus-m-1,5x | 416 * 416 | 34.1 | 11h50 ms | 25,49 ms | 2,97g | 2,44m | 4,7 Mo (FP16) | 2,3 Mo (INT8) |
| Yolov3-Tiny | 416 * 416 | 16.6 | - | 37,6 ms | 5,62g | 8,86 m | 33,7 Mo |
| Yolov4-Tiny | 416 * 416 | 21.7 | - | 32.81 ms | 6,96g | 6,06 m | 23,0 Mo |
| Yolox-nano | 416 * 416 | 25.8 | - | 23.08 ms | 1,08g | 0,91 m | 1,8 Mo (FP16) |
| Yolov5-n | 640 * 640 | 28.4 | - | 44,39 ms | 4,5 g | 1,9 m | 3,8 Mo (FP16) |
| Fbnetv5 | 320 * 640 | 30.4 | - | - | 1,8 g | - | - |
| Mobiledet | 320 * 320 | 25.6 | - | - | 0,9 g | - | - |
Téléchargez les modèles pré-formés et trouvez plus de modèles dans le zoo du modèle ou dans les fichiers de version
Les performances du bras sont mesurées sur Kirin 980 (4xa76 + 4xa55) CPU ARM basé sur NCNN. Vous pouvez tester la latence sur votre téléphone avec ncnn_android_benchmark.
Les performances Intel CPU sont mesurées Intel Core-I7-8700 basées sur OpenVino.
La carte Nanodet (0,5: 0,95) est validée sur l'ensemble de données COCO VAL2017 sans augmentation de temps de test.
La carte YOLOV3 & YOLOV4 se réfère de l'échelle-yolov4: mise à l'échelle du réseau partiel en étage transversale.
[2023.01.20] Mettre à niveau vers Pytorch-Lightning-1.9. La version minimale Pytorch est mise à niveau à 1,10. Soutenez la formation FP16 (merci @ Crisp-Snakey). Support Ignore Label (merci @ zero0kiriyu).
[2022.08.26] Mettre à niveau vers Pytorch-Lightning-1.7. La version minimale Pytorch est mise à niveau à 1,9. Pour utiliser la version précédente de Pytorch, veuillez installer nanodet <= v1.0.0-alpha-1
[2021.12.25] Libération de Nanodet-Plus ! Ajout de l'AGA (Assignez le module de guidage) & DSLA (dynamic soft étiquette de soft) pour améliorer 7 carte avec seulement un petit coût.
Trouvez plus de notes de mise à jour dans les notes de mise à jour.

Le projet de démonstration Android est dans le dossier Demo_android_ncnn . Veuillez vous référer au guide de démonstration Android.
Voici une meilleure implémentation ncnn-android-nanodet
La démo C ++ basée sur NCNN est dans le dossier Demo_ncnn . Veuillez vous référer au guide de démonstration CPP.
L'inférence utilisant le cadre MNN d'Alibaba est dans le dossier Demo_MNN . Veuillez vous référer au guide de démonstration MNN.
L'inférence à l'aide d'OpenVino est dans le dossier Demo_Openvino . Veuillez vous référer au guide de démonstration OpenVino.
https://nihui.github.io/ncnn-webassembly-nanodet/
Tout d'abord, installez les exigences et la configuration du nanodet suivant le guide d'installation. Ensuite, téléchargez le poids de Coco Pretrain à partir d'ici
Point de contrôle de Coco Pretrain
Le poids pré-formé a été formé par la config 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_IDEn outre, nous fournissons un cahier ici pour démontrer comment le faire fonctionner avec 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 prend en charge la variété des épine dorsales. Accédez au dossier de configuration pour voir les exemples de fichiers de configuration de formation.
| Modèle | Colonne vertébrale | Résolution | Coco carte | Flops | Paramètres | Poids pré-trains |
|---|---|---|---|---|---|---|
| Nanodet-m | Shufflenetv2 1.0x | 320 * 320 | 20.6 | 0,72 g | 0,95 m | Télécharger |
| Nanodet-plus-m-320 ( nouveau ) | Shufflenetv2 1.0x | 320 * 320 | 27.0 | 0,9 g | 1,17m | Poids | Point de contrôle |
| Nanodet-plus-m-416 ( nouveau ) | Shufflenetv2 1.0x | 416 * 416 | 30.4 | 1,52 g | 1,17m | Poids | Point de contrôle |
| Nanodet-plus-m-1.5x-320 ( nouveau ) | Shufflenetv2 1,5x | 320 * 320 | 29.9 | 1,75 g | 2,44m | Poids | Point de contrôle |
| Nanodet-plus-m-1.5x-416 ( nouveau ) | Shufflenetv2 1,5x | 416 * 416 | 34.1 | 2,97g | 2,44m | Poids | Point de contrôle |
AVIS : La différence entre Weight et Checkpoint est que le poids ne fournit que des paramètres en temps d'inférence, mais le point de contrôle contient des paramètres de temps de formation.
Zoo du modèle hérité
| Modèle | Colonne vertébrale | Résolution | Coco carte | Flops | Paramètres | Poids pré-trains |
|---|---|---|---|---|---|---|
| Nanodet-M-416 | Shufflenetv2 1.0x | 416 * 416 | 23.5 | 1,2 g | 0,95 m | Télécharger |
| Nanodet-m-1,5x | Shufflenetv2 1,5x | 320 * 320 | 23.5 | 1,44g | 2,08 m | Télécharger |
| Nanodet-m-1.5x-416 | Shufflenetv2 1,5x | 416 * 416 | 26.8 | 2,42g | 2,08 m | Télécharger |
| Nanodet-M-0,5x | Shufflenetv2 0,5x | 320 * 320 | 13.5 | 0,3 g | 0,28 m | Télécharger |
| Nanodet-t | Shufflenetv2 1.0x | 320 * 320 | 21.7 | 0,96 g | 1,36 m | Télécharger |
| Nanodet-g | Net CSP personnalisé | 416 * 416 | 22.9 | 4.2g | 3,81 m | Télécharger |
| Nanodet-économe | EfficientNet-Lite0 | 320 * 320 | 24.7 | 1,72 g | 3.11m | Télécharger |
| Nanodet-économe | EfficientNet-Lite1 | 416 * 416 | 30.3 | 4.06g | 4.01m | Télécharger |
| Nanodet-économe | EfficientNet-Lite2 | 512 * 512 | 32.6 | 7.12g | 4,71 m | Télécharger |
| Nanodet-repvgg | Repvgg-a0 | 416 * 416 | 27.8 | 11,3 g | 6,75 m | Télécharger |
Préparer un ensemble de données
Si vos annotations d'ensemble de données sont le format PASCAL VOC XML, reportez-vous à config / nanodet_custom_xml_dataset.yml
Sinon, si vos annotations de données sont le format YOLO (DarkNet TXT), reportez-vous à Config / Nanodet-plus-M_416-YOLO.yml
Ou convertissez vos annotations de données au format MS Coco (Détails du format d'annotation de CoCo).
Préparer le fichier de configuration
Copiez et modifiez un exemple de fichier de configuration YML dans le dossier Config /.
Modifiez Save_dir en où vous souhaitez enregistrer le modèle.
Modifiez NUM_CLASSES dans Model-> Arch-> Head .
Modifier le chemin d'image et le chemin d'annotation dans les deux données-> train et données-> val .
Définissez les ID GPU, les travailleurs NUM et la taille du lot dans l'appareil pour s'adapter à votre appareil.
Définissez Total_Epochs , LR et LR_SCHEDULE en fonction de votre ensemble de données et de votre bac à lot.
Si vous souhaitez modifier le réseau, l'augmentation des données ou d'autres choses, veuillez vous référer au détail du fichier config
Commencer à s'entraîner
Nanodet utilise maintenant Pytorch Lightning pour l'entraînement.
Pour le GPU unique ou plusieurs-GPU, exécutez:
python tools/train.py CONFIG_FILE_PATHVisualiser les journaux
Les journaux Tensorboard sont enregistrés dans save_dir que vous définissez dans le fichier de configuration.
Pour visualiser les journaux Tensorboard, exécutez:
cd < YOUR_SAVE_DIR >
tensorboard --logdir ./Nanodet fournit une démo C ++ multi-dosen, y compris NCNN, OpenVino et MNN. Il existe également une démo Android basée sur la bibliothèque NCNN.
Pour convertir le modèle Nanodet Pytorch en NCNN, vous pouvez choisir de cette façon: pytorch-> onnx-> ncnn
Pour exporter le modèle ONNX, exécutez tools/export_onnx.py .
python tools/export_onnx.py --cfg_path ${CONFIG_PATH} --model_path ${PYTORCH_MODEL_PATH}Veuillez vous référer à Demo_ncnn.
Veuillez vous référer à Demo_Openvino.
Veuillez vous référer à Demo_mnn.
Veuillez vous référer à Android_demo.
Si vous trouvez ce projet utile dans vos recherches, veuillez envisager citer:
@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