Delen via


Het AI-model voor gezondheidszorg van MedImageInsight gebruiken voor het insluiten van medische afbeeldingen

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 MedImageInsight implementeert vanuit de modelcatalogus als een online-eindpunt voor realtime deductie. U leert ook hoe u een eenvoudige aanroep naar de API kunt uitvoeren. 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

MedImageInsight - het model voor het insluiten van medische afbeeldingen

MedImageInsight-basismodel voor gezondheid is een krachtig model dat een groot aantal medische afbeeldingen kan verwerken. Deze beelden omvatten röntgenfoto's, CT, MRI, klinische fotografie, dermoscopy, histopathologie, echografie en mammografieafbeeldingen. Strenge evaluaties demonstreren het vermogen van MedImageInsight om geavanceerde prestaties (SOTA) of prestaties op menselijk expertniveau te realiseren voor classificatie, zoeken naar afbeeldingen en het verfijnen van taken. Met name op openbare gegevenssets bereikt of overschrijdt MedImageInsight SOTA-prestaties in classificatie en zoekopdrachten van X-ray-ziektes op de borst, indeling en zoekopdrachten, optische coherentie tomografie (OCT) classificatie en zoekopdracht, en ophalen van 3D medische afbeeldingen. Het model bereikt ook bijna SOTA-prestaties voor histopathologieclassificatie en -zoekopdrachten.

Een insluitmodel kan fungeren als basis voor veel verschillende oplossingen, van classificatie tot complexere scenario's zoals groepskoppeling of uitbijterdetectie. In de volgende animatie ziet u een insluitmodel dat wordt gebruikt voor het zoeken naar overeenkomsten met afbeeldingen en om afbeeldingen te detecteren die uitbijters zijn.

Animatie die een insluitmodel toont dat ondersteuning biedt voor zoek- en kwaliteitscontrolescenario's voor overeenkomsten.

Vereisten

Als u het MedImageInsight-model wilt gebruiken, hebt u de volgende vereisten nodig:

Een modelimplementatie

Implementatie naar een zelf-hostende beheerde compute

Het MedImageInsight-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 Azure AI Foundry of Azure Machine Learning-studio) of programmatisch implementeren.

Het model implementeren via de gebruikersinterface:

  1. Ga naar de catalogus.

  2. Zoek naar MedImageInsight en selecteer de modelkaart.

  3. Selecteer Implementeren op de overzichtspagina van het model.

  4. Als u de optie krijgt om te kiezen tussen serverloze API-implementatie en implementatie met behulp van een beheerde berekening, selecteert u Managed Compute.

  5. 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.

  6. Selecteer Implementeren.

Als u het model programmatisch wilt implementeren, raadpleegt u Hoe u een beheerde rekenprocesimplementatie implementeert en deductie met code.

Werken met een insluitmodel

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 medImageInsight-insluitingsmodel 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 insluitingen op te halen.

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,
)

MedImageInsight REST API gebruiken

Het MedImageInsight-model gaat uit 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 Toegestane waarden Beschrijving
input_data [object] J Een object met de nettolading van invoergegevens
params [object] N
null
Een object met parameters die zijn doorgegeven aan het model

Het input_data object bevat de volgende velden:

Sleutel Type Vereist/standaard Toegestane waarden Beschrijving
columns list[string] J "text", "image" Een object met de tekenreeksen die gegevens toewijzen aan invoer die aan het model is doorgegeven.
index integer J 0 - 1024 Het aantal invoer dat is doorgegeven aan het model. U bent beperkt door hoeveel gegevens kunnen worden doorgegeven in één POST-aanvraag, wat afhankelijk is van de grootte van uw afbeeldingen. Daarom moet u dit getal in de tientallen bewaren
data list[list[string]] J "" De lijst bevat de items die worden doorgegeven aan het model dat wordt gedefinieerd door de indexparameter. Elk item is een lijst met twee tekenreeksen. De volgorde wordt gedefinieerd door de columns parameter. De text tekenreeks bevat tekst die moet worden ingesloten. De image tekenreeksen zijn de afbeeldingsbytes gecodeerd met base64 en gedecodeerd als utf-8-tekenreeks

