FOOD-HEALTH-DETECTOR
Clasificador binario de comida saludable con CNN propia sobre Food-101 y demo en Streamlit.
01 Problema y contexto
Si un plato es saludable no es una propiedad visual: depende de los ingredientes, del método de cocción y del tamaño de la porción, y una fotografía solo conserva rastros indirectos de los tres. La pregunta del estudio es hasta dónde puede llegar una red convolucional sobre una etiqueta que solo es parcialmente recuperable desde los píxeles.
Si un plato es saludable no es una propiedad visual. Depende de los ingredientes, del método de cocción y del tamaño de la porción, y una fotografía solo conserva rastros indirectos de los tres. Este estudio toma Food-101, un conjunto de 101 categorías de platos preparados, lo colapsa en un problema binario de saludable frente a no saludable, y mide hasta dónde llega una red convolucional entrenada desde cero sobre una etiqueta que solo es parcialmente recuperable desde los píxeles.
02 Solución
Una CNN diseñada desde cero (tres bloques convolucionales con normalización por lotes, capa densa con dropout y salida sigmoide) entrenada sobre Food-101 colapsado a un problema binario, y comparada de forma justificada contra transfer learning con MobileNetV2. El desbalance se corrigió en dos frentes: aumento de datos sobre la clase minoritaria y pesos de clase en la función de pérdida. La evaluación reporta la matriz de confusión por clase, no solo el accuracy global.
- Definición del problema binario: mapeo explícito de las 101 categorías a dos clases, con el criterio escrito clase por clase en el código y por tanto auditable y discutible.
- Preparación: descarga, descarte de imágenes corruptas o truncadas, y reorganización en la estructura de dos clases.
- Balanceo en dos frentes: aumento de datos offline sobre la clase minoritaria y pesos de clase en la función de pérdida para el desbalance residual.
- Diseño de FoodNet: tres bloques convolucionales de 32, 64 y 128 filtros con normalización por lotes y pooling, capa densa de 256 unidades con dropout de 0.5 y salida sigmoide.
- Entrenamiento con Adam a 1e-4, partición 80/20, parada temprana sobre la pérdida de validación con restauración de los mejores pesos.
- Contraste contra transfer learning con MobileNetV2, para justificar por qué se sostiene una arquitectura propia.
- Evaluación con reporte de clasificación por clase y matriz de confusión, no solo con el accuracy global.
03 Resultados
Cifras verificables en el repositorio y su documentación:
04 Cómo está construido
Sistema de visión artificial que clasifica imágenes de platos de comida como saludables o no saludables. Reorganiza las 101 categorías del dataset Food-101 en dos clases binarias y entrena una CNN diseñada desde cero (FoodNet, tres bloques convolucionales con BatchNormalization y Dropout) en TensorFlow/Keras. El pipeline cubre descarga desde Kaggle, limpieza de imágenes corruptas, balanceo por aumento de datos, entrenamiento con EarlyStopping y evaluación con matriz de confusión, alcanzando 71% de accuracy en validación. Incluye una interfaz web en Streamlit.
05 Decisiones éticas
- La etiqueta saludable o no saludable es un juicio propio asignado categoría por categoría, no un dato nutricional medido. Queda escrita en el repositorio precisamente para que se pueda revisar, discutir o reemplazar.
- Food-101 está compuesto por platos de restaurante mayoritariamente occidentales, así que el modelo hereda esa noción cultural de lo saludable y no puede considerarse válido fuera de ella.
- El clasificador se presenta como demostración técnica y no como consejo nutricional o médico.
06 Aspectos destacados
- CNN propia (FoodNet) de 3 bloques convolucionales con BatchNormalization y Dropout, en lugar de transfer learning.
- Pipeline reproducible en 6 scripts: descarga desde Kaggle, reorganización de Food-101 en clases binarias, limpieza, aumento de datos, entrenamiento y evaluación.
- Entrenamiento con EarlyStopping y ModelCheckpoint; evaluación con reporte de clasificación y matriz de confusión sobre el conjunto de validación.
- Interfaz web en Streamlit para clasificar imágenes subidas por el usuario en tiempo real, con demo en video.
- README con comparación justificada de arquitecturas (CNN propia vs. MobileNetV2) y una reflexión ética sobre sesgos del dataset.
07 Limitaciones
La etiqueta binaria colapsa información que la imagen no contiene: dos platos visualmente idénticos pueden diferir en porción, aceite o cocción. Ese ruido de etiqueta pone un techo al accuracy alcanzable que ninguna arquitectura puede superar. A eso se suman tres condiciones del montaje que conviene tener a la vista al leer el 0.71: las imágenes se reducen a 64x64 píxeles, resolución que borra detalles de textura relevantes; la validación es una partición aleatoria simple del mismo conjunto, sin validación cruzada ni conjunto de prueba independiente; y el aumento de datos se escribió en la misma carpeta que después se particiona, de modo que copias derivadas de una misma fotografía pueden quedar a ambos lados de la división y el accuracy queda algo optimista.