Polydesk-logotype
Polydesk.ai — Header

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.

EfficientNet en bref
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.

Pourquoi ça fonctionne Intuitivement, une image plus grande (résolution ↑) contient plus de détails. Pour les capturer, il faut plus de couches (profondeur ↑). Et chaque couche doit traiter plus de patterns (largeur ↑). Les trois dimensions sont interdépendantes. Le compound scaling exploite cette interdépendance au lieu de l’ignorer.

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).

Pourquoi « inverted » bottleneck ? Dans un bottleneck ResNet classique, on réduit d’abord les canaux (goulot), puis on les restaure. Dans MBConv, c’est l’inverse : on expand d’abord (ex. 24 → 144 canaux), on fait la convolution depthwise dans l’espace élargi, puis on projette vers la dimension de sortie (144 → 24). La convolution depthwise étant très légère, le surcoût de l’expansion est minimal.

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
Quel modèle choisir ? Pour le déploiement mobile : B0 ou EfficientNet-Lite. Pour la plupart des projets : B4 ou V2-S (meilleur rapport performance/coût). Pour la performance maximale : V2-M ou V2-L. Évitez B7 en production : V2-M le dépasse en précision tout en étant 11× plus rapide à entraîner.

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é.

Polydesk.ai — Footer