Este proyecto esta basado en una competicion realizada por kaggle tiene como objetivo identificar las condiciones médicas que afectan la columna lumbar en las resonancias magnéticas utilizando técnicas de aprendizaje automático. El objetivo final es clasificar las imágenes médicas en función de la severidad de las afecciones observadas en los estudios de resonancia magnética.
https://www.kaggle.com/competitions/rsna-2024-lumbar-spine-degenerative-classification
El conjunto de datos incluye imágenes y etiquetas correspondientes a las condiciones médicas que afectan la columna lumbar. Existen tres condiciones principales a evaluar:
- Estenosis del canal espinal (spinal canal stenosis).
- Estrechamiento del foramen neural (neural foraminal narrowing) en ambos lados de la columna vertebral.
- Estenosis subarticular (subarticular stenosis).
Cada condición se clasifica en cuatro niveles de severidad:
- Normal
- Leve (Mild)
- Moderado (Moderate)
- Grave (Severe)
El conjunto de datos también incluye coordenadas que indican la ubicación de las áreas de interés dentro de las imágenes 3D de resonancia magnética.
A continuación se describen los archivos más relevantes para el proyecto:
-
train.csv: Contiene las etiquetas del conjunto de entrenamiento.
study_id
: ID del estudio (varios estudios pueden incluir múltiples series de imágenes).condition_[level]
: Las etiquetas de destino para cada condición y nivel de la columna vertebral (Normal/Mild/Moderate/Severe).
-
train_label_coordinates.csv: Contiene las coordenadas de las áreas etiquetadas.
study_id
: ID del estudio.series_id
: ID de la serie de imágenes.instance_number
: Número de orden de la imagen dentro de la pila 3D.condition
: Condición médica (estenosis del canal espinal, estrechamiento del foramen neural, o estenosis subarticular).level
: Nivel vertebral relevante (por ejemplo, l3_l4).x/y
: Coordenadas del centro del área etiquetada.
-
sample_submission.csv: Ejemplo de archivo de envío para predicciones.
row_id
: Identificador único que combinastudy_id
,condition
ylevel
(ej.12345_spinal_canal_stenosis_l3_l4
).- Tres columnas de predicción para la clasificación (Normal/Mild/Moderate/Severe).
-
[entrenar/probar]_images/[study_id]/[series_id]/[instance_number].dcm: Archivos de imágenes en formato DICOM (.dcm), que contienen los datos de las imágenes de resonancia magnética.
-
[entrenar/probar]_series_descriptions.csv: Descripciones de las series de imágenes.
study_id
: ID del estudio.series_id
: ID de la serie de imágenes.series_description
: Descripción de la orientación del escaneo.
La competencia utiliza un conjunto de prueba oculto, lo que significa que los datos reales de prueba solo estarán disponibles durante la evaluación final. El archivo de envío debe seguir el formato especificado en sample_submission.csv
.
- src/: Código fuente del proyecto, que incluye scripts para el preprocesamiento de datos, entrenamiento y evaluación del modelo.
- data/: Carpeta que contiene los conjuntos de datos (imágenes y etiquetas).
- notebooks/: Bloc de notas Jupyter con el análisis y desarrollo del modelo
- models/: Contiene los modelos entrenados
- Clonar el repositorio.
- Instalar las dependencias listadas en el archivo
requirements.txt
. - Ejecutar los notebooks o scripts para entrenar los modelos y realizar predicciones.
El archivo Detection.py
contiene clases y funciones claves para el procesamiento de imágenes DICOM y la detección de condiciones médicas en la columna lumbar. Este archivo es responsable de realizar tareas como cargar y manipular imágenes, realizar predicciones y visualizar resultados. A continuación, se describen las funciones más importantes:
-
load_dicom_stack
:- Esta función carga un conjunto de imágenes DICOM desde una carpeta específica y organiza las imágenes de acuerdo con las posiciones de los pacientes.
- Uso:
sag_t2 = dcm.load_dicom_stack(dicom_folder='ruta/a/carpeta/dicom', plane='axial')
-
plot_img
:- Esta función traza coordenadas sobre una imagen DICOM y muestra los puntos clave correspondientes a niveles lumbares.
- Uso:
dcm.plot_img(img, coords_temp)
-
plot_5_crops
:- Genera cinco recortes de una imagen, centrados en un par de puntos clave, y los rota para alinearlos correctamente.
- Uso:
dcm.plot_5_crops(img, coords_temp)
-
show_scan_and_coords
:- Muestra una serie de imágenes DICOM y las coordenadas asociadas para un paciente específico y plano.
- Uso:
dcm.show_scan_and_coords(patient_folder='ruta/a/carpeta', plane=1, level=2)
-
train_model
:- Entrena un modelo de aprendizaje profundo para detectar condiciones lumbares en las imágenes. Incluye el procesamiento de datos, optimización y evaluación del modelo.
- Uso:
trainer.train(epochs=10)
-
visualize_prediction
:- Visualiza las predicciones del modelo superpuestas en las imágenes originales de DICOM.
- Uso:
trainer.visualize_prediction(batch, pred, epoch)
El archivo Detection.py
se encuentra en la carpeta src/
y contiene las funciones que permiten la manipulación de imágenes y el entrenamiento del modelo para la clasificación de patologías lumbares.
- src/
- Detection.py: Contiene las funciones y clases mencionadas arriba.
- data/: Funciones para manipular los datos del proyecto, incluidos los DICOM.
- data/: Carpeta que contiene las imágenes y los archivos CSV relacionados con los estudios de resonancia magnética.
La carpeta data
, que contiene los archivos CSV y las imágenes de entrenamiento y prueba, debe descargarse desde Kaggle debido al tamaño de los archivos (aproximadamente 36 GB).
https://www.kaggle.com/datasets/brendanartley/lumbar-coordinate-pretraining-dataset
https://www.kaggle.com/datasets/brendanartley/lumbar-coordinate-pretraining-dataset?select=data