Cómo construir una herramienta prototipo de juicio de rayos X (sistema de inferencia médica de código abierto) utilizando TORCHXRAYVision, Gradio y Pytorch

En este tutorial, demostramos cómo construir una herramienta prototipo de juicio de rayos X utilizando bibliotecas de código abierto en Google Colab. Al aprovechar la potencia de TORCHXRAYVision para cargar modelos de densenet previamente capacitados y Gradio para crear una interfaz de usuario interactiva, mostramos cómo procesar y clasificar las imágenes de rayos X de Cofre con una configuración mínima. Este cuaderno lo guía a través del preprocesamiento de imágenes, la inferencia del modelo y la interpretación de resultados, todo diseñado para funcionar sin problemas en Colab sin requerir claves o inicios de sesión de API externas. Tenga en cuenta que esta demostración está destinada solo a fines educativos y no debe usarse como sustituto del diagnóstico clínico profesional.

!pip install torchxrayvision gradio

Primero, instalamos la biblioteca TORCHXRAYVISION para el análisis de rayos X y Gradio para crear una interfaz interactiva.

import torch
import torchxrayvision as xrv
import torchvision.transforms as transforms
import gradio as gr

Importamos pytorch para aprendizaje profundo Operaciones, TorchxRayVision para el análisis X -Ray, transformaciones de TorchVision para el preprocesamiento de imágenes y Gradio para construir una interfaz de usuario interactiva.

model = xrv.models.DenseNet(weights="densenet121-res224-all")
model.eval()  

Luego, cargamos un modelo Densenet previamente capacitado utilizando los pesos “Densenet121-res224-All” y lo establecemos en modo de evaluación para inferencia.

try:
    pathology_labels = model.meta["labels"]
    print("Retrieved pathology labels from model.meta.")
except Exception as e:
    print("Could not retrieve labels from model.meta. Using fallback labels.")
    pathology_labels = [
         "Atelectasis", "Cardiomegaly", "Consolidation", "Edema",
         "Emphysema", "Fibrosis", "Hernia", "Infiltration", "Mass",
         "Nodule", "Pleural Effusion", "Pneumonia", "Pneumothorax", "No Finding"
    ]

Ahora, intentamos recuperar etiquetas de patología de los metadatos del modelo y recurrir a una lista predefinida si la recuperación falla.

def classify_xray(image):
    try:
        transform = transforms.Compose([
            transforms.Resize((224, 224)),
            transforms.Grayscale(num_output_channels=1),
            transforms.ToTensor()
        ])
        input_tensor = transform(image).unsqueeze(0)  # add batch dimension


        with torch.no_grad():
            preds = model(input_tensor)
       
        pathology_scores = preds[0].detach().numpy()
        results = {}
        for idx, label in enumerate(pathology_labels):
            results[label] = float(pathology_scores[idx])
       
        sorted_results = sorted(results.items(), key=lambda x: x[1], reverse=True)
        top_label, top_score = sorted_results[0]
       
        judgement = (
            f"Prediction: {top_label} (score: {top_score:.2f})nn"
            f"Full Scores:n{results}"
        )
        return judgement
    except Exception as e:
        return f"Error during inference: {str(e)}"

Aquí, con esta función, preprocesamos una imagen de rayos X de entrada, ejecutamos una inferencia utilizando el modelo previamente capacitado, extrae las puntuaciones de patología y devolvemos un resumen formateado de la predicción superior y todas las puntuaciones mientras manejan errores con gracia.

iface = gr.Interface(
    fn=classify_xray,
    inputs=gr.Image(type="pil"),
    outputs="text",
    title="X-ray Judgement Tool (Prototype)",
    description=(
        "Upload a chest X-ray image to receive a classification judgement. "
        "This demo is for educational purposes only and is not intended for clinical use."
    )
)


iface.launch()

Finalmente, construimos y lanzamos una interfaz de Gradio que permite a los usuarios subir una imagen de rayos X de cofre. La función Classify_XRAY procesa la imagen para emitir un juicio de diagnóstico.

Interfaz de Gradio para la herramienta

A través de este tutorial, hemos explorado el desarrollo de una herramienta interactiva de juicio de rayos X que integra técnicas avanzadas de aprendizaje profundo con una interfaz fácil de usar. A pesar de las limitaciones inherentes, como el modelo que no está ajustado para el diagnóstico clínico, este prototipo sirve como un punto de partida valioso para experimentar con aplicaciones de imágenes médicas. Le recomendamos que se base en esta base, considerando la importancia de la validación rigurosa y el cumplimiento de los estándares médicos para el uso del mundo real.


Aquí está el Cuaderno de colab. Además, no olvides seguirnos Gorjeo y únete a nuestro Canal de telegrama y LinkedIn GRsalpicar. No olvides unirte a nuestro 85k+ ml de subreddit.


Asif Razzaq es el CEO de MarktechPost Media Inc .. Como empresario e ingeniero visionario, ASIF se compromete a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, MarktechPost, que se destaca por su cobertura profunda de noticias de aprendizaje automático y de aprendizaje profundo que es técnicamente sólido y fácilmente comprensible por una audiencia amplia. La plataforma cuenta con más de 2 millones de vistas mensuales, ilustrando su popularidad entre el público.