File size: 7,636 Bytes
71eeecd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6451a2
71eeecd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Modelo CNN para Clasificaci贸n de C谩ncer Cerebral

![PyTorch](https://img.shields.io/badge/PyTorch-EE4C2C?style=for-the-badge&logo=pytorch&logoColor=white) ![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)

<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).*