Reconnaissance d’Objets

Fonctions :

  • Reconnaissance d’Objets (exemple)

    La reconnaissance d’objets avec un réseau de neurones convolutif (CNN) consiste à détecter et classer automatiquement des objets présents dans une image. Elle repose sur l’extraction hiérarchique de caractéristiques (bords, formes, textures, etc.) à travers des couches convolutives.

    Importation :

    import tensorflow as tf
    from tensorflow.keras import layers, models
    from tensorflow.keras.datasets import cifar10
    import matplotlib.pyplot as plt
    import numpy as np

    Attributs :

    Composant Rôle Description
    Conv2D Extraction de caractéristiques Applique des filtres pour détecter des motifs locaux dans l’image.
    Activation Non-linéarité Utilise souvent ReLU pour introduire de la non-linéarité entre les couches.
    MaxPooling2D Réduction de dimension Diminue la taille des cartes de caractéristiques tout en conservant les informations importantes.
    Flatten Vectorisation Transforme les cartes 2D en vecteur 1D pour la classification.
    Dense Classification Couches pleinement connectées pour prédire la classe de l’objet.

    Exemple de code :

    import tensorflow as tf
    from tensorflow.keras import layers, models
    from tensorflow.keras.datasets import cifar10
    import matplotlib.pyplot as plt
    import numpy as np
    
    # Charger les données CIFAR-10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()
    
    # Normalisation des pixels entre 0 et 1
    x_train = x_train.astype("float32") / 255.0
    x_test = x_test.astype("float32") / 255.0
    
    # Conversion des labels en one-hot encoding
    y_train = tf.keras.utils.to_categorical(y_train, 10)
    y_test = tf.keras.utils.to_categorical(y_test, 10)
    
    # Définition du modèle CNN
    model = models.Sequential([
        layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
        layers.MaxPooling2D((2, 2)),
    
        layers.Conv2D(64, (3, 3), activation='relu'),
        layers.MaxPooling2D((2, 2)),
    
        layers.Conv2D(64, (3, 3), activation='relu'),
        layers.Flatten(),
    
        layers.Dense(64, activation='relu'),
        layers.Dense(10, activation='softmax')
    ])
    
    # Compilation
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
    # Entraînement
    model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.1)
    
    # Évaluation
    test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
    print(f"Test accuracy: {test_acc:.2f}")
    
    # Prédiction sur une image de test
    predictions = model.predict(x_test)
    predicted_label = np.argmax(predictions[0])
    
    # Affichage d’une image test et sa prédiction
    plt.imshow(x_test[0])
    plt.title(f"Prédiction : {predicted_label}")
    plt.axis("off")
    plt.show()

    Explication du code :

    1. Chargement et préparation des données CIFAR-10
    - Dataset utilisé : `CIFAR-10` (images 32x32 RGB réparties en 10 classes). - Normalisation des images : les valeurs des pixels sont converties en float32 et divisées par 255.0. - Conversion des labels : encodage one-hot pour les 10 classes.
    2. Architecture du modèle CNN (Convolutional Neural Network)
    - Réseau défini avec l’API `Sequential` : - `Conv2D` : 32 filtres, noyau `(3, 3)`, activation `relu`, entrée `(32, 32, 3)`. - `MaxPooling2D` : pool size `(2, 2)`. - `Conv2D` : 64 filtres, noyau `(3, 3)`, activation `relu`. - `MaxPooling2D` : pool size `(2, 2)`. - `Conv2D` : 64 filtres, noyau `(3, 3)`, activation `relu`. - `Flatten` : aplatissement de la sortie pour la couche dense. - `Dense` : 64 neurones, activation `relu`. - `Dense` : 10 neurones, activation `softmax` (classification multi-classes).
    3. Compilation et entraînement
    - Optimiseur : `Adam`. - Fonction de perte : `categorical_crossentropy` (adaptée au one-hot). - Métrique : `accuracy`. - Entraînement sur 5 époques, batch de 64, avec 10% des données de validation.
    4. Évaluation et prédiction
    - Évaluation du modèle sur les données de test avec affichage de la précision (`accuracy`). - Prédiction : application du modèle sur `x_test[0]`. - Affichage de l’image testée avec la classe prédite (`np.argmax(predictions[0])`).