EfficientNet
EfficientNet est une famille de réseaux de neurones convolutifs développée par Google AI en 2019. Son innovation clé : le compound scaling, une méthode qui augmente simultanément la profondeur, la largeur et la résolution d’entrée du réseau selon des proportions fixes, produisant des modèles bien plus efficaces que les approches qui ne scalent qu’une seule dimension. EfficientNet-B7 a atteint 84.3% top-1 sur ImageNet tout en étant 8.4× plus petit et 6.1× plus rapide que le meilleur modèle existant à l’époque.
- Auteurs
- Mingxing Tan et Quoc V. Le (Google AI, 2019)
- Paper
- « EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks » (ICML 2019)
- Innovation clé
- Compound scaling (profondeur × largeur × résolution)
- Famille
- B0 (baseline, 5.3M params) à B7 (66M params)
- V2
- EfficientNetV2 (2021) avec Fused-MBConv et entraînement progressif
- Bloc de base
- MBConv (Mobile Inverted Bottleneck Convolution) + Squeeze-and-Excitation
- Frameworks
- PyTorch (timm), TensorFlow/Keras (
tf.keras.applications)
Le problème du scaling des CNN
Avant EfficientNet, améliorer un CNN revenait à tirer sur un seul levier à la fois :
Plus de profondeur (plus de couches) : c’est l’approche de ResNet, qui passe de 18 à 152 couches. Les couches supplémentaires capturent des features plus complexes, mais les rendements sont décroissants et le vanishing gradient limite la profondeur utile.
Plus de largeur (plus de canaux par couche) : c’est l’approche de Wide ResNet. Plus de canaux permettent de capturer plus de features à chaque niveau, mais la consommation mémoire explose rapidement.
Plus de résolution (images d’entrée plus grandes) : passer de 224×224 à 480×480 pixels permet de détecter des détails plus fins, mais le coût quadratique est prohibitif.
Le problème : scaler une seule dimension produit des rendements décroissants. Un ResNet-200 n’est pas beaucoup meilleur qu’un ResNet-101. Mais que se passe-t-il si on augmente les trois dimensions en même temps, de manière coordonnée ?
Le compound scaling : l’innovation clé
L’insight de Tan et Le est qu’il existe des proportions optimales entre profondeur, largeur et résolution. Si vous doublez la résolution d’entrée, vous avez besoin de plus de couches (pour traiter le champ récepteur plus grand) ET de plus de canaux (pour capturer les features supplémentaires à chaque résolution).
Le compound scaling utilise un coefficient unique φ (phi) pour scaler les trois dimensions simultanément :
profondeur : d = α^φ
largeur : w = β^φ
résolution : r = γ^φ
Avec la contrainte : α × β² × γ² ≈ 2 (pour que les FLOPs doublent environ à chaque incrément de φ).
Les valeurs optimales trouvées par grid search sur EfficientNet-B0 sont : α = 1.2, β = 1.1, γ = 1.15. En augmentant φ de 0 à 7, on obtient la famille EfficientNet-B0 à B7.
Architecture d’EfficientNet-B0
Le modèle de base, EfficientNet-B0, n’a pas été conçu à la main. Il a été découvert par Neural Architecture Search (NAS), un processus automatisé qui explore des milliers d’architectures pour trouver celle qui maximise le rapport précision/FLOPs.
EfficientNet-B0 est structuré en 9 stages, chacun composé de blocs MBConv (Mobile Inverted Bottleneck Convolution), inspirés de MobileNetV2. Le processus NAS a optimisé simultanément la précision et le coût en FLOPs, en utilisant une fonction de récompense multi-objectif. Le résultat est une architecture qui semble « designée à la main » par sa régularité, mais dont les choix précis (taille des kernels par stage, ratios d’expansion, nombre de blocs) ont été découverts automatiquement.
L’architecture de B0 suit une progression caractéristique : les premiers stages utilisent des kernels 3×3 avec peu de canaux et un expansion ratio de 1, tandis que les stages plus profonds passent à des kernels 5×5 avec un expansion ratio de 6 et plus de canaux. Cette progression capture d’abord les features locales fines, puis les patterns plus larges et abstraits.
Le bloc MBConv
Le MBConv est le bloc de construction fondamental d’EfficientNet. Il se compose de :
1. Convolution 1×1 d’expansion : augmente le nombre de canaux (expansion ratio de 1 ou 6). C’est l’inverse du bottleneck de ResNet (qui réduit d’abord).
2. Convolution depthwise : filtre spatial sur chaque canal indépendamment (kernel 3×3 ou 5×5). Beaucoup plus léger qu’une convolution standard.
3. Squeeze-and-Excitation (SE) : un mini-module d’attention sur les canaux. Il recalibre l’importance de chaque canal en fonction du contenu global de la feature map.
4. Convolution 1×1 de projection : réduit le nombre de canaux vers la dimension de sortie.
5. Skip connection : si les dimensions d’entrée et de sortie correspondent (comme dans ResNet).
EfficientNetV2 (2021)
EfficientNetV2, publié par les mêmes auteurs en 2021, apporte deux améliorations majeures :
Fused-MBConv : dans les premiers stages du réseau (faibles résolutions, peu de canaux), remplace l’expansion 1×1 + depthwise par une seule convolution 3×3 standard. Plus rapide sur les accélérateurs matériels modernes (GPU, TPU) car les petites convolutions depthwise ne saturent pas les cœurs de calcul.
Entraînement progressif : commence avec des images petites et une augmentation légère, puis augmente progressivement la résolution et la force de l’augmentation. Cela accélère l’entraînement de manière spectaculaire : EfficientNetV2-M atteint la même précision que B7 tout en s’entraînant 11× plus vite.
La famille EfficientNet : choisir le bon modèle
| Modèle | Résolution | Paramètres | FLOPs | Top-1 ImageNet | Cas d’usage |
|---|---|---|---|---|---|
| B0 | 224 | 5.3M | 0.39B | 77.1% | Mobile, edge, IoT, prototypage |
| B1 | 240 | 7.8M | 0.70B | 79.1% | Mobile haut de gamme |
| B2 | 260 | 9.2M | 1.0B | 80.1% | Bon compromis taille/performance |
| B3 | 300 | 12M | 1.8B | 81.6% | Serveur léger, batch processing |
| B4 | 380 | 19M | 4.2B | 83.0% | Sweet spot pour la plupart des tâches |
| B5 | 456 | 30M | 9.9B | 83.6% | Datasets complexes, haute précision |
| B6 | 528 | 43M | 19B | 84.0% | Recherche, serveurs GPU puissants |
| B7 | 600 | 66M | 37B | 84.3% | Performance maximale, benchmark |
| V2-S | 384 | 22M | 8.4B | 83.9% | Remplacement moderne de B4-B5 |
| V2-M | 480 | 54M | 25B | 85.1% | Remplacement moderne de B6-B7 |
| V2-L | 480 | 120M | 53B | 85.7% | SOTA pour CNN pur |
EfficientNet vs ResNet
| Critère | EfficientNet-B0 | ResNet-50 |
|---|---|---|
| Paramètres | 5.3M | 25.6M |
| FLOPs | 0.39B | 4.1B |
| Top-1 ImageNet | 77.1% | 76.1% |
| Ratio params | ~5× moins | Référence |
| Ratio FLOPs | ~10× moins | Référence |
EfficientNet-B0 atteint une meilleure précision que ResNet-50 avec 5× moins de paramètres et 10× moins de FLOPs. Pour une comparaison à précision égale, EfficientNet-B4 (83.0% top-1) dépasse ResNet-50 de +6.7 points avec un coût computationnel comparable. C’est une démonstration convaincante de l’efficacité du compound scaling.
Implémentation avec PyTorch
import torch
import torch.nn as nn
from torchvision.models import efficientnet_b0, EfficientNet_B0_Weights
from torchvision.models import efficientnet_v2_s, EfficientNet_V2_S_Weights
# EfficientNet-B0 pré-entraîné
model_b0 = efficientnet_b0(weights=EfficientNet_B0_Weights.IMAGENET1K_V1)
# Remplacer le classifieur pour votre tâche
num_classes = 10
model_b0.classifier[1] = nn.Linear(
model_b0.classifier[1].in_features, num_classes
)
# EfficientNetV2-S (recommandé, plus moderne)
model_v2 = efficientnet_v2_s(weights=EfficientNet_V2_S_Weights.IMAGENET1K_V1)
model_v2.classifier[1] = nn.Linear(
model_v2.classifier[1].in_features, num_classes
)
# Feature extraction (geler le backbone)
for param in model_v2.features.parameters():
param.requires_grad = False
print(f"B0 params : {sum(p.numel() for p in model_b0.parameters()):,}")
print(f"V2-S params : {sum(p.numel() for p in model_v2.parameters()):,}")
Pour un choix encore plus large de variantes (B0-B7, V2, Lite, avec différents poids pré-entraînés), la librairie timm (PyTorch Image Models) offre la collection la plus complète :
import timm
# Lister tous les modèles EfficientNet disponibles
models = timm.list_models('efficientnet*')
print(f"{len(models)} variantes disponibles")
# Charger un modèle avec timm
model = timm.create_model('efficientnet_b4', pretrained=True, num_classes=10)
Cas d’usage
Classification d’images : la tâche originale. En transfer learning, EfficientNet-B4 produit des résultats state-of-the-art sur des datasets spécialisés (CIFAR-100 : 91.7%, Flowers : 98.8%) avec significativement moins de paramètres que les alternatives.
Déploiement mobile et edge : EfficientNet-B0 et EfficientNet-Lite sont conçus pour les appareils à ressources limitées. Leur faible empreinte mémoire (5.3M paramètres pour B0) permet une inférence en temps réel sur smartphones et objets connectés. Les applications incluent la réalité augmentée, la photographie assistée par IA, et l’analyse vidéo embarquée.
Imagerie médicale : la détection de cancers, l’analyse de radiographies et la classification de lésions cutanées bénéficient de l’efficacité d’EfficientNet. Le modèle B0 a obtenu 91.18% de précision sur un dataset de diagnostic de cancer, avec une empreinte suffisamment légère pour le déploiement en clinique.
Backbone pour la détection et la segmentation : EfficientNet sert de backbone dans des architectures comme EfficientDet (détection d’objets) et des variantes de U-Net pour la segmentation, offrant un meilleur rapport performance/coût que les backbones ResNet traditionnels.
Analyse d’émotions et reconnaissance faciale : sur mobile, les variantes légères d’EfficientNet permettent l’analyse en temps réel des expressions faciales pour des applications de bien-être, marketing ou accessibilité.
Systèmes embarqués et drones : dans les drones et robots, la classification en temps réel est critique. Les variantes Lite tournent directement sur des accélérateurs edge (NVIDIA Jetson, Coral TPU) sans nécessiter de serveur distant, réduisant la latence et éliminant la dépendance réseau.
Agriculture de précision : classification de maladies des plantes à partir de photos prises par drone ou smartphone. EfficientNet-B0 permet de déployer le modèle directement sur le terrain, sans connectivité internet.
EfficientNet dans le paysage actuel
En 2026, EfficientNet se positionne dans un paysage qui a évolué depuis sa publication en 2019 :
| Architecture | Type | Force principale | Quand l’utiliser |
|---|---|---|---|
| EfficientNet B0-B4 | CNN | Efficacité paramétrique, mobile | Edge, mobile, datasets moyens |
| EfficientNetV2 | CNN | Entraînement rapide, excellent transfer learning | Prototypage rapide, serveur |
| ResNet-50 | CNN | Écosystème massif, simplicité | Backbone standard, détection |
| ConvNeXt | CNN | CNN modernisé, rivalise avec ViT | Serveur, recherche, meilleure performance CNN |
| ViT | Transformer | Attention globale, scaling | Très gros datasets, serveurs GPU |
EfficientNet reste le champion de l’efficacité paramétrique : aucune autre architecture n’obtient d’aussi bonnes performances avec si peu de paramètres. C’est son avantage structurel pour le déploiement contraint. Pour les serveurs et la recherche, ConvNeXt et les ViT l’ont dépassé en performance brute.
Limites
Scaling calibré pour ImageNet : les coefficients α, β, γ ont été optimisés sur ImageNet. Sur des datasets très différents (imagerie satellitaire, microscopie), les proportions de scaling pourraient ne pas être optimales.
Mémoire GPU des gros modèles : B6 et B7 consomment beaucoup de mémoire GPU à cause de leur haute résolution d’entrée (528×528 et 600×600). EfficientNetV2 atténue ce problème avec l’entraînement progressif.
NAS coûteux : le processus de recherche d’architecture qui a produit B0 a nécessité des ressources computationnelles considérables. Les praticiens utilisent les architectures prédéfinies (B0-B7, V2) sans refaire la recherche.
Concurrencé par ConvNeXt et les ViT : les architectures plus récentes comme ConvNeXt (CNN modernisé) et les Vision Transformers atteignent des performances supérieures à paramètres égaux. EfficientNet reste pertinent pour le mobile et l’edge, mais n’est plus state-of-the-art sur ImageNet.
Bonnes pratiques
Préférez EfficientNetV2 à V1. V2 s’entraîne beaucoup plus vite et atteint de meilleures performances. Utilisez V2-S comme remplacement de B4-B5, et V2-M comme remplacement de B6-B7.
Utilisez la résolution d’entrée recommandée. Chaque variante est optimisée pour une résolution spécifique (224 pour B0, 380 pour B4, 480 pour V2-M). Utiliser une résolution différente dégrade les performances car le scaling est calibré pour ces dimensions précises.
Appliquez la data augmentation adaptée. Le papier original utilise AutoAugment, et la régularisation (dropout, stochastic depth) augmente avec la taille du modèle. Reproduisez ces réglages pour des résultats optimaux.
Pour le mobile, utilisez EfficientNet-Lite. Les variantes Lite suppriment le module SE (Squeeze-and-Excitation) et n’utilisent que des opérations supportées nativement par les accélérateurs mobiles (TFLite, CoreML).
Comparez avec ConvNeXt. Pour les projets serveur en 2026, ConvNeXt (un CNN modernisé inspiré des Transformers) offre souvent de meilleures performances qu’EfficientNet avec un design plus simple. Testez les deux sur votre tâche.
Questions fréquentes sur EfficientNet
Quelle est la différence entre EfficientNet et ResNet ?
ResNet utilise des blocs résiduels avec des convolutions standard et se scale en ajoutant des couches (ResNet-18 → 152). EfficientNet utilise des blocs MBConv (convolutions depthwise separable + Squeeze-and-Excitation) et se scale de manière coordonnée sur trois dimensions (profondeur, largeur, résolution) via le compound scaling. Résultat : EfficientNet-B0 atteint une meilleure précision que ResNet-50 avec 5× moins de paramètres et 10× moins de FLOPs. ResNet reste plus simple à comprendre et dispose d’un écosystème plus large.
Qu’est-ce que le compound scaling ?
Le compound scaling augmente simultanément la profondeur (nombre de couches), la largeur (nombre de canaux) et la résolution (taille de l’image d’entrée) d’un CNN selon des proportions fixes. Au lieu de doubler la profondeur seule (comme passer de ResNet-50 à ResNet-101), le compound scaling augmente les trois dimensions en proportions calibrées : profondeur ×1.2, largeur ×1.1, résolution ×1.15 pour chaque incrément du coefficient φ. Cette approche coordonnée produit des modèles plus performants à coût computationnel égal.
EfficientNet est-il encore pertinent en 2026 ?
Pour le déploiement mobile et edge, oui. EfficientNet-B0 et EfficientNet-Lite restent parmi les meilleurs choix pour les appareils à ressources limitées. Pour les serveurs, ConvNeXt et les Vision Transformers offrent de meilleures performances. EfficientNetV2 reste compétitif pour le transfer learning grâce à sa bonne calibration et son entraînement rapide.
Quelle est la différence entre EfficientNet V1 et V2 ?
EfficientNetV2 (2021) introduit le bloc Fused-MBConv (plus rapide sur les accélérateurs matériels pour les premiers stages) et l’entraînement progressif (commencer petit, augmenter graduellement la résolution et l’augmentation). V2-M atteint la même précision que V1-B7 en s’entraînant 11× plus vite. V2-L (85.7% top-1 avec pré-entraînement ImageNet21k) dépasse même les ViT-L/16 avec moins de paramètres.
Comment fonctionne le bloc MBConv ?
Le MBConv (Mobile Inverted Bottleneck Convolution) est un bloc inspiré de MobileNetV2. Il expand d’abord les canaux (convolution 1×1), applique une convolution depthwise (filtre spatial par canal), recalibre les canaux via un module Squeeze-and-Excitation, puis projette vers la dimension de sortie (convolution 1×1). Une skip connection est ajoutée si les dimensions correspondent. L’astuce « inverted » : l’expansion se fait au début (contrairement au bottleneck ResNet qui réduit d’abord), car la convolution depthwise qui suit est très bon marché.