VGG (Visual Geometry Group)

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.