Condividi tramite


Come usare il modello di intelligenza artificiale CXRReportGen Healthcare per generare risultati basati

Importante

I modelli di intelligenza artificiale per il settore sanitario sono destinati alla ricerca e all'esplorazione dello sviluppo di modelli. I modelli non sono progettati o destinati a essere distribuiti in impostazioni cliniche così come sono, né per l'uso nella diagnosi o nel trattamento di qualsiasi condizione sanitaria o medica, e le prestazioni dei singoli modelli per tali scopi non sono state stabilite. L'utente si assume responsabilità e responsabilità esclusiva per qualsiasi uso dei modelli di IA sanitaria, inclusa la verifica degli output e l'incorporazione in qualsiasi prodotto o servizio destinato a uno scopo medico o per informare il processo decisionale clinico, la conformità alle leggi e alle normative sanitarie applicabili e ottenere eventuali autorizzazioni o approvazioni necessarie.

Questo articolo illustra come distribuire CXRReportGen come endpoint online per l'inferenza in tempo reale ed eseguire una chiamata di base all'API. I passaggi da eseguire sono:

  • Distribuire il modello in un ambiente di calcolo gestito self-hosted.
  • Concedere le autorizzazioni all'endpoint.
  • Inviare dati di test al modello, ricevere e interpretare i risultati

CXRReportGen - Modello di generazione di report a terra per i raggi X del torace

La segnalazione di radiologia richiede una comprensione dettagliata delle immagini, l'integrazione di più input (inclusi i confronti con la creazione di immagini precedenti) e una generazione precisa del linguaggio, rendendola un candidato ideale per i modelli generativi. CXRReportGen genera un elenco di risultati di uno studio sui raggi X del torace ed esegue anche un'attività di generazione o di base di report a terra. Ovvero, il modello CXRReportGen incorpora anche la localizzazione dei singoli risultati nell'immagine. Il grounding migliora la chiarezza dell'interpretazione dell'immagine e la trasparenza del testo generato dall'IA, che finisce per migliorare l'utilità della stesura automatica dei report.

L'animazione seguente illustra l'architettura concettuale del modello CXRReportGen, costituito da un modello di incorporamento associato a un modello di linguaggio LLM (Reasoner Large Language Model).

Animazione dell'architettura e del flusso di dati CXRReportGen.

Il modello CXRReportGen combina un codificatore di immagini specifico della radiologia con un modello linguistico di grandi dimensioni e accetta come input un set di dati più completo rispetto a molti approcci tradizionali. I dati di input includono l'immagine frontale corrente, l'immagine laterale corrente, l'immagine anteriore precedente, il report precedente e le sezioni di indicazione, tecnica e confronto del report corrente. Queste aggiunte migliorano significativamente la qualità dei report e riducono le informazioni errate, dimostrando infine la fattibilità della segnalazione a terra come un'attività nuova e più ricca in un'automazione della radiologia.

Prerequisiti

  • Una sottoscrizione di Azure con un metodo di pagamento valido. Le sottoscrizioni di Azure gratuite o di valutazione non funzioneranno. Se non si dispone di una sottoscrizione di Azure, è possibile creare un account Azure gratuito per iniziare.

  • Progetto Azure AI Foundry.

  • I controlli degli accessi in base al ruolo di Azure vengono usati per concedere l'accesso alle operazioni nel portale di Azure AI Foundry. Per eseguire la procedura descritta in questo articolo, all'account utente deve essere assegnato il ruolo di sviluppatore di Azure per intelligenza artificiale nel gruppo di risorse. Per altre informazioni sulle autorizzazioni, vedere Controllo degli accessi in base al ruolo nel portale di Azure AI Foundry.

Distribuire il modello in un ambiente di calcolo gestito

La distribuzione in una soluzione di inferenza gestita self-hosted consente di personalizzare e controllare tutti i dettagli sulla modalità di gestione del modello. È possibile distribuire il modello dalla scheda del modello nell'interfaccia utente del catalogo di Azure AI Foundry o azure Machine Learning Studio o distribuirlo a livello di codice.

Per distribuire il modello tramite l'interfaccia utente:

  1. Passare al catalogo dei modelli.

  2. Cercare il modello CxrReportGen e selezionare la sua scheda modello.

  3. Nella pagina di panoramica del modello selezionare Distribuisci.

  4. Se è possibile scegliere tra distribuzione standard e distribuzione usando un ambiente di calcolo gestito, selezionare Calcolo gestito.

  5. Compilare i dettagli nella finestra di distribuzione.

    Annotazioni

    Per la distribuzione in un ambiente di calcolo gestito self-hosted, è necessario disporre di una quota sufficiente nella propria sottoscrizione. Se la quota disponibile non è sufficiente, è possibile usare l'accesso temporaneo alla quota selezionando l'opzione Che si vuole usare la quota condivisa e si riconosce che questo endpoint verrà eliminato in 168 ore.

  6. Seleziona Distribuisci.

