CXRReportGen Healthcare AI-model gebruiken om geaarde bevindingen te genereren
Belangrijk
Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
Belangrijk
De AI-modellen voor gezondheidszorg zijn bedoeld voor onderzoek en modelontwikkeling. De modellen zijn niet ontworpen of bedoeld om te worden geïmplementeerd in klinische instellingen, noch voor gebruik bij de diagnose of behandeling van een gezondheids- of medische aandoening, en de prestaties van de individuele modellen voor dergelijke doeleinden zijn niet vastgesteld. U bent alleen verantwoordelijk en aansprakelijk voor elk gebruik van de AI-modellen voor gezondheidszorg, met inbegrip van de verificatie van uitvoer en integratie in een product of dienst die is bedoeld voor een medisch doel of om klinische besluitvorming, naleving van toepasselijke gezondheidszorgwetten en -voorschriften te informeren en eventuele benodigde goedkeuringen of goedkeuringen te verkrijgen.
In dit artikel leert u hoe u CXRReportGen implementeert als een online-eindpunt voor realtime deductie en een eenvoudige aanroep naar de API uitvoert. De stappen die u uitvoert, zijn:
- Implementeer het model op een zelf-hostende beheerde berekening.
- Verken machtigingen aan het eindpunt.
- Testgegevens verzenden naar het model, het ontvangen en interpreteren van resultaten
CXRReportGen - geaard rapportgeneratiemodel voor borstfoto's
Radiologierapportage vereist gedetailleerde beeldkennis, integratie van meerdere invoer (inclusief vergelijkingen met eerdere imaging) en nauwkeurige taalgeneratie, waardoor het een ideale kandidaat is voor generatieve multimodale modellen. CXRReportGen genereert een lijst met bevindingen van een röntgenonderzoek op de borst en voert ook een geaarde rapportgeneratie - of grondtaak uit. Dat wil gezegd, het CXRReportGen-model bevat ook de lokalisatie van afzonderlijke bevindingen op de afbeelding. Grounding verbetert de duidelijkheid van de interpretatie van afbeeldingen en de transparantie van door AI gegenereerde tekst, waardoor het nut van geautomatiseerd opstellen van rapporten wordt verbeterd.
In de volgende animatie ziet u de conceptuele architectuur van het CXRReportGen-model, dat bestaat uit een insluitmodel dat is gekoppeld aan een algemeen reasonermodel voor grote talen (LLM).
Het CXRReportGen-model combineert een radiologiespecifieke beeldcoderingsprogramma met een groot taalmodel en neemt als invoer een uitgebreidere set gegevens op dan veel traditionele benaderingen. De invoergegevens bevatten de huidige frontale afbeelding, de huidige laterale afbeelding, de vorige frontale afbeelding, het vorige rapport en de indicatie, techniek en vergelijkingssecties van het huidige rapport. Deze toevoegingen verbeteren de kwaliteit van het rapport aanzienlijk en verminderen onjuiste informatie, waardoor uiteindelijk de haalbaarheid van geaarde rapportage als een nieuwe en rijkere taak in geautomatiseerde radiologie wordt aangetoond.
Vereisten
Als u het CXRReportGen-model wilt gebruiken, hebt u de volgende vereisten nodig:
Een modelimplementatie
Implementatie naar een zelf-hostende beheerde compute
Het CXRReportGen-model kan worden geïmplementeerd in onze zelf-hostende beheerde deductieoplossing, waarmee u alle details over hoe het model wordt geleverd, kunt aanpassen en beheren. U kunt het model implementeren via de catalogusgebruikersinterface (in AI Foundry of Azure Machine Learning-studio) of programmatisch implementeren.
Het model implementeren via de gebruikersinterface:
Ga naar de catalogus.
Zoek naar CxrReportGen en selecteer de modelkaart.
Selecteer Implementeren op de overzichtspagina van het model.
Als u de optie krijgt om te kiezen tussen serverloze API-implementatie en implementatie met behulp van een beheerde berekening, selecteert u Managed Compute.
Vul de details in het implementatievenster in.
Notitie
Voor implementatie naar een zelf-hostende beheerde rekenkracht moet u voldoende quotum in uw abonnement hebben. Als u onvoldoende quotum beschikbaar hebt, kunt u onze tijdelijke quotumtoegang gebruiken door de optie te selecteren die ik wil gebruiken gedeeld quotum en ik bevestig dat dit eindpunt over 168 uur wordt verwijderd.
Selecteer Implementeren.
Als u het model programmatisch wilt implementeren, raadpleegt u Hoe u een beheerde rekenprocesimplementatie implementeert en deductie met code.
Werken met een geaard rapportgeneratiemodel voor X-ray-analyse op de borst
In deze sectie gebruikt u het model en voert u eenvoudige aanroepen naar het model uit.
REST API gebruiken om het model te gebruiken
Gebruik het CXRReportGen-rapportgeneratiemodel als een REST API, met behulp van eenvoudige GET-aanvragen of door een client als volgt te maken:
from azure.ai.ml import MLClient
from azure.identity import DeviceCodeCredential
credential = DefaultAzureCredential()
ml_client_workspace = MLClient.from_config(credential)
In de implementatieconfiguratie kunt u de verificatiemethode kiezen. In dit voorbeeld wordt verificatie op basis van azure Machine Learning-tokens gebruikt. Zie de bijbehorende documentatiepagina voor meer verificatieopties. Houd er ook rekening mee dat de client wordt gemaakt op basis van een configuratiebestand dat automatisch wordt gemaakt voor virtuele Azure Machine Learning-machines (VM's). Meer informatie vindt u op de bijbehorende API-documentatiepagina.
Basisoproepen naar het model maken
Zodra het model is geïmplementeerd, gebruikt u de volgende code om gegevens te verzenden en een lijst met bevindingen en bijbehorende begrenzingsvakken op te halen.
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,
)
CXRReportGen REST API gebruiken
Bij het CXRReportGen-model wordt uitgegaan van een eenvoudige interactie met één beurt waarbij één aanvraag één antwoord produceert.
Aanvraagschema
De nettolading van de aanvraag is een tekenreeks met JSON-indeling met de volgende parameters:
Sleutel | Type | Vereist/standaard | Beschrijving |
---|---|---|---|
input_data |
[object] |
J | Een object met de nettolading van invoergegevens |
Het input_data
object bevat de volgende velden:
Sleutel | Type | Vereist/standaard | Toegestane waarden | Beschrijving |
---|---|---|---|---|
columns |
list[string] |
J | "frontal_image" , , "prior_image" "lateral_image" , , "technique" "indication" , , "comparison" "prior_report" |
Een object met de tekenreeksen die gegevens toewijzen aan invoer die aan het model is doorgegeven. |
index |
integer |
J | 0 - 10 | Het aantal invoer dat is doorgegeven aan het model. U wordt beperkt door hoeveel GPU RAM u hebt op de VM waarop CxrReportGen wordt gehost en door hoeveel gegevens in één POST-aanvraag kunnen worden doorgegeven. Dit hangt af van de grootte van uw installatiekopieën. Daarom is het redelijk om dit getal onder de 10 te houden. Controleer modellogboeken als er fouten optreden bij het doorgeven van meerdere invoergegevens. |
data |
list[list[string]] |
J | "" | De lijst bevat de lijst met items die aan het model zijn doorgegeven. De lengte van de lijst wordt gedefinieerd door de indexparameter. Elk item is een lijst met verschillende tekenreeksen. De volgorde en betekenis worden gedefinieerd door de columns parameter. De tekenreeksen bevatten tekst. De afbeeldingstekenreeksen zijn de afbeeldingsbytes gecodeerd met base64 en gedecodeerd als utf-8-tekenreeks |
Aanvraagvoorbeeld
Een eenvoudige deductie die een lijst met bevindingen aanvraagt voor één frontale afbeelding zonder indicatie
{
"input_data": {
"columns": [
"frontal_image"
],
"index":[0],
"data": [
["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n"]
]
}
}
Complexere aanvraag die frontaal, lateraal, indicatie en techniek doorgeeft
{
"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"]
]
}
}
Antwoordschema
Nettolading van het antwoord is een tekenreeks met JSON-indeling die de volgende velden bevat:
Sleutel | Type | Description |
---|---|---|
output |
list[list[string, list[list[float]]]] |
De lijst met bevindingen. Elke bevinding is een item in een lijst dat wordt vertegenwoordigd door een lijst die een tekenreeks bevat met de tekst van het zoeken en een lijst die begrenzingsvakken bevat. Elk begrenzingsvak wordt vertegenwoordigd door een lijst met vier coördinaten van het begrenzingsvak in de volgende volgorde: x_min , y_min , x_max , . y_max Elke coördinaatwaarde ligt tussen 0 en 1, dus om coördinaten te verkrijgen in de ruimte van de afbeelding voor het weergeven of verwerken van deze waarden, moet worden vermenigvuldigd met de breedte of hoogte van de afbeelding dienovereenkomstig |
Responsvoorbeeld
Een eenvoudige deductie die het insluiten van één tekenreeks aanvraagt
{
"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]]]
]
}
Ondersteunde afbeeldingsindelingen
De geïmplementeerde model-API ondersteunt afbeeldingen die zijn gecodeerd in PNG- of JPEG-indelingen. Voor optimale resultaten raden we u aan niet-gecomprimeerde/verliesloze PNG's te gebruiken met 8-bits monochromatische afbeeldingen.
Meer informatie uit voorbeelden
CXRReportGen is een veelzijdig model dat kan worden toegepast op een breed scala aan taken en imaging-modaliteiten. Zie de volgende interactieve Python-notebook voor meer voorbeelden:
- CXRReportGen implementeren en gebruiken: leer hoe u het CXRReportGen-model implementeert en integreert in uw werkstroom. Dit notebook bevat ook begrenzings- en visualisatietechnieken voor begrenzingsvakken.