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.
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.
Pour utiliser le modèle MedImageInsight, les prérequis sont les suivants :
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 :
Accédez au catalogue.
Recherchez MedImageInsight et sélectionnez la carte de modèle.
Dans la page de vue d’ensemble du modèle, sélectionnez Déployer.
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é.
Renseignez les détails dans la fenêtre du déploiement.
Notes
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.
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.
Dans cette section, vous consommez le modèle et vous effectuez des appels de base à celui-ci.
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.
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,
)
Le modèle MedImageInsight suppose une interaction simple à un seul tour, où une requête produit une réponse.
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] |
Nnull |
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 |
NTrue |
"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. |
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"
}
}
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. |
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
}
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.
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.
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.
- Déploiement et utilisation de MedImageInsight : découvrez comment déployer le modèle MedImageInsight par programmation et effectuer un appel d’API à celui-ci.
Création d’un classifieur zero-shot : découvrez comment utiliser MedImageInsight pour créer un classifieur sans avoir besoin d’apprentissage ou d’une grande quantité de données de vérité terrain étiquetées.
Amélioration de la classification avec des réseaux d’adaptateurs : améliorez les performances de la classification en créant un réseau de petits adaptateurs sur MedImageInsight.
Inférence des paramètres d’acquisition d’IRM à partir de données en pixels : comprendre comment extraire des paramètres d’acquisition d’examens IRM directement à partir de données d’imagerie.
Utilisation évolutive de points de terminaison MedImageInsight : découvrez comment générer des incorporations d’images médicales à grande échelle en utilisant l’API MedImageInsight tout en gérant facilement les problèmes réseau potentiels.