Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 MedImageInsight dal catalogo di modelli come endpoint online per l'inferenza in tempo reale. Si apprenderà anche a 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
MedImageInsight : modello di incorporamento dell'immagine medica
Il modello di base MedImageInsight per la salute è un modello potente che può elaborare un'ampia gamma di immagini mediche. Queste immagini includono immagini X-Ray, CT, MRI, fotografia clinica, dermoscopy, istopathologia, ultrasuoni e immagini mammografiche. Valutazioni rigorose dimostrano la capacità di MedImageInsight di ottenere prestazioni all'avanguardia (SOTA) o a livello di esperto umano per la classificazione, la ricerca da immagine a immagine e l'ottimizzazione delle attività. In particolare, nei set di dati pubblici, MedImageInsight raggiunge o supera le prestazioni SOTA nella classificazione e ricerca delle malattie ai raggi X del torace, classificazione e ricerca, classificazione e ricerca della coerenza ottica (OCT) e recupero di immagini mediche 3D. Il modello ottiene anche prestazioni near-SOTA per la classificazione e la ricerca di istopathologia.
Un modello di incorporamento è in grado di fungere da base di molte soluzioni diverse, dalla classificazione a scenari più complessi, ad esempio il rilevamento di corrispondenza di gruppi o outlier. L'animazione seguente mostra un modello di incorporamento usato per la ricerca di somiglianza delle immagini e per rilevare immagini outlier.
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.
Se non ne hai uno, crea un progetto basato su hub.
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:
Passare al catalogo dei modelli.
Cercare il modello MedImageInsight e selezionarne la scheda del modello.
Nella pagina di panoramica del modello selezionare Distribuisci.
Se è possibile scegliere tra distribuzione standard e distribuzione usando un ambiente di calcolo gestito, selezionare Calcolo gestito.
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.
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 incorporamento
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 incorporamento MedImageInsight come API REST, usando semplici richieste GET 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 incorporamenti.
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,
)
Usare l'API REST MedImageInsight
Il modello MedImageInsight 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 | Valori consentiti | Descrizione |
---|---|---|---|---|
input_data |
[object] |
Sì | Oggetto contenente il payload dei dati di input | |
params |
[object] |
Nnull |
Oggetto contenente parametri passati al modello |
L'oggetto input_data
contiene i campi seguenti:
Chiave | TIPO | Obbligatorio/Predefinito | Valori consentiti | Descrizione |
---|---|---|---|---|
columns |
list[string] |
Sì |
"text" , "image" |
Oggetto contenente le stringhe che esegue il mapping dei dati agli input passati al modello. |
index |
integer |
Sì | 0 - 1024 | Numero di input passati al modello. È possibile limitare la quantità di dati che è possibile passare in una singola richiesta POST, che dipende dalle dimensioni delle immagini. Pertanto, è consigliabile mantenere questo numero nelle decine |
data |
list[list[string]] |
Sì | "" | L'elenco contiene gli elementi passati al modello definito dal parametro index. Ogni elemento è un elenco di due stringhe. L'ordine è definito dal columns parametro . La text stringa contiene testo da incorporare. Le image stringhe sono i byte di immagine codificati usando base64 e decodificati come stringa utf-8 |
L'oggetto params
contiene i campi seguenti:
Chiave | TIPO | Obbligatorio/Predefinito | Valori consentiti | Descrizione |
---|---|---|---|---|
get_scaling_factor |
boolean |
NTrue |
"True" O "False" |
Indica se il modello deve restituire il fattore di ridimensionamento "temperature". Questo fattore è utile quando si prevede di confrontare più valori di somiglianza coseno in un'applicazione come la classificazione. È essenziale per l'implementazione corretta del tipo "zero-shot" di scenari. Per l'utilizzo, vedere l'esempio di classificazione zero-shot collegato nella sezione Tecniche di classificazione. |
Esempio di richiesta
Una semplice inferenza che richiede l'incorporamento di una singola stringa
{
"input_data": {
"columns": [
"image",
"text"
],
"index":[0],
"data": [
["", "a quick brown fox jumps over the lazy dog"]
]
},
"params": {}
}
Richiesta di incorporamento di un'immagine e di una stringa, richiesta di restituzione del fattore di ridimensionamento
{
"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"
}
}
Schema della risposta
Il payload della risposta è una stringa in formato JSON contenente i campi seguenti:
Chiave | TIPO | Descrizione |
---|---|---|
image_features |
list[list[float]] |
Se richiesto, elenco di vettori, uno per ogni immagine inviata. |
text_features |
list[list[float]] |
Se richiesto, elenco di vettori, uno per ogni stringa di testo inviata. |
scaling_factor |
float |
Se richiesto, fattore di ridimensionamento |
Esempio di risposta
Una semplice inferenza che richiede l'incorporamento di una singola stringa
{
"image_features": [[0.029661938548088074, -0.027228673920035362, ... , -0.0328846238553524]],
"text_features": [[0.0028937323950231075, 0.004354152828454971, -0.0227945726364851, ..., 0.002080598147585988]],
"scaling_factor": 4.516357
}
Altre considerazioni sull'implementazione
Il numero massimo di token elaborati nella stringa di input è 77. Qualsiasi token precedente a 77 verrà tagliato prima di essere passato al modello. Il modello usa un tokenizer CLIP (Contrastive Language-Image Pre-Training) che usa circa tre caratteri latini per token.
Il testo inviato viene incorporato nello stesso spazio latente dell'immagine. Di conseguenza, le stringhe che descrivono immagini mediche di determinate parti del corpo ottenute con determinate modalità di imaging sono incorporate vicino a tali immagini. Inoltre, quando si creano sistemi su un modello MedImageInsight, è necessario assicurarsi che tutte le stringhe di incorporamento siano coerenti tra loro (ordine delle parole e punteggiatura). Per ottenere risultati ottimali con il modello di base, le stringhe devono seguire il modello <image modality> <anatomy> <exam parameters> <condition/pathology>.
, ad esempio : x-ray chest anteroposterior Atelectasis.
.
Se si ottimizza il modello, è possibile modificare questi parametri in base alle esigenze dell'applicazione.
Formati di immagine supportati
L'API del modello distribuito supporta immagini codificate in formato PNG.
Quando il modello riceve le immagini, esegue la pre-elaborazione che comporta la compressione e il ridimensionamento delle immagini in 512x512
pixel.
Il formato di compressione preferito è PNG senza perdita di dati, contenente un'immagine a 8 bit monocromatica o RGB. Ai fini dell'ottimizzazione, è possibile eseguire il ridimensionamento sul lato client per ridurre il traffico di rete.
Altre informazioni dagli esempi
MedImageInsight è un modello versatile che può essere applicato a un'ampia gamma di attività e modalità di imaging. Per esempi più specifici di risoluzione di varie attività con MedImageInsight, vedere i notebook Python interattivi seguenti.
Come iniziare
- Distribuzione e uso di MedImageInsight: informazioni su come distribuire il modello MedImageInsight a livello di codice ed eseguire una chiamata API.
Tecniche di classificazione
Creazione di un classificatore Zero-Shot: informazioni su come usare MedImageInsight per creare un classificatore senza la necessità di eseguire il training o una grande quantità di dati di verità del terreno etichettati.
Miglioramento della classificazione con le reti adapter: migliorare le prestazioni di classificazione creando una rete di schede di piccole dimensioni su MedImageInsight.
Applicazioni avanzate
Inferenza dei parametri di acquisizione MRI dai dati pixel: informazioni su come estrarre i parametri di acquisizione dell'esame MRI direttamente dai dati di imaging.
Utilizzo degli endpoint MedImageInsight scalabili: informazioni su come generare incorporamenti di immagini mediche su larga scala usando l'API MedImageInsight, gestendo normalmente i potenziali problemi di rete.