Il s'agit du référentiel officiel avec l'implémentation PyTorch de LW-DETR : un remplacement de transformateur par YOLO pour la détection en temps réel.
☀️ Si vous trouvez ce travail utile pour votre recherche, veuillez mettre en vedette notre dépôt et citer notre article ! ☀️
Lancez une série de modèles de détection en temps réel dans LW-DETR, notamment LW-DETR-tiny, LW-DETR-small, LW-DETR-medium, LW-DETR-large et LW-DETR-xlarge, nommés <LWDETR_*size_60e_coco .pth>. Veuillez vous référer à Hugging Face pour télécharger.
Lancez une série de modèles pré-entraînés dans LW-DETR. Veuillez vous référer à Hugging Face pour télécharger.
[2024/7/15] Nous présentons OVLW-DETR, un détecteur à vocabulaire ouvert efficace avec des performances exceptionnelles et une faible latence, construit sur LW-DETR. Il surpasse les détecteurs à vocabulaire ouvert en temps réel existants sur la référence standard Zero-Shot LVIS. Le code source et le modèle pré-entraîné arriveront bientôt, restez à l'écoute !
1. Introduction
2.Installation
3. Préparation
4. Former
5. Évaluer
6. Déployer
7. Principaux résultats
8. Références
9. Citation
LW-DETR est un transformateur de détection léger, qui surpasse les YOLO pour la détection d'objets en temps réel. L'architecture est une simple pile d'un encodeur ViT, d'un projecteur et d'un décodeur DETR peu profond. LW-DETR exploite des techniques avancées récentes, telles que des techniques efficaces de formation, par exemple une perte et un pré-entraînement améliorés, ainsi que des fenêtres entrelacées et des attentions globales pour réduire la complexité de l'encodeur ViT. LW-DETR améliore l'encodeur ViT en agrégeant des cartes de fonctionnalités à plusieurs niveaux et les cartes de fonctionnalités intermédiaires et finales dans l'encodeur ViT, formant des cartes de fonctionnalités plus riches, et introduit une organisation de cartes de fonctionnalités principales par fenêtre pour améliorer l'efficacité du calcul de l'attention entrelacée. LW-DETR atteint des performances supérieures à celles des détecteurs en temps réel existants, par exemple YOLO et ses variantes, sur COCO et d'autres ensembles de données de référence.
Le code est développé et validé sous python=3.8.19, pytorch=1.13.0, cuda=11.6,TensorRT-8.6.1.6
. Des versions supérieures pourraient également être disponibles.
Créez votre propre environnement Python avec Anaconda.
conda create -n lwdetr python=3.8.19 conda activer lwdetr
Clonez ce dépôt.
clone git https://github.com/Atten4Vis/LW-DETR.gitcd LW-DETR
Installez PyTorch et torchvision.
Suivez les instructions sur https://pytorch.org/get-started/locally/.
# un exemple : conda install pytorch==1.13.0 torchvision==0.14.0 pytorch-cuda=11.6 -c pytorch -c nvidia
Installez les packages requis.
Pour la formation et l’évaluation :
pip install -r exigences.txt
Pour le déploiement :
Veuillez vous référer à NVIDIA pour les instructions d'installation de TensorRT.
pip install -r déployer/requirements.txt
Compilation des opérateurs CUDA
modèles/opérations de CD python setup.py build install# unit test (devrait voir que toutes les vérifications sont vraies)python test.pycd ../..
Pour l'ensemble de données MS COCO , veuillez télécharger et extraire les images de train et de val COCO 2017 avec les annotations de http://cocodataset.org. Nous nous attendons à ce que la structure des répertoires soit la suivante :
COCODIR/ ├── train2017/ ├── val2017/ └── annotations/ ├── instances_train2017.json └── instances_val2017.json
Pour l'ensemble de données Objects365 destiné au pré-entraînement, veuillez télécharger les images Objects365 avec des annotations depuis https://www.objects365.org/overview.html.
Tous les points de contrôle se trouvent dans Hugging Face.
Pré-formation sur Objects365.
Pré-entraîné le ViT.
Nous pré-entraînons le ViT sur l'ensemble de données Objects365 à l'aide d'une méthode MIM, CAE v2, basée sur les modèles pré-entraînés. Veuillez vous référer au lien suivant pour télécharger les modèles pré-entraînés et les placer dans pretrain_weights/
.
Modèle | Commentaire |
---|---|
caev2_tiny_300e_objects365 | modèle ViT pré-entraîné sur objets 365 pour LW-DETR-tiny/small à l'aide de CAE v2 |
caev2_tiny_300e_objects365 | modèle ViT pré-entraîné sur objets 365 pour LW-DETR-moyen/grand à l'aide de CAE v2 |
caev2_tiny_300e_objects365 | modèle ViT pré-entraîné sur objets 365 pour LW-DETR-xlarge à l'aide de CAE v2 |
LW-DETR pré-entraîné.
Nous recyclons l'encodeur et formons le projecteur et le décodeur sur Objects365 de manière supervision. Veuillez vous référer au lien suivant pour télécharger les modèles pré-entraînés et les placer dans pretrain_weights/
.
Modèle | Commentaire |
---|---|
LWDETR_tiny_30e_objects365 | modèle minuscule LW-DETR pré-entraîné sur des objets 365 |
LWDETR_small_30e_objects365 | modèle LW-DETR-petit pré-entraîné sur objets365 |
LWDETR_medium_30e_objects365 | modèle LW-DETR-medium pré-entraîné sur des objets365 |
LWDETR_large_30e_objects365 | grand modèle LW-DETR pré-entraîné sur des objets 365 |
LWDETR_xlarge_30e_objects365 | modèle LW-DETR-xlarge pré-entraîné sur des objets 365 |
Mise au point sur COCO. Nous peaufinons le modèle pré-entraîné sur COCO. Si vous souhaitez réimplémenter notre dépôt, veuillez ignorer cette étape. Si vous souhaitez évaluer directement nos modèles formés, veuillez vous référer au lien suivant pour télécharger les modèles affinés et les mettre en output/
.
Modèle | Commentaire |
---|---|
LWDETR_tiny_60e_coco | modèle LW-DETR-minuscule affiné sur COCO |
LWDETR_small_60e_coco | petit modèle LW-DETR affiné sur COCO |
LWDETR_medium_60e_coco | modèle LW-DETR-medium affiné sur COCO |
LWDETR_large_60e_coco | LW-DETR-grand modèle affiné sur COCO |
LWDETR_xlarge_60e_coco | modèle LW-DETR-xlarge affiné sur COCO |
Vous pouvez directement exécuter le fichier scripts/lwdetr_<model_size>_coco_train.sh
pour le processus de formation sur l'ensemble de données Coco.
sh scripts/lwdetr_tiny_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_small_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_medium_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_large_coco_train.sh /path/to/your/COCODIR
sh scripts/lwdetr_xlarge_coco_train.sh /path/to/your/COCODIR
Vous pouvez exécuter directement le fichier scripts/lwdetr_<model_size>_coco_eval.sh
pour le processus d'évaluation sur l'ensemble de données coco. Veuillez vous référer à 3. Préparation pour télécharger une série de modèles LW-DETR.
sh scripts/lwdetr_tiny_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_small_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_medium_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_large_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
sh scripts/lwdetr_xlarge_coco_eval.sh /path/to/your/COCODIR /path/to/your/checkpoint
Vous pouvez exécuter le fichier scripts/lwdetr_<model_size>_coco_export.sh
pour exporter des modèles à développer. Avant l'exécution, veuillez vous assurer que les variables d'environnement TensorRT et cuDNN sont correctement définies.
# exporter les scripts modèles ONNX/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# convertir le modèle d'ONNX en moteur TensorRT en tant que scripts wellsh/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path /vers/votre/point de contrôle --trt
# exporter les scripts de modèles ONNX/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# convertir le modèle d'ONNX en moteur TensorRT en tant que wellsh scripts/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path /vers/votre/point de contrôle --trt
# exporter les scripts modèles ONNX/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# convertir le modèle d'ONNX en moteur TensorRT en tant que scripts wellsh/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path /vers/votre/point de contrôle --trt
# exporter les scripts de modèles ONNX/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# convertir le modèle d'ONNX en moteur TensorRT en tant que wellsh scripts/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path /vers/votre/point de contrôle --trt
# exporter les scripts modèles ONNX/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# convertir le modèle d'ONNX en moteur TensorRT en tant que scripts wellsh/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path /vers/votre/point de contrôle --trt
Vous pouvez utiliser l'outil deploy/benchmark.py
pour exécuter des tests de latence d'inférence.
# évaluer et comparer la latence sur un modelpython onnx déployer/benchmark.py --path=/path/to/your/onnxmodel --coco_path=/path/to/your/COCODIR --run_benchmark # évaluer et comparer la latence sur un moteur TensorRTpython déployer/benchmark.py --path=/path/to/your/trtengine --coco_path=/path/to/your/COCODIR --run_benchmark
Les principaux résultats sur l'ensemble de données coco. Nous rapportons le mAP tel que rapporté dans l'article original, ainsi que le mAP obtenu lors de la réimplémentation.
Méthode | pré-entraînement | Paramètres (M) | FLOP (G) | Latence du modèle (ms) | Latence totale (ms) | carte | Télécharger |
---|---|---|---|---|---|---|---|
LW-DETR-tiny | ✔ | 12.1 | 11.2 | 2.0 | 2.0 | 42,6 (42,9) | Lien |
LW-DETR-small | ✔ | 14.6 | 16.6 | 2.9 | 2.9 | 48,0 (48,1) | Lien |
LW-DETR-medium | ✔ | 28.2 | 42,8 | 5.6 | 5.6 | 52,5 (52,6) | Lien |
LW-DETR-large | ✔ | 46,8 | 71,6 | 8.8 | 8.8 | 56,1 (56,1) | Lien |
LW-DETR-xlarge | ✔ | 118,0 | 174.2 | 19.1 | 19.1 | 58,3 (58,3) | Lien |
Notre projet est mené sur la base du papier public suivant avec le code :
Groupe DETR
ViTDet
DETR déformable
DETR conditionnel
YOLOv8
AlignDETR
ACE v2
CAE
Si vous trouvez ce code utile dans votre recherche, pensez à citer notre article :
@article{chen2024lw,title={LW-DETR : un transformateur de remplacement pour YOLO pour la détection en temps réel},author={Chen, Qiang et Su, Xiangbo et Zhang, Xinyu et Wang, Jian et Chen, Jiahui et Shen, Yunpeng et Han, Chuchu et Chen, Ziliang et Xu, Weixiang et Li, Fanrong et autres},journal={préimpression arXiv arXiv :2406.03459},année={2024}}