RT-DETR de Baidu : un détecteur d’objets en temps réel basé sur Transformer#
Présentation#
Le transformeur de détection en temps réel (RT-DETR), développé par Baidu, est un détecteur d’objets de pointe de bout en bout qui offre des performances en temps réel tout en conservant une grande précision. Il repose sur l’idée de DETR (le framework sans NMS), tout en introduisant un backbone à base de convolutions et un encodeur hybride efficace pour atteindre une vitesse en temps réel. RT-DETR traite efficacement les caractéristiques multi-échelles en dissociant les interactions intra-échelle de la fusion inter-échelles. Le modèle est très adaptable et permet d’ajuster la vitesse d’inférence en modifiant les couches du décodeur, sans réentraînement. RT-DETR excelle sur les backends accélérés comme CUDA avec TensorRT et surpasse de nombreux autres détecteurs d’objets en temps réel.
Regarder : Comment utiliser RT-DETR de Baidu pour la détection d’objets | Inférence et évaluation comparative avec Ultralytics 🚀
Présentation de Baidu RT-DETR. Le schéma d’architecture du modèle RT-DETR montre les trois dernières étapes du backbone {S3, S4, S5} comme entrée de l’encodeur. L’encodeur hybride efficace transforme les caractéristiques multi-échelles en une séquence de caractéristiques d’image grâce à l’interaction des caractéristiques intra-échelle (AIFI) et au module de fusion des caractéristiques inter-échelles (CCFM). La sélection de requêtes basée sur l’IoU sert à sélectionner un nombre fixe de caractéristiques d’image qui serviront de requêtes d’objet initiales pour le décodeur. Enfin, le décodeur et ses têtes de prédiction auxiliaires optimisent de manière itérative les requêtes d’objet pour générer des boîtes et des scores de confiance (source).
Fonctionnalités clés#
- Encodeur hybride efficace : RT-DETR de Baidu utilise un encodeur hybride efficace qui traite les caractéristiques multi-échelles en dissociant les interactions intra-échelle de la fusion inter-échelles. Cette conception unique, basée sur les Vision Transformers, réduit les coûts de calcul et permet la détection d’objets en temps réel.
- Sélection de requêtes basée sur l’IoU : RT-DETR de Baidu améliore l’initialisation des requêtes d’objet en utilisant une sélection de requêtes basée sur l’IoU. Le modèle peut ainsi se concentrer sur les objets les plus pertinents de la scène et améliorer la précision de détection.
- Vitesse d’inférence adaptable : RT-DETR de Baidu permet d’ajuster la vitesse d’inférence en utilisant différentes couches du décodeur, sans réentraînement. Cette adaptabilité facilite son application pratique dans divers scénarios de détection d’objets en temps réel.
- Framework sans NMS : basé sur DETR, RT-DETR élimine le post-traitement par suppression non maximale, ce qui simplifie le pipeline de détection et peut améliorer son efficacité.
- Détection sans ancres : en tant que détecteur sans ancres, RT-DETR simplifie le processus de détection et peut améliorer la généralisation à différents jeux de données.
Modèles préentraînés#
L’API Python d’Ultralytics fournit des modèles RT-DETR préentraînés avec PaddlePaddle, disponibles à différentes échelles :
- RT-DETR-L : 53,0 % AP sur COCO val2017, 114 FPS sur GPU T4
- RT-DETR-X : 54,8 % AP sur COCO val2017, 74 FPS sur GPU T4
En juillet 2024, Baidu a également publié RTDETRv2, qui améliore encore l’architecture d’origine et ses indicateurs de performance.
Exemples d'utilisation#
Cet exemple présente des exemples simples d’entraînement et d’inférence avec RT-DETR. Pour la documentation complète sur ces modes et les autres modes, consulte les pages de documentation Prédire, Entraîner, Valider et Exporter. Tu peux aussi entraîner les modèles sur des GPU cloud via Ultralytics Platform.
from ultralytics import RTDETR
# Charger un modèle RT-DETR-l préentraîné sur COCO
model = RTDETR("rtdetr-l.pt")
# Afficher les informations du modèle (facultatif)
model.info()
# Entraîner le modèle sur le jeu de données d'exemple COCO8 pendant 100 époques
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Lancer l’inférence avec le modèle RT-DETR-l sur l’image 'bus.jpg'
results = model("path/to/bus.jpg")Définis deterministic=False lors de l’entraînement de RT-DETR sur CUDA avec PyTorch 2.0 ou une version ultérieure. Son attention déformable utilise F.grid_sample, qui ne dispose pas d’une rétropropagation CUDA déterministe ; deterministic=True ne peut donc pas rendre l’exécution reproductible et peut réduire le débit d’entraînement. seed contrôle toujours l’initialisation des poids, l’ordre des données et l’échantillonnage des augmentations.
Les poids préentraînés de RT-DETR prennent en charge deux paramètres d’inférence permettant de réduire la latence sans réentraînement :
eval_idx: arrête le décodage plus tôt. Pour le décodeur par défaut à 6 couches, utilise un index commençant à zéro (0–5).eval_idx=5utilise toutes les couches ;eval_idx=3en utilise 4. Sur un GPU T4 avec TensorRT v10.11, RT-DETR-L passe de 8,0 ms / 52,7 mAP à 7,4 ms / 52,5 mAP avec 4 couches.num_queries: réduit le nombre de requêtes d’objet (300 par défaut). En le ramenant à 100, tu peux atteindre 7,4 ms / 51,7 mAP sur COCO avec la même configuration. Sur les jeux de données qui contiennent moins d’objets par image, la baisse de mAP est généralement plus faible, mais veille à garder une valeur supérieure au nombre maximal d’objets attendu par image.
Ces deux paramètres peuvent réduire le mAP : valide le compromis sur ton jeu de données avant le déploiement.
from ultralytics import RTDETR
rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]
# Choisis l’un ou les deux paramètres après avoir validé le compromis entre vitesse et précision.
head.decoder.eval_idx = 3 # Utiliser 4 des 6 couches du décodeur.
head.num_queries = 100 # Utiliser moins de requêtes d’objet.
results = rtdetr("path/to/image.jpg")
# L’exportation utilise les mêmes paramètres de décodeur et de requêtes, y compris pour les exportations TensorRT.
rtdetr.export(format="engine", device=0, quantize=16)Tâches et modes pris en charge#
Ce tableau présente les types de modèles, les poids préentraînés correspondants, les tâches prises en charge par chaque modèle et les différents modes compatibles (Entraîner, Valider, Prédire, Exporter), signalés par des émojis ✅.
| Type de modèle | Poids préentraînés | Tâches prises en charge | Entraînement | Validation | Inférence | Export |
|---|---|---|---|---|---|---|
| RT-DETR Large | rtdetr-l.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
| RT-DETR Extra-Large | rtdetr-x.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
rtdetr-resnet50.yaml et rtdetr-resnet101.yaml sont fournis uniquement sous forme d’architectures YAML. Ultralytics ne publie des poids préentraînés que pour rtdetr-l et rtdetr-x. Instancie les variantes ResNet à partir du YAML (par exemple, RTDETR("rtdetr-resnet50.yaml")), puis entraîne-les ou affine-les selon tes besoins.
Cas d’utilisation idéaux#
RT-DETR convient particulièrement aux applications qui nécessitent à la fois une grande précision et des performances en temps réel :
- Conduite autonome : pour une perception fiable de l’environnement dans les systèmes de conduite autonome, où la vitesse et la précision sont toutes deux essentielles. En savoir plus sur l’IA dans les voitures autonomes.
- Robotique avancée : permet aux robots d’effectuer des tâches complexes nécessitant une reconnaissance précise des objets et des interactions dans des environnements dynamiques. Découvrir le rôle de l’IA en robotique.
- Imagerie médicale : pour les applications de santé où la précision de la détection d’objets peut être cruciale pour le diagnostic. Découvrir l’IA dans le secteur de la santé.
- Systèmes de surveillance : pour les applications de sécurité nécessitant une surveillance en temps réel avec une grande précision de détection. En savoir plus sur les systèmes d’alarme de sécurité.
- Analyse d’images satellite : pour analyser en détail des images haute résolution, lorsque la compréhension du contexte global est importante. Lire l’article sur la vision par ordinateur appliquée aux images satellite.
Citations et remerciements#
Si tu utilises RT-DETR de Baidu dans le cadre de tes recherches ou de ton développement, cite l’article original :
@misc{lv2023detrs,
title={DETRs Beat YOLOs on Real-time Object Detection},
author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
year={2023},
eprint={2304.08069},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Pour RTDETRv2, tu peux citer l’article de 2024 :
@misc{lv2024rtdetrv2,
title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
year={2024},
eprint={2407.17140},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Nous tenons à remercier Baidu et l’équipe PaddlePaddle d’avoir créé et maintenu cette ressource précieuse pour la communauté de la vision par ordinateur. Nous apprécions vivement leur contribution au domaine avec le développement de RT-DETR, un détecteur d’objets en temps réel basé sur les Vision Transformers.
FAQ#
RT-DETR (transformeur de détection en temps réel) de Baidu est un détecteur d’objets avancé en temps réel, basé sur l’architecture Vision Transformer. Son encodeur hybride efficace traite les caractéristiques multi-échelles en dissociant les interactions intra-échelle de la fusion inter-échelles. Grâce à la sélection de requêtes basée sur l’IoU, le modèle se concentre sur les objets les plus pertinents et améliore la précision de détection. La vitesse d’inférence adaptable de RT-DETR, obtenue en ajustant les couches du décodeur sans réentraînement, le rend adapté à divers scénarios de détection d’objets en temps réel. Pour en savoir plus sur les fonctionnalités de RT-DETR, consulte l’article RT-DETR sur arXiv.
Tu peux utiliser l’API Python d’Ultralytics pour exploiter les modèles RT-DETR préentraînés avec PaddlePaddle. Par exemple, pour charger un modèle RT-DETR-l préentraîné sur COCO val2017 et obtenir un nombre élevé de FPS sur GPU T4, tu peux utiliser l’exemple suivant :
Exemplefrom ultralytics import RTDETR # Charger un modèle RT-DETR-l préentraîné sur COCO model = RTDETR("rtdetr-l.pt") # Afficher les informations du modèle (facultatif) model.info() # Entraîner le modèle sur le jeu de données d'exemple COCO8 pendant 100 époques results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # Lancer l’inférence avec le modèle RT-DETR-l sur l’image 'bus.jpg' results = model("path/to/bus.jpg")RT-DETR de Baidu se distingue par son encodeur hybride efficace et sa sélection de requêtes basée sur l’IoU, qui réduisent considérablement les coûts de calcul tout en conservant une grande précision. Sa capacité unique à ajuster la vitesse d’inférence en utilisant différentes couches du décodeur, sans réentraînement, offre une grande flexibilité. Il est donc particulièrement avantageux pour les applications qui nécessitent des performances en temps réel sur des backends accélérés comme CUDA avec TensorRT, et surpasse de nombreux autres détecteurs d’objets en temps réel. L’architecture Transformer offre également une meilleure compréhension du contexte global que les détecteurs traditionnels basés sur CNN.
Le RT-DETR de Baidu permet d’ajuster de manière flexible la vitesse d’inférence en utilisant différentes couches du décodeur, sans nécessiter de réentraînement. Cette adaptabilité est cruciale pour faire évoluer les performances dans diverses tâches de détection d’objets en temps réel. Que tu aies besoin d’un traitement plus rapide pour des exigences de précision moindres ou de détections plus lentes et plus précises, RT-DETR peut être adapté à tes besoins spécifiques. Cette fonctionnalité est particulièrement utile lors du déploiement de modèles sur des appareils aux capacités de calcul variables.
Non. Pour RT-DETR,
max_detlimite le nombre de prédictions renvoyées après l’inférence, mais n’augmente pas le nombre de requêtes d’objet produites par le décodeur. Les points de contrôle RT-DETR préentraînés d’Ultralytics utilisent 300 requêtes d’objet et ne peuvent donc pas renvoyer plus de 300 détections par image, même si tu définismax_detsur une valeur supérieure.Utilise
max_detpour réduire le nombre de détections renvoyées, par exemplemax_det=100, si tu n’as besoin que de quelques prédictions avec une grande confiance. Si ton jeu de données peut contenir plus de 300 objets par image, entraîne un modèle RT-DETR personnalisé avec un nombre de requêtes du décodeur plus élevé (nq) dans le YAML du modèle ; modifier cette valeur sur un point de contrôle préentraîné après l’entraînement n’est pas équivalent et nécessite un nouvel entraînement pour que le modèle apprenne les requêtes supplémentaires.Oui, les modèles RT-DETR sont compatibles avec différents modes d’Ultralytics, notamment l’entraînement, la validation, la prédiction et l’exportation. Consulte la documentation correspondante pour obtenir des instructions détaillées sur l’utilisation de ces modes : Entraîner, Valider, Prédire et Exporter. Tu disposes ainsi d’un workflow complet pour développer et déployer tes solutions de détection d’objets. Le framework Ultralytics fournit une API cohérente pour différentes architectures de modèles, ce qui facilite l’utilisation des modèles RT-DETR.