{"notes":[{"id":"classic-cnns/convnext-v2","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ConvNeXt V2","subtitle":"La convolution aussi fait des exercices à trous","author":"Z. Yuan","paperDate":"2023-01-02","publishedOn":"2025-09-27","world":"external/convnext-v2","paperTitle":"ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders","paperUrl":"https://arxiv.org/abs/2301.00808","bibliography":{"title":"ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders","authors":["Sanghyun Woo","Shoubhik Debnath","Ronghang Hu","Xinlei Chen","Zhuang Liu","In So Kweon","Saining Xie"],"url":"https://arxiv.org/abs/2301.00808","pdfUrl":"https://arxiv.org/pdf/2301.00808v1","codeUrl":null,"preprint":{"id":"2301.00808","submittedOn":"2023-01-02","url":"https://arxiv.org/abs/2301.00808"},"publication":{"venue":"CVPR","year":2023,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2023/html/Woo_ConvNeXt_V2_Co-Designing_and_Scaling_ConvNets_With_Masked_Autoencoders_CVPR_2023_paper.html"},"citation":"@misc{classiccnnsconvnextv22023,\n  title = {{ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders}},\n  author = {Sanghyun Woo and Shoubhik Debnath and Ronghang Hu and Xinlei Chen and Zhuang Liu and In So Kweon and Saining Xie},\n  year = {2023},\n  eprint = {2301.00808},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2301.00808}\n}\n","citationPath":"/content/papers/citations/classic-cnns/convnext-v2.065fc6e2e545.bib"},"thumbnail":{"src":"/content/papers/assets/0af11b7bcef637ee0205fe47b31901b1b775a0336ccab0042e73e8d9643589c0.png","width":1640,"height":600},"locale":"fr","path":"/content/papers/fr/classic-cnns/convnext-v2.ea3acae969fb.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"pourquoi-mae-sadapte-mal","text":"Pourquoi MAE s'adapte mal","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"fcmae-un-mae-entièrement-convolutif","text":"FCMAE : un MAE entièrement convolutif","depth":3},{"id":"changer-seulement-le-préentraînement-ne-suffit-pas","text":"Changer seulement le préentraînement ne suffit pas","depth":3},{"id":"leffondrement-des-caractéristiques","text":"L'effondrement des caractéristiques","depth":3},{"id":"grn-mettre-les-canaux-en-compétition","text":"GRN : mettre les canaux en compétition","depth":3},{"id":"le-bloc-convnext-v2","text":"Le bloc ConvNeXt V2","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"architecture-et-préentraînement-doivent-changer-ensemble","text":"Architecture et préentraînement doivent changer ensemble","depth":3},{"id":"face-au-mae-des-transformers","text":"Face au MAE des Transformers","depth":3},{"id":"détection-et-segmentation","text":"Détection et segmentation","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/convnext","relation":"referenced","topic":""},{"id":"vision-transformers/mae","relation":"referenced","topic":""}]},{"id":"classic-cnns/convnext","category":"classic-cnns","legacyPath":"classic-cnns/2201-convnext","legacySlug":"2201-convnext","legacyPaths":[],"title":"ConvNeXt","subtitle":"Redonner sa grandeur à la convolution","author":"Z. Yuan","paperDate":"2022-01-10","publishedOn":"2024-06-30","paperTitle":"A ConvNet for the 2020s","paperUrl":"https://arxiv.org/abs/2201.03545","bibliography":{"title":"A ConvNet for the 2020s","authors":["Zhuang Liu","Hanzi Mao","Chao-Yuan Wu","Christoph Feichtenhofer","Trevor Darrell","Saining Xie"],"url":"https://arxiv.org/abs/2201.03545","pdfUrl":"https://arxiv.org/pdf/2201.03545","codeUrl":"https://github.com/facebookresearch/ConvNeXt","preprint":{"id":"2201.03545","submittedOn":"2022-01-10","url":"https://arxiv.org/abs/2201.03545"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://arxiv.org/abs/2201.03545"},"citation":"@misc{classiccnnsconvnext2022,\n  title = {{A ConvNet for the 2020s}},\n  author = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},\n  year = {2022},\n  eprint = {2201.03545},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2201.03545}\n}\n","citationPath":"/content/papers/citations/classic-cnns/convnext.801b4060b807.bib"},"thumbnail":{"src":"/content/papers/assets/37882616c5c72df33699003256d14bf7c58c8ea5d1e9e4fb5b1c33268c9a6923.jpg","width":1224,"height":432},"locale":"fr","path":"/content/papers/fr/classic-cnns/convnext.9500f216d84f.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":"repenser-larchitecture-du-réseau","text":"Repenser l'architecture du réseau","depth":3},{"id":"introduire-des-méthodes-dentraînement-modernes","text":"Introduire des méthodes d'entraînement modernes","depth":3},{"id":"conception-générale","text":"Conception générale","depth":3},{"id":"à-la-manière-de-resnext","text":"À la manière de ResNeXt","depth":3},{"id":"goulot-inversé","text":"Goulot inversé","depth":3},{"id":"convolutions-à-grand-noyau","text":"Convolutions à grand noyau","depth":3},{"id":"conception-détaillée","text":"Conception détaillée","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"configurations-des-modèles","text":"Configurations des modèles","depth":3},{"id":"résultats-sur-imagenet","text":"Résultats sur ImageNet","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"vision-transformers/convmixer","relation":"comparison","topic":"Mélanger les patches par convolution"},{"id":"vision-transformers/caformer","relation":"comparison","topic":"Mélanger les patches par convolution"},{"id":"reparameterization/replknet","relation":"comparison","topic":"Grands noyaux et architectures convolutives simplifiées"}]},{"id":"vision-transformers/mae","category":"vision-transformers","legacyPath":"vision-transformers/2111-mae","legacySlug":"2111-mae","legacyPaths":[],"title":"MAE","subtitle":"Un quart des indices","author":"Z. Yuan","paperDate":"2021-11-11","publishedOn":"2024-08-27","paperTitle":"Masked Autoencoders Are Scalable Vision Learners","paperUrl":"https://arxiv.org/abs/2111.06377","bibliography":{"title":"Masked Autoencoders Are Scalable Vision Learners","authors":["Kaiming He","Xinlei Chen","Saining Xie","Yanghao Li","Piotr Dollár","Ross Girshick"],"url":"https://arxiv.org/abs/2111.06377","pdfUrl":"https://arxiv.org/pdf/2111.06377","codeUrl":"https://github.com/facebookresearch/mae","preprint":{"id":"2111.06377","submittedOn":"2021-11-11","url":"https://arxiv.org/abs/2111.06377"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2022/html/He_Masked_Autoencoders_Are_Scalable_Vision_Learners_CVPR_2022_paper.html"},"citation":"@misc{visiontransformersmae2021,\n  title = {{Masked Autoencoders Are Scalable Vision Learners}},\n  author = {Kaiming He and Xinlei Chen and Saining Xie and Yanghao Li and Piotr Dollár and Ross Girshick},\n  year = {2021},\n  eprint = {2111.06377},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2111.06377}\n}\n","citationPath":"/content/papers/citations/vision-transformers/mae.762f979b1c32.bib"},"thumbnail":{"src":"/content/papers/assets/f6a24c00fab9f102a2680899072c0e9de2ff2ae0cd7197666455a34c566f6542.jpg","width":1224,"height":716},"locale":"fr","path":"/content/papers/fr/vision-transformers/mae.900172a95fb8.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":"méthode-dentraînement","text":"Méthode d'entraînement","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"quelle-proportion-masquer-","text":"Quelle proportion masquer ?","depth":3},{"id":"taille-du-decoder","text":"Taille du Decoder","depth":3},{"id":"cible-dapprentissage","text":"Cible d'apprentissage","depth":3},{"id":"augmentation-des-images","text":"Augmentation des images","depth":3},{"id":"façons-de-masquer","text":"Façons de masquer","depth":3},{"id":"résultats-sur-imagenet","text":"Résultats sur ImageNet","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"vision-transformers/beit","relation":"comparison","topic":"Reconstruire des pixels ou des tokens visuels"},{"id":"image-generation/mar","relation":"comparison","topic":"Reconstruire des pixels ou des tokens visuels"}]}],"text":"ConvNeXt a montré qu'un réseau purement convolutif peut faire jeu égal avec Swin Transformer en apprentissage supervisé. À peu près au même moment, MAE lance une vague dans l'apprentissage autosupervisé en vision ; on masque une grande partie de l'image et on demande au modèle de la reconstituer. Préentraîné de cette façon, ViT obtient après affinage des résultats nettement meilleurs qu'en entraînement supervisé.\n\n\n> [!TIP]\n> \n> Ces deux travaux ont chacun leur note, que vous pouvez lire d'abord :\n> \n> - **[[22.01] ConvNeXt : Redonner sa grandeur à la convolution](/blog/papers/classic-cnns/convnext)**\n> - **[[21.11] MAE : Un quart des indices](/blog/papers/vision-transformers/mae)**\n\n\nRéunir les deux semble l'étape suivante toute naturelle. Parmi les auteurs de cet article, Zhuang Liu est le premier auteur de ConvNeXt, Saining Xie est coauteur à la fois de ConvNeXt et de MAE, et Xinlei Chen est lui aussi coauteur de MAE ; le premier auteur, Sanghyun Woo, du KAIST, a réalisé ce travail pendant un stage à FAIR, et lui comme In So Kweon, également cosignataire, sont aussi auteurs de CBAM.\n\nIls constatent qu'appliquer MAE tel quel à ConvNeXt ne marche pas bien.\n\n## Définir le problème\n\n### Pourquoi MAE s'adapte mal\n\nL'encodeur et le décodeur de MAE sont asymétriques. L'image est découpée en patches, dont 75 % sont masqués ; l'encodeur ViT ne reçoit que les 25 % restants, les parties masquées n'entrant jamais dans l'encodeur, ce qui rend le préentraînement rapide et économe. Cette conception repose sur la capacité du Transformer à traiter des séquences, qui fonctionne tout aussi bien avec quelques tokens en moins.\n\nPour un réseau convolutif, c'est moins commode. La convolution glisse sur une carte de caractéristiques 2D complète et doit préserver la structure spatiale de l'image ; impossible de simplement retirer les zones masquées. Le pis-aller courant consiste à insérer en entrée des mask tokens apprenables, mais le préentraînement n'économise alors aucun calcul ; et comme il n'y a pas de mask token à l'inférence, l'entraînement et le test divergent, d'autant plus que le taux de masquage est élevé.\n\nMême une fois ces problèmes d'ingénierie résolus, les auteurs observent un second problème ; les caractéristiques que ConvNeXt apprend par préentraînement masqué sont elles-mêmes défaillantes. Nous y reviendrons plus loin.\n\n## Résoudre le problème\n\n### FCMAE : un MAE entièrement convolutif\n\n[![Schéma de flux en quatre parties, de gauche à droite. Tout à gauche, une entrée 224×224 dessinée en 7×7 cases, en rouge les zones visibles, en gris les zones masquées, avec environ 60 % de gris. Une flèche mène à l'encodeur ConvNeXt, dont le cadre indique une convolution creuse qui ne calcule que les zones visibles, remplacée sur TPU par une convolution ordinaire avec masque binaire. Vient ensuite le décodeur, dont le cadre indique un bloc ConvNeXt, une dimension de 512 et l'ajout de mask tokens. Tout à droite, le résultat de la reconstruction, lui aussi en 7×7 cases, où seules les cases masquées à l'origine sont en rouge clair, pour indiquer que la perte MSE n'est calculée qu'à ces positions](/content/papers/assets/0af11b7bcef637ee0205fe47b31901b1b775a0336ccab0042e73e8d9643589c0.png)](/content/papers/assets/0af11b7bcef637ee0205fe47b31901b1b775a0336ccab0042e73e8d9643589c0.png)\n\n*Figure : réalisée pour cette note, d'après la section 3 de l'article et le code officiel ; l'article original est sous licence CC BY-NC-ND 4.0, et sa figure n'est pas reproduite ici.*\n\nLa solution des auteurs consiste à traiter l'image masquée comme une donnée creuse. L'idée vient des nuages de points 3D, creux par nature ; la convolution creuse qui les traite ne calcule qu'aux positions où il y a des données. Il en va de même pour l'image masquée, dont les zones visibles sont ces points porteurs de données.\n\nAu préentraînement, les convolutions de l'encodeur deviennent des convolutions creuses sur sous-variété (submanifold sparse convolution), qui ne calculent qu'aux positions visibles et ne produisent de sortie qu'à ces positions ; à l'affinage, on revient à des convolutions ordinaires, en reprenant directement les poids. Sur des accélérateurs comme les TPU, les auteurs utilisent plutôt une convolution ordinaire, en multipliant par un masque binaire avant et après chaque convolution ; le résultat est numériquement identique, mais le calcul est moins économe. Les principales expériences de l'article ont été menées ainsi sur TPU v3.\n\nQue se passe-t-il avec une convolution ordinaire ? Voyons-le en empilant trois couches de convolution depthwise 7×7 :\n\n```python\nimport torch\nimport torch.nn.functional as F\n\ntorch.manual_seed(0)\nkeep = torch.zeros(49)\nkeep[torch.randperm(49)[:19]] = 1                       # on garde 19 des 7×7 zones, soit 60 % de masquage\nmask = F.interpolate(keep.view(1, 1, 7, 7), size=56)    # agrandi à 56×56 comme au premier étage, chaque zone fait 8×8\nx = torch.randn(1, 1, 56, 56) * mask                    # les zones masquées valent 0\nhole = mask == 0\n\nw = torch.randn(1, 1, 7, 7) / 7                         # une convolution depthwise 7×7\ndense, sparse = x, x\nfor layer in range(1, 4):\n    dense = F.conv2d(dense, w, padding=3)\n    sparse = F.conv2d(sparse, w, padding=3) * mask      # après chaque couche, on remet à 0 les zones masquées\n    print(f\"Couche {layer} : part des positions masquées non nulles, convolution ordinaire {(dense[hole] != 0).float().mean():.0%}, \"\n          f\"avec masque {(sparse[hole] != 0).float().mean():.0%}\")\n```\n\n```\nCouche 1 : part des positions masquées non nulles, convolution ordinaire 50%, avec masque 0%\nCouche 2 : part des positions masquées non nulles, convolution ordinaire 84%, avec masque 0%\nCouche 3 : part des positions masquées non nulles, convolution ordinaire 100%, avec masque 0%\n```\n\nLa convolution ordinaire traite les zones masquées comme des pixels de valeur 0 et calcule comme si de rien n'était ; les valeurs voisines s'y propagent couche après couche, et au bout de trois couches, les trous sont entièrement comblés, l'encodeur produisant aussi des caractéristiques aux positions masquées. Avec le masque, les trous restent des trous, et l'encodeur ne travaille qu'aux positions visibles ; c'est la même idée que le ViT de MAE, qui ne reçoit que les patches visibles. Sur ConvNeXt-B, sans ou avec convolution creuse, on obtient 79,3 % contre 83,7 %.\n\nLe reste est simple. Le masque couvre 60 % de l'image par zones de 32×32 ; il est généré à la résolution 7×7 du dernier étage, puis agrandi d'étage en étage. Comme augmentation de données, seuls le recadrage et le redimensionnement aléatoires sont utilisés. Le décodeur n'est qu'un bloc ConvNeXt de dimension 512 ; les auteurs ont aussi essayé des décodeurs UNet et Transformer, pour une précision similaire, mais un seul bloc ConvNeXt donne le préentraînement le plus court, 7,7 heures contre 12,9 pour UNet. Comme dans MAE, la perte est une MSE calculée sur les seules zones masquées, avec pour cible les pixels de chaque patch normalisés séparément.\n\n### Changer seulement le préentraînement ne suffit pas\n\nUne fois FCMAE en place, les auteurs préentraînent ConvNeXt-B pendant 800 époques, puis l'affinent 100 époques, pour 83,7 %. C'est mieux que les 82,7 % d'un entraînement supervisé de zéro sur 100 époques, mais dans l'article original de ConvNeXt, l'entraînement supervisé de 300 époques atteignait 83,8 % ; au terme de ce long détour, le préentraînement autosupervisé ne bat toujours pas l'apprentissage supervisé. ViT, lui, préentraîné avec MAE, fait nettement mieux que la version supervisée.\n\n### L'effondrement des caractéristiques\n\nEn affichant la carte d'activation de chaque canal d'un ConvNeXt préentraîné, les auteurs constatent que de nombreux canaux sont soit entièrement inactifs, soit entièrement saturés, et que les activations se ressemblent beaucoup d'un canal à l'autre ; ils appellent ce phénomène l'effondrement des caractéristiques (feature collapse). Il apparaît surtout dans la couche MLP de chaque bloc qui multiplie la dimension par 4.\n\nPour le quantifier, les auteurs calculent, pour les caractéristiques de chaque couche, la distance cosinus moyenne entre canaux ; plus elle est grande, plus les caractéristiques sont variées. Ils comparent plusieurs modèles sur 1 000 images tirées au hasard de l'ensemble de validation d'ImageNet. Le ConvNeXt préentraîné avec FCMAE reste bas sur toute la profondeur, signe d'un effondrement net ; le ConvNeXt supervisé ne baisse que dans les dernières couches, ce qui, selon les auteurs, vient probablement de la perte d'entropie croisée, qui pousse le modèle à se concentrer sur les caractéristiques utiles à la classification ; le ViT préentraîné avec MAE, lui, reste constamment haut.\n\n### GRN : mettre les canaux en compétition\n\nLes auteurs s'inspirent de l'inhibition latérale observée en biologie. Les neurones s'inhibent mutuellement, ce qui fait ressortir les réponses fortes et diversifie l'ensemble des réponses. Ils conçoivent une nouvelle couche de normalisation, la normalisation de la réponse globale (Global Response Normalization, GRN), en trois étapes :\n\n1. **Agrégation globale.** Pour chaque canal, on calcule la norme L2 sur toute la carte de caractéristiques, ce qui donne $\\|X_i\\|$.\n2. **Normalisation.** La norme de chaque canal est divisée par la moyenne des normes de tous les canaux, ce qui donne une importance relative $N_i$ ; un canal au-dessus de 1 est plus fort que la moyenne, en dessous de 1, plus faible.\n3. **Calibrage.** On multiplie les caractéristiques d'origine par cette importance relative.\n\nPour faciliter l'entraînement, les auteurs ajoutent des $\\gamma$ et $\\beta$ apprenables ainsi qu'une connexion résiduelle :\n\n$$\nX_i \\leftarrow \\gamma\\, X_i\\, N_i + \\beta + X_i ,\n$$\n\n$\\gamma$ et $\\beta$ sont initialisés à 0 ; au départ, GRN ne fait donc rien, et n'entre en jeu que progressivement pendant l'entraînement. L'implémentation officielle tient en trois lignes ; recopions-la et essayons-la sur cinq canaux d'intensités différentes :\n\n```python\nimport torch\n\ndef grn(x, gamma, beta, eps=1e-6):\n    # x : (N, H, W, C), canaux en dernier comme dans l'implémentation officielle\n    gx = torch.norm(x, p=2, dim=(1, 2), keepdim=True)   # norme L2 de chaque canal sur toute la carte de caractéristiques\n    nx = gx / (gx.mean(dim=-1, keepdim=True) + eps)     # divisée par la moyenne sur tous les canaux\n    return gamma * (x * nx) + beta + x\n\ntorch.manual_seed(0)\nstrength = torch.tensor([4.0, 2.0, 1.0, 0.5, 0.1])      # 5 canaux d'intensités différentes\nx = torch.randn(1, 14, 14, 5) * strength\n\nzero = torch.zeros(5)\nprint(\"Avec γ et β nuls, la sortie est identique à l'entrée :\", torch.equal(grn(x, zero, zero), x))\n\ny = grn(x, torch.ones(5), zero)                         # supposons γ = 1 après entraînement\ngx = torch.norm(x, p=2, dim=(1, 2)).flatten()\ngy = torch.norm(y, p=2, dim=(1, 2)).flatten()\nprint(\"Importance relative N :\", [round(v, 2) for v in (gx / gx.mean()).tolist()])\nprint(\"Normes avant :\", [round(v, 1) for v in gx.tolist()])\nprint(\"Normes après :\", [round(v, 1) for v in gy.tolist()])\nprint(f\"Rapport des normes du canal le plus fort et du plus faible : {gx.max() / gx.min():.0f} fois → {gy.max() / gy.min():.0f} fois\")\n```\n\n```\nAvec γ et β nuls, la sortie est identique à l'entrée : True\nImportance relative N : [2.64, 1.3, 0.66, 0.33, 0.07]\nNormes avant : [57.3, 28.1, 14.4, 7.2, 1.5]\nNormes après : [208.6, 64.6, 23.9, 9.6, 1.6]\nRapport des normes du canal le plus fort et du plus faible : 39 fois → 132 fois\n```\n\nLe canal le plus fort est amplifié 3,6 fois, le plus faible ne change presque pas, et l'écart entre fort et faible passe de 39 à 132 fois. L'amplification de chaque canal dépend de sa force par rapport aux autres canaux ; c'est cela, la compétition entre canaux.\n\nLes auteurs ont comparé chacune de ces trois étapes à d'autres choix, et la version retenue l'emporte à chaque fois :\n\n| Élément comparé | Remplacé par | Précision après affinage sur ImageNet |\n| --- | --- | ---: |\n| Agrégation globale | Pooling moyen global | 83,7 % |\n| | Norme L1 | 84,3 % |\n| | **Norme L2** | **84,6 %** |\n| Couche de normalisation | LRN | 83,2 % |\n| | BatchNorm | 80,5 % |\n| | LayerNorm | 83,8 % |\n| | **GRN** | **84,6 %** |\n| Pondération des caractéristiques | SE (109 M de paramètres) | 84,4 % |\n| | CBAM (109 M de paramètres) | 84,5 % |\n| | **GRN (89 M de paramètres)** | **84,6 %** |\n| Phase d'utilisation de GRN | Préentraînement seulement, retiré à l'affinage | 78,8 % |\n| | Ajouté seulement à l'affinage | 80,6 % |\n| | **Dans les deux phases** | **84,6 %** |\n\n*Tableau : établi d'après la Table 2 de l'article ; ConvNeXt-B préentraîné 800 époques avec FCMAE, puis affiné. La référence sans GRN est à 83,7 %.*\n\nSE et CBAM permettent aussi une pondération des caractéristiques similaire, mais au prix de 20 M de paramètres supplémentaires, alors que GRN n'en ajoute aucun ($\\gamma$ et $\\beta$ sont négligeables). Le dernier groupe mérite aussi l'attention ; GRN doit être présent au préentraînement comme à l'affinage, et l'absence de l'un ou de l'autre fait beaucoup chuter les résultats.\n\n### Le bloc ConvNeXt V2\n\nGRN se place dans le bloc ConvNeXt, après l'expansion de dimension, c'est-à-dire dans la couche où l'effondrement est le plus grave. Une fois GRN ajouté, les auteurs constatent que LayerScale devient superflu, et le suppriment.\n\n[![Schéma de structure de bloc en deux colonnes. À gauche, le bloc ConvNeXt V1, de haut en bas : convolution depthwise 7×7, LayerNorm, convolution 1×1 qui porte les canaux de C à 4C, GELU, convolution 1×1 qui les ramène de 4C à C, LayerScale, puis addition avec l'entrée ; LayerScale est dessiné en cadre pointillé, avec en dessous la mention qu'il est retiré dans V2. À droite, le bloc ConvNeXt V2, dans le même ordre, mais avec un cadre rouge GRN supplémentaire entre GELU et la seconde convolution 1×1, et sans LayerScale ; une mention en dessous indique que GRN calcule la norme L2 globale de chaque canal, puis la divise par la moyenne sur tous les canaux](/content/papers/assets/149efd3dc24d22851f33f2ac0eb44a73e3dd77789df3b9f7e3427f4e09da8489.png)](/content/papers/assets/149efd3dc24d22851f33f2ac0eb44a73e3dd77789df3b9f7e3427f4e09da8489.png)\n\n*Figure : réalisée pour cette note, d'après la section 4 de l'article et le code officiel.*\n\nEn dehors de ce point, l'architecture de ConvNeXt V2 est identique à celle de V1. Les auteurs la déclinent en huit tailles ; le plus petit modèle, Atto, n'a que 3,7 M de paramètres, suivi de Femto, Pico, Nano, Tiny, Base et Large, et le plus grand, Huge, ajouté dans cet article, en compte environ 660 M.\n\n## Discussion\n\n### Architecture et préentraînement doivent changer ensemble\n\nLe résultat central de l'article tient dans ce tableau :\n\n| Modèle | Supervisé | FCMAE |\n| --- | ---: | ---: |\n| ConvNeXt V1-B | 83,8 % | 83,7 % |\n| ConvNeXt V2-B | 84,3 % | **84,6 %** |\n| ConvNeXt V1-L | 84,3 % | 84,4 % |\n| ConvNeXt V2-L | 84,5 % | **85,6 %** |\n\n*Tableau : extrait de la Table 3 de l'article ; précision après affinage sur ImageNet-1K, préentraînement FCMAE de 800 époques.*\n\nPassé au préentraînement FCMAE, V1 ne progresse presque pas ; V2 en entraînement supervisé progresse peu, L ne gagnant que 0,2. Avec les deux ensemble, B gagne 0,8 et L 1,3. Changer seulement l'architecture ou seulement le préentraînement ne suffit pas ; c'est ce que les auteurs appellent la co-conception.\n\nSur les huit tailles, le constat est le même :\n\n| Taille | Paramètres | V1 supervisé | V2 supervisé | V2 + FCMAE |\n| --- | ---: | ---: | ---: | ---: |\n| Atto | 3,7 M | 75,7 % | 76,2 % | **76,7 %** |\n| Femto | 5,2 M | 77,5 % | 78,0 % | **78,5 %** |\n| Pico | 9,1 M | 79,5 % | 79,7 % | **80,3 %** |\n| Nano | 15,6 M | 80,8 % | 81,2 % | **81,9 %** |\n| Tiny | 28,6 M | 82,1 % | 82,5 % | **83,0 %** |\n| Base | 89 M | 83,8 % | 84,3 % | **84,9 %** |\n| Large | 198 M | 84,3 % | 84,5 % | **85,8 %** |\n| Huge | 660 M | — | — | **86,3 %** |\n\n*Tableau : extrait de la Table 14 de l'article ; entrée 224×224. Ici, le préentraînement FCMAE dure 1600 époques.*\n\nChaque taille progresse de 0,8 à 1,5 point de pourcentage, Large plus que toutes les autres.\n\nPrécisons toutefois que ces chiffres comparent la précision après affinage, et laissent le coût d'entraînement hors de la comparaison. FCMAE préentraîne d'abord 1600 époques, puis Base et Large sont affinés 100 époques ; pour les petits modèles, d'Atto à Nano, l'affinage seul demande 600 époques.\n\n### Face au MAE des Transformers\n\nAvec un préentraînement sur ImageNet-1K seul, face aux autres méthodes de préentraînement masqué :\n\n| Taille | ViT + MAE | Swin + SimMIM | ConvNeXt V2 + FCMAE |\n| --- | ---: | ---: | ---: |\n| B | 83,6 % | 84,0 % | **84,9 %** |\n| L | **85,9 %** | 85,4 % | 85,8 % |\n| H | **86,9 %** | 85,7 % (SwinV2) | 86,3 % |\n\n*Tableau : extrait de la Table 4 de l'article. La colonne Swin donne les résultats d'un préentraînement de 800 époques ; les autres reprennent la meilleure configuration de chaque méthode.*\n\nFace à Swin + SimMIM, ConvNeXt V2 l'emporte à toutes les tailles. Face à ViT + MAE, L fait presque jeu égal, alors que ViT-L a plus de 50 % de paramètres en plus (307 M contre 198 M) ; en H, ConvNeXt V2 est en retard de 0,6. Les auteurs l'expliquent par le fait que les grands ViT tirent davantage profit du préentraînement autosupervisé.\n\nEn ajoutant une étape intermédiaire d'affinage supervisé sur ImageNet-22K, ConvNeXt V2-H atteint 88,9 % avec des entrées 512×512, le meilleur résultat de l'époque avec des données publiques uniquement. Les Base et Large de V2 battent aussi respectivement les Large et XLarge de V1, d'une taille au-dessus.\n\nL'annexe compare aussi avec l'apprentissage contrastif. Avec le même ConvNeXt V2-B, un préentraînement MoCo v3 suivi d'un affinage donne 83,7 %, moins encore que les 84,3 % du supervisé ; FCMAE atteint 84,9 %.\n\n### Détection et segmentation\n\nSur COCO avec Mask R-CNN, la box AP progresse pas à pas de V1 supervisé à V2 supervisé, puis à V2 + FCMAE, avec 50,3, 51,0 et 52,9 pour Base, 50,6, 51,5 et 54,4 pour Large, et jusqu'à 55,7 pour Huge. Face à Swin préentraîné avec SimMIM, ConvNeXt V2 gagne à toutes les tailles.\n\nSur ADE20K avec UperNet, V2 + FCMAE fait aussi bien mieux que V1 supervisé, Base passant de 49,9 à 52,1 et Large de 50,5 à 53,7. Mais Swin-B + SimMIM atteint 52,8 ; en Base, ConvNeXt V2 perd donc en réalité de 0,7. L'article parle d'une performance « comparable » à celle de Swin en Base et en Large, et d'une victoire seulement en Huge.\n\n## Conclusion\n\nConvNeXt a appris à faire les exercices à trous, à condition que l'architecture change elle aussi. Au préentraînement, la convolution creuse lui fait voir, comme ViT, les seules zones visibles ; dans le bloc, GRN met les canaux en compétition, et ils ne s'effondrent plus en une masse indistincte. Avec les deux ensemble, le préentraînement masqué devient pour la première fois vraiment utile à un réseau convolutif.\n\nGRN tient en trois lignes et n'ajoute pas de paramètres ; c'est ce que l'article a de plus facile à emporter. FCMAE est moins accessible ; l'article préentraîne de 800 à 1600 époques sur des TPU v3-256, pour gagner environ 1 point de pourcentage à chaque taille.\n\nLe plus pragmatique est donc d'affiner directement les [poids officiels](https://github.com/facebookresearch/ConvNeXt-V2), disponibles dans timm d'Atto à Huge.\n\nLes exercices à trous, laissons les TPU les faire ; nous, on recopiera les réponses.\n","imageSizes":{"/content/papers/assets/0af11b7bcef637ee0205fe47b31901b1b775a0336ccab0042e73e8d9643589c0.png":{"width":1640,"height":600},"/content/papers/assets/149efd3dc24d22851f33f2ac0eb44a73e3dd77789df3b9f7e3427f4e09da8489.png":{"width":1640,"height":1000}}}
