Compartir a través de


Uso del modelo de IA sanitaria MedImageParse para la segmentación de imágenes médicas

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 MedImageParse como punto de conexión en línea para la inferencia en tiempo real y 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íe datos de prueba al modelo, reciba e interprete los resultados.

MedImageParse: segmentación basada en mensajes de imágenes médicas

El análisis biomédico de imágenes es fundamental para el descubrimiento en campos como la biología celular, la patología y la radiología. Tradicionalmente, tareas como la segmentación, la detección y el reconocimiento de objetos relevantes se abordan por separado, lo que puede limitar la eficacia general del análisis de imágenes. Sin embargo, MedImageParse unifica estas tareas mediante el análisis sintáctico de imágenes, llevando a cabo conjuntamente la segmentación, la detección y el reconocimiento a través de numerosos tipos de objetos y modalidades de creación de imágenes. Al aplicar las interdependencias entre estas subtareas, como las etiquetas semánticas de los objetos segmentados, el modelo mejora la precisión y permite nuevas aplicaciones. Por ejemplo, permite a los usuarios segmentar todos los objetos relevantes de una imagen, usando un simple mensaje de texto. Este enfoque elimina la necesidad de especificar manualmente los cuadros delimitadores de cada objeto.

La siguiente imagen muestra la arquitectura conceptual del modelo MedImageParse, en el que un modelo de inserción de imágenes se complementa con una capa de adaptación de tareas para generar máscaras de segmentación y descripciones textuales.

Animación del flujo de datos a través del modelo MedImageParse que muestra la imagen que llega a través del modelo emparejado con un adaptador de tareas y se convierte en un conjunto de máscaras de segmentación.

Cabe destacar que las máscaras de segmentación y las descripciones textuales se lograron usando únicamente conjuntos de datos de segmentación estándar, aumentados con etiquetas de lenguaje natural, o descripciones armonizadas con ontologías de objetos biomédicos establecidas. Este enfoque no solo mejoró el rendimiento de las tareas individuales, sino que también ofreció una herramienta todo en uno para el análisis de imágenes biomédicas, allanando el camino para un descubrimiento biomédico basado en imágenes más eficiente y preciso.

Requisitos previos

Para usar el modelo MedImageParse, necesita los siguientes requisitos previos:

Implementación de modelo

Implementación en un proceso administrado autohospedado

El modelo MedImageParse se puede implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles sobre 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 MedImageParse y seleccione la tarjeta del 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 segmentación

En esta sección, se consume el modelo y se le hacen llamadas básicas.

Uso de la API de REST para consumir el modelo

Consuma el modelo de segmentación MedImageParse como una API de REST, usando simples peticiones GET o creando un cliente como se indica a continuación:

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, podrá 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 siguiente código para enviar datos y recuperar máscaras de segmentación.

import base64
import json
import os

sample_image_xray = os.path.join(image_path)

def read_image(image_path):
    with open(image_path, "rb") as f:
        return f.read()

sample_image =  "sample_image.png"
data = {
    "input_data": {
        "columns": [ "image", "text" ],
        "index": [ 0 ],
        "data": [
            [
                base64.encodebytes(read_image(sample_image)).decode("utf-8"),
                "neoplastic cells in breast pathology & inflammatory cells"
            ]
        ]
    }
}
data_json = json.dumps(data)

# 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 MedImageParse

El modelo MedImageParse asume una interacción simple de un solo turno en la que una petición produce 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 Descripción
input_data [object] Y Un objeto que contiene la carga de datos de entrada

El objeto input_data contiene los siguientes campos:

Clave Tipo Obligatorio/predeterminado Valores permitidos Descripción
columns list[string] Y "image", "text" Objeto que contiene las cadenas que asignan datos a las entradas que se pasan al modelo.
index integer Y 0 - 256 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, es razonable 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 el texto del mensaje. La cadena image son los bytes de la imagen codificados mediante base64 y decodificados como cadena UTF-8.
NOTA: la imagen debe redimensionarse a 1024x1024 píxeles antes de enviarla al modelo, conservando la relación de aspecto. El espacio vacío debe rellenarse con píxeles negros. Consulte el cuaderno de ejemplo Generación de segmentación para una variedad de modalidades de imagen para ver un ejemplo de código de redimensionamiento y relleno.

El texto de entrada es una cadena que contiene varias oraciones separadas por el carácter especial &. Por ejemplo: tumor core & enhancing tumor & non-enhancing tumor. En este caso, hay tres oraciones, por lo que la salida consta de tres imágenes con máscaras de segmentación.

Ejemplo de solicitud

Solicitud de segmentación de todas las células en una imagen patológica

{
  "input_data": {
    "columns": [
      "image",
      "text"
    ],
    "index":[0],
    "data": [
      ["iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACx\njwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAbSURBVBhXY/gUoPS/fhfDfwaGJe///9/J8B8A\nVGwJ5VDvPeYAAAAASUVORK5CYII=\n",
      "neoplastic & inflammatory cells "]
    ]
  }
}

Esquema de respuesta

La carga útil de la respuesta es una lista de cadenas con formato JSON, cada una de las cuales corresponde a una imagen enviada. Cada cadena contiene un objeto segmentation_object.

segmentation_object contiene los siguientes campos:

Clave Tipo Descripción
image_features segmentation_mask Un objeto que representa las máscaras de segmentación de una imagen determinada
text_features list[string] Lista de cadenas, una por cada cadena de texto enviada, que clasifica las máscaras de segmentación en una de las 16 categorías de segmentación biomédica: liver, lung, kidney, pancreas, heart anatomies, brain anatomies, eye anatomies, vessel, other organ, tumor, infection, other lesion, fluid disturbance, other abnormality, histology structure, other

segmentation_mask contiene los siguientes campos:

Clave Tipo Descripción
data string Una matriz NumPy codificada en base64 que contiene la máscara de segmentación codificada en un punto. Podría haber varias instancias de objetos en la matriz devuelta. Descodifique y use np.frombuffer para deserializar. La matriz contiene una matriz tridimensional. El tamaño de la matriz es 1024x1024 (que coincide con las dimensiones de la imagen de entrada), y la tercera dimensión representa el número de oraciones de entrada proporcionadas. Consulte los cuadernos de ejemplo proporcionados para obtener ejemplos de descodificación y uso.
shape list[int] Una lista que representa la forma de la matriz (normalmente [NUM_PROMPTS, 1024, 1024])
dtype string Una instancia de la clase NumPy dtype serializada en una cadena. Describe el empaquetado de datos en la matriz de datos.

Ejemplo de respuesta

Una inferencia simple que solicita segmentación de dos objetos

[
  {
    "image_features": "{ 
    'data': '4oCwUE5HDQoa...',
    'shape': [2, 1024, 1024], 
    'dtype': 'uint8'}",
    "text_features": ['liver', 'pancreas']
  }
]

Formatos de imagen admitidos:

La API de modelo implementada admite imágenes codificadas en formato PNG. Para obtener resultados óptimos, se recomienda usar PNG sin comprimir o sin pérdida con imágenes RGB.

Como se describe en la especificación de API, el modelo solo acepta imágenes en la resolución de 1024x1024píxeles. Las imágenes deben redimensionarse y rellenarse (en caso de que la relación de aspecto no sea cuadrada).

Consulte el cuaderno Generación de segmentación para una variedad de modalidades de creación de imágenes para ver técnicas y ejemplos de código útiles para enviar imágenes de varios tamaños almacenadas usando varios formatos de imagen biomédica.

Más información en ejemplos

MedImageParse 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 más ejemplos, consulte los siguientes cuadernos interactivos de Python:

Introducción

Técnicas y ejemplos avanzados de inferencia