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 être None.
    input_tensor Tensor à utiliser comme entrée du modèle (optionnel).
    input_shape Tuple de la forme (hauteur, largeur, canaux). Requis si include_top=False.
    pooling Optionnel. 'avg' ou 'max' : ajoute un global average ou max pooling en sortie du modèle si include_top=False.
    classes Nombre de classes à prédire si include_top=True et weights=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. Ou None.
    input_tensor Tensor optionnel à utiliser comme entrée du modèle.
    input_shape Tuple du type (hauteur, largeur, canaux), requis si include_top=False.
    pooling 'avg' ou 'max'. Applique un global pooling après les convolutions si include_top=False.
    classes Nombre de classes à prédire si include_top=True et weights=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.