Het params object bevat de volgende velden:

Sleutel Type Vereist/standaard Toegestane waarden Beschrijving
get_scaling_factor boolean N
True
"True" OF "False" Of het model de schaalfactor 'temperatuur' moet retourneren. Deze factor is handig wanneer u van plan bent om meerdere cosinus-overeenkomsten in een toepassing te vergelijken, zoals classificatie. Het is essentieel voor de juiste implementatie van het type 'zero-shot'-scenario's. Raadpleeg voor gebruik het voorbeeld van classificatie nul dat is gekoppeld in de sectie Classificatietechnieken .

Aanvraagvoorbeeld

Een eenvoudige deductie die het insluiten van één tekenreeks aanvraagt

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

Aanvraag voor het insluiten van een afbeelding en een tekenreeks, waarbij wordt aangevraagd om de schaalfactor te retourneren

{
    "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"
    }
}

Antwoordschema

Nettolading van het antwoord is een tekenreeks met JSON-indeling die de volgende velden bevat:

Sleutel Type Description
image_features list[list[float]] Indien aangevraagd, een lijst met vectoren, één per verzonden afbeelding.
text_features list[list[float]] Indien aangevraagd, een lijst met vectoren, één per verzonden tekenreeks.
scaling_factor float Indien aangevraagd, is de schaalfactor

Responsvoorbeeld

Een eenvoudige deductie die het insluiten van één tekenreeks aanvraagt

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

Andere overwegingen bij de implementatie

Het maximum aantal tokens dat in de invoertekenreeks wordt verwerkt, is 77. Alles na 77 tokens wordt afgekapt voordat het aan het model wordt doorgegeven. Het model maakt gebruik van een Clip-tokenizer (Contrastive Language-Image Pre-Training), waarbij ongeveer drie Latijnse tekens per token worden gebruikt.

De verzonden tekst wordt ingesloten in dezelfde latente ruimte als de afbeelding. Als gevolg hiervan worden tekenreeksen met een beschrijving van medische afbeeldingen van bepaalde lichaamsdelen die zijn verkregen met bepaalde beeldvormende modaliteiten ingesloten in de buurt van dergelijke afbeeldingen. Wanneer u systemen bouwt boven op een MedImageInsight-model, moet u er ook voor zorgen dat al uw ingesloten tekenreeksen consistent zijn met elkaar (woordvolgorde en interpunctie). Voor de beste resultaten met het basismodel moeten tekenreeksen het patroon <image modality> <anatomy> <exam parameters> <condition/pathology>.volgen, bijvoorbeeld: x-ray chest anteroposterior Atelectasis.

Als u het model aanpast, kunt u deze parameters aanpassen aan uw toepassingsbehoeften.

Ondersteunde afbeeldingsindelingen

De geïmplementeerde model-API ondersteunt afbeeldingen die zijn gecodeerd in PNG-indeling.

Wanneer het model de afbeeldingen ontvangt, wordt voorverwerking uitgevoerd waarbij de afbeeldingen worden gecomprimeerd en aangepast aan 512x512 pixels.

De voorkeurscompressieindeling is lossless PNG, met een 8-bits monochromatische of RGB-afbeelding. Voor optimalisatiedoeleinden kunt u het formaat aan de clientzijde aanpassen om het netwerkverkeer te verminderen.

Meer informatie uit voorbeelden

MedImageInsight is een veelzijdig model dat kan worden toegepast op een breed scala aan taken en imaging-modaliteiten. Zie de volgende interactieve Python-notebooks voor meer specifieke voorbeelden van het oplossen van verschillende taken met MedImageInsight.

Aan de slag

  • MedImageInsight implementeren en gebruiken: informatie over het programmatisch implementeren van het MedImageInsight-model en het uitgeven van een API-aanroep.

Classificatietechnieken

Geavanceerde toepassingen