{"notes":[{"id":"classic-cnns/fcdm","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"FCDM","subtitle":"Faut-il forcément un Transformer ?","author":"Z. Yuan","paperDate":"2026-03-10","publishedOn":"2026-04-07","paperTitle":"Reviving ConvNeXt for Efficient Convolutional Diffusion Models","paperUrl":"https://arxiv.org/abs/2603.09408","bibliography":{"title":"Reviving ConvNeXt for Efficient Convolutional Diffusion Models","authors":["Taesung Kwon","Lorenzo Bianchi","Lennart Wittke","Felix Watine","Fabio Carrara","Jong Chul Ye","Romann Weber","Vinicius Azevedo"],"url":"https://arxiv.org/abs/2603.09408","pdfUrl":"https://arxiv.org/pdf/2603.09408v1","codeUrl":"https://github.com/star-kwon/FCDM","preprint":{"id":"2603.09408","submittedOn":"2026-03-10","url":"https://arxiv.org/abs/2603.09408"},"publication":{"venue":"CVPR","year":2026,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2026/html/Kwon_Reviving_ConvNeXt_for_Efficient_Convolutional_Diffusion_Models_CVPR_2026_paper.html"},"citation":"@misc{classiccnnsfcdm2026,\n  title = {{Reviving ConvNeXt for Efficient Convolutional Diffusion Models}},\n  author = {Taesung Kwon and Lorenzo Bianchi and Lennart Wittke and Felix Watine and Fabio Carrara and Jong Chul Ye and Romann Weber and Vinicius Azevedo},\n  year = {2026},\n  eprint = {2603.09408},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2603.09408}\n}\n","citationPath":"/content/papers/citations/classic-cnns/fcdm.7438c4ca3414.bib"},"thumbnail":{"src":"/content/papers/assets/2a98fdd408b56d724e2b57d3c4a4a2e3c8f3d1ffc8384c400f1ffceff0f84aad.png","width":1960,"height":1280},"locale":"fr","path":"/content/papers/fr/classic-cnns/fcdm.0ff27b423566.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"le-rôle-du-backbone-en-diffusion","text":"Le rôle du backbone en diffusion","depth":3},{"id":"la-convolution-peut-elle-aussi-monter-en-échelle-","text":"La convolution peut-elle aussi monter en échelle ?","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"le-bloc-fcdm","text":"Le bloc FCDM","depth":3},{"id":"un-u-et-seulement-deux-réglages","text":"Un U et seulement deux réglages","depth":3},{"id":"différences-avec-dico","text":"Différences avec DiCo","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"devant-dit-à-chaque-taille","text":"Devant DiT à chaque taille","depth":3},{"id":"avec-guidance","text":"Avec guidance","depth":3},{"id":"doubler-la-résolution","text":"Doubler la résolution","depth":3},{"id":"ablations","text":"Ablations","depth":3},{"id":"quatre-cartes-graphiques","text":"Quatre cartes graphiques","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/convnext","relation":"referenced","topic":""},{"id":"classic-cnns/convnext-v2","relation":"referenced","topic":""},{"id":"feature-fusion/unet","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":"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":"feature-fusion/unet","category":"feature-fusion","legacyPath":"feature-fusion/1505-unet","legacySlug":"1505-unet","legacyPaths":[],"title":"U-Net","subtitle":"Le prélude à la fusion","author":"Z. Yuan","paperDate":"2015-05-18","publishedOn":"2024-08-15","paperTitle":"U-Net: Convolutional Networks for Biomedical Image Segmentation","paperUrl":"https://arxiv.org/abs/1505.04597","bibliography":{"title":"U-Net: Convolutional Networks for Biomedical Image Segmentation","authors":["Olaf Ronneberger","Philipp Fischer","Thomas Brox"],"url":"https://arxiv.org/abs/1505.04597","pdfUrl":"https://arxiv.org/pdf/1505.04597","codeUrl":null,"preprint":{"id":"1505.04597","submittedOn":"2015-05-18","url":"https://arxiv.org/abs/1505.04597"},"publication":{"venue":"MICCAI","year":2015,"kind":"conference","url":"https://doi.org/10.1007/978-3-319-24574-4_28"},"citation":"@misc{featurefusionunet2015,\n  title = {{U-Net: Convolutional Networks for Biomedical Image Segmentation}},\n  author = {Olaf Ronneberger and Philipp Fischer and Thomas Brox},\n  year = {2015},\n  eprint = {1505.04597},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1505.04597}\n}\n","citationPath":"/content/papers/citations/feature-fusion/unet.b015405a1c46.bib"},"thumbnail":{"src":"/content/papers/assets/0b302bf8ed079d85b3a07562463380875eb3d9dfc631684549000c38d16a5f38.jpg","width":1224,"height":824},"locale":"fr","path":"/content/papers/fr/feature-fusion/unet.901095b8d966.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":"discussion","text":"Discussion","depth":2},{"id":"isbi-cell-tracking-challenge-2015","text":"ISBI Cell Tracking Challenge 2015","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"segmentation/fcn","relation":"background","topic":"Prédiction dense et connexions entre encodeur et décodeur"},{"id":"feature-fusion/unetpp","relation":"next","topic":"Prédiction dense et connexions entre encodeur et décodeur"},{"id":"feature-fusion/trans-unet","relation":"comparison","topic":"Caractéristiques multi-échelles des encodeurs-décodeurs"}]}],"text":"Les backbones des modèles de diffusion ont suivi une trajectoire claire ces dernières années.\n\nDDPM, ADM, puis le modèle de diffusion latente (LDM) derrière Stable Diffusion utilisaient des U-Net mêlant convolutions et attention. DiT a ensuite retiré toutes les convolutions au profit d'une pile de blocs Transformer, avec une excellente montée en échelle. Les modèles texte-image suivants, comme SD3 et FLUX, utilisent aussi des Transformers.\n\nPourtant, en classification, ConvNeXt avait déjà montré qu'un réseau convolutif bien réglé pouvait les égaler. Pourquoi la diffusion ne pourrait-elle pas utiliser uniquement des convolutions ?\n\nDes chercheurs de KAIST, de l'ETH Zürich et d'Italie transforment directement ConvNeXt en backbone de diffusion, puis le comparent à DiT, du petit au grand modèle, avec sa procédure d'entraînement et d'évaluation.\n\n\n> [!TIP]\n> \n> Pour ConvNeXt, le GRN de ConvNeXt V2 et la structure U-Net :\n> \n> - **[[22.01] ConvNeXt : Redonner sa grandeur à la convolution](/blog/papers/classic-cnns/convnext)**\n> - **[[23.01] ConvNeXt V2 : La convolution aussi fait des exercices à trous](/blog/papers/classic-cnns/convnext-v2)**\n> - **[[15.05] U-Net : Le prélude à la fusion](/blog/papers/feature-fusion/unet)**\n\n\n## Définir le problème\n\n### Le rôle du backbone en diffusion\n\nUn peu de contexte. Le modèle part d'un bruit pur et le débruite progressivement pour former une image. À chaque pas, il appelle le backbone avec l'image bruitée courante, le temps $t$ et la condition, ici la classe ImageNet $y$. La sortie prédit le bruit.\n\nPour économiser du calcul, on travaille désormais surtout dans l'espace latent. Un VAE compresse l'image 256×256 en une représentation 32×32×4. Diffusion et débruitage opèrent sur ce petit tenseur, ensuite décodé en image.\n\nDiT découpe cette représentation en tokens et les envoie au Transformer. Il s'est imposé parce qu'il s'agrandit simplement en réglant le nombre de blocs, de canaux, de têtes et la taille des patches. adaLN-Zero injecte proprement le temps et la classe dans chaque bloc. Le coût reste élevé : DiT-XL/2 demande 118.6 GFLOPs par passage avant, et le meilleur résultat DiT utilise 7 millions de pas d'entraînement.\n\n### La convolution peut-elle aussi monter en échelle ?\n\nD'autres travaux sont déjà revenus aux backbones convolutifs : DiC utilise un U-Net à convolutions 3×3, DiCo des convolutions séparables 3×3 et une attention de canaux. Tous deux coûtent moins que DiT. Ici, la question est plus directe : transférer telle quelle la conception de ConvNeXt validée en classification permet-il une montée en échelle aussi simple que DiT, à moindre coût ?\n\n## Résoudre le problème\n\n### Le bloc FCDM\n\n[![Schéma élaboré pour cette note. À gauche, le bloc FCDM suit depthwise 7×7, LayerNorm sans paramètres affines, multiplication par (1 + scale) puis addition de shift en bleu, convolution 1×1 de C à rC, GELU, GRN, convolution 1×1 vers C, multiplication par gate en bleu, puis addition résiduelle. La branche de conditionnement bleue transforme l'embedding c de la classe y et du temps t par SiLU et une couche linéaire initialisée à zéro en shift, scale et gate. La note précise qu'à l'initialisation gate vaut 0 et le bloc est l'identité. À droite, la structure en U commence par L blocs de C canaux, descend à 2L et 2C, puis à 4L et 4C au centre, avant une remontée symétrique avec des connexions entre niveaux correspondants en pointillés.](/content/papers/assets/2a98fdd408b56d724e2b57d3c4a4a2e3c8f3d1ffc8384c400f1ffceff0f84aad.png)](/content/papers/assets/2a98fdd408b56d724e2b57d3c4a4a2e3c8f3d1ffc8384c400f1ffceff0f84aad.png)\n\n*Schéma élaboré pour cette note, d'après la section 3.1 de l'article et le code officiel.*\n\nLe bloc est presque celui de ConvNeXt V2 : depthwise 7×7, LayerNorm, deux convolutions 1×1 qui élargissent puis réduisent les canaux, avec GELU et GRN entre elles, enfin une addition résiduelle. Le facteur d'expansion $r$ du code officiel est 3.\n\nConvNeXt est conçu pour classifier, sans emplacement pour le temps ni la classe. Les auteurs reprennent adaLN-Zero de DiT : une petite couche linéaire transforme leurs embeddings en trois jeux de paramètres, shift, scale et gate. LayerNorm abandonne ses paramètres affines au profit de $h\\cdot(1+\\text{scale})+\\text{shift}$. La sortie du bloc est multipliée par gate avant l'addition résiduelle. La couche linéaire est initialisée à zéro : gate vaut donc 0 au début, chaque bloc réalise l'identité, et même un réseau profond peut démarrer de façon stable.\n\nÉcrivons un bloc suivant cette description pour observer initialisation et conditionnement :\n\n```python\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass GRN(nn.Module):                                  # Global Response Normalization de ConvNeXt V2\n    def __init__(self, c):\n        super().__init__()\n        self.gamma = nn.Parameter(torch.zeros(1, c, 1, 1))\n        self.beta = nn.Parameter(torch.zeros(1, c, 1, 1))\n\n    def forward(self, x):\n        g = x.norm(p=2, dim=(2, 3), keepdim=True)\n        return self.gamma * (x * g / (g.mean(1, keepdim=True) + 1e-6)) + self.beta + x\n\nclass FCDMBlock(nn.Module):\n    def __init__(self, c, r=3):\n        super().__init__()\n        self.dw = nn.Conv2d(c, c, 7, padding=3, groups=c)\n        self.pw1, self.pw2 = nn.Conv2d(c, r * c, 1), nn.Conv2d(r * c, c, 1)\n        self.grn = GRN(r * c)\n        self.ada = nn.Sequential(nn.SiLU(), nn.Linear(c, 3 * c))\n        nn.init.zeros_(self.ada[1].weight)              # La branche de conditionnement part de zéro\n        nn.init.zeros_(self.ada[1].bias)\n\n    def forward(self, x, cond):\n        shift, scale, gate = self.ada(cond)[:, :, None, None].chunk(3, dim=1)\n        h = F.layer_norm(self.dw(x).permute(0, 2, 3, 1), (x.shape[1],)).permute(0, 3, 1, 2)\n        h = h * (1 + scale) + shift                     # Échelle et décalage par canal fixés par la condition\n        h = self.pw2(self.grn(F.gelu(self.pw1(h))))\n        return x + gate * h                             # Gate dépend aussi de la condition\n\ntorch.manual_seed(0)\nc = 32\nblock = FCDMBlock(c)\nx = torch.randn(2, c, 16, 16)\ncond_a, cond_b = torch.randn(1, c).expand(2, c), torch.randn(1, c).expand(2, c)   # Deux embeddings classe + temps différents\n\nwith torch.no_grad():\n    print(\"À l'initialisation : écart maximal sortie-entrée\", f\"{(block(x, cond_a) - x).abs().max():.1e}\")\n    nn.init.normal_(block.ada[1].weight, std=0.1)    # Simuler un état après un peu d'entraînement\n    ya, yb = block(x, cond_a), block(x, cond_b)\n    print(\"Après entraînement : écart des sorties pour une même entrée et deux conditions\", f\"{(ya - yb).abs().max():.2f}\")\n```\n\n```text\nÀ l'initialisation : écart maximal sortie-entrée 0.0e+00\nAprès entraînement : écart des sorties pour une même entrée et deux conditions 0.85\n```\n\nÀ l'initialisation, le bloc laisse l'entrée parfaitement intacte. Une fois les poids de la branche de conditionnement développés, une même entrée est traitée différemment selon la classe et le temps. La condition entre par ces trois jeux de paramètres.\n\n### Un U et seulement deux réglages\n\nLes blocs forment un U à trois niveaux descendants, de $C$, $2C$ et $4C$ canaux, pour $L$, $2L$ et $4L$ blocs. Chaque sous-échantillonnage double les deux quantités. La remontée est symétrique, avec des connexions entre niveaux correspondants. Seuls $L$ et $C$ règlent l'architecture.\n\nPour comparer équitablement à DiT, les quatre tailles alignent leurs nombres de paramètres sur les siens :\n\n| Modèle | $L$ | $C$ | Paramètres | FLOPs | FLOPs relatifs à DiT |\n| --- | ---: | ---: | ---: | ---: | ---: |\n| FCDM-S | 2 | 128 | 32.7M | 3.1G | 50.8% |\n| FCDM-B | 2 | 256 | 127.7M | 12.2G | 53.0% |\n| FCDM-L | 2 | 512 | 504.5M | 48.3G | 59.9% |\n| FCDM-XL | 3 | 512 | 698.8M | 64.6G | 54.5% |\n\n*Tableau : tableau 2 de l'article, FLOPs calculés en résolution 256×256.*\n\nÀ nombre de paramètres égal, les FLOPs avoisinent la moitié de ceux de DiT.\n\n### Différences avec DiCo\n\nDiCo était le meilleur modèle de diffusion convolutif précédent et ressemble beaucoup à FCDM. Les auteurs consacrent une section à leurs différences.\n\nLe module convolutif de DiCo conserve la même largeur tout du long. FCDM utilise le goulot inversé de ConvNeXt : la depthwise opère avant l'expansion, donc son coût ne dépend pas du facteur d'expansion. DiCo ajoute une convolution 1×1 d'attention de canaux pour diversifier leurs réponses ; FCDM obtient un effet voisin avec GRN, presque sans paramètres supplémentaires. DiCo possède aussi un module feed-forward séparé, déjà assuré dans FCDM par le goulot inversé, donc supprimé.\n\nÀ nombre de paramètres égal, FCDM demande environ trois quarts des FLOPs de DiCo.\n\n## Discussion\n\n### Protocole expérimental\n\nL'entraînement reprend exactement celui de DiT : AdamW, taux fixe $10^{-4}$, sans weight decay, batch de 256, augmentation limitée au retournement horizontal et poids EMA. L'évaluation utilise le FID, distance entre les distributions de caractéristiques de 50 000 images générées et des images réelles ; plus bas est meilleur.\n\n### Devant DiT à chaque taille\n\nCommençons par 400 000 pas, sans classifier-free guidance :\n\n| Modèle | FLOPs | Débit d'inférence | FID |\n| --- | ---: | ---: | ---: |\n| DiT-S/2 | 6.1G | 1234 | 68.4 |\n| FCDM-S | 3.1G | 2687 | **48.5** |\n| DiT-B/2 | 23.0G | 380 | 43.5 |\n| FCDM-B | 12.2G | 1002 | **26.2** |\n| DiT-L/2 | 80.7G | 115 | 23.3 |\n| FCDM-L | 48.3G | 381 | **13.8** |\n| DiT-XL/2 | 118.6G | 81 | 19.5 |\n| FCDM-XL | 64.6G | 273 | **10.7** |\n| DiT-XL/2 (7 millions de pas) | 118.6G | 81 | 9.6 |\n| FCDM-XL (1 million de pas) | 64.6G | 273 | **7.9** |\n\n*Tableau : tableaux 1 et 3 de l'article ; le débit utilise l'unité it/s rapportée par les auteurs.*\n\nÀ nombre de pas égal, FCDM donne un FID bien plus bas à chaque taille et un débit d'inférence de 2.2 à 3.4 fois supérieur à DiT. Les deux dernières lignes illustrent la convergence : après 1 million de pas, FCDM-XL dépasse déjà DiT-XL/2 entraîné pendant 7 millions de pas.\n\nL'écart avec les autres backbones convolutifs est moindre. À 400 000 pas, le FID 13.66 de DiCo-L est légèrement meilleur que les 13.83 de FCDM-L. En XL, FCDM donne 10.72 contre 11.67 pour DiCo-XL, avec un quart de FLOPs en moins. Pour les petits modèles, DiC a le meilleur débit grâce aux convolutions 3×3 standard, très optimisées pour le matériel.\n\n### Avec guidance\n\nFCDM-XL est entraîné jusqu'à 2 millions de pas, soit 400 epochs, puis évalué avec classifier-free guidance face aux résultats publiés :\n\n| Modèle | Epochs d'entraînement | FLOPs | FID | IS |\n| --- | ---: | ---: | ---: | ---: |\n| DiT-XL/2 | 1400 | 118.6G | 2.27 | 278.2 |\n| SiT-XL/2 | 1400 | 118.6G | 2.06 | 277.5 |\n| DiCo-XL | 750 | 87.3G | 2.05 | 282.2 |\n| FCDM-XL | 400 | 64.6G | **2.03** | **285.7** |\n\n*Tableau : certaines lignes du tableau 4 de l'article, ImageNet 256×256.*\n\nLe FID de 2.03 est inférieur aux 2.27 de DiT-XL/2, avec moins d'un tiers de ses epochs. Face à SiT et DiCo, toutefois, l'écart ne porte que sur les centièmes. Les auteurs précisent que FCDM dépasse les modèles comparables dans le protocole DiT, mais reste derrière les meilleurs résultats récents comme EDM-2 et Simpler Diffusion.\n\n### Doubler la résolution\n\nÀ 512×512, FCDM-XL atteint un FID de 7.46 après 1 million de pas, contre 12.03 pour DiT-XL/2 après 3 millions et 8.10 pour DiCo-XL après 1.3 million.\n\nLa vitesse est plus intéressante encore. De 256 à 512, le débit de DiT-XL/2 passe de 80.5 à 18.6, une division par plus de quatre. FCDM-XL passe de 272.7 à 129.6, environ la moitié. Le calcul de l'attention est quadratique en nombre de tokens, celui des convolutions linéaire en nombre de pixels : l'écart s'accroît avec la résolution.\n\n### Ablations\n\nSur FCDM-L après 200 000 pas, en ne changeant qu'un élément à la fois :\n\n| Modification | FID |\n| --- | ---: |\n| FCDM-L (depthwise 7×7, GRN, goulot inversé) | **19.97** |\n| Depthwise 5×5 | 20.48 |\n| Depthwise 3×3 | 21.28 |\n| Attention de canaux DiCo à la place de GRN | 23.85 |\n| Ajout du module feed-forward de DiCo | 28.52 |\n| Sans goulot inversé | 28.76 |\n| Blocs ResNet | 31.14 |\n\n*Tableau : tableau 6 de l'article. Les quatre dernières lignes ajustent les canaux pour conserver les mêmes FLOPs.*\n\nRéduire le noyau dégrade le résultat : les grands noyaux aident aussi en génération. Importer les choix de DiCo dégrade chaque fois le modèle ; retirer le goulot inversé ou revenir à ResNet le dégrade davantage. Presque chaque composant de ConvNeXt reste pertinent pour générer.\n\n### Quatre cartes graphiques\n\nL'article insiste sur le coût d'entraînement. Sur quatre RTX 4090, avec gradient checkpointing et batch de 256, FCDM-XL tourne à environ 0.9 pas/s. Un batch de 256 tient aussi sur un A100 de 40GB.\n\nÀ cette vitesse, cette note estime environ 5 jours pour 400 000 pas et 26 jours pour 2 millions. Ce calcul est effectué ici à partir des chiffres de l'article ; les auteurs ne rapportent pas ces durées. C'est une échelle accessible à un laboratoire ordinaire.\n\nLe dépôt officiel fournit le code d'entraînement et d'échantillonnage sous licence CC BY-NC, actuellement sans poids préentraînés.\n\n## Conclusion\n\nFCDM invente peu de choses : les blocs de ConvNeXt V2, le conditionnement adaLN-Zero de DiT et un U à deux réglages. Assemblés, ils demandent la moitié des FLOPs de DiT, convergent plusieurs fois plus vite et gagnent davantage à haute résolution.\n\nLes ablations convainquent plus que le seul 2.03. Importer les améliorations de DiCo dégrade le résultat, retirer les choix de ConvNeXt aussi. Un bloc pensé pour la classification fonctionne presque tel quel en génération.\n\nÀ la question du sous-titre, la génération ImageNet conditionnée par classe répond donc qu'une architecture convolutive reste une option.\n\nPour le texte-image, le chemin reste long. L'annexe ne présente que 100 000 pas sur MS-COCO et quelques images, avec comme seule condition un vecteur texte CLIP poolé. Les auteurs laissent à des travaux futurs l'intégration d'une séquence textuelle complète, comme SD3.\n","imageSizes":{"/content/papers/assets/2a98fdd408b56d724e2b57d3c4a4a2e3c8f3d1ffc8384c400f1ffceff0f84aad.png":{"width":1960,"height":1280}}}
