vit_papas / README.md
Carlos012's picture
Update (Readme): Update readme
28bea66
|
Raw
History Blame Contribute Delete
6.09 kB
---
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.
![Matriz de confusi贸n de Transfer Learning y Fine-Tuning parcial](./modelo_v3_hibrido/hibrido_v2/resultados/matrices_confusion_tl_ftp.png)
## 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.