Partager via


Comment utiliser le modèle IA pour la santé MedImageInsight pour la génération d’incorporation d’images médicales

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Important

Les modèles IA de santé sont destinés à la recherche et à l’exploration du développement de modèles. Les modèles ne sont pas conçus ou destinés à être déployés dans un cadre clinique, car ils ne sont pas utilisés dans le diagnostic ou le traitement de conditions de santé ou médicales, et les performances des modèles individuels à ces fins n’ont pas été établies. Vous êtes seul responsable de toute utilisation des modèles IA de santé, y compris la vérification des sorties et l’incorporation dans n’importe quel produit ou service destiné à un but médical ou pour informer la prise de décision clinique, de la conformité aux lois et réglementations applicables aux soins de santé, ainsi que l’obtention des autorisations ou approbations nécessaires.

Dans cet article, vous découvrez comment déployer MedImageInsight à partir du catalogue de modèles en tant que point de terminaison en ligne pour l’inférence en temps réel. Vous découvrez aussi comment émettre un appel de base à l’API. Voici les étapes à suivre :

  • Déployer le modèle sur un calcul managé auto-hébergé.
  • Accorder des autorisations au point de terminaison.
  • Envoyer des données de test au modèle, recevoir et interpréter les résultats.

MedImageInsight – le modèle d’incorporation d’imagerie médicale

Le modèle de base MedImageInsight pour la santé est un modèle puissant, qui peut traiter une grande variété d’images médicales. Ces images comprennent des radiographies, des tomographies, des IRM, des photographies cliniques, des dermoscopies, des images d’histopathologie, des échographies et des mammographies. Des évaluations rigoureuses montrent la capacité de MedImageInsight à atteindre des performances correspondant à l’état de l’art ou du niveau d’une expertise humaine pour les tâches de classification, de recherche d’image à image et d’optimisation. Plus précisément, sur des jeux de données publics, MedImageInsight obtient ou dépasse des performances correspondant à l’état de l’art dans la classification et la recherche des maladies du thorax par rayons X, la classification et la recherche en dermatologie, la classification et la recherche en tomographie en cohérence optique (OCT), et l’extraction d’images médicales 3D. Le modèle atteint également des performances proches de celles de l’état de l’art pour la classification et la recherche en histopathologie.

Un modèle d’incorporation est capable de servir de base à de nombreuses solutions, de la classification à des scénarios plus complexes tels que le rattachement à des groupes ou la détection de valeurs hors norme. L’animation suivante montre un modèle d’incorporation utilisé pour la recherche de similarité d’images et pour détecter les images qui sont hors norme.

Animation montrant un modèle d’incorporation capable de prendre en charge des scénarios de recherche de similarité et de contrôle qualité.

Prérequis

Pour utiliser le modèle MedImageInsight, les prérequis sont les suivants :

Un modèle de déploiement

Déploiement sur un calcul managé auto-hébergé

Le modèle MedImageInsight peut être déployé sur notre solution d’inférence managée auto-hébergée, ce qui vous permet de personnaliser et de contrôler tous les détails sur la façon dont le modèle est servi. Vous pouvez déployer le modèle via l’interface utilisateur du catalogue (dans Azure AI Foundry ou Azure Machine Learning Studio) ou déployer par programmation.

Pour déployer le modèle via l’interface utilisateur :

  1. Accédez au catalogue.

  2. Recherchez MedImageInsight et sélectionnez la carte de modèle.

  3. Dans la page de vue d’ensemble du modèle, sélectionnez Déployer.

  4. Si vous avez la possibilité de choisir entre un déploiement d’API serverless et un déploiement avec un calcul managé, sélectionnez Calcul managé.

  5. Renseignez les détails dans la fenêtre du déploiement.

    Remarque

    Pour un déploiement sur un calcul managé auto-hébergé, vous devez disposer d’un quota suffisant dans votre abonnement. Si vous n’avez pas suffisamment de quota disponible, vous pouvez utiliser notre accès temporaire au quota en sélectionnant l’option Je souhaite utiliser le quota partagé et je reconnais que ce point de terminaison sera supprimé dans 168 heures.

  6. Sélectionnez Déployer.

Pour déployer le modèle par programmation, consultez Comment déployer et inférer un déploiement de calcul managé avec du code.

Utiliser un modèle d’incorporation

Dans cette section, vous consommez le modèle et vous effectuez des appels de base à celui-ci.

Utiliser l’API REST pour consommer le modèle

Consommez le modèle d’incorporation MedImageInsight en tant qu’API REST, en utilisant des requêtes GET simples ou en créant un client comme suit :

from azure.ai.ml import MLClient
from azure.identity import DeviceCodeCredential

credential = DefaultAzureCredential()

ml_client_workspace = MLClient.from_config(credential)

Dans la configuration du déploiement, vous pouvez choisir la méthode d’authentification. Cet exemple utilise l’authentification basée sur des jetons d’Azure Machine Learning. Pour plus d’options d’authentification, consultez la page de documentation correspondante. Notez également que le client est créé à partir d’un fichier de configuration créé automatiquement pour les machines virtuelles Azure Machine Learning. Pour en savoir plus, consultez la page de documentation de l’API correspondante.

Effectuer des appels de base au modèle

Une fois le modèle déployé, utilisez le code suivant pour envoyer des données et récupérer des incorporations.

import base64
import json
import os

endpoint_name = "medimageinsight"
deployment_name = "medimageinsight-v1"

sample_image_xray = os.path.join(image_path)

def read_image(image_path):
    with open(image_path, "rb") as f:
        return f.read()

