ViT-Base/16 ajustado sobre PlantVillage
Clasificador de enfermedades foliares en 38 categorías, obtenido por ajuste fino de
google/vit-base-patch16-224 sobre el conjunto PlantVillage.
Forma parte de FitoAsistente, proyecto final del curso de Inteligencia Artificial del Magíster en Data Science de la Universidad San Sebastián. Jonathan Núñez Moya · Francisco Rietta González · Agosto de 2026.
- Portada del proyecto: https://huggingface.co/spaces/JohnSupertramp2026/fitoasistente
- Modelo con el que se compara: https://huggingface.co/JohnSupertramp2026/convnext-tiny-plantvillage
Qué hace
Recibe la fotografía de una hoja y devuelve una distribución de probabilidad sobre 38 clases
que combinan 14 especies con su estado sano y con distintas enfermedades. Las etiquetas van
en la configuración del modelo, así que las predicciones salen con el nombre de la condición
y no como LABEL_0.
Uso
from transformers import AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
import torch
proc = AutoImageProcessor.from_pretrained("JohnSupertramp2026/vit-base-plantvillage")
mod = AutoModelForImageClassification.from_pretrained("JohnSupertramp2026/vit-base-plantvillage").eval()
img = Image.open("hoja.jpg").convert("RGB")
with torch.no_grad():
logits = mod(**proc(images=img, return_tensors="pt")).logits
probs = torch.softmax(logits, dim=-1)[0]
i = int(probs.argmax())
print(mod.config.id2label[i], f"{probs[i]*100:.1f} %")
El procesador se publica junto al modelo: hay que usarlo, porque normaliza con la media y la desviación con las que se preentrenó el checkpoint.
Datos de entrenamiento
PlantVillage (Hughes y Salathé, 2015), 54.305 fotografías en 38 clases, tomadas en condiciones controladas con una hoja por imagen sobre fondo uniforme.
Se trabajó con un 20 % estratificado obtenido con semilla 42, para replicar el presupuesto de datos de una actividad previa del programa y que la comparación contra una red entrenada desde cero no tuviera la cantidad de datos como variable de confusión.
| Partición | Imágenes | Uso |
|---|---|---|
| Entrenamiento (80 %) | 8.688 | Ajuste de pesos |
| Validación (10 %) | 1.086 | Selección del mejor punto de control por macro F1 |
| Prueba (10 %) | 1.087 | Evaluación final, usada una sola vez |
Partición estratificada: ninguna de las 38 clases quedó ausente del conjunto de prueba.
Procedimiento
| Hiperparámetro | Valor |
|---|---|
| Resolución | 224 × 224 RGB (tamaño nativo del checkpoint) |
| Épocas | 3 |
| Tamaño de lote | 32 |
| Optimizador | AdamW |
| Learning rate | 5e-5 |
| Warmup ratio | 0,1 |
| Weight decay | 0,01 |
| Precisión | fp16 en GPU |
| Semilla | 42 |
| Selección | Mejor macro F1 sobre validación |
| Hardware | GPU NVIDIA Tesla T4 (Google Colab) |
Aumentación, solo en entrenamiento: recorte aleatorio (escala 0,70-1,0), volteo horizontal y rotación de ±15°. Validación y prueba reciben únicamente redimensionado y recorte central.
La cabeza de 1.000 clases de ImageNet se reemplazó por una de 38 salidas
(ignore_mismatched_sizes=True) y se ajustaron todos los pesos.
Resultados
Sobre el conjunto de prueba, tocado una sola vez al final del proceso:
| Modelo | Preentrenamiento | Parámetros | Exactitud | Macro F1 | Weighted F1 | Latencia CPU |
|---|---|---|---|---|---|---|
| CNN desde cero (referencia) | No | 8,49 M | 59,60 % | 0,354 | 0,544 | — |
| ViT-Base/16 (este modelo) | ImageNet-21k | 85,83 M | 99,08 % | 0,988 | 0,991 | 395,0 ms |
| ConvNeXt-Tiny | ImageNet-1k | 27,85 M | 96,41 % | 0,919 | 0,960 | 119,6 ms |
Las dos arquitecturas ajustadas se entrenaron bajo condiciones idénticas: la única variable libre es la arquitectura.
Por qué el macro F1 importa más que la exactitud. Con 38 clases desbalanceadas, un modelo
puede alcanzar exactitud alta ignorando las categorías pequeñas. La brecha entre este modelo y
ConvNeXt es de 2,7 puntos en exactitud pero de 6,9 en macro F1: ConvNeXt obtuvo F1 = 0,000 en
Potato___healthy (3 ejemplos en prueba) y 0,182 en Corn___Cercospora_leaf_spot, mientras
que este modelo resolvió ambas por encima de 0,900.
Limitaciones
- La exactitud está inflada. PlantVillage contiene varias fotografías de la misma hoja física. La versión original trae particiones que preservan ese agrupamiento; aquí se repartió al azar, así que es probable que imágenes de una misma hoja quedaran en entrenamiento y en prueba. El sesgo afecta por igual a los tres modelos comparados, de modo que la comparación sigue siendo válida, pero el 99,08 % no estima el desempeño sobre hojas nuevas.
- Laboratorio, no campo. Mohanty et al. (2016) documentaron que la exactitud cae al 31 % en fotografías de terreno.
- Conjunto cerrado, sin mecanismo de rechazo. Ante una especie que no está entre las 38 clases, el modelo devuelve igualmente una etiqueta, a menudo con confianza alta.
- Presupuesto de tres épocas, deliberado por tratarse de ajuste fino sobre un conjunto pequeño, pero declarado como limitación.
- No reemplaza el criterio de un profesional.
Referencias
- Dosovitskiy, A. et al. (2021). An image is worth 16x16 words: Transformers for image recognition at scale. ICLR.
- Hughes, D. P. y Salathé, M. (2015). An open access repository of images on plant health. arXiv:1511.08060.
- Mohanty, S. P., Hughes, D. P. y Salathé, M. (2016). Using deep learning for image-based plant disease detection. Frontiers in Plant Science, 7, 1419.