VGG (Visual Geometry Group)
Les architectures VGG16 et VGG19, proposées par l’équipe d’Oxford Visual Geometry Group en 2014, comptent parmi les modèles emblématiques de l’apprentissage profond pour la vision par ordinateur. Leur contribution majeure réside dans la démonstration qu’une augmentation de la profondeur du réseau, obtenue par l’empilement systématique de convolutions de petite taille (3×3), permet d’améliorer significativement la capacité de représentation des réseaux convolutifs. VGG16 et VGG19 se distinguent uniquement par le nombre de couches convolutives — respectivement 16 et 19 — mais reposent sur une architecture homogène et élégante, composée d’une succession de blocs convolution–pooling suivis de couches pleinement connectées. Bien que plus coûteux en calcul et en mémoire que des architectures plus récentes, ces modèles demeurent une référence incontournable, tant pour l’évaluation comparative que pour des applications pratiques via le transfert d’apprentissage. Dans cette section, nous présentons les caractéristiques essentielles de VGG16 et VGG19, leur structure, ainsi que leurs principaux usages dans des tâches de classification et de reconnaissance d’images.
Fonctions :
-
VGG16()
VGG16 est un modèle de réseau de neurones convolutionnel pré-entraîné sur ImageNet. Il est largement utilisé pour des tâches de classification, d’extraction de caractéristiques et de transfert learning. Le modèle comporte 16 couches avec poids (13 convolutions + 3 fully connected).
Importation :
from tensorflow.keras.applications import VGG16
Attributs :
Paramètre
Description
include_top
Booléen. Si True
, inclut les 3 couches fully-connected en haut du réseau. Sinon, ne conserve que les convolutions.weights
Poids du modèle. Utiliser 'imagenet'
pour charger les poids pré-entraînés. Peut aussi êtreNone
.input_tensor
Tensor à utiliser comme entrée du modèle (optionnel). input_shape
Tuple de la forme (hauteur, largeur, canaux)
. Requis siinclude_top=False
.pooling
Optionnel. 'avg'
ou'max'
: ajoute un global average ou max pooling en sortie du modèle siinclude_top=False
.classes
Nombre de classes à prédire si include_top=True
etweights=None
.Exemple de code :
from tensorflow.keras.applications import VGG16 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.vgg16 import preprocess_input import numpy as np # Charger le modèle VGG16 sans les couches fully connected (include_top=False) base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Ajouter une couche de pooling global et une couche de sortie x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # Créer le modèle final model = Model(inputs=base_model.input, outputs=predictions) # Geler les couches convolutives for layer in base_model.layers: layer.trainable = False # Compiler le modèle model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Afficher le résumé du modèle model.summary()
Explication du code :
1. Importation des bibliothèques nécessaires
- Chargement du modèle pré-entraîné VGG16 et des outils Keras pour construire et manipuler le modèle. - Modules pour le traitement des images et la prétraitement selon VGG16. - `numpy` pour la gestion des tableaux.2. Chargement du modèle VGG16 pré-entraîné
- Modèle VGG16 avec poids pré-entraînés sur ImageNet (`weights='imagenet'`). - `include_top=False` : on retire les couches fully connected en haut pour personnaliser la sortie. - Dimension d’entrée fixée à `(224, 224, 3)` (taille standard ImageNet).3. Ajout de nouvelles couches personnalisées
- **GlobalAveragePooling2D** : réduit la sortie convolutionnelle en un vecteur de caractéristiques global. - Couche dense (fully connected) de 1024 neurones avec activation ReLU pour apprendre des représentations complexes. - Couche de sortie dense avec 10 neurones et activation softmax, adaptée à une classification à 10 classes.4. Création du modèle final
- Le modèle final prend en entrée les images du VGG16 initial. - La sortie est celle des nouvelles couches ajoutées, adaptées à la nouvelle tâche de classification.5. Gel des couches convolutives pré-entraînées
- Toutes les couches du VGG16 original sont rendues non entraînables (`trainable = False`). - Cela permet de conserver les caractéristiques déjà apprises, évitant de les modifier lors de l’entraînement.6. Compilation du modèle
- Optimiseur Adam pour la mise à jour des poids. - Fonction de perte `categorical_crossentropy` adaptée à la classification multi-classes avec labels one-hot. - Métrique utilisée : précision (`accuracy`).7. Affichage du résumé du modèle
- Visualisation de la structure du modèle avec le détail des couches, formes des tenseurs et nombre de paramètres. -
VGG19()
VGG19 est une architecture de CNN profonde avec 19 couches pondérées (16 convolutions + 3 fully connected). Elle est largement utilisée pour la classification d’image et le transfert learning, avec des poids pré-entraînés sur ImageNet.
Importation :
from tensorflow.keras.applications import VGG19
Attributs :
Paramètre
Description
include_top
Booléen. Si True
, inclut les 3 couches fully connected en haut du réseau.weights
Poids du modèle. Mettre 'imagenet'
pour charger les poids pré-entraînés. OuNone
.input_tensor
Tensor optionnel à utiliser comme entrée du modèle. input_shape
Tuple du type (hauteur, largeur, canaux)
, requis siinclude_top=False
.pooling
'avg'
ou'max'
. Applique un global pooling après les convolutions siinclude_top=False
.classes
Nombre de classes à prédire si include_top=True
etweights=None
.Exemple de code :
from tensorflow.keras.applications import VGG19 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D # Charger VGG19 sans les couches fully-connected base_model = VGG19(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Ajouter nos propres couches personnalisées x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(512, activation='relu')(x) predictions = Dense(5, activation='softmax')(x) # Créer le modèle complet model = Model(inputs=base_model.input, outputs=predictions) # Geler les couches du modèle VGG19 pour ne pas les entraîner for layer in base_model.layers: layer.trainable = False # Compiler model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Afficher le résumé model.summary()
Explication du code :
1. Importation des bibliothèques nécessaires
- Import du modèle pré-entraîné VGG19 et des outils Keras pour construire et manipuler le modèle. - Import des couches denses et de pooling global pour personnaliser la tête du modèle.2. Chargement du modèle VGG19 pré-entraîné
- Chargement de VGG19 avec poids ImageNet (`weights='imagenet'`). - `include_top=False` : suppression des couches fully connected originales. - Dimension d’entrée fixée à `(224, 224, 3)` pour correspondre aux images RGB.3. Ajout de nouvelles couches personnalisées
- Couche GlobalAveragePooling2D pour condenser les cartes de caractéristiques en un vecteur. - Couche dense de 512 neurones avec activation ReLU pour apprendre des caractéristiques spécifiques. - Couche de sortie dense à 5 neurones avec activation softmax, adaptée à une classification en 5 classes.4. Création du modèle final
- Le modèle prend en entrée les images du VGG19 original. - La sortie correspond aux nouvelles couches ajoutées pour la tâche spécifique.5. Gel des couches convolutives pré-entraînées
- Toutes les couches de VGG19 sont rendues non entraînables (`trainable = False`) pour conserver les caractéristiques apprises et éviter leur modification lors de l’entraînement.6. Compilation du modèle
- Optimiseur Adam pour la mise à jour des poids des nouvelles couches. - Perte `categorical_crossentropy` adaptée à la classification multi-classes avec labels one-hot. - Évaluation avec la métrique précision (`accuracy`).7. Affichage du résumé du modèle
- Affichage détaillé de la structure du modèle, incluant couches, formes des tenseurs, et nombre de paramètres entraînables ou non.