Comment utiliser le modèle IA CXRReportGen Healthcare pour générer des résultats ancrés
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 apprendrez à déployer CXRReportGen en tant que point de terminaison en ligne pour l’inférence en temps réel et à é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.
CXRReportGen – modèle de génération de rapports pour les radiographies pulmonaires
Les rapports de radiologie exigent une compréhension détaillée des images, l’intégration de données multiples (y compris des comparaisons avec des images antérieures) et la génération d’un langage précis, ce qui en fait un candidat idéal pour les modèles multimodaux génératifs. CXRReportGen génère une liste des résultats d’une étude sur les rayons X de poitrine et effectue également une génération de rapports à base ou tâche de de base. Autrement dit, le modèle CXRReportGen intègre également la localisation des résultats individuels sur l’image. La mise en place améliore la clarté de l’interprétation de l’image et la transparence du texte généré par l’IA, ce qui améliore l’utilité de la rédaction automatique de rapports.
L’animation suivante illustre l’architecture conceptuelle du modèle CXRReportGen, qui se compose d’un modèle incorporé associé à un modèle de langage grand motif général (LLM).
Le modèle CXRReportGen combine un encodeur d’image spécifique à la radiologie avec un modèle de langage volumineux et prend en tant qu’entrées un ensemble de données plus complet que de nombreuses approches traditionnelles. Les données d’entrée incluent l’image frontale actuelle, l’image latérale actuelle, l’image frontale précédente, le rapport précédent et l’indication, la technique et les sections de comparaison du rapport actuel. Ces ajouts améliorent considérablement la qualité des rapports et réduisent les informations incorrectes, démontrant finalement la faisabilité de la création de rapports fondée comme une tâche nouvelle et plus riche dans la radiologie automatisée.
Prérequis
Pour utiliser le modèle CXRReportGen, les prérequis sont les suivants :
Un modèle de déploiement
Déploiement sur un calcul managé auto-hébergé
Le modèle CXRReportGen peut être déployé sur notre solution d’inférence gérée auto-hébergée, qui vous permet de personnaliser et de contrôler tous les détails sur la manière 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 CxrReportGen 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.
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.
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.
Travailler avec un modèle de génération de rapports fondé pour l’analyse des radiographies du thorax
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
Consommer le modèle de génération de rapports CXRReportGen en tant qu’API REST, en utilisant de simples requêtes GET 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 une liste de résultats et de zones englobantes correspondantes.
input_data = {
"frontal_image": base64.encodebytes(read_image(frontal_path)).decode("utf-8"),
"lateral_image": base64.encodebytes(read_image(lateral_path)).decode("utf-8"),
"indication": indication,
"technique": technique,
"comparison": comparison,
}
data = {
"input_data": {
"columns": list(input_data.keys()),
# IMPORANT: Modify the index as needed
"index": [0], # 1, 2],
"data": [
list(input_data.values()),
],
}
}
# 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 CXRReportGen
Le modèle CXRReportGen suppose une interaction simple à tour unique 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 | Description |
---|---|---|---|
input_data |
[object] |
Y | Un objet contenant la charge utile des données d'entrée |
L'objet input_data
contient les champs suivants :
Clé | Type | Obligatoire/Par défaut | Valeurs autorisées | Description |
---|---|---|---|---|
columns |
list[string] |
Y | "frontal_image" , "lateral_image" , "prior_image" ,"indication" , "technique" , "comparison" , "prior_report" |
Un objet contenant les chaînes mappant les données aux entrées passées au modèle. |
index |
integer |
Y | De 0 à 10 | Nombre d’entrées passées au modèle. Vous êtes limité(e) par la quantité de RAM GPU dont vous disposez sur la VM où CxrReportGen est hébergé, et par la quantité de données qui peut être transmise en une seule requête POST – qui dépend de la taille de vos images. Il est donc raisonnable de maintenir ce nombre au-dessous de 10. Vérifiez les journaux de modèle si vous recevez des erreurs lors de la transmission de plusieurs entrées. |
data |
list[list[string]] |
Y | "" | La liste contient la liste des éléments passés au modèle. La longueur de la liste est définie par le paramètre d’index. Chaque élément est une liste de plusieurs chaînes. L’ordre et la signification sont définis par le paramètre columns . Les chaînes de texte contiennent du texte. Les chaînes d’image sont les octets de l’image codés en base64 et décodés sous forme de chaîne UTF-8 |
Exemple de requête
Une simple inférence demandant la liste des résultats d’une seule image frontale sans indication fournie
{
"input_data": {
"columns": [
"frontal_image"
],
"index":[0],
"data": [
["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n"]
]
}
}
Requête plus complexe transmettant lesfront, latéral, latéral et technique
{
"input_data": {
"columns": [
"frontal_image",
"lateral_image",
"indication",
"technique"
],
"index":[0],
"data": [
["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
"iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
"Cough and wheezing for 5 months",
"PA and lateral views of the chest were obtained"]
]
}
}
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 |
---|---|---|
output |
list[list[string, list[list[float]]]] |
La liste des résultats. Chaque recherche est un élément d’une liste représentée par une liste qui contient une chaîne avec le texte de recherche et une liste qui contient des zones englobantes. Chaque zone englobante est représentée par une liste de quatre coordonnées du cadre englobant lié à la recherche dans l’ordre suivant : x_min , y_min , x_max , y_max . Chaque valeur de coordonnée est comprise entre 0 et 1, afin d’obtenir des coordonnées dans l’espace de l’image pour le rendu ou le traitement de ces valeurs doivent être multipliées par la largeur ou la hauteur de l’image en conséquence |
Exemple de réponse
Une inférence simple demandant l’incorporation d’une seule chaîne
{
"output": [
["The heart size is normal.", null],
["Lungs demonstrate blunting of both costophrenic angles.", [[0.005, 0.555, 0.965, 0.865]]],
["There is an area of increased radiodensity overlying the left lower lung.", [[0.555, 0.405, 0.885, 0.745]]],
["Healed fractures of the left fourth, fifth, sixth, seventh, and eighth posterior ribs are noted.", [[0.585, 0.135, 0.925, 0.725]]]
]
}
Formats d’image pris en charge
L’API du modèle déployé prend en charge les images codées au format PNG ou JPEG. Pour des résultats optimaux, nous recommandons d’utiliser des PNG non compressés/sans perte avec des images monochromatiques de 8 bits.
En apprendre plus à partir d’échantillons
CXRReportGen est un modèle polyvalent qui peut être appliqué à un large éventail de tâches et de modalités d’imagerie. Pour plus d’exemples, consultez le notebook Python interactif suivant :
- Déployer et utiliser CXRReportGen : Apprenez à déployer le modèle CXRReportGen et à l’intégrer dans votre flux de travail. Ce notebook couvre également les techniques d’analyse de zone englobante et de visualisation.