Analyse d’Image Médicale

Fonctions :

  • Analyse d’Image Médicale (exemple)

    L’analyse d’image médicale utilise des techniques de traitement d’image et d’apprentissage profond pour détecter, segmenter ou classifier des anomalies dans des images médicales comme des radiographies, IRM ou scanners. Cette méthode peut aider au diagnostic en automatisant la détection des structures anatomiques ou pathologies.

    Exemple de code :

    import tensorflow as tf
    from datasets import load_dataset
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 3. Charger le dataset Chest X‑Ray Pneumonia
    dataset = load_dataset("hf-vision/chest-xray-pneumonia")  # public, pas besoin de token :contentReference[oaicite:0]{index=0}
    
    # 4. Inspecter un exemple
    example = dataset['train'][0]
    img = example['image']
    label = example['label']  # 0 = NORMAL, 1 = PNEUMONIA
    plt.imshow(img.convert("L"), cmap="gray")
    plt.title(f"Label: {'PNEUMONIA' if label==1 else 'NORMAL'}")
    plt.axis(False)
    plt.show()
    
    # 5. Prétraitement : resize + normalisation
    IMG_SIZE = (180, 180)
    def preprocess(batch):
        imgs = [np.array(x.resize(IMG_SIZE).convert("RGB"))/255.0 for x in batch['image']]
        labels = batch['label']
        return {"image": np.stack(imgs), "label": np.array(labels)}
    
    ds_train = dataset["train"].map(preprocess, batched=True)
    ds_test = dataset["test"].map(preprocess, batched=True)
    
    # Convertir en tf.data.Dataset
    X_train, y_train = ds_train["image"], ds_train["label"]
    X_test, y_test = ds_test["image"], ds_test["label"]
    
    train_ds = tf.data.Dataset.from_tensor_slices((X_train, y_train)).shuffle(1000).batch(32).prefetch(tf.data.AUTOTUNE)
    test_ds = tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(32).prefetch(tf.data.AUTOTUNE)
    
    # 6. Modèle CNN simple
    model = tf.keras.Sequential([
        tf.keras.layers.Conv2D(32,3,activation="relu",input_shape=(180,180,3)),
        tf.keras.layers.MaxPooling2D(),
        tf.keras.layers.Conv2D(64,3,activation="relu"),
        tf.keras.layers.MaxPooling2D(),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(128, activation="relu"),
        tf.keras.layers.Dense(1, activation="sigmoid")
    ])
    model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
    
    # 7. Entraînement
    model.fit(train_ds, epochs=3, validation_data=test_ds)
    
    # 8. Évaluation
    loss, acc = model.evaluate(test_ds)
    print(f"\n✅ Test Accuracy: {acc:.2%}")
    
    # 9. Prédiction visuelle
    for X_batch, y_batch in test_ds.take(1):
        preds = model.predict(X_batch)
        for img, true, pred in zip(X_batch[:5], y_batch[:5], preds[:5]):
            plt.imshow(img.numpy())
            plt.title(f"Vrai: {'PNEUMONIA' if int(true)==1 else 'NORMAL'} / Prédit: {'PNEU' if pred>0.5 else 'NOR'} ({pred:.2f})")
            plt.axis(False)
            plt.show()

    Explication du code :

    1. Importation des bibliothèques
    - `tensorflow` : création, entraînement et évaluation du modèle CNN. - `datasets` : chargement du dataset Hugging Face `chest-xray-pneumonia`. - `numpy` : traitement des tableaux d’images. - `matplotlib.pyplot` : visualisation des images.
    2. Chargement du dataset Chest X‑Ray Pneumonia
    - Dataset public Hugging Face : `hf-vision/chest-xray-pneumonia`. - Deux classes : - `0` = NORMAL (poumons sains) - `1` = PNEUMONIA (poumons infectés)
    3. Affichage d’un exemple
    - Sélection du premier exemple du jeu d’entraînement. - Affichage de l’image en niveaux de gris. - Titre indiquant la classe réelle : NORMAL ou PNEUMONIA.
    4. Prétraitement des données
    - **Redimensionnement** des images à (180, 180). - **Conversion RGB** (3 canaux). - **Normalisation** des pixels entre 0 et 1 (`/255`). - Application du prétraitement par lot via `map(batched=True)`.
    5. Conversion en `tf.data.Dataset`
    - Création de `train_ds` et `test_ds` à partir des tableaux NumPy. - **Shuffle**, **batching** (32 images), et **préchargement automatique** (prefetch) pour une exécution efficace.
    6. Définition du modèle CNN
    - Architecture simple avec : - 2 couches `Conv2D` + `MaxPooling2D` - `Flatten` pour passer aux couches denses - `Dense(128)` puis `Dense(1, activation='sigmoid')` pour classification binaire - Compilation avec `adam`, `binary_crossentropy` et précision (`accuracy`).
    7. Entraînement du modèle
    - Entraînement pendant 3 époques (`epochs=3`). - Validation sur le jeu de test.
    8. Évaluation finale
    - Évaluation du modèle sur le jeu de test. - Affichage de la précision finale sous forme de pourcentage.
    9. Prédictions visuelles
    - Prédictions sur un lot de test. - Affichage des 5 premières images avec : - Classe réelle (Vrai) - Classe prédite (Prédit) - Score de prédiction (`sigmoid`, entre 0 et 1) - Visualisation des résultats pour interprétation visuelle.