Analyse d’Image Médicale

L’analyse d’image médicale consiste à utiliser des techniques de traitement d’images et de réseaux de neurones pour extraire des informations pertinentes à partir de données médicales, comme des radiographies, IRM, scanners ou échographies. L’objectif est d’aider au diagnostic, à la détection de maladies et à la planification des traitements.

Le principe repose sur l’application de réseaux de neurones convolutionnels (CNN) pour détecter et classifier des structures anatomiques, identifier des anomalies ou segmenter des zones spécifiques. Les architectures peuvent inclure des modèles pré-entraînés comme ResNet, VGG ou EfficientNet, adaptés aux images médicales et souvent combinés avec des techniques de prétraitement et d’augmentation de données pour améliorer la précision.

L’analyse d’image médicale est utilisée pour la détection de tumeurs, la segmentation d’organes, le suivi d’évolution de maladies, et la prédiction de résultats cliniques, contribuant à une prise de décision plus rapide et plus précise.

En résumé, l’analyse d’image médicale permet d’exploiter les capacités des réseaux de neurones pour extraire des informations critiques à partir d’images médicales, améliorant le diagnostic et le suivi des patients.

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()
    Résultat du code

    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.

⚠️ Ce contenu est réservé aux membres Premium

Abonnez-vous pour débloquer cette page et accéder à tous nos contenus exclusifs.

Souscrire maintenant