| --- |
| language: |
| - es |
| metrics: |
| - accuracy |
| - precision |
| - recall |
| - f1 |
| tags: |
| - image-classification |
| - pytorch |
| - cnn |
| - deep-learning |
| - medical-imaging |
| - brain-cancer |
| --- |
| # Modelo CNN para Clasificaci贸n de C谩ncer Cerebral |
|
|
|   |
|
|
| <p align="center"> |
| <b>鈿狅笍 ADVERTENCIA IMPORTANTE 鈿狅笍</b><br> |
| <b>Este modelo es un PROTOTIPO de investigaci贸n y NO DEBE SER UTILIZADO para diagn贸stico m茅dico real.</b><br> |
| <b>Cualquier decisi贸n m茅dica debe ser tomada por un profesional de la salud cualificado.</b> |
| </p> |
|
|
| Este repositorio contiene un modelo de Red Neuronal Convolucional (CNN) entrenado con PyTorch para clasificar im谩genes de resonancias magn茅ticas cerebrales en tres categor铆as. |
|
|
| ## Descripci贸n del Modelo |
|
|
| El modelo es una CNN dise帽ada para la tarea de clasificaci贸n de im谩genes. Fue entrenado para distinguir entre los siguientes tres tipos de tumores cerebrales: |
|
|
| * **Glioma (`brain_glioma`)** |
| * **Meningioma (`brain_menin`)** |
| * **Tumor pituitario (`brain_tumor`)** |
| |
| **Arquitectura:** El modelo utiliza una CNN personalizada (`SimpleCNN`) con cuatro capas convolucionales (32, 64, 128, 256 filtros respectivamente), cada una seguida de una capa de activaci贸n ReLU y una capa de max-pooling. Despu茅s de las capas convolucionales, la salida se aplana y se pasa a trav茅s de dos capas completamente conectadas (512 neuronas en la primera) para la clasificaci贸n final en 3 clases. |
| |
| **Framework:** PyTorch |
| |
| Este repositorio tambi茅n incluye el notebook `evaluar_dataset.ipynb`, que contiene el c贸digo utilizado para evaluar el modelo, generar la matriz de confusi贸n y calcular las m茅tricas de rendimiento. |
| |
| El dataset utilizado para el entrenamiento, validaci贸n y test se encuentra en la carpeta `data/`. |
| |
| ## C贸mo Empezar |
| |
| Para utilizar este modelo, necesitas tener PyTorch y Torchvision instalados. Puedes cargar el modelo y usarlo para hacer predicciones de la siguiente manera. |
| |
| Aseg煤rate de guardar tu modelo entrenado (por ejemplo, como `torch_brain_cancer_91.pth`) y usar el siguiente script. |
| |
| ```python |
| import torch |
| from torchvision import transforms |
| from PIL import Image |
| |
| # 1. Cargar el modelo |
| # Aseg煤rate de que la ruta al archivo .pth sea correcta |
| model = torch.load('modelo/torch_brain_cancer_91.pth') |
| model.eval() |
| |
| # 2. Definir las transformaciones de la imagen |
| # 隆IMPORTANTE! Usa las mismas transformaciones que usaste para la validaci贸n/test. |
| # Rellena los valores correctos de reescalado y normalizaci贸n. |
| preprocess = transforms.Compose([ |
| transforms.Resize(256), |
| transforms.CenterCrop(224), |
| transforms.ToTensor(), |
| transforms.Normalize( |
| mean=[0.485, 0.456, 0.406], # [DATO A RELLENAR: si usaste valores diferentes] |
| std=[0.229, 0.224, 0.225] # [DATO A RELLENAR: si usaste valores diferentes] |
| ) |
| ]) |
| |
| # 3. Cargar y preprocesar la imagen |
| img = Image.open("[RUTA/A/TU/IMAGEN.jpg]").convert('RGB') |
| img_preprocessed = preprocess(img) |
| batch_img_tensor = torch.unsqueeze(img_preprocessed, 0) |
| |
| # 4. Realizar la predicci贸n |
| with torch.no_grad(): |
| output = model(batch_img_tensor) |
| |
| # 5. Obtener la clase predicha |
| class_names = ['brain_glioma', 'brain_menin', 'brain_tumor'] |
| _, index = torch.max(output, 1) |
| predicted_class = class_names[index[0]] |
| print(f"La clase predicha es: {predicted_class}") |
| |
| ``` |
| |
| ## Dataset de Entrenamiento |
| |
| **Descripci贸n:** Este conjunto de datos contiene una colecci贸n completa de im谩genes de resonancia magn茅tica para la investigaci贸n del c谩ncer cerebral, espec铆ficamente destinadas a respaldar el diagn贸stico m茅dico. Es un dataset de im谩genes de resonancia magn茅tica de c谩ncer cerebral. |
| |
| **Divisi贸n de datos:** |
| El dataset fue pre-procesado y dividido en: |
| * **Entrenamiento:** 70% |
| * **Test:** 15% |
| * **Validaci贸n:** 15% |
| |
| **Preprocesamiento:** |
| Se aplicaron diferentes transformaciones a las im谩genes para el entrenamiento y la evaluaci贸n: |
| |
| * **Para el conjunto de entrenamiento (`transformaciones_train`):** |
| * `RandomResizedCrop(224)`: Recorte aleatorio y redimensionamiento a 224x224 p铆xeles. |
| * `RandomHorizontalFlip()`: Volteo horizontal aleatorio. |
| * `RandomRotation(15)`: Rotaci贸n aleatoria de hasta 15 grados. |
| * `ToTensor()`: Conversi贸n de las im谩genes a tensores PyTorch. |
| * `Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])`: Normalizaci贸n con los valores medios y desviaci贸n est谩ndar de ImageNet. |
|
|
| * **Para los conjuntos de validaci贸n y test (`transformaciones_test`):** |
| * `Resize(256)`: Redimensionamiento de la imagen a 256 p铆xeles en el lado m谩s corto. |
| * `CenterCrop(224)`: Recorte central a 224x224 p铆xeles. |
| * `ToTensor()`: Conversi贸n de las im谩genes a tensores PyTorch. |
| * `Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])`: Normalizaci贸n con los valores medios y desviaci贸n est谩ndar de ImageNet. |
| |
| Estas transformaciones se aplicaron a los datasets utilizando `ImageFolder` y se cargaron con `DataLoader` con un `batch_size` de 32. |
| |
| ## Procedimiento de Entrenamiento |
| |
| **Hiperpar谩metros:** |
| * **Optimizador:** Adam |
| * **Tasa de aprendizaje (Learning Rate):** 0.001 |
| * **Funci贸n de p茅rdida:** CrossEntropyLoss |
| * **N煤mero de 茅pocas (Epochs):** 25 |
| * **Tama帽o del lote (Batch Size):** 32 |
|
|
| ## Evaluaci贸n |
|
|
| El modelo fue evaluado en el conjunto de test, obteniendo los siguientes resultados: |
|
|
| ``` |
| Reporte de Clasificaci贸n: |
| precision recall f1-score support |
| |
| brain_glioma 0.95 0.95 0.95 300 |
| brain_menin 0.84 0.91 0.87 300 |
| brain_tumor 0.94 0.86 0.90 307 |
| |
| accuracy 0.91 907 |
| macro avg 0.91 0.91 0.91 907 |
| weighted avg 0.91 0.91 0.91 907 |
| ``` |
|
|
| **Precisi贸n por clase:** |
| * brain_glioma: 95.00% |
| * brain_menin: 91.00% |
| * brain_tumor: 85.99% |
| |
| **Matriz de Confusi贸n:** |
| |
| | | brain_glioma | brain_menin | brain_tumor | |
| | :---------- | :----------- | :---------- | :---------- | |
| | brain_glioma | 285 | 15 | 0 | |
| | brain_menin | 9 | 273 | 18 | |
| | brain_tumor | 6 | 37 | 264 | |
| |
| **An谩lisis de la Matriz de Confusi贸n:** |
| La matriz de confusi贸n muestra el rendimiento del modelo para cada clase. Se observa que el modelo clasifica la clase `brain_glioma` con una alta precisi贸n y pocos errores. La principal 谩rea de mejora se encuentra en la distinci贸n entre las clases `brain_menin` y `brain_tumor`. Hay un n煤mero notable de falsos negativos y falsos positivos entre estas dos categor铆as, lo que indica que el modelo a veces confunde estos dos tipos de tumores entre s铆. Por ejemplo, 37 casos de `brain_tumor` fueron clasificados err贸neamente como `brain_menin`, y 18 casos de `brain_menin` fueron clasificados como `brain_tumor`. |
|
|
| ## Limitaciones y Consideraciones 脡ticas |
|
|
| * **NO PARA DIAGN脫STICO M脡DICO:** Este modelo es una prueba de concepto y **no debe ser utilizado para el diagn贸stico m茅dico real**. Cualquier diagn贸stico debe ser realizado por un profesional de la salud cualificado. |
| * **Sesgos del Dataset:** El rendimiento del modelo est谩 limitado por la naturaleza del dataset de entrenamiento. Puede no generalizar bien a im谩genes de esc谩neres con configuraciones diferentes o a datos demogr谩ficos no representados en el conjunto de datos. |
| * **Generalizaci贸n:** El modelo fue entrenado y evaluado en un conjunto de datos espec铆fico. Su rendimiento en datos completamente nuevos y no vistos puede variar. |
|
|
| --- |
| *Model creado por Izan Medkouri L贸pez (IntelliGrow).* |