data = {
    "input_data": {
        "columns": ["image", "text"],
        #  IMPORTANT: Modify the index as needed
        "index": [0],
        "data": [
            [
                base64.encodebytes(read_image(sample_image_xray)).decode("utf-8"),
                "x-ray chest anteroposterior Pneumonia",
            ]
        ],
    },
    "params": {"get_scaling_factor": True},
}

# Create request json
request_file_name = "sample_request_data.json"
with open(request_file_name, "w") as request_file:
    json.dump(data, request_file)

response = ml_client_workspace.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name=deployment_name,
    request_file=request_file_name,
)

Utiliser l’API REST de MedImageInsight

Le modèle MedImageInsight suppose une interaction simple à un seul tour, où une requête produit une réponse.

Schéma de requête

La charge utile de la requête est une chaîne au format JSON contenant les paramètres suivants :

Clé Type Obligatoire/Par défaut Valeurs autorisées Description
input_data [object] Y Un objet contenant la charge utile des données d’entrée
params [object] N
null
Un objet contenant des paramètres passés au modèle

L’objet input_data contient les champs suivants :

Clé Type Obligatoire/Par défaut Valeurs autorisées Description
columns list[string] Y "text", "image" Un objet contenant les chaînes mappant les données aux entrées passées au modèle.
index integer Y 0 – 1024 Nombre d’entrées passées au modèle. Vous êtes limité par la quantité de données qui peuvent être passées dans une même requête POST, qui dépend de la taille de vos images. Vous devez donc maintenir ce nombre à quelques dizaines.
data list[list[string]] Y «» La liste contient les éléments passés au modèle qui est défini par le paramètre index. Chaque élément est une liste de deux chaînes. L’ordre est défini par le paramètre columns. La chaîne text contient du texte à incorporer. Les chaînes image sont les octets de l’image codés en base64 et décodés sous forme de chaîne UTF-8.

L’objet params contient les champs suivants :

Clé Type Obligatoire/Par défaut Valeurs autorisées Description
get_scaling_factor boolean N
True
"True" OU "False" Indique si le modèle doit retourner le facteur de mise à l’échelle « température ». Ce facteur est utile quand vous envisagez de comparer plusieurs valeurs de similarité cosinus dans une application comme la classification. Il est essentiel pour une implémentation correcte du type de scénarios « zero-shot ». Pour une utilisation, reportez-vous à l’exemple de classification zero-shot en lien dans la section Techniques de classification.

Exemple de requête

Une inférence simple demandant l’incorporation d’une seule chaîne

{
  "input_data": {
    "columns": [
      "image",
      "text"
    ],
    "index":[0],
    "data": [
      ["", "a quick brown fox jumps over the lazy dog"]
    ]
  },
  "params": {}
}

Demande d’incorporation d’une image et d’une chaîne, demandant le retour du facteur de mise à l’échelle

{
    "input_data": {
        "columns": ["image", "text"],
        "index": [0],
        "data": [
            [
                "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
                "x-ray chest anteroposterior Pleural Effusion"
            ]
        ]
    },
    "params": {
        "get_scaling_factor": "true"
    }
}

Schéma de réponse

La charge utile de la réponse est une chaîne au format JSON contenant les champs suivants :

Clé Type Description
image_features list[list[float]] Si elle est demandée, une liste de vecteurs, une par image envoyée.
text_features list[list[float]] Si elle est demandée, une liste de vecteurs, une par chaîne de texte envoyée.
scaling_factor float S’il est demandé, le facteur de mise à l’échelle.

Exemple de réponse

Une inférence simple demandant l’incorporation d’une seule chaîne

{
  "image_features": [[0.029661938548088074, -0.027228673920035362, ... , -0.0328846238553524]],
  "text_features": [[0.0028937323950231075, 0.004354152828454971, -0.0227945726364851, ..., 0.002080598147585988]],
  "scaling_factor": 4.516357
}

Autres considérations relatives à l’implémentation

Le nombre maximal de jetons traités dans la chaîne d’entrée est de 77. Tout ce qui est au-delà de 77 jetons sera supprimé avant d’être passé au modèle. Le modèle utilise un générateur de jetons CLIP (Contrastive Language-Image Pre-Training) qui utilise environ trois caractères latins par jeton.

Le texte envoyé est incorporé dans le même espace latent que l’image. Par conséquent, des chaînes décrivant des images médicales de certaines parties du corps obtenues avec certaines modalités d’imagerie sont incorporées près de ces images. En outre, lors de la création de systèmes basés sur un modèle MedImageInsight, vous devez vous assurer que toutes vos chaînes d’incorporation sont cohérentes entre elles (ordre des mots et ponctuation). Pour obtenir les meilleurs résultats avec le modèle de base, les chaînes doivent suivre le modèle <image modality> <anatomy> <exam parameters> <condition/pathology>., par exemple : x-ray chest anteroposterior Atelectasis..

Si vous optimisez le modèle, vous pouvez modifier ces paramètres en fonction des besoins de votre application.

Formats d’image pris en charge

L’API du modèle déployé prend en charge les images codées au format PNG.

Quand le modèle reçoit les images, il effectue un prétraitement qui implique la compression et le redimensionnement des images en 512x512 pixels.

Le format de compression préféré est PNG sans perte, contenant une image monochromatique ou RVB 8 bits. À des fins d’optimisation, vous pouvez effectuer un redimensionnement côté client pour réduire le trafic réseau.

En apprendre plus à partir d’échantillons

MedImageInsight est un modèle polyvalent qui peut être appliqué à un large éventail de tâches et de modalités d’imagerie. Pour obtenir des exemples plus spécifiques de résolution de différentes tâches avec MedImageInsight, consultez les notebooks Python interactifs suivants.

Mise en route

Techniques de classification

Applications avancées