Per distribuire il modello a livello di codice, vedere Come distribuire e dedurre una distribuzione di calcolo gestita con codice.

Usare un modello di generazione di report a terra per l'analisi dei raggi X del torace

In questa sezione si utilizza il modello e si effettuano chiamate di base.

Usare l'API REST per usare il modello

Utilizzare il modello di generazione di report CXRReportGen come API REST, usando richieste GET semplici o creando un client come indicato di seguito:

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

credential = DefaultAzureCredential()

ml_client_workspace = MLClient.from_config(credential)

Nella configurazione di distribuzione è possibile scegliere un metodo di autenticazione. Questo esempio usa l'autenticazione basata su token di Azure Machine Learning. Per altre opzioni di autenticazione, vedere la pagina della documentazione corrispondente. Inoltre, il client viene creato da un file di configurazione creato automaticamente per le macchine virtuali di Azure Machine Learning. Per altre informazioni, vedere la pagina della documentazione dell'API corrispondente.

Effettuare chiamate di base al modello

Dopo aver distribuito il modello, usare il codice seguente per inviare dati e recuperare un elenco di risultati e i rettangoli di delimitazione corrispondenti.

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

Usare l'API REST CXRReportGen

Il modello CXRReportGen presuppone una semplice interazione a turno singolo in cui una richiesta produce una risposta.

Schema della richiesta

Il payload della richiesta è una stringa in formato JSON contenente i parametri seguenti:

Chiave TIPO Obbligatorio/Predefinito Descrizione
input_data [object] Oggetto contenente il payload dei dati di input

L'oggetto input_data contiene i campi seguenti:

Chiave TIPO Obbligatorio/Predefinito Valori consentiti Descrizione
columns list[string] "frontal_image", "lateral_image", "prior_image","indication""technique" , , , "comparison""prior_report" Oggetto contenente le stringhe che esegue il mapping dei dati agli input passati al modello.
index integer 0 - 10 Numero di input passati al modello. È possibile limitare la quantità di RAM GPU disponibile nella macchina virtuale in cui è ospitato CxrReportGen e la quantità di dati che possono essere passati in una singola richiesta POST, che dipende dalle dimensioni delle immagini. Pertanto, è ragionevole mantenere questo numero sotto 10. Controllare i log del modello se si verificano errori durante il passaggio di più input.
data list[list[string]] "" L'elenco contiene l'elenco di elementi passati al modello. La lunghezza dell'elenco è definita dal parametro index. Ogni elemento è un elenco di più stringhe. L'ordine e il columns significato sono definiti dal parametro . Le stringhe di testo contengono testo. Le stringhe di immagine sono i byte di immagine codificati usando base64 e decodificati come stringa utf-8

Esempio di richiesta

Semplice inferenza che richiede un elenco di risultati per una singola immagine frontale senza alcuna indicazione fornita

{
  "input_data": {
    "columns": [
      "frontal_image"
    ],
    "index":[0],
    "data": [
      ["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n"]
    ]
  }
}

Richiesta più complessa che passa frontal, laterale, indicazione e tecnica

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

Schema della risposta

Il payload della risposta è una stringa in formato JSON contenente i campi seguenti:

Chiave TIPO Descrizione
output list[list[string, list[list[float]]]] Elenco dei risultati. Ogni ricerca è un elemento in un elenco rappresentato da un elenco che contiene una stringa con il testo di ricerca e un elenco che contiene rettangoli di delimitazione. Ogni rettangolo di selezione è rappresentato da un elenco di quattro coordinate del rettangolo di selezione correlato alla ricerca nell'ordine seguente: x_min, y_min, x_max, y_max. Ogni valore di coordinata è compreso tra 0 e 1, quindi per ottenere coordinate nello spazio dell'immagine per il rendering o l'elaborazione di questi valori è necessario moltiplicare per larghezza o altezza dell'immagine di conseguenza

Esempio di risposta

Una semplice inferenza che richiede l'incorporamento di una singola stringa

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

Formati di immagine supportati

L'API del modello distribuito supporta immagini codificate in formati PNG o JPEG. Per ottenere risultati ottimali, è consigliabile usare i gruppi di sicurezza APN non compressi/senza perdita con immagini monocromatiche a 8 bit.

Altre informazioni dagli esempi

CXRReportGen è un modello versatile che può essere applicato a un'ampia gamma di attività e modalità di imaging. Per altri esempi, vedere il notebook Python interattivo seguente:

  • Distribuzione e uso di CXRReportGen: informazioni su come distribuire il modello CXRReportGen e integrarlo nel flusso di lavoro. Questo notebook illustra anche le tecniche di analisi e visualizzazione dei rettangoli delimitatore.