IntelliGrow commited on
Commit
71eeecd
verified
1 Parent(s): eda55b2

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +151 -16
README.md CHANGED
@@ -1,17 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- license: apache-2.0
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
+ ![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)
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).*