Este repositorio contiene el código y los datos necesarios para participar en la competencia de Kaggle "RSNA 2024 Lumbar Spine Degenerative Classification". El objetivo de esta competencia es desarrollar modelos de aprendizaje automático que puedan identificar y clasificar condiciones médicas que afectan la columna lumbar en imágenes de resonancia magnética.
Este proyecto está basado en una competencia realizada por Kaggle y 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.
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.
El proceso de entrenamiento incluye varias etapas clave:
- Preprocesamiento de Datos: Las imágenes DICOM se cargan y se organizan, y las coordenadas de las áreas de interés se extraen y se preparan para el entrenamiento del modelo.
- Entrenamiento del Modelo: Se utiliza un modelo de aprendizaje profundo para detectar y clasificar las condiciones lumbares en las imágenes. El entrenamiento incluye la optimización y evaluación del modelo.
- Evaluación y Predicción: El modelo entrenado se evalúa utilizando un conjunto de datos de validación, y se generan predicciones para el conjunto de prueba.
-
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
A continuación se muestra la estructura de las carpetas del repositorio:
Lumbar/
├── data/
│ ├── train.csv
│ ├── train_label_coordinates.csv
│ ├── sample_submission.csv
│ ├── train_images/
│ │ └── [study_id]/
│ │ └── [series_id]/
│ │ └── [instance_number].dcm
│ ├── test_images/
│ │ └── [study_id]/
│ │ └── [series_id]/
│ │ └── [instance_number].dcm
│ ├── train_series_descriptions.csv
│ └── test_series_descriptions.csv
├── src/
│ ├── Detection.py
│ └── data/
│ └── __init__.py
└── README.md