| --- |
| language: |
| - es |
| metrics: |
| - accuracy |
| - f1 |
| - precision |
| - recall |
| - matthews_correlation |
| base_model: |
| - google/vit-base-patch16-224 |
| pipeline_tag: image-classification |
| tags: |
| - image-classification |
| - vision-transformer |
| - papas |
| - calidad |
| --- |
| |
| # Clasificador de calidad de papas con Vision Transformer |
|
|
| ## Descripci贸n |
|
|
| Este modelo clasifica la calidad de tub茅rculos de papa mediante visi贸n por computadora. Est谩 basado en la arquitectura **Vision Transformer (ViT)**, espec铆ficamente en `google/vit-base-patch16-224`, y fue entrenado con un conjunto h铆brido de **36 000 im谩genes** de papa chaucha y papa chola. |
|
|
| El objetivo del modelo es apoyar la clasificaci贸n autom谩tica de papas en dos categor铆as: |
|
|
| | Clase | Descripci贸n | |
| | --- | --- | |
| | `Buen estado` | Tub茅rculos de papa sin defectos visibles. | |
| | `Defectuoso` | Tub茅rculos de papa con cortes, brotes o signos de pudrici贸n visibles. | |
|
|
| ## Datos y arquitectura |
|
|
| - **Tarea:** clasificaci贸n binaria de im谩genes. |
| - **Modelo base:** Vision Transformer base con parches de 16 x 16 p铆xeles. |
| - **Resoluci贸n de entrada:** 224 x 224 p铆xeles. |
| - **Conjunto de datos:** conjunto h铆brido de im谩genes de papas. |
| - **Divisi贸n de datos:** entrenamiento, validaci贸n y prueba. |
| - **M茅tricas evaluadas:** exactitud, precisi贸n, sensibilidad, puntaje F1, coeficiente de correlaci贸n de Matthews (MCC) y p茅rdida. |
|
|
| ## Estrategias de entrenamiento |
|
|
| Se evaluaron dos estrategias de entrenamiento: **Transfer Learning** y **Fine-Tuning parcial**. |
|
|
| ### Transfer Learning |
|
|
| En esta etapa se congelaron todas las capas del modelo base y se entren贸 煤nicamente el clasificador final. |
|
|
| | Hiperpar谩metro | Valor | |
| | --- | --- | |
| | 脡pocas | 30 | |
| | Tama帽o de lote | 32 | |
| | Tasa de aprendizaje | 1e-4 | |
| | Optimizador | AdamW | |
| | Scheduler | Cosine Annealing | |
| | Weight decay | 0.01 | |
| | Betas | (0.9, 0.999) | |
| | Fracci贸n de calentamiento | 0.1 | |
| | Precisi贸n mixta | S铆 | |
| | Capas congeladas | Todas las capas | |
|
|
| ### Fine-Tuning parcial |
|
|
| En esta etapa se descongel贸 parte del modelo para ajustar mejor las representaciones visuales al dominio de las papas. |
|
|
| | Hiperpar谩metro | Valor | |
| | --- | --- | |
| | 脡pocas | 20 | |
| | Tama帽o de lote | 32 | |
| | Tasa de aprendizaje | 1e-5 | |
| | Optimizador | AdamW | |
| | Scheduler | Cosine Annealing | |
| | Weight decay | 0.01 | |
| | Betas | (0.9, 0.999) | |
| | Fracci贸n de calentamiento | 0.1 | |
| | Precisi贸n mixta | S铆 | |
| | Capas congeladas | 6 primeras capas | |
|
|
| ## Resultados |
|
|
| Los resultados muestran que el **Fine-Tuning parcial** obtuvo el mejor desempe帽o general. Esta estrategia alcanz贸 m茅tricas cercanas a 1.0 en validaci贸n y prueba, con una p茅rdida considerablemente menor que la obtenida con Transfer Learning. |
|
|
| ### Validaci贸n final |
|
|
| | T茅cnica de entrenamiento | Accuracy | Precision | Recall | F1-score | MCC | P茅rdida | |
| | --- | ---: | ---: | ---: | ---: | ---: | ---: | |
| | Transfer Learning | 0.9628 | 0.9631 | 0.9628 | 0.9628 | 0.9260 | 0.1319 | |
| | Fine-Tuning parcial | 0.9995 | 0.9995 | 0.9995 | 0.9995 | 0.9990 | 0.0026 | |
|
|
| ### Evaluaci贸n en prueba |
|
|
| | T茅cnica de entrenamiento | Accuracy | Precision | Recall | F1-score | MCC | P茅rdida | |
| | --- | ---: | ---: | ---: | ---: | ---: | ---: | |
| | Transfer Learning | 0.9600 | 0.9602 | 0.9600 | 0.9600 | 0.9202 | 0.1353 | |
| | Fine-Tuning parcial | 0.9999 | 0.9999 | 0.9999 | 0.9999 | 0.9997 | 0.0015 | |
|
|
| ## Matriz de confusi贸n |
|
|
| La matriz de confusi贸n compara el desempe帽o de ambas estrategias. El modelo entrenado con **Fine-Tuning parcial** presenta una separaci贸n casi perfecta entre las clases, mientras que el modelo con **Transfer Learning** registra una mayor cantidad de errores de clasificaci贸n. |
|
|
|  |
|
|
| ## Archivos principales |
|
|
| | Recurso | Ruta | |
| | --- | --- | |
| | Pesos de Transfer Learning | `modelo_v3_hibrido/hibrido_v2/transfer_learning/vit_papas_pesos_tl.pt` | |
| | Pesos de Fine-Tuning parcial | `modelo_v3_hibrido/hibrido_v2/fine_tuning_parcial/vit_papas_pesos_ftp.pt` | |
| | M茅tricas de prueba de Transfer Learning | `modelo_v3_hibrido/hibrido_v2/resultados/metricas_test_tl.csv` | |
| | M茅tricas de prueba de Fine-Tuning parcial | `modelo_v3_hibrido/hibrido_v2/resultados/metricas_test_ftp.csv` | |
| | Curvas y gr谩ficas de evaluaci贸n | `modelo_v3_hibrido/hibrido_v2/resultados/` | |
|
|
| ## Uso del modelo |
|
|
| Para utilizar el modelo, se debe cargar la arquitectura ViT base, aplicar el mismo preprocesamiento usado durante el entrenamiento y cargar los pesos correspondientes a la estrategia seleccionada. |
|
|
| ```python |
| import torch |
| from PIL import Image |
| from transformers import ViTForImageClassification, ViTImageProcessor |
| |
| RUTA_PESOS = "modelo_v3_hibrido/hibrido_v2/fine_tuning_parcial/vit_papas_pesos_ftp.pt" |
| RUTA_IMAGEN = "ruta/a/la/imagen.jpg" |
| |
| id2label = { |
| 0: "Buen estado", |
| 1: "Defectuoso", |
| } |
| |
| processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224") |
| modelo = ViTForImageClassification.from_pretrained( |
| "google/vit-base-patch16-224", |
| num_labels=2, |
| id2label=id2label, |
| label2id={label: idx for idx, label in id2label.items()}, |
| ignore_mismatched_sizes=True, |
| ) |
| |
| checkpoint = torch.load(RUTA_PESOS, map_location="cpu") |
| estado = checkpoint.get("model_state_dict", checkpoint) |
| estado = estado.get("state_dict", estado) |
| |
| modelo.load_state_dict(estado) |
| modelo.eval() |
| |
| imagen = Image.open(RUTA_IMAGEN).convert("RGB") |
| entradas = processor(images=imagen, return_tensors="pt") |
| |
| with torch.no_grad(): |
| salidas = modelo(**entradas) |
| clase_predicha = salidas.logits.argmax(dim=1).item() |
| |
| print(f"Predicci贸n: {id2label[clase_predicha]}") |
| ``` |
|
|
| ## Recomendaciones |
|
|
| - Usar preferentemente los pesos de **Fine-Tuning parcial**, ya que presentan el mejor rendimiento en prueba. |
| - Mantener el mismo tama帽o de entrada y normalizaci贸n del modelo base para evitar diferencias entre entrenamiento e inferencia. |
| - Validar el modelo con im谩genes tomadas en condiciones reales de iluminaci贸n, fondo y distancia antes de integrarlo en un flujo de clasificaci贸n real. |
|
|