Compartir a través de


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.

Animación que muestra un modelo de inserción capaz de admitir escenarios de búsqueda de similitud y control de calidad.

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:

  1. Vaya al catálogo.

  2. Busque MedImageInsight y seleccione la tarjeta de modelo.

  3. En la página de información general del modelo, seleccione Implementar.

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

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

  6. 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] N
null
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 N
True
"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

Técnicas de clasificación

Aplicaciones avanzadas