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.
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.
Model tree for Carlos012/vit_papas
Base model
google/vit-base-patch16-224