Cómo usar el modelo de IA de salud MedImageInsight para la generación de incrustaciones de imagen médica
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
Importante
Los modelos de inteligencia artificial sanitaria están diseñados para la investigación y la exploración del desarrollo de modelos. Los modelos no están diseñados ni diseñados para implementarse en la configuración clínica tal como está ni para su uso en el diagnóstico o tratamiento de ninguna enfermedad o salud, y no se han establecido los modelos individuales para tales fines. Usted asume responsabilidad exclusiva y responsabilidad por cualquier uso de los modelos de inteligencia artificial sanitaria, incluida la comprobación de salidas e incorporación a cualquier producto o servicio destinado a un propósito médico o a informar a la toma de decisiones clínicas, el cumplimiento de las leyes y reglamentos sanitarios aplicables, y obtener los permisos o aprobaciones necesarios.
En este artículo, aprenderá a implementar MedImageInsight desde el catálogo de modelos como punto de conexión en línea para la inferencia en tiempo real. También aprenderá a emitir una llamada básica a la API. Los pasos son:
- Implemente el modelo en un proceso administrado autohospedado.
- Conceder permisos al punto de conexión.
- Envío de datos de prueba al modelo, recepción e interpretación de los resultados
MedImageInsight: el modelo de inserción de imágenes médicas
MedImageInsight foundation model for health es un modelo eficaz que puede procesar una amplia variedad de imágenes médicas. Estas imágenes incluyen rayos X, CT, RMN, fotografía clínica, dermoscopia, histopatología, ultrasonido e imágenes de mamografía. Las evaluaciones rigurosas muestran la capacidad de MedImageInsight para lograr un rendimiento de última generación (SOTA) o de nivel experto humano en la clasificación, la búsqueda de imágenes a imágenes y las tareas de ajuste preciso. En concreto, en los conjuntos de datos públicos, MedImageInsight logra o supera el rendimiento de SOTA en la clasificación y búsqueda de enfermedades de rayos X del pecho, clasificación y búsqueda dermatología, clasificación y búsqueda de coherencia óptica (OCT) y recuperación de imágenes médicas 3D. El modelo también logra un rendimiento cercano de SOTA para la clasificación y búsqueda de histopatología.
Un modelo de inserción es capaz de servir como base de muchas soluciones diferentes, desde escenarios de clasificación a escenarios más complejos, como la coincidencia de grupos o la detección de valores atípicos. En la siguiente animación se muestra un modelo de inserción que se usa para la búsqueda de similitud de imágenes y para detectar imágenes atípicos.
Requisitos previos
Para usar el modelo MedImageInsight, necesita los siguientes requisitos previos:
Implementación de modelo
Implementación en un proceso administrado autohospedado
El modelo MedImageInsight se puede implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles acerca de cómo se sirve el modelo. Puede implementar el modelo a través de la interfaz de usuario del catálogo (en AI Studio o Estudio de Azure Machine Learning) o implementar mediante programación.
Para implementar el modelo a través de la interfaz de usuario:
Vaya al catálogo.
Busque MedImageInsight y seleccione la tarjeta de modelo.
En la página de información general del modelo, seleccione Implementar.
Si se proporciona la opción de elegir entre la implementación y la implementación de la API sin servidor mediante un proceso administrado, seleccione Proceso administrado.
Rellene los detalles en la ventana de implementación.
Nota:
Para la implementación en un proceso administrado autohospedado, se debe tener suficiente cuota en la suscripción. Si no tuviera suficiente cuota disponible, use el acceso de cuota temporal seleccionando la opción Quiero usar la cuota compartida y confirmo que este punto de conexión se eliminará en 168 horas.
Seleccione Implementar.
Para implementar el modelo mediante programación, consulte Implementación e inferencia de una implementación de proceso administrada con código.
Trabajar con un modelo de inserción
En esta sección, usará el modelo y realizará llamadas básicas a él.
Uso de la API de REST para consumir el modelo
Consuma el modelo de inserción de MedImageInsight como una API de REST, mediante solicitudes GET sencillas o mediante la creación de un cliente de la siguiente manera:
from azure.ai.ml import MLClient
from azure.identity import DeviceCodeCredential
credential = DefaultAzureCredential()
ml_client_workspace = MLClient.from_config(credential)
En la configuración de implementación, puede elegir el método de autenticación. En este ejemplo se usa la autenticación basada en tokens de Azure Machine Learning. Para obtener más opciones de autenticación, consulte la página de documentación correspondiente. Además, tenga en cuenta que el cliente se crea a partir de un archivo de configuración que se crea automáticamente para máquinas virtuales (VM) de Azure Machine Learning. Obtenga más información en la página de documentación de la API correspondiente.
Realización de llamadas básicas al modelo
Una vez implementado el modelo, use el código siguiente para enviar datos y recuperar incrustaciones.
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,
)
Uso de la API de REST de MedImageInsight
El modelo MedImageInsight supone una interacción simple de un solo turno en la que una solicitud genera una respuesta.
Esquema de solicitud
La carga de solicitud es una cadena con formato JSON que contiene los parámetros siguientes:
Clave | Tipo | Obligatorio/predeterminado | Valores permitidos | Descripción |
---|---|---|---|---|
input_data |
[object] |
Y | Objeto que contiene la carga de datos de entrada | |
params |
[object] |
Nnull |
Objeto que contiene parámetros pasados al modelo |
El objeto input_data
contiene los campos siguientes:
Clave | Tipo | Obligatorio/predeterminado | Valores permitidos | Descripción |
---|---|---|---|---|
columns |
list[string] |
Y | "text" , "image" |
Objeto que contiene las cadenas que asignan datos a las entradas que se pasan al modelo. |
index |
integer |
Y | 0 - 1024 | Recuento de entradas pasadas al modelo. Está limitado por la cantidad de datos que se pueden pasar en una sola solicitud POST, que depende del tamaño de las imágenes. Por lo tanto, debe mantener este número en las docenas |
data |
list[list[string]] |
Y | "" | La lista contiene los elementos pasados al modelo definido por el parámetro de índice. Cada elemento es una lista de dos cadenas. El orden se define mediante el parámetro columns . La cadena text contiene texto que se va a insertar. Las cadenas de image son los bytes de imagen codificados mediante base64 y descodificados como cadena utf-8 |
El objeto params
contiene los campos siguientes:
Clave | Tipo | Obligatorio/predeterminado | Valores permitidos | Descripción |
---|---|---|---|---|
get_scaling_factor |
boolean |
NTrue |
"True" o "False" |
Si el modelo debe devolver el factor de escala de "temperatura". Este factor es útil cuando planea comparar varios valores de similitud de coseno en una aplicación como la clasificación. Es esencial para la implementación correcta del tipo de escenarios de "disparo cero". Para su uso, consulte el ejemplo de clasificación de captura cero vinculado en la sección Técnicas de clasificación. |
Ejemplo de solicitud
Una simple inferencia solicitando la inserción de una sola cadena
{
"input_data": {
"columns": [
"image",
"text"
],
"index":[0],
"data": [
["", "a quick brown fox jumps over the lazy dog"]
]
},
"params": {}
}
Solicitud de inserción de una imagen y una cadena, solicitando la devolución del factor de escalado
{
"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"
}
}
Esquema de respuesta
La carga de respuesta es una cadena con formato JSON que contiene los siguientes campos:
Clave | Tipo | Descripción |
---|---|---|
image_features |
list[list[float]] |
Si se solicita, lista de vectores, una por cada imagen enviada. |
text_features |
list[list[float]] |
Si se solicita, lista de vectores, una por cada cadena de texto enviada. |
scaling_factor |
float |
Si se solicita, el factor de escalado |
Ejemplo de respuesta
Una simple inferencia solicitando la inserción de una sola cadena
{
"image_features": [[0.029661938548088074, -0.027228673920035362, ... , -0.0328846238553524]],
"text_features": [[0.0028937323950231075, 0.004354152828454971, -0.0227945726364851, ..., 0.002080598147585988]],
"scaling_factor": 4.516357
}
Otras consideraciones de implementación
El número máximo de tokens procesados en la cadena de entrada es 77. Cualquier cosa pasada de 77 tokens se cortaría antes de pasarse al modelo. El modelo usa un tokenizador de aprendizaje previo de imagen de contraste (CLIP) que usa aproximadamente tres caracteres latinos por token.
El texto enviado se incrusta en el mismo espacio latente que la imagen. Como resultado, las cadenas que describen imágenes médicas de determinadas partes corporales obtenidas con determinadas modalidades de imágenes se incrustan cerca de estas imágenes. Además, al compilar sistemas sobre un modelo de MedImageInsight, debe asegurarse de que todas las cadenas de inserción sean coherentes entre sí (orden de palabras y puntuación). Para obtener los mejores resultados con el modelo base, las cadenas deben seguir el patrón <image modality> <anatomy> <exam parameters> <condition/pathology>.
, por ejemplo: x-ray chest anteroposterior Atelectasis.
.
Si va a ajustar el modelo, puede cambiar estos parámetros para adaptarlos mejor a las necesidades de la aplicación.
Formatos de imagen admitidos:
La API de modelo implementada admite imágenes codificadas en formato PNG.
Cuando el modelo recibe las imágenes, realiza el preprocesamiento que implica comprimir y cambiar el tamaño de las imágenes a 512x512
píxeles.
El formato de compresión preferido es PNG sin pérdida, que contiene una imagen monocromática o RGB de 8 bits. Con fines de optimización, puede realizar el cambio de tamaño en el lado cliente para reducir el tráfico de red.
Más información en ejemplos
MedImageInsight es un modelo versátil que se puede aplicar a una amplia gama de tareas y modalidades de creación de imágenes. Para obtener ejemplos más específicos de cómo resolver varias tareas con MedImageInsight, consulte los siguientes cuadernos interactivos de Python.
Introducción
- Implementación y uso de MedImageInsight: aprenda a implementar el modelo de MedImageInsight mediante programación y emitir una llamada API a él.
Técnicas de clasificación
Crear un clasificador de disparo cero: descubra cómo usar MedImageInsight para crear un clasificador sin necesidad de entrenamiento o una gran cantidad de datos de verdad del suelo etiquetados.
Mejorar la clasificación con redes de adaptadores: mejorar el rendimiento de la clasificación mediante la creación de una red de adaptadores pequeña sobre MedImageInsight.
Aplicaciones avanzadas
Inferir parámetros de adquisición de RMN de datos de píxeles: comprender cómo extraer parámetros de adquisición de exámenes de MRI directamente de datos de imágenes.
uso de puntos de conexión escalables de MedImageInsight: obtenga información sobre cómo generar incrustaciones de imágenes médicas a escala mediante la API MedImageInsight, a la vez que controla posibles problemas de red.