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

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.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 馃檵 Ask for provider support

Model tree for Carlos012/vit_papas

Finetuned
(2064)
this model

Space using Carlos012/vit_papas 1