ResNet (Residual Networks)
Fonctions :
-
ResNet50()
La fonction ResNet50() permet de charger l'architecture du modèle de réseau de neurones convolutif ResNet-50 (Residual Network à 50 couches), pré-entraîné ou non. Ce modèle est couramment utilisé pour les tâches de classification d'images. Il est disponible dans le module tensorflow.keras.applications.
Importation :
from tensorflow.keras.applications import ResNet50
Attributs :
Paramètre Type Valeur par défaut Description include_top bool True Inclut ou non la couche de classification finale (Dense). Mettre à False pour un usage en feature extractor. weights str ou None 'imagenet' Charge les poids pré-entraînés sur ImageNet. Mettre à None pour un modèle non entraîné. input_tensor Keras tensor None Tenseur Keras à utiliser comme entrée du modèle. input_shape tuple None Forme de l’entrée, utile si include_top=False. Ex: (224, 224, 3). pooling str ou None None Mode de pooling à appliquer si include_top=False. 'avg' ou 'max'. classes int 1000 Nombre de classes de sortie si include_top=True. classifier_activation str ou None 'softmax' Fonction d’activation de la couche de classification. Utilisée si include_top=True. Exemple de code :
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from tensorflow.keras.preprocessing import image import urllib.request # Charger le modèle ResNet50 pré-entraîné model = ResNet50(weights='imagenet') # URL d'une image d'exemple img_url = "https://upload.wikimedia.org/wikipedia/commons/2/26/YellowLabradorLooking_new.jpg" # Télécharger l'image img_path = "dog.jpg" urllib.request.urlretrieve(img_url, img_path) # Charger l'image et la préparer pour ResNet50 (224x224 pixels) img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) # normalisation spécifique ResNet50 # Faire la prédiction preds = model.predict(x) # Décoder les prédictions en noms de classes lisibles print('Top 3 prédictions :') for pred in decode_predictions(preds, top=3)[0]: print(f"{pred[1]} : {pred[2]*100:.2f}%") # Afficher l'image plt.imshow(img) plt.axis('off') plt.show()
Explication du code :
1. Importation des bibliothèques nécessaires
- Import de TensorFlow, NumPy et Matplotlib pour le deep learning, le traitement des données et l’affichage. - Import des modules Keras spécifiques à ResNet50 : modèle pré-entraîné, fonctions de pré-traitement et de décodage des prédictions. - Import de `urllib.request` pour télécharger une image depuis une URL.2. Chargement du modèle ResNet50 pré-entraîné
- Chargement du modèle ResNet50 avec les poids entraînés sur ImageNet (`weights='imagenet'`). - Ce modèle est prêt à faire de la classification d’images sur 1000 catégories différentes.3. Téléchargement et préparation de l’image
- Téléchargement de l’image depuis une URL publique et sauvegarde locale sous le nom `"dog.jpg"`. - Chargement de l’image en mémoire et redimensionnement à la taille attendue par ResNet50 : 224×224 pixels. - Conversion de l’image en tableau numérique avec une dimension supplémentaire pour le batch. - Application du pré-traitement spécifique de ResNet50 (`preprocess_input`) pour normaliser les pixels selon ce que le modèle attend.4. Prédiction avec le modèle
- Passage de l’image pré-traitée dans le modèle pour obtenir les probabilités associées aux différentes classes ImageNet.5. Décodage et affichage des résultats
- Conversion des probabilités en noms de classes lisibles via `decode_predictions`. - Affichage des trois classes les plus probables avec leur pourcentage de confiance.6. Affichage de l’image d’entrée
- Affichage de l’image originale pour visualiser ce qui a été classifié par le modèle.