feat (interfaz): Actualizar rutas de acceso a modelo
Browse files
app.py
CHANGED
|
@@ -27,6 +27,12 @@ TAMANIO_MAXIMO_MB = 20
|
|
| 27 |
RESOLUCION = (224, 224)
|
| 28 |
DISPOSITIVO = "cuda" if torch.cuda.is_available() else "cpu"
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
# Transformaciones de imagen
|
| 31 |
TRANSFORMACION = transforms.Compose(
|
| 32 |
[
|
|
@@ -40,10 +46,9 @@ TRANSFORMACION = transforms.Compose(
|
|
| 40 |
@dataclass
|
| 41 |
class ConfigModelo:
|
| 42 |
repo_id: str = "Carlos012/vit_papas"
|
| 43 |
-
|
| 44 |
num_clases: int = 2
|
| 45 |
modelo_base: str = "vit_base_patch16_224"
|
| 46 |
-
nombre_display: str = "Modelo FT"
|
| 47 |
|
| 48 |
|
| 49 |
class ClasificadorPapasViT(nn.Module):
|
|
@@ -70,10 +75,11 @@ class GestorModelo:
|
|
| 70 |
try:
|
| 71 |
# Intentar usar token de variable de entorno
|
| 72 |
token = os.getenv("HF_TOKEN")
|
| 73 |
-
|
|
|
|
| 74 |
ruta_modelo = hf_hub_download(
|
| 75 |
repo_id=self.config.repo_id,
|
| 76 |
-
filename=
|
| 77 |
token=token,
|
| 78 |
repo_type="model",
|
| 79 |
)
|
|
@@ -117,10 +123,16 @@ class GestorModelo:
|
|
| 117 |
|
| 118 |
print(f"Modelo cargado exitosamente en {DISPOSITIVO}")
|
| 119 |
return True
|
| 120 |
-
|
| 121 |
except Exception as e:
|
| 122 |
print(f"Error al cargar modelo: {e}")
|
| 123 |
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
|
| 125 |
@staticmethod
|
| 126 |
def _reshape_transform(tensor: torch.Tensor) -> torch.Tensor:
|
|
@@ -164,10 +176,10 @@ class ProcesadorImagen:
|
|
| 164 |
|
| 165 |
return True, "OK"
|
| 166 |
|
|
|
|
| 167 |
def procesar_con_modelo(
|
| 168 |
self, imagen_path: str, gestor: GestorModelo, nombre_modelo: str
|
| 169 |
) -> Dict:
|
| 170 |
-
"""Procesa una imagen con un modelo espec铆fico"""
|
| 171 |
# Cargar modelo si es necesario
|
| 172 |
if gestor.modelo is None:
|
| 173 |
if not gestor.cargar_modelo():
|
|
@@ -212,8 +224,8 @@ class ProcesadorImagen:
|
|
| 212 |
except Exception as e:
|
| 213 |
return {"error": f"Error en {nombre_modelo}: {str(e)}"}
|
| 214 |
|
|
|
|
| 215 |
def procesar(self, imagen_path: str) -> Dict:
|
| 216 |
-
"""Procesa imagen con ambos modelos y retorna comparaci贸n"""
|
| 217 |
tiempo_inicio = time.time()
|
| 218 |
|
| 219 |
# Validar imagen
|
|
@@ -252,12 +264,10 @@ class ProcesadorImagen:
|
|
| 252 |
|
| 253 |
# Instancias globales de los gestores
|
| 254 |
config_ft = ConfigModelo(
|
| 255 |
-
|
| 256 |
-
nombre_display="Modelo FT",
|
| 257 |
)
|
| 258 |
config_tl = ConfigModelo(
|
| 259 |
-
|
| 260 |
-
nombre_display="Modelo TL",
|
| 261 |
)
|
| 262 |
gestor_ft = GestorModelo(config_ft)
|
| 263 |
gestor_tl = GestorModelo(config_tl)
|
|
|
|
| 27 |
RESOLUCION = (224, 224)
|
| 28 |
DISPOSITIVO = "cuda" if torch.cuda.is_available() else "cpu"
|
| 29 |
|
| 30 |
+
RUTAS_MODELOS = {
|
| 31 |
+
"Modelo_FT": "modelo_v3_hibrido/fine_tuning_parcial/vit_papas_pesos_ft.pt",
|
| 32 |
+
"Modelo_TL": "modelo_v3_hibrido/transfer_learning/vit_papas_pesos_tl.pt",
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
|
| 36 |
# Transformaciones de imagen
|
| 37 |
TRANSFORMACION = transforms.Compose(
|
| 38 |
[
|
|
|
|
| 46 |
@dataclass
|
| 47 |
class ConfigModelo:
|
| 48 |
repo_id: str = "Carlos012/vit_papas"
|
| 49 |
+
nombre_modelo: str = ""
|
| 50 |
num_clases: int = 2
|
| 51 |
modelo_base: str = "vit_base_patch16_224"
|
|
|
|
| 52 |
|
| 53 |
|
| 54 |
class ClasificadorPapasViT(nn.Module):
|
|
|
|
| 75 |
try:
|
| 76 |
# Intentar usar token de variable de entorno
|
| 77 |
token = os.getenv("HF_TOKEN")
|
| 78 |
+
nombre_modelo = self._resolver_nombre_modelo()
|
| 79 |
+
|
| 80 |
ruta_modelo = hf_hub_download(
|
| 81 |
repo_id=self.config.repo_id,
|
| 82 |
+
filename=nombre_modelo,
|
| 83 |
token=token,
|
| 84 |
repo_type="model",
|
| 85 |
)
|
|
|
|
| 123 |
|
| 124 |
print(f"Modelo cargado exitosamente en {DISPOSITIVO}")
|
| 125 |
return True
|
| 126 |
+
|
| 127 |
except Exception as e:
|
| 128 |
print(f"Error al cargar modelo: {e}")
|
| 129 |
return False
|
| 130 |
+
|
| 131 |
+
def _resolver_nombre_modelo(self) -> str:
|
| 132 |
+
# utiliza el nombre del modelo para resolver la ruta en HF Hub
|
| 133 |
+
ruta = RUTAS_MODELOS.get(self.config.nombre_modelo, self.config.nombre_modelo)
|
| 134 |
+
# normalizar ruta para evitar problemas de formato
|
| 135 |
+
return ruta.strip().lstrip("/\").replace("\", "/")
|
| 136 |
|
| 137 |
@staticmethod
|
| 138 |
def _reshape_transform(tensor: torch.Tensor) -> torch.Tensor:
|
|
|
|
| 176 |
|
| 177 |
return True, "OK"
|
| 178 |
|
| 179 |
+
# funci贸n para procesar la imagen con un modelo espec铆fico
|
| 180 |
def procesar_con_modelo(
|
| 181 |
self, imagen_path: str, gestor: GestorModelo, nombre_modelo: str
|
| 182 |
) -> Dict:
|
|
|
|
| 183 |
# Cargar modelo si es necesario
|
| 184 |
if gestor.modelo is None:
|
| 185 |
if not gestor.cargar_modelo():
|
|
|
|
| 224 |
except Exception as e:
|
| 225 |
return {"error": f"Error en {nombre_modelo}: {str(e)}"}
|
| 226 |
|
| 227 |
+
# funci贸n para procesar la imagen con ambos modelos y comparar resultados
|
| 228 |
def procesar(self, imagen_path: str) -> Dict:
|
|
|
|
| 229 |
tiempo_inicio = time.time()
|
| 230 |
|
| 231 |
# Validar imagen
|
|
|
|
| 264 |
|
| 265 |
# Instancias globales de los gestores
|
| 266 |
config_ft = ConfigModelo(
|
| 267 |
+
nombre_modelo="Modelo_FT",
|
|
|
|
| 268 |
)
|
| 269 |
config_tl = ConfigModelo(
|
| 270 |
+
nombre_modelo="Modelo_TL",
|
|
|
|
| 271 |
)
|
| 272 |
gestor_ft = GestorModelo(config_ft)
|
| 273 |
gestor_tl = GestorModelo(config_tl)
|