{"notes":[{"id":"object-detection/dn-detr","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DN-DETR","subtitle":"Aujourd'hui le chien, demain le chat","author":"Z. Yuan","paperDate":"2022-03-02","publishedOn":"2024-11-27","world":"external/dn-detr","paperTitle":"DN-DETR: Accelerate DETR Training by Introducing Query DeNoising","paperUrl":"https://arxiv.org/abs/2203.01305","bibliography":{"title":"DN-DETR: Accelerate DETR Training by Introducing Query DeNoising","authors":["Feng Li","Hao Zhang","Shilong Liu","Jian Guo","Lionel M. Ni","Lei Zhang"],"url":"https://arxiv.org/abs/2203.01305","pdfUrl":"https://arxiv.org/pdf/2203.01305v3","codeUrl":"https://github.com/IDEA-Research/DN-DETR","preprint":{"id":"2203.01305","submittedOn":"2022-03-02","url":"https://arxiv.org/abs/2203.01305"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://doi.org/10.1109/CVPR52688.2022.01325"},"citation":"@misc{objectdetectiondndetr2022,\n  title = {{DN-DETR: Accelerate DETR Training by Introducing Query DeNoising}},\n  author = {Feng Li and Hao Zhang and Shilong Liu and Jian Guo and Lionel M. Ni and Lei Zhang},\n  year = {2022},\n  eprint = {2203.01305},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2203.01305}\n}\n","citationPath":"/content/papers/citations/object-detection/dn-detr.a68d09a3ed54.bib"},"thumbnail":{"src":"/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png","width":1095,"height":443},"locale":"fr","path":"/content/papers/fr/object-detection/dn-detr.2da8475d313c.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"un-nouvel-appariement-à-chaque-tour","text":"Un nouvel appariement à chaque tour","depth":3},{"id":"compter-les-changements-de-titulaire","text":"Compter les changements de titulaire","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"deux-lots-de-requêtes-dans-le-décodeur","text":"Deux lots de requêtes dans le décodeur","depth":3},{"id":"comment-une-boîte-annotée-devient-un-exercice","text":"Comment une boîte annotée devient un exercice","depth":3},{"id":"plusieurs-copies-par-objet","text":"Plusieurs copies par objet","depth":3},{"id":"interdiction-de-regarder-les-réponses","text":"Interdiction de regarder les réponses","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"configuration-expérimentale","text":"Configuration expérimentale","depth":3},{"id":"le-gain-à-réglages-égaux","text":"Le gain à réglages égaux","depth":3},{"id":"comment-se-compte-laccélération","text":"Comment se compte l'accélération","depth":3},{"id":"masque-étiquettes-et-nombre-de-groupes","text":"Masque, étiquettes et nombre de groupes","depth":3},{"id":"au-delà-de-dab-detr","text":"Au-delà de DAB-DETR","depth":3},{"id":"à-qui-profitent-vraiment-les-exercices","text":"À qui profitent vraiment les exercices ?","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/detr","relation":"referenced","topic":""},{"id":"object-detection/deformable-detr","relation":"referenced","topic":""},{"id":"object-detection/h-detr","relation":"referenced","topic":""}]},{"id":"object-detection/detr","category":"object-detection","legacyPath":"object-detection/2005-detr","legacySlug":"2005-detr","legacyPaths":[],"title":"DETR","subtitle":"Un pionnier entre deux domaines","author":"Z. Yuan","paperDate":"2020-05-26","publishedOn":"2024-06-04","paperTitle":"End-to-End Object Detection with Transformers","paperUrl":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php","bibliography":{"title":"End-to-End Object Detection with Transformers","authors":["Nicolas Carion","Francisco Massa","Gabriel Synnaeve","Nicolas Usunier","Alexander Kirillov","Sergey Zagoruyko"],"url":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php","pdfUrl":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123460205.pdf","codeUrl":"https://github.com/facebookresearch/detr","preprint":{"id":"2005.12872","submittedOn":"2020-05-26","url":"https://arxiv.org/abs/2005.12872"},"publication":{"venue":"ECCV","year":2020,"kind":"conference","url":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php"},"citation":"@misc{objectdetectiondetr2020,\n  title = {{End-to-End Object Detection with Transformers}},\n  author = {Nicolas Carion and Francisco Massa and Gabriel Synnaeve and Nicolas Usunier and Alexander Kirillov and Sergey Zagoruyko},\n  year = {2020},\n  eprint = {2005.12872},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2005.12872}\n}\n","citationPath":"/content/papers/citations/object-detection/detr.5258ffe0b9a0.bib"},"thumbnail":{"src":"/content/papers/assets/dd7e8441e6460ff562cf558374789924518fafaed7ecde0e3e35ee778c316330.jpg","width":1024,"height":266},"locale":"fr","path":"/content/papers/fr/object-detection/detr.5137ffe05d95.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"architecture-du-modèle","text":"Architecture du modèle","depth":3},{"id":"conception-de-la-perte","text":"Conception de la perte","depth":3},{"id":"jeu-de-données","text":"Jeu de données","depth":3},{"id":"détails-techniques","text":"Détails techniques","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"alors-ça-marche-cette-fois-","text":"Alors, ça marche cette fois ?","depth":3},{"id":"analyse-des-composants-du-modèle","text":"Analyse des composants du modèle","depth":3},{"id":"analyse-du-comportement-du-modèle","text":"Analyse du comportement du modèle","depth":3},{"id":"généralisation-à-un-nombre-dobjets-inédit","text":"Généralisation à un nombre d'objets inédit","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"next","topic":"Prédiction d’ensembles et détection par attention"},{"id":"object-detection/smca-detr","relation":"comparison","topic":"Accélérer la convergence des détecteurs Transformer"}]},{"id":"object-detection/deformable-detr","category":"object-detection","legacyPath":"object-detection/2010-deformable-detr","legacySlug":"2010-deformable-detr","legacyPaths":[],"title":"Deformable DETR","subtitle":"Une attention déformable","author":"Z. Yuan","paperDate":"2020-10-08","publishedOn":"2024-09-20","paperTitle":"Deformable DETR: Deformable Transformers for End-to-End Object Detection","paperUrl":"https://arxiv.org/abs/2010.04159","bibliography":{"title":"Deformable DETR: Deformable Transformers for End-to-End Object Detection","authors":["Xizhou Zhu","Weijie Su","Lewei Lu","Bin Li","Xiaogang Wang","Jifeng Dai"],"url":"https://arxiv.org/abs/2010.04159","pdfUrl":"https://arxiv.org/pdf/2010.04159","codeUrl":null,"preprint":{"id":"2010.04159","submittedOn":"2020-10-08","url":"https://arxiv.org/abs/2010.04159"},"publication":{"venue":"ICLR","year":2021,"kind":"conference","url":"https://arxiv.org/abs/2010.04159"},"citation":"@misc{objectdetectiondeformabledetr2020,\n  title = {{Deformable DETR: Deformable Transformers for End-to-End Object Detection}},\n  author = {Xizhou Zhu and Weijie Su and Lewei Lu and Bin Li and Xiaogang Wang and Jifeng Dai},\n  year = {2020},\n  eprint = {2010.04159},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2010.04159}\n}\n","citationPath":"/content/papers/citations/object-detection/deformable-detr.df721a30472e.bib"},"thumbnail":{"src":"/content/papers/assets/36edfc5595a85c73fcdc9a4bbb9e1ca512e1f100676eb7c37203d71c84905c05.jpg","width":1224,"height":752},"locale":"fr","path":"/content/papers/fr/object-detection/deformable-detr.b9cc2a2d8b0f.md","headings":[{"id":"définition-du-problème","text":"Définition du problème","depth":2},{"id":"résolution-du-problème","text":"Résolution du problème","depth":2},{"id":"attention-déformable","text":"Attention déformable","depth":3},{"id":"calcul-multi-échelle","text":"Calcul multi-échelle","depth":3},{"id":"architecture-du-modèle","text":"Architecture du modèle","depth":3},{"id":"lecture-du-code","text":"Lecture du code","depth":3},{"id":"stratégie-dentraînement","text":"Stratégie d'entraînement","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"comparaison-avec-detr","text":"Comparaison avec DETR","depth":3},{"id":"étude-dablation","text":"Étude d'ablation","depth":3},{"id":"comparaison-avec-les-meilleures-méthodes","text":"Comparaison avec les meilleures méthodes","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/detr","relation":"background","topic":"Prédiction d’ensembles et détection par attention"},{"id":"object-detection/h-detr","relation":"next","topic":"Prédiction d’ensembles et détection par attention"},{"id":"object-detection/smca-detr","relation":"comparison","topic":"Accélérer la convergence des détecteurs Transformer"}]},{"id":"object-detection/h-detr","category":"object-detection","legacyPath":"object-detection/2207-h-detr","legacySlug":"2207-h-detr","legacyPaths":[],"title":"H-DETR","subtitle":"La révolte des requêtes silencieuses","author":"Z. Yuan","paperDate":"2022-07-26","publishedOn":"2025-07-06","paperTitle":"DETRs with Hybrid Matching","paperUrl":"https://arxiv.org/abs/2207.13080","bibliography":{"title":"DETRs with Hybrid Matching","authors":["Ding Jia","Yuhui Yuan","Haodi He","Xiaopei Wu","Haojun Yu","Weihong Lin","Lei Sun","Chao Zhang","Han Hu"],"url":"https://arxiv.org/abs/2207.13080","pdfUrl":"https://openaccess.thecvf.com/content/CVPR2023/papers/Jia_DETRs_With_Hybrid_Matching_CVPR_2023_paper.pdf","codeUrl":"https://github.com/HDETR/H-Deformable-DETR","preprint":{"id":"2207.13080","submittedOn":"2022-07-26","url":"https://arxiv.org/abs/2207.13080"},"publication":{"venue":"CVPR","year":2023,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2023/html/Jia_DETRs_With_Hybrid_Matching_CVPR_2023_paper.html"},"citation":"@misc{objectdetectionhdetr2022,\n  title = {{DETRs with Hybrid Matching}},\n  author = {Ding Jia and Yuhui Yuan and Haodi He and Xiaopei Wu and Haojun Yu and Weihong Lin and Lei Sun and Chao Zhang and Han Hu},\n  year = {2022},\n  eprint = {2207.13080},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2207.13080}\n}\n","citationPath":"/content/papers/citations/object-detection/h-detr.822184101757.bib"},"thumbnail":{"src":"/content/papers/assets/63f1bc60b92f58d360457c0e3bbef0a3d4b3bd2a07377983b2dc5f5591ce28c2.jpg","width":1784,"height":350},"locale":"fr","path":"/content/papers/fr/object-detection/h-detr.b1c95b0378ee.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"branche-principale--supervision-un-à-un","text":"Branche principale : supervision un à un","depth":3},{"id":"branche-auxiliaire--supervision-un-à-plusieurs","text":"Branche auxiliaire : supervision un à plusieurs","depth":3},{"id":"perte-totale-et-détails-de-mise-en-œuvre","text":"Perte totale et détails de mise en œuvre","depth":3},{"id":"autres-formes-de-supervision-hybride","text":"Autres formes de supervision hybride","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"benchmark-coco","text":"Benchmark COCO","depth":3},{"id":"benchmark-lvis","text":"Benchmark LVIS","depth":3},{"id":"comparaison-avec-les-systèmes-de-référence","text":"Comparaison avec les systèmes de référence","depth":3},{"id":"ablations","text":"Ablations","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"background","topic":"Prédiction d’ensembles et détection par attention"}]}],"text":"DETR reformule la détection d'objets comme un problème d'appariement et se débarrasse des ancres et de la NMS, mais son entraînement est d'une lenteur étonnante. Pour obtenir de bons résultats, il doit généralement s'entraîner 500 époques sur COCO, quand le Faster R-CNN d'origine n'en fait que 12.\n\nDébut 2022, les articles qui cherchent à faire apprendre DETR plus vite sont déjà nombreux, et la plupart s'attaquent à l'architecture. Deformable DETR limite l'attention à quelques points d'échantillonnage autour d'un point de référence, Conditional DETR sépare la requête en une partie contenu et une partie position, et DAB-DETR écrit directement chaque requête comme une boîte, que le décodeur corrige couche après couche.\n\nCet article vient d'une équipe de l'institut de recherche IDEA de Shenzhen, de l'Université des sciences et technologies de Hong Kong et de l'université Tsinghua, qui s'en prend plutôt à l'appariement hongrois dont DETR se sert pour distribuer les réponses. Au début de l'entraînement, une même requête, dans une même image, peut être appariée au chien à une époque et au chat à la suivante ; la cible que le modèle doit apprendre saute sans cesse d'un objet à l'autre.\n\nEn plus des requêtes d'origine, ils fournissent au décodeur un lot de boîtes annotées bruitées et lui demandent de retrouver les boîtes et les classes d'origine. Les réponses de ces exercices sont connues d'avance, sans besoin d'appariement ; à l'inférence, ce lot de requêtes disparaît entièrement.\n\nLa version conférence a fait l'objet d'une présentation orale à CVPR 2022. La version étendue ajoute la deformable attention au décodeur, applique la même astuce au DETR d'origine, à Anchor DETR, à Faster R-CNN et à des modèles de segmentation, et a été publiée en 2024 dans IEEE TPAMI.\n\n## Définir le problème\n\n### Un nouvel appariement à chaque tour\n\nRappelons d'abord comment DETR s'entraîne. Le modèle dispose d'un nombre fixe de requêtes, et chacune produit une classe et une boîte. À chaque calcul de la perte, l'algorithme hongrois apparie prédictions et annotations en un à un, en retenant l'association de coût total minimal ; une requête appariée à un objet apprend la boîte et la classe de cet objet, une requête sans objet apprend « pas d'objet ».\n\n\n> [!TIP]\n> \n> Pour l'architecture d'ensemble de DETR, l'appariement hongrois et Deformable DETR, qui limite l'attention à des points d'échantillonnage, voir nos notes :\n> \n> - **[[20.05] DETR : un pionnier entre deux domaines](/blog/papers/object-detection/detr)**\n> - **[[20.10] Deformable DETR : une attention déformable](/blog/papers/object-detection/deformable-detr)**\n\n\nCet appariement est recalculé à chaque itération à partir des prédictions du moment. En début d'entraînement, les boîtes prédites sont encore désordonnées, plusieurs requêtes ont un coût presque identique pour un même objet, et il suffit que la matrice de coût bouge un peu pour que l'appariement change du tout au tout. S'appuyant sur des travaux consacrés au problème des mariages stables, les auteurs soulignent que l'algorithme hongrois ne cherche que le coût total minimal, et que l'appariement qu'il produit n'est pas stable.\n\nPour une requête donnée, la cible d'apprentissage change donc sans arrêt. À un tour, on lui demande de corriger sa boîte vers le chien ; au suivant, vers le chat.\n\nDN-DETR est construit sur DAB-DETR. DAB-DETR écrit chaque requête comme une boîte d'ancrage 4D $(x, y, w, h)$, et chaque couche du décodeur produit des corrections $(\\Delta x, \\Delta y, \\Delta w, \\Delta h)$ qui poussent la boîte vers l'objet. Les auteurs séparent donc l'entraînement en deux tâches, apprendre de bonnes ancres d'une part, apprendre le déplacement relatif qui mène de l'ancre à l'objet d'autre part. Si l'objet associé à une ancre change sans cesse, le déplacement s'apprend mal.\n\nÀ l'époque, peu de travaux soupçonnaient l'appariement. Dans l'article où ils proposent TSP, Sun et al. prennent un DETR entraîné comme enseignant pour fournir directement une attribution d'étiquettes fixe à un modèle élève ; la convergence n'est accélérée qu'en début d'entraînement, le score final reste comparable, et ils en concluent que la perte hongroise n'est pas la cause principale de la lenteur de convergence. DN-DETR vise précisément ce début d'entraînement.\n\n### Compter les changements de titulaire\n\nPour mesurer ce phénomène, les auteurs conçoivent un indicateur, l'IS (instability). Pour une image, on note d'abord le résultat de l'appariement à l'époque $i$ :\n\n$$\nV^i_n=\\begin{cases} m, & \\text{la prédiction } n \\text{ est appariée à l'objet annoté } m \\\\ -1, & \\text{aucun objet apparié} \\end{cases}\n$$\n\nLe nombre de cases de ce vecteur qui diffèrent entre deux époques consécutives donne l'IS de cette image à l'époque $i$ :\n\n$$\nIS^i=\\sum_{n=0}^{N-1}\\mathbf{1}\\left(V^i_n\\neq V^{i-1}_n\\right)\n$$\n\noù $N$ est le nombre de prédictions et $\\mathbf{1}(\\cdot)$ vaut 1 quand la condition est vraie. On fait ensuite la moyenne sur toutes les images du jeu de données.\n\nEssayons avec cinq requêtes et deux objets :\n\n```python\nimport numpy as np\n\ndef match_vector(pairs, num_queries):\n    # la case n indique l'objet apparié à la requête n, -1 si aucun\n    v = np.full(num_queries, -1)\n    for q, obj in pairs.items():\n        v[q] = obj\n    return v\n\nDOG, CAT = 0, 1\nprev = match_vector({0: DOG, 3: CAT}, 5)    # époque précédente\nmoved = match_vector({1: DOG, 3: CAT}, 5)   # le chien passe à la requête 1\nswap = match_vector({0: CAT, 3: DOG}, 5)    # le chien et le chat sont échangés\nworst = match_vector({1: DOG, 4: CAT}, 5)   # les deux objets changent de requête\n\nprint(\"tour précédent :\", prev)\nfor name, cur in [(\"chien déplacé\", moved), (\"chien/chat échangés\", swap), (\"tout déplacé\", worst)]:\n    print(f\"{name} : {cur}  IS = {(cur != prev).sum()}\")\n```\n\n```text\ntour précédent : [ 0 -1 -1  1 -1]\nchien déplacé : [-1  0 -1  1 -1]  IS = 2\nchien/chat échangés : [ 1 -1 -1  0 -1]  IS = 2\ntout déplacé : [-1  0 -1 -1  1]  IS = 4\n```\n\nQuand le chien passe à une autre requête, l'ancienne requête passe de 0 à -1 et la nouvelle de -1 à 0, et l'IS augmente de 2. Quand le chien et le chat sont échangés, deux cases changent aussi, soit 1 par objet. Chaque objet qui change de requête ajoute donc au plus 2 à l'IS ; quand tout change, l'IS vaut le double du nombre d'objets.\n\nLes auteurs mesurent sur COCO val2017, avec en moyenne 7,36 objets par image ; la valeur maximale de l'IS est donc 7,36 × 2 = 14,72.\n\nLa Figure 2 de l'article entraîne DETR, DAB-DETR et DN-DETR pendant 12 époques avec les mêmes réglages et mesure l'IS à chaque époque. L'axe horizontal donne l'époque, l'axe vertical l'IS, et la ligne rouge continue correspond à DN-DETR :\n\n[![Figure 2 de l'article original. En abscisse, les époques 0 à 11 ; en ordonnée, l'IS. La ligne rouge en trait plein de DN-DETR, la ligne bleue en tirets de DAB-DETR et la ligne verte en tirets de DETR descendent toutes depuis environ 13 ; la ligne rouge est la plus basse pour la plupart des époques et finit vers 5,7.](/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png)](/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png)\n\n*Figure 2 de l'article original (Li et al.), extraite de la [**page 3 du PDF**](https://arxiv.org/pdf/2203.01305v3#page=3). Variation de l'appariement entre deux époques consécutives, mesurée sur COCO val2017 ; la légende d'origine n'est pas reprise.*\n\nAu point le plus à gauche, les trois courbes sont autour de 13, non loin du maximum. En raisonnant à rebours, un IS d'environ 13 indique qu'en moyenne, au moins un peu plus de 6 objets par image ont changé de requête titulaire, c'est-à-dire presque tous.\n\nDN-DETR descend le plus vite ; dès la 2e époque, il est vers 9, quand DAB-DETR est encore autour de 11. À la dernière époque, DN-DETR est vers 5,7, DAB-DETR vers 6,9 et le DETR d'origine vers 7,8. En cours de route, une exception apparaît à la 7e époque, où DAB-DETR passe brièvement sous DN-DETR avant de remonter au-dessus de 10 pendant les deux époques suivantes.\n\nL'instabilité de l'appariement fait changer sans cesse la cible en début d'entraînement, mais l'appariement un à un ne peut pas être supprimé, puisque c'est lui qui permet à DETR de se passer de NMS à l'inférence. Peut-on alors garder l'appariement tout en donnant au décodeur un autre devoir, dont la cible ne bouge pas ?\n\n## Résoudre le problème\n\n### Deux lots de requêtes dans le décodeur\n\nLe décodeur de DN-DETR reçoit deux lots de requêtes à la fois :\n\n- **Partie appariement** : comme dans DAB-DETR, un ensemble d'ancres apprenables, dont la sortie est évaluée par la perte d'appariement hongrois.\n- **Partie débruitage** : les boîtes et les classes des objets annotés, une fois bruitées, servent de requêtes ; chacune doit retrouver l'objet dont elle provient, sans passer par l'appariement.\n\nLa Figure 6 de l'article rassemble toute la procédure d'entraînement. À gauche, en jaune et en brun, les deux groupes de débruitage calculent chacun leur perte de reconstruction ; à droite, en vert, la partie appariement calcule la perte hongroise ; tout à droite, la matrice carrée est le masque d'attention, sur lequel nous reviendrons plus loin :\n\n[![Extrait de la Figure 6 de l'article original. Dans le décodeur, à gauche, deux groupes de débruitage reçoivent des boîtes et des étiquettes bruitées, et leur sortie alimente la perte de reconstruction ; à droite, la partie appariement reçoit les ancres apprises avec l'étiquette unknown, et sa sortie alimente la perte hongroise. Les trois chemins colorés sont tous barrés d'une croix rouge. Tout à droite, la matrice carrée du masque d'attention, où les cases grises indiquent un blocage.](/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png)](/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png)\n\n*Extrait de la Figure 6 de l'article original (Li et al.), tiré de la [**page 5 du PDF**](https://arxiv.org/pdf/2203.01305v3#page=5). L'encodeur, à gauche, et la légende d'origine ne sont pas repris.*\n\nLes trois chemins colorés de la figure sont des fuites possibles, et la croix rouge indique que le masque les bloque. Les chemins jaune et orange relient les deux groupes de débruitage, le vert va de la partie débruitage vers la partie appariement.\n\nL'article l'écrit $\\mathbf{o}=D(\\mathbf{q},\\mathbf{Q},F\\mid A)$, où $\\mathbf{q}$ est la partie débruitage, $\\mathbf{Q}$ la partie appariement, $F$ les caractéristiques d'image produites par l'encodeur et $A$ le masque d'attention. La perte totale est la perte hongroise de la partie appariement, plus la perte de reconstruction de la partie débruitage. À l'inférence, la partie débruitage disparaît entièrement, et le modèle restant est identique à DAB-DETR.\n\nLes requêtes de débruitage doivent porter à la fois une boîte et une classe ; les auteurs ne modifient donc DAB-DETR qu'à un seul endroit. Dans DAB-DETR, la requête comprend, en plus de la boîte d'ancrage, un vecteur de contenu (decoder embedding) ; DN-DETR le remplace par un plongement de classe, suivi d'un bit indicateur, 1 pour le débruitage, 0 pour l'appariement. La partie appariement n'a pas de classe à fournir et utilise uniformément le plongement d'une classe « unknown ».\n\n\n> [!NOTE]\n> \n> Dans le code officiel, le plongement de classe compte 91 cases, d'après la numérotation des classes de COCO, plus 1 case unknown, chacune de 255 dimensions ; avec le bit indicateur, on obtient exactement les 256 dimensions du décodeur.\n\n\n### Comment une boîte annotée devient un exercice\n\nPrenons un chien. Sa boîte annotée, en coordonnées normalisées, s'écrit $(c_x, c_y, w, h) = (0.40, 0.50, 0.30, 0.40)$.\n\nLe bruit sur les boîtes est de deux sortes :\n\n1. **Décalage du centre** : on ajoute $(\\Delta x, \\Delta y)$ au centre, avec $|\\Delta x| < \\lambda_1 w/2$ et $|\\Delta y| < \\lambda_1 h/2$. Comme $\\lambda_1$ est inférieur à 1, le nouveau centre reste toujours dans la boîte d'origine.\n2. **Mise à l'échelle** : la largeur est tirée au hasard dans $[(1-\\lambda_2)w, (1+\\lambda_2)w]$, et la hauteur de même.\n\nLe bruit sur la classe consiste à changer l'étiquette au hasard, dans une proportion fixée par $\\gamma$. Par défaut, l'article prend $\\lambda_1=\\lambda_2=0.4$ et $\\gamma=0.2$. Pour notre chien, le centre peut se déplacer d'au plus 0,06 horizontalement et 0,08 verticalement, la largeur tombe entre 0,18 et 0,42, et la hauteur entre 0,24 et 0,56.\n\nEn suivant le code officiel, fabriquons cinq copies de ce chien :\n\n```python\nimport numpy as np\n\nCLASSES = [\"personne\", \"chien\", \"chat\", \"voiture\", \"oiseau\", \"chaise\", \"bouteille\", \"canapé\"]\ngt_box = np.array([0.40, 0.50, 0.30, 0.40])  # (cx, cy, w, h), normalisés par la largeur et la hauteur de l'image\ngt_label = CLASSES.index(\"chien\")\nlam, gamma, groups = 0.4, 0.2, 5             # valeurs par défaut de l'article : λ1 = λ2 = 0.4, γ = 0.2, 5 groupes\n\nrng = np.random.default_rng(2)\nw, h = gt_box[2:]\nfor g in range(groups):\n    # le centre bouge d'au plus λ·w/2 et λ·h/2 ; largeur et hauteur varient d'au plus ±λ fois\n    u = rng.uniform(-1, 1, size=4)\n    box = (gt_box + u * np.array([w / 2, h / 2, w, h]) * lam).clip(0, 1)\n    # chaque étiquette a une probabilité γ d'être remplacée par une classe tirée au hasard\n    label = gt_label\n    if rng.random() < gamma:\n        label = int(rng.integers(len(CLASSES)))\n    print(f\"groupe {g} : boîte {box.round(3)}, étiquette « {CLASSES[label]} »\")\n```\n\n```text\ngroupe 0 : boîte [0.371 0.468 0.375 0.269], étiquette « chien »\ngroupe 1 : boîte [0.427 0.45  0.193 0.328], étiquette « chien »\ngroupe 2 : boîte [0.407 0.444 0.284 0.454], étiquette « chien »\ngroupe 3 : boîte [0.416 0.575 0.344 0.365], étiquette « chat »\ngroupe 4 : boîte [0.401 0.563 0.366 0.342], étiquette « chien »\n```\n\nCet exemple ne compte que 8 classes. Quand le code officiel change une étiquette, il en tire une uniformément parmi toutes les classes, si bien qu'il retombe parfois sur la classe d'origine.\n\nTraçons les cinq boîtes :\n\n![Boîte annotée d'un chien, centrée en (0,40 ; 0,50), entourée de cinq boîtes bruitées en pointillés. Les centres des cinq boîtes tombent tous dans une zone grise au milieu de la boîte annotée, et leurs tailles s'étirent ou se contractent ; l'étiquette du groupe 3 a été remplacée par chat.](/content/papers/assets/393beaeeb0a5ee720b7980988cb20ceea837c27d7de7f9fad3b9d2b3fa7e3e00.png)\n\n*Figure : établie pour cette note. Le cadre noir est la boîte annotée du chien, les pointillés sont les cinq boîtes bruitées produites par le code ci-dessus, et les points marquent le centre de chaque boîte.*\n\nLes centres des cinq boîtes tombent tous dans la zone grise ; largeurs et hauteurs s'étirent ou se contractent, mais toutes les boîtes entourent encore le chien. Ces cinq boîtes servent ensuite directement d'ancres à cinq requêtes, et les étiquettes, via une table de correspondance, deviennent des vecteurs de contenu. Pour le décodeur, chacune est une bonne ancre près de laquelle se trouve à coup sûr un objet ; l'exercice consiste à revenir au cadre noir et à dire « chien ».\n\nL'étiquette du groupe 3 a été changée en « chat », et le modèle doit déduire de la position de la boîte et du contenu de l'image qu'il s'agit en réalité d'un chien. Selon les auteurs, changer les étiquettes force le modèle à apprendre la relation entre boîtes et classes.\n\nLa perte de reconstruction reprend la combinaison de DAB-DETR, L1 et GIoU pour les boîtes, focal loss pour les classes. Le code officiel calcule cette perte à chaque couche du décodeur, avec les mêmes poids que pour la partie appariement.\n\n### Plusieurs copies par objet\n\nUn tirage de bruit ne donne qu'une version ; les auteurs fabriquent donc plusieurs copies de chaque objet en même temps. Chaque copie contient tous les objets annotés de l'image et s'appelle un groupe de débruitage (denoising group). Avec $P$ groupes de $M$ objets, la partie débruitage compte $P \\times M$ requêtes.\n\nPar défaut, il y a 5 groupes. Avec les 7,36 objets par image en moyenne de COCO val2017, la partie débruitage compte en moyenne environ 37 requêtes, contre 300 pour la partie appariement. Dans un même batch, le nombre d'objets varie d'une image à l'autre, et l'implémentation officielle complète chaque groupe jusqu'au nombre d'objets de l'image la plus chargée du batch. C'est aussi l'explication donnée par les auteurs en réponse à cette question sur GitHub, où ils mentionnent que DINO, plus tard, passe à un nombre de groupes dynamique. [DN-DETR #8, 2022-04-19](https://github.com/IDEA-Research/DN-DETR/issues/8)\n\nLe surcoût de calcul est minime. Pour DAB-DETR avec ResNet-50, 5 groupes font passer les GFLOPs d'entraînement de 94,4 à 94,6 ; à l'inférence, il n'y a aucun calcul supplémentaire.\n\n### Interdiction de regarder les réponses\n\nSi l'on injecte directement les boîtes annotées dans le décodeur, l'auto-attention (self-attention) permet à toutes les requêtes de se voir entre elles ; il suffit à une requête de la partie appariement de jeter un œil aux requêtes de débruitage voisines pour savoir à peu près où se trouve l'objet.\n\nLes auteurs relèvent deux fuites :\n\n1. La partie appariement voit la partie débruitage, ce qui revient à lui donner directement les boîtes annotées.\n2. Les différentes versions bruitées d'un même objet se voient entre elles, ce qui revient à copier sur les autres versions du même exercice.\n\nLe masque d'attention $A=[a_{ij}]_{W\\times W}$ est chargé de bloquer ces deux chemins. $W=P\\times M+N$ ; les $P \\times M$ premières positions forment la partie débruitage, les $N$ suivantes la partie appariement, et $a_{ij}=1$ signifie que la requête $i$ ne voit pas la requête $j$ :\n\n$$\na_{ij}= \\begin{cases} 1, & j<P\\times M \\text{ et } \\lfloor i/M\\rfloor \\neq \\lfloor j/M\\rfloor \\\\ 1, & j<P\\times M \\text{ et } i\\geq P\\times M \\\\ 0, & \\text{sinon} \\end{cases}\n$$\n\nFaisons le calcul avec 2 groupes de 2 objets et 3 requêtes d'appariement :\n\n```python\nimport numpy as np\n\nP, M, N = 2, 2, 3          # 2 groupes de débruitage, 2 objets par groupe (A chien, B chat), 3 requêtes d'appariement\nW = P * M + N\nnames = [\"g0A\", \"g0B\", \"g1A\", \"g1B\", \"m0\", \"m1\", \"m2\"]\n\nA = np.zeros((W, W), dtype=int)   # A[i, j] = 1 : la requête i ne voit pas la requête j\nfor i in range(W):\n    for j in range(W):\n        if j < P * M and i // M != j // M:\n            A[i, j] = 1   # les requêtes de débruitage de groupes différents ne se voient pas\n        if j < P * M and i >= P * M:\n            A[i, j] = 1   # les requêtes d'appariement ne voient aucune requête de débruitage\n\nprint(\"     \" + \" \".join(f\"{n:>3}\" for n in names))\nfor n, row in zip(names, A):\n    print(f\"{n:>4} \" + \" \".join(f\"{v:>3}\" for v in row))\n```\n\n```text\n     g0A g0B g1A g1B  m0  m1  m2\n g0A   0   0   1   1   0   0   0\n g0B   0   0   1   1   0   0   0\n g1A   1   1   0   0   0   0   0\n g1B   1   1   0   0   0   0   0\n  m0   1   1   1   1   0   0   0\n  m1   1   1   1   1   0   0   0\n  m2   1   1   1   1   0   0   0\n```\n\nLisons ligne par ligne. g0A et g0B sont le chien et le chat du groupe 0 ; ils se voient l'un l'autre, mais pas les deux versions du groupe 1. Dans les trois lignes m0 à m2, les quatre premières cases valent toutes 1, et les requêtes d'appariement ne voient aucune requête de débruitage. C'est la même structure que la matrice tout à droite de la Figure 6, où les cases grises correspondent aux 1 et les cases colorées aux 0.\n\nLes trois colonnes de droite valent toutes 0 ; les requêtes de débruitage peuvent donc voir les requêtes d'appariement. Selon les auteurs, cela n'affecte pas le résultat, car les requêtes d'appariement sont des vecteurs appris, qui ne contiennent de toute façon aucune information d'annotation.\n\nCe masque ne s'applique qu'à l'auto-attention du décodeur. Sur GitHub, quelqu'un a demandé s'il fallait aussi masquer l'attention croisée (cross-attention) ; les auteurs ont répondu que, d'après leur expérience, l'attention croisée ne provoque pas de fuite. [DN-DETR #35, 2022-07-26](https://github.com/IDEA-Research/DN-DETR/issues/35) Dans l'attention croisée, chaque requête ne porte son attention que sur les caractéristiques de l'image, et les requêtes n'ont aucun canal entre elles.\n\nL'ablation de la Table 5 utilise ResNet-50, 1 groupe de débruitage et 50 époques d'entraînement. Avec du bruit sur les boîtes et les étiquettes et avec le masque, on obtient 43,4 AP ; avec le même bruit mais sans masque, on tombe à 24,0, soit 18,2 de moins que les 42,2 obtenus sans aucun débruitage.\n\nL'article explique que, sans masque, la partie appariement voit les annotations bruitées et prédit très facilement les objets annotés. On peut en déduire qu'à l'inférence, une fois les requêtes de débruitage retirées, les indices sur lesquels les requêtes d'appariement s'appuyaient à l'entraînement disparaissent avec elles.\n\n## Discussion\n\n### Configuration expérimentale\n\nToutes les expériences portent sur COCO 2017, avec entraînement sur train2017 et évaluation sur val2017. Le modèle principal, DN-DETR, est DAB-DETR avec entraînement par débruitage, 6 couches d'encodeur, 6 couches de décodeur, une dimension cachée de 256 et 300 requêtes d'appariement. Le bruit utilise $\\lambda_1=\\lambda_2=0.4$ et $\\gamma=0.2$, avec 5 groupes par défaut. L'optimiseur est AdamW, avec un taux d'apprentissage de $10^{-4}$, sur 8 A100 avec une batch size de 16. Le programme de 50 époques baisse le taux d'apprentissage à la 40e époque, celui de 12 époques à la 11e.\n\nLes auteurs branchent aussi le même entraînement sur Deformable DETR. DN-Deformable-DETR n'utilise la deformable attention que dans l'encodeur, DN-Deformable-DETR++ dans l'encodeur et le décodeur. Chacun a sa référence DAB-Deformable-DETR, qui écrit elle aussi les requêtes comme des boîtes 4D mais sans débruitage, pour ne pas attribuer au débruitage les bénéfices des requêtes 4D.\n\n### Le gain à réglages égaux\n\nLa comparaison la plus nette se trouve dans la Table 1. Elle utilise des caractéristiques à une seule échelle et 50 époques d'entraînement, et DAB-DETR et DN-DETR ne diffèrent que par l'entraînement de débruitage :\n\n| Backbone | DAB-DETR | DN-DETR |\n| --- | ---: | ---: |\n| ResNet-50 | 42,2 | 44,1 (+1,9) |\n| ResNet-101 | 43,5 | 45,2 (+1,7) |\n| ResNet-50-DC5 | 44,5 | 46,3 (+1,8) |\n| ResNet-101-DC5 | 45,8 | 47,3 (+1,5) |\n\n*Tableau : établi d'après la Table 1 de l'article original, AP sur COCO val2017. GFLOPs et nombre de paramètres sont identiques des deux côtés, par exemple 94 GFLOPs et 44M paramètres pour ResNet-50.*\n\nLes quatre backbones gagnent de 1,5 à 1,9 AP. En ramenant l'entraînement à 12 époques, l'écart grandit. Dans la Table 2, DC5-R50 passe de 38,0 à 41,7 (+3,7) et DC5-R101 de 40,3 à 42,8 (+2,5). Le gain plus important sur les programmes courts concorde avec l'affirmation des auteurs selon laquelle le problème se concentre en début d'entraînement.\n\n### Comment se compte l'accélération\n\nLe titre parle d'accélération ; les auteurs en donnent deux preuves.\n\nLa première est la courbe de convergence. La légende de la Figure 7(a) de l'article indique qu'avec DC5-R50, avant la baisse du taux d'apprentissage, DN-DETR atteint 40 AP en 20 époques, quand DAB-DETR en demande 40.\n\nLa seconde consiste à diviser le programme par deux et à comparer directement :\n\n| Modèle | Référence | Avec débruitage, moitié moins d'époques |\n| --- | ---: | ---: |\n| DAB-DETR-DC5-R50 (50 contre 25 époques) | 44,5 | 44,4 |\n| DAB-Deformable-DETR-R50 (50 contre 25 époques) | 46,9 | 46,8 |\n| DAB-Deformable-DETR-R50++ (50 contre 25 époques) | 48,7 | 48,4 |\n| DETR-R50 (500 contre 250 époques) | 42,0 | 42,2 |\n\n*Tableau : établi d'après la Table 1 de la page 11 de l'article original, AP sur COCO val2017.*\n\nAvec moitié moins d'époques, l'AP ne perd que 0,1 à 0,3, et le groupe du DETR d'origine gagne même 0,2. La phrase du résumé, « des performances comparables avec 50 % des époques », renvoie à ce tableau.\n\nDiviser les époques par deux ne divise pourtant pas exactement le temps par deux. Les auteurs ont mesuré le temps d'entraînement réel de ResNet-50 sur 8 A100 ; DAB-DETR prend 51,1 minutes par époque, et 57,7 minutes avec le débruitage, soit environ 13 % de plus. Les GFLOPs ne bougent presque pas, mais le temps réel augmente de plus de 10 % ; pour estimer le coût d'entraînement, il faut regarder le temps mesuré.\n\nAu total, DAB-DETR entraîné 50 époques demande 2 555 minutes, et la version avec débruitage entraînée 25 époques 1 443 minutes, soit environ 44 % d'économie. Ce tableau de temps porte sur ResNet-50, alors que la comparaison d'AP à 25 époques ci-dessus utilise DC5-R50 ; ce ne sont pas les mêmes modèles.\n\nLes deux chiffres du résumé, 46,0 AP en 12 époques et 49,5 AP en 50 époques, proviennent de DN-Deformable-DETR++, qui utilise des caractéristiques multi-échelles et la deformable attention dans l'encodeur comme dans le décodeur ; le « +1,9 AP » correspond, lui, à la comparaison à une seule échelle sur DAB-DETR. Face à une référence de même architecture ++, l'écart à 50 époques est de 49,5 contre 48,7, soit 0,8 AP.\n\n### Masque, étiquettes et nombre de groupes\n\nLes deux lignes restantes de la Table 5 séparent les contributions des boîtes et des étiquettes. Le bruit sur les boîtes seul donne 43,0, soit 0,8 de plus que les 42,2 sans débruitage ; en ajoutant le changement d'étiquettes, on arrive à 43,4.\n\nPour le nombre de groupes, voir la Table 6 :\n\n| Backbone | Sans débruitage | 1 groupe | 5 groupes |\n| --- | ---: | ---: | ---: |\n| ResNet-50 | 42,2 | 43,4 | 44,1 |\n| ResNet-50-DC5 | 44,5 | 45,6 | 46,3 |\n| ResNet-101 | 43,5 | 45,0 | 45,2 |\n| ResNet-101-DC5 | 45,8 | 46,5 | 47,3 |\n\n*Tableau : établi d'après la Table 6 de l'article original, famille ResNet, 50 époques.*\n\nLe gain obtenu en passant de zéro à 1 groupe est le plus souvent supérieur à celui obtenu en passant de 1 à 5 groupes ; seul ResNet-101-DC5 fait l'inverse. Les auteurs en concluent que plus il y a de groupes, mieux c'est, mais avec des rendements décroissants, et retiennent 5 groupes par défaut.\n\nPour l'amplitude du bruit, voir la Figure 8. Cette expérience utilise ResNet-50, une batch size de 64 et 20 époques d'entraînement sans baisse du taux d'apprentissage ; un type de bruit est fixé à 0,4 et l'autre varie. Les deux courbes sont hautes au milieu et basses aux extrémités. Quand l'un des bruits est à 0, l'AP se situe entre 33,5 et 34 ; il culmine entre 0,2 et 0,4, avec des pics indiqués à 35,5 et 35,7 sur la figure ; à 0,8, il retombe vers 34. L'article conclut que les deux bruits aident, mais qu'un bruit trop fort dégrade les performances.\n\n### Au-delà de DAB-DETR\n\nLa version étendue branche l'entraînement par débruitage sur d'autres modèles (Table 3, tous en ResNet-50) :\n\n- **Anchor DETR** : les requêtes n'ont que des points d'ancrage 2D, et seul le décalage du centre est donc appliqué ; DC5, 12 époques, de 38,2 à 39,4 (+1,2).\n- **DETR d'origine** : les requêtes n'ont pas de boîte explicite, et une couche linéaire plonge donc les boîtes bruitées dans les requêtes ; 300 époques, de 40,6 à 42,6 (+2,0).\n- **Faster R-CNN** : faute de vecteur de contenu, seul le bruit sur les boîtes est ajouté, et ces boîtes entrent dans la tête de détection avec les propositions du RPN ; FPN, 12 époques, de 37,9 à 38,4 (+0,5).\n\nLe tableau comporte aussi quelques lignes marquées d'un astérisque, dont les chiffres proviennent des ablations de travaux ultérieurs qui adoptent l'entraînement par débruitage, comme DINO et Group DETR ; par exemple, DINO obtient 46,0 sans débruitage et 47,4 en le rétablissant.\n\nFaster R-CNN gagne le moins. Il attribue les étiquettes par seuil d'IoU, sans appariement hongrois ; cela va dans le sens du diagnostic des auteurs, mais les deux détecteurs diffèrent sur trop de points pour que cette seule ligne suffise à isoler la cause.\n\n### À qui profitent vraiment les exercices ?\n\nLes requêtes d'appariement ne voient pas les requêtes de débruitage, et les deux pertes sont calculées séparément ; à quel endroit le débruitage aide-t-il donc l'appariement ? En octobre 2024, quelqu'un a posé la question sur GitHub, et elle est restée sans réponse dans le dépôt. [DN-DETR #72, 2024-10-14](https://github.com/IDEA-Research/DN-DETR/issues/72)\n\nLes deux lots de requêtes partagent le même backbone, le même encodeur, les mêmes couches de décodeur et les mêmes têtes de prédiction, et les gradients du débruitage remontent jusqu'à ces paramètres. L'article appuie son interprétation sur deux observations. La première est la courbe d'IS vue plus haut. La seconde est la Figure 3, qui mesure la distance L1 moyenne entre l'ancre initiale d'une requête d'appariement et la boîte annotée à laquelle elle est appariée dans la dernière couche du décodeur ; sur 12 époques, DAB-DETR passe d'environ 0,146 à environ 0,096, et DN-DETR d'environ 0,110 à environ 0,082, en restant plus proche tout du long. Selon les auteurs, le débruitage apprend aux requêtes à chercher l'objet dans leur voisinage, et l'appariement saute donc moins d'un objet à l'autre.\n\nLes travaux ultérieurs proposent d'autres lectures de l'endroit où agit cette aide :\n\n- **Group DETR** (ICCV 2023) relève que, dans un groupe de débruitage, chaque objet n'a qu'une requête, et qu'aucune requête ne correspond à « pas d'objet » ; l'auto-attention à l'intérieur du groupe ne voit que d'autres objets, jamais de boîtes en double. Il en conclut que le débruitage apporte surtout davantage de supervision positive, sans aider directement à étouffer les prédictions en double. Avec DAB-DETR sur 12 époques, ajouter le débruitage à Group DETR apporte encore 1,5 AP, et les auteurs y voient deux approches complémentaires.\n- **[H-DETR](/blog/papers/object-detection/h-detr)**, dans ses expériences complémentaires, sépare directement les paramètres. Sur DINO, qui utilise le débruitage contrastif, donner à la branche de débruitage son propre décodeur et ses propres têtes de prédiction fait passer l'AP de 49,1 à 49,0 ; séparer aussi l'encodeur la fait tomber à 48,5. D'après ces chiffres, l'essentiel du bénéfice du débruitage atteint la partie appariement en passant par l'entraînement de l'encodeur.\n- **DINO**, mis en ligne sur arXiv cinq jours plus tard par la même équipe, pointe directement une lacune de DN-DETR. Le modèle apprend à prédire à partir d'ancres proches d'une boîte annotée, mais n'apprend jamais à répondre « pas d'objet » pour une ancre sans objet à proximité. DINO ajoute donc des échantillons négatifs aux exercices.\n\nCes lectures peuvent être vraies en même temps. Les données de l'article montrent que la baisse de l'IS et l'accélération de la convergence vont de pair ; quant à savoir si le débruitage stabilise d'abord les cibles du décodeur ou s'il nourrit l'encodeur de davantage de gradients positifs, l'article lui-même ne sépare pas ces deux voies.\n\n## Conclusion\n\nDN-DETR attribue une partie de la lenteur d'entraînement de DETR à l'appariement hongrois recalculé à chaque tour, et l'IS transforme « aujourd'hui le chien, demain le chat » en une courbe. Il ajoute à l'entraînement un exercice dont la réponse est connue, en donnant au décodeur des boîtes et des classes annotées bruitées à restaurer, et empêche, au moyen d'un masque d'attention, les requêtes d'appariement de regarder les réponses.\n\nDans les réglages des auteurs, le gain est de 1,5 à 1,9 AP à une seule échelle sur 50 époques, et de 2,5 à 3,7 AP sur 12 époques ; la référence est rattrapée avec moitié moins d'époques, au prix d'environ 13 % de temps en plus par époque.\n\nSi vous voulez ajouter l'entraînement par débruitage à votre propre modèle de type DETR, commencez par écrire correctement le masque ; dans les ablations de l'article, sans lui, l'AP tombe de 43,4 à 24,0. Le nombre d'objets varie d'une image à l'autre dans un batch, il faut donc compléter les groupes. Les requêtes ont intérêt à porter une boîte explicite, comme dans DAB-DETR ; sinon, il faut plonger les boîtes à part, comme pour le DETR d'origine. La partie inférence, elle, n'a pas à bouger du tout.\n\nCet exercice a ensuite été repris par de nombreux modèles de type DETR. [DINO](/blog/papers/object-detection/dino-detr) y ajoute des échantillons négatifs, et [RT-DETR](/blog/papers/object-detection/rt-detr) s'entraîne lui aussi avec 200 requêtes de débruitage.\n","imageSizes":{"/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png":{"width":646,"height":344},"/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png":{"width":1095,"height":443},"/content/papers/assets/393beaeeb0a5ee720b7980988cb20ceea837c27d7de7f9fad3b9d2b3fa7e3e00.png":{"width":960,"height":1212}}}
