--- title: Clasificador de Calidad de Papas emoji: 🥔 colorFrom: green colorTo: yellow sdk: gradio app_file: app.py pinned: false --- # 🥔 Clasificador de tubérculos de papa Modelo de clasificación de calidad de tubérculos de papa (Chaucha y Chola) usando Vision Transformer (ViT-Base/16) con interfaz desarrollada con la biblioteca de Gradio. ## 🌟 Características - **Modelo**: Vision Transformer (ViT-Base/16) ajustado mediante Transfer Learning y Fine Tuning para clasificación de papa chaucha y chola. - **Interfaz**: Desarrollada con la biblioteca de Gradio para una interfaz limpia, intuitiva y fácil de usar. - **Visualización explicable**: Mapas de atención Eigen-CAM para interpretar las decisiones del modelo. - **Alto rendimiento**: Optimizado para CPU y GPU. - **Métricas en tiempo real**: Tiempo de inferencia y confianza por clase. - **Validación**: Manejo de errores y validación de entrada. ## 📋 Requisitos - Python 3.8 o superior - CUDA (opcional, para aceleración GPU) - 4GB RAM mínimo (8GB recomendado) ## 🚀 Instalación ### 1. Clonar o descargar el repositorio ```bash cd app ``` ### 2. Crear entorno virtual (recomendado) **Windows:** ```bash python -m venv venv .\venv\Scripts\activate ``` **Linux/Mac:** ```bash python3 -m venv venv source venv/bin/activate ``` ### 3. Instalar dependencias ```bash pip install -r requirements.txt ``` ## 🎯 Uso ### Ejecución local ```bash python app.py ``` La aplicación se abrirá automáticamente en tu navegador en: ``` http://localhost:7860 ``` ### Ejecución con compartir (público temporalmente) Modifica `demo.launch()` en `app.py`: ```python demo.launch(share=True) # Genera una URL pública temporal ``` ## 📊 Clases de Clasificación | Clase | Descripción | | --------------- | -------------------------------------------------------------------------------- | | **Buen estado** | Tubérculo de papa sin defectos visibles, apta para comercialización. | | **Defectuoso** | Tubérculo de papa con brotes, cortes o pudrición, no apta para comercialización. | ## 🎨 Características de la Interfaz ### Panel de Entrada - Arrastrar y soltar imágenes - Formatos soportados: PNG, JPG, JPEG - Tamaño máximo: 20 MB - Vista previa en tiempo real ### Panel de Resultados - **Predicción principal**: Clase y confianza - **Gráficos de confianza**: Barras de progreso por cada clase - **Mapa de atención**: Visualización Eigen-CAM de regiones importantes - **Métricas de rendimiento**: Tiempo de procesamiento y dispositivo usado ## 🧠 Arquitectura del Modelo ``` Input Image (224×224×3) ↓ Vision Transformer Base ├─ Patch Embedding (16×16) ├─ 12 Transformer Blocks └─ Classification Head ↓ Output (2 clases) ``` ### Especificaciones Técnicas - **Arquitectura**: ViT - **Parámetros**: ~86M - **Input**: 224×224 píxeles RGB - **Output**: 2 clases (Buen estado y Defectuoso) - **Normalización**: ImageNet (Media, Desviación estándar) - **Framework**: PyTorch ## 📈 Interpretación del Mapa de Atención El mapa Eigen-CAM muestra en **rojo intenso** las áreas que más influyeron en la decisión: - 🔴 **Rojo**: Alta importancia (defectos detectados) - 🟡 **Amarillo**: Importancia media - 🔵 **Azul**: Baja importancia ## 🔧 Configuración Avanzada ### Cambiar puerto En `app.py`: ```python demo.launch(server_port=8080) # Cambiar puerto ``` ### Modo desarrollo ```python demo.launch(debug=True) # Habilitar modo debug ``` ### Recursos compartidos ```python demo.launch( server_name="0.0.0.0", # Accesible desde la red local share=True, # Generar link público auth=("usuario", "clave") # Agregar autenticación ) ``` ## 🐛 Solución de Problemas ### Error: "No module named 'gradio'" ```bash pip install gradio --upgrade ``` ### Error: Modelo no descarga 1. Verifica conexión a internet 2. Descarga manualmente: ```python from huggingface_hub import hf_hub_download hf_hub_download( repo_id="Carlos012/vit_papas", filename="modelo_v3_hibrido/hibrido_v2/fine_tuning_parcial/vit_papas_pesos_ftp.pt", repo_type="model", ) ``` ### Error: CUDA out of memory - Usa CPU en lugar de GPU - Reduce el tamaño de las imágenes antes de subirlas ### La interfaz no carga ```bash # Verificar puerto en uso netstat -an | findstr :7860 # Cambiar puerto en app.py demo.launch(server_port=7861) ``` ## 📦 Estructura del Proyecto ``` app/ ├── app.py # Aplicación desarrollada con Gradio ├── Dockerfile # Archivo para desplegar en contenedor Docker ├── requirements.txt # Dependencias Gradio └── README.md # Este archivo ``` ## 📝 Licencia Esta interfaz es parte de un trabajo de investigación curricular. ## 👨‍💻 Autor Cristian Armijos-Sarango ## 🙏 Agradecimientos - **timm** (PyTorch Image Models): Librería para implementación de la arquitectura ViT. - **Gradio**: Librería utilizada para desarrollar la interfaz. - **Hugging Face Hub**: Plataforma de almacenamiento del modelo. - **pytorch-grad-cam**: Librería de visualización de mapas de interpretabilidad. ## 📧 Contacto Para preguntas, sugerencias o reportar problemas, abre un issue en el repositorio o contacta al autor del proyecto a través del siguiente correo electrónico (cristian.e.armijos@unl.edu.ec). --- **⚠️ Nota Importante**: Esta interfaz es una herramienta de apoyo para la clasificación de tubérculos de papa. Para decisiones críticas de calidad en contextos comerciales, se recomienda consultar con especialistas en agronomía e inspección de calidad de alimentos.