Compartir a través de


Uso del modelo de IA sanitaria de CXRReportGen para generar conclusiones fundamentadas

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 CXRReportGen 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.
  • Enviar datos de prueba al modelo, recibir e interpretar los resultados

CXRReportGen: modelo fundamentado de generación de informes para radiografías de tórax

La elaboración de informes radiológicos exige una comprensión detallada de las imágenes, la integración de múltiples entradas (incluidas las comparaciones con imágenes anteriores) y una generación precisa del lenguaje, lo que la convierte en una candidata ideal para los modelos multimodales generativos. CXRReportGen genera una lista de hallazgos de un estudio de radiografía de tórax y también realiza una tarea de generación de informes o de fundamentación. Es decir, el modelo CXRReportGen también incorpora la localización de hallazgos individuales en la imagen. La fundamentación aumenta la claridad de la interpretación de imágenes y la transparencia del texto generado por IA, lo que acaba mejorando la utilidad de la redacción automatizada de informes.

La siguiente animación muestra la arquitectura conceptual del modelo CXRReportGen, que consiste en un modelo de inserción emparejado con un modelo de lenguaje grande (LLM) de razonamiento general.

Animación de la arquitectura y el flujo de datos de CXRReportGen.

El modelo CXRReportGen combina un codificador de imágenes específico para radiología con un modelo de lenguaje grande y toma como entradas un conjunto de datos más completo que muchos enfoques tradicionales. Los datos de entrada incluyen la imagen frontal actual, la imagen lateral actual, la imagen frontal anterior, el informe anterior y las secciones de indicación, técnica y comparación del informe actual. Estas adiciones mejoran significativamente la calidad de los informes y reducen la información incorrecta, demostrando en última instancia la viabilidad de la creación de informes fundamentados como una tarea novedosa y más rica en la radiología automatizada.

Requisitos previos

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

Implementación de modelo

Implementación en un proceso administrado autohospedado

El modelo CXRReportGen 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 CxrReportGen 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 generación de informes fundamentados para el análisis de radiografías de tórax

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 generación de informes CXRReportGen como una API de REST, usando simples solicitudes 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 la 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 siguiente código para enviar los datos y recuperar una lista de resultados y sus correspondientes cuadros delimitadores.

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

Usar la API de REST de CXRReportGen

El modelo CXRReportGen 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 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 "frontal_image", "lateral_image", "prior_image","indication", "technique", "comparison", "prior_report" Un objeto que contiene las cadenas que asignan datos a las entradas que se pasan al modelo.
index integer Y 0-10 Recuento de entradas pasadas al modelo. Está limitado por la cantidad de RAM de GPU que tenga en la máquina virtual en la que está hospedado CxrReportGen y por la cantidad de datos que se pueden pasar en una única solicitud POST, que depende del tamaño de sus imágenes. Por lo tanto, es razonable mantener este número por debajo de 10. Compruebe los registros del modelo si recibe errores al pasar varias entradas.
data list[list[string]] Y "" La lista contiene los elementos pasados al modelo. La longitud de la lista viene definida por el parámetro de índice. Cada elemento es una lista de varias cadenas. El orden y el significado se definen mediante el parámetro columns. Las cadenas de texto contienen texto. Las cadenas de imagen son los bytes de la imagen codificados usando base64 y descodificados como cadena utf-8

Ejemplo de solicitud

Una simple inferencia solicitando lista de hallazgos para una única imagen frontal sin indicación proporcionada

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

Solicitud más compleja pasando frontal, lateral, indicación y técnica

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

Esquema de respuesta

La carga de respuesta es una cadena con formato JSON que contiene los siguientes campos:

Clave Tipo Descripción
output list[list[string, list[list[float]]]] Lista de hallazgos. Cada hallazgo es un elemento de una lista representado por una lista que contiene una cadena con el texto del hallazgo y una lista que contiene cuadros delimitadores. Cada cuadro delimitador está representado por una lista de cuatro coordenadas del cuadro delimitador relacionadas con el hallazgo en el siguiente orden: x_min, y_min, x_max, y_max. Cada valor de coordenadas está comprendido entre 0 y 1, por lo que para obtener coordenadas en el espacio de la imagen para su representación o procesamiento es necesario multiplicar estos valores por la anchura o la altura de la imagen según corresponda.

Ejemplo de respuesta

Una simple inferencia solicitando la inserción de una sola cadena

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

Formatos de imagen admitidos:

La API del modelo implementado es compatible con imágenes codificadas en formatos PNG o JPEG. Para obtener unos resultados óptimos, le recomendamos usar PNG sin comprimir ni pérdidas con imágenes monocromáticas de 8 bits.

Aprenda más a partir de ejemplos

CXRReportGen es un modelo versátil que puede aplicarse a una amplia gama de tareas y modalidades de obtención de imágenes. Para obtener más ejemplos, consulte el siguiente cuaderno interactivo de Python:

  • Implementación y uso de CXRReportGen: aprenda a implementar el modelo CXRReportGen e integrarlo en el flujo de trabajo. Este cuaderno también abarca el análisis sintáctico de cuadros delimitadores y las técnicas de visualización.