Update README.md
Browse files
README.md
CHANGED
|
@@ -1,17 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
-
|
| 3 |
-
language: es
|
| 4 |
-
tags:
|
| 5 |
-
- image-classification
|
| 6 |
-
- pytorch
|
| 7 |
-
- cnn
|
| 8 |
-
- medical-imaging
|
| 9 |
-
- brain-cancer
|
| 10 |
-
datasets:
|
| 11 |
-
- brain-cancer
|
| 12 |
-
metrics:
|
| 13 |
-
- accuracy
|
| 14 |
-
- precision
|
| 15 |
-
- recall
|
| 16 |
-
- f1
|
| 17 |
-
---
|
|
|
|
| 1 |
+
# Modelo CNN para Clasificaci贸n de C谩ncer Cerebral
|
| 2 |
+
|
| 3 |
+
 
|
| 4 |
+
|
| 5 |
+
<p align="center">
|
| 6 |
+
<b>鈿狅笍 ADVERTENCIA IMPORTANTE 鈿狅笍</b><br>
|
| 7 |
+
<b>Este modelo es un PROTOTIPO de investigaci贸n y NO DEBE SER UTILIZADO para diagn贸stico m茅dico real.</b><br>
|
| 8 |
+
<b>Cualquier decisi贸n m茅dica debe ser tomada por un profesional de la salud cualificado.</b>
|
| 9 |
+
</p>
|
| 10 |
+
|
| 11 |
+
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.
|
| 12 |
+
|
| 13 |
+
## Descripci贸n del Modelo
|
| 14 |
+
|
| 15 |
+
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:
|
| 16 |
+
|
| 17 |
+
* **Glioma (`brain_glioma`)**
|
| 18 |
+
* **Meningioma (`brain_menin`)**
|
| 19 |
+
* **Tumor pituitario (`brain_tumor`)**
|
| 20 |
+
|
| 21 |
+
**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.
|
| 22 |
+
|
| 23 |
+
**Framework:** PyTorch
|
| 24 |
+
|
| 25 |
+
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.
|
| 26 |
+
|
| 27 |
+
El dataset utilizado para el entrenamiento, validaci贸n y test se encuentra en la carpeta `data/`.
|
| 28 |
+
|
| 29 |
+
## C贸mo Empezar
|
| 30 |
+
|
| 31 |
+
Para utilizar este modelo, necesitas tener PyTorch y Torchvision instalados. Puedes cargar el modelo y usarlo para hacer predicciones de la siguiente manera.
|
| 32 |
+
|
| 33 |
+
Aseg煤rate de guardar tu modelo entrenado (por ejemplo, como `torch_brain_cancer_91.pth`) y usar el siguiente script.
|
| 34 |
+
|
| 35 |
+
```python
|
| 36 |
+
import torch
|
| 37 |
+
from torchvision import transforms
|
| 38 |
+
from PIL import Image
|
| 39 |
+
|
| 40 |
+
# 1. Cargar el modelo
|
| 41 |
+
# Aseg煤rate de que la ruta al archivo .pth sea correcta
|
| 42 |
+
model = torch.load('modelo/torch_brain_cancer_91.pth')
|
| 43 |
+
model.eval()
|
| 44 |
+
|
| 45 |
+
# 2. Definir las transformaciones de la imagen
|
| 46 |
+
# 隆IMPORTANTE! Usa las mismas transformaciones que usaste para la validaci贸n/test.
|
| 47 |
+
# Rellena los valores correctos de reescalado y normalizaci贸n.
|
| 48 |
+
preprocess = transforms.Compose([
|
| 49 |
+
transforms.Resize(256),
|
| 50 |
+
transforms.CenterCrop(224),
|
| 51 |
+
transforms.ToTensor(),
|
| 52 |
+
transforms.Normalize(
|
| 53 |
+
mean=[0.485, 0.456, 0.406], # [DATO A RELLENAR: si usaste valores diferentes]
|
| 54 |
+
std=[0.229, 0.224, 0.225] # [DATO A RELLENAR: si usaste valores diferentes]
|
| 55 |
+
)
|
| 56 |
+
])
|
| 57 |
+
|
| 58 |
+
# 3. Cargar y preprocesar la imagen
|
| 59 |
+
img = Image.open("[RUTA/A/TU/IMAGEN.jpg]").convert('RGB')
|
| 60 |
+
img_preprocessed = preprocess(img)
|
| 61 |
+
batch_img_tensor = torch.unsqueeze(img_preprocessed, 0)
|
| 62 |
+
|
| 63 |
+
# 4. Realizar la predicci贸n
|
| 64 |
+
with torch.no_grad():
|
| 65 |
+
output = model(batch_img_tensor)
|
| 66 |
+
|
| 67 |
+
# 5. Obtener la clase predicha
|
| 68 |
+
class_names = ['brain_glioma', 'brain_menin', 'brain_tumor']
|
| 69 |
+
_, index = torch.max(output, 1)
|
| 70 |
+
predicted_class = class_names[index[0]]
|
| 71 |
+
print(f"La clase predicha es: {predicted_class}")
|
| 72 |
+
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
## Dataset de Entrenamiento
|
| 76 |
+
|
| 77 |
+
**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.
|
| 78 |
+
|
| 79 |
+
**Divisi贸n de datos:**
|
| 80 |
+
El dataset fue pre-procesado y dividido en:
|
| 81 |
+
* **Entrenamiento:** 70%
|
| 82 |
+
* **Test:** 15%
|
| 83 |
+
* **Validaci贸n:** 15%
|
| 84 |
+
|
| 85 |
+
**Preprocesamiento:**
|
| 86 |
+
Se aplicaron diferentes transformaciones a las im谩genes para el entrenamiento y la evaluaci贸n:
|
| 87 |
+
|
| 88 |
+
* **Para el conjunto de entrenamiento (`transformaciones_train`):**
|
| 89 |
+
* `RandomResizedCrop(224)`: Recorte aleatorio y redimensionamiento a 224x224 p铆xeles.
|
| 90 |
+
* `RandomHorizontalFlip()`: Volteo horizontal aleatorio.
|
| 91 |
+
* `RandomRotation(15)`: Rotaci贸n aleatoria de hasta 15 grados.
|
| 92 |
+
* `ToTensor()`: Conversi贸n de las im谩genes a tensores PyTorch.
|
| 93 |
+
* `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.
|
| 94 |
+
|
| 95 |
+
* **Para los conjuntos de validaci贸n y test (`transformaciones_test`):**
|
| 96 |
+
* `Resize(256)`: Redimensionamiento de la imagen a 256 p铆xeles en el lado m谩s corto.
|
| 97 |
+
* `CenterCrop(224)`: Recorte central a 224x224 p铆xeles.
|
| 98 |
+
* `ToTensor()`: Conversi贸n de las im谩genes a tensores PyTorch.
|
| 99 |
+
* `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.
|
| 100 |
+
|
| 101 |
+
Estas transformaciones se aplicaron a los datasets utilizando `ImageFolder` y se cargaron con `DataLoader` con un `batch_size` de 32.
|
| 102 |
+
|
| 103 |
+
## Procedimiento de Entrenamiento
|
| 104 |
+
|
| 105 |
+
**Hiperpar谩metros:**
|
| 106 |
+
* **Optimizador:** Adam
|
| 107 |
+
* **Tasa de aprendizaje (Learning Rate):** 0.001
|
| 108 |
+
* **Funci贸n de p茅rdida:** CrossEntropyLoss
|
| 109 |
+
* **N煤mero de 茅pocas (Epochs):** 25
|
| 110 |
+
* **Tama帽o del lote (Batch Size):** 32
|
| 111 |
+
|
| 112 |
+
## Evaluaci贸n
|
| 113 |
+
|
| 114 |
+
El modelo fue evaluado en el conjunto de test, obteniendo los siguientes resultados:
|
| 115 |
+
|
| 116 |
+
```
|
| 117 |
+
Reporte de Clasificaci贸n:
|
| 118 |
+
precision recall f1-score support
|
| 119 |
+
|
| 120 |
+
brain_glioma 0.95 0.95 0.95 300
|
| 121 |
+
brain_menin 0.84 0.91 0.87 300
|
| 122 |
+
brain_tumor 0.94 0.86 0.90 307
|
| 123 |
+
|
| 124 |
+
accuracy 0.91 907
|
| 125 |
+
macro avg 0.91 0.91 0.91 907
|
| 126 |
+
weighted avg 0.91 0.91 0.91 907
|
| 127 |
+
```
|
| 128 |
+
|
| 129 |
+
**Precisi贸n por clase:**
|
| 130 |
+
* brain_glioma: 95.00%
|
| 131 |
+
* brain_menin: 91.00%
|
| 132 |
+
* brain_tumor: 85.99%
|
| 133 |
+
|
| 134 |
+
**Matriz de Confusi贸n:**
|
| 135 |
+
|
| 136 |
+
| | brain_glioma | brain_menin | brain_tumor |
|
| 137 |
+
| :---------- | :----------- | :---------- | :---------- |
|
| 138 |
+
| brain_glioma | 285 | 15 | 0 |
|
| 139 |
+
| brain_menin | 9 | 273 | 18 |
|
| 140 |
+
| brain_tumor | 6 | 37 | 264 |
|
| 141 |
+
|
| 142 |
+
**An谩lisis de la Matriz de Confusi贸n:**
|
| 143 |
+
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`.
|
| 144 |
+
|
| 145 |
+
## Limitaciones y Consideraciones 脡ticas
|
| 146 |
+
|
| 147 |
+
* **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.
|
| 148 |
+
* **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.
|
| 149 |
+
* **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.
|
| 150 |
+
|
| 151 |
---
|
| 152 |
+
*Model creado por Izan Medkouri L贸pez (IntelliGrow).*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|