Arquitectura IA Nutricional en AWS
Visión por Computadora Avanzada
Más allá de las etiquetas genéricas
La API DetectLabels de Amazon Rekognition es potente para la identificación de objetos comunes. Puede reconocer una "manzana" o una "ensalada" sin problemas. Sin embargo, en el análisis nutricional, la especificidad es clave. No es lo mismo una manzana Gala que una Granny Smith, ni una ensalada César que una caprese. Aquí es donde los modelos base se quedan cortos y entra en juego Rekognition Custom Labels.
El objetivo es entrenar un modelo que no solo identifique "pizza", sino que distinga entre una pizza de pepperoni de una cadena comercial y una margherita artesanal. Esta distinción es fundamental, ya que impacta directamente en la estimación calórica. Para lograrlo, necesitamos un dataset de entrenamiento bien curado y etiquetado con precisión, enfocado en las clases específicas que nos interesan.
Construcción de datasets y etiquetado
La calidad de un modelo de Custom Labels depende directamente de la calidad y el balance de su dataset. Dado que estás tratando con clases de alimentos muy específicas, es probable que no encuentres miles de imágenes para cada una. Aquí, las estrategias de few-shot learning se vuelven relevantes. Rekognition está optimizado para funcionar bien incluso con un número relativamente bajo de imágenes por etiqueta (decenas, no miles), siempre que las imágenes sean de alta calidad y representativas de los escenarios de inferencia.
Consejo práctico: Asegúrate de que tu dataset de entrenamiento incluya imágenes con diferentes iluminaciones, ángulos y fondos. Si tu aplicación analizará fotos de comida en restaurantes con poca luz, incluye ejemplos de ese tipo.
Para el etiquetado, Amazon SageMaker Ground Truth es la herramienta ideal. Permite crear trabajos de etiquetado para equipos privados o utilizar la fuerza de trabajo de Mechanical Turk. Más allá de simples bounding boxes, puedes usar la segmentación de instancias para delinear con precisión cada alimento en un plato complejo. Esto es crucial cuando varios alimentos se superponen. Ground Truth también ofrece etiquetado asistido: el modelo aprende a medida que se etiqueta, pre-etiquetando automáticamente las siguientes imágenes y acelerando drásticamente el proceso.
Evaluación e inferencia
Una vez que tu modelo está entrenado, Rekognition Custom Labels proporciona métricas de evaluación. Las más importantes son la precisión y el recall (Precision/Recall). En un contexto nutricional, el balance entre ambas es crucial. Una alta precisión significa que cuando el modelo identifica un "croissant de almendras", es muy probable que sea correcto. Un alto recall significa que el modelo es bueno encontrando todos los "croissants de almendras" en las imágenes. Un desequilibrio aquí puede llevar a errores significativos: un falso positivo (baja precisión) podría asignar incorrectamente las calorías de un alimento denso, mientras que un falso negativo (bajo recall) podría omitir un alimento por completo, subestimando la ingesta total.
Para la inferencia, debes iniciar el modelo, lo que despliega un endpoint en tiempo real. La llamada a la API es similar a DetectLabels, pero apuntas a tu ARN de modelo específico. La respuesta incluirá una lista de CustomLabel con el nombre de la etiqueta, la confianza y la geometría del bounding box o polígono.
import boto3
client = boto3.client('rekognition')
response = client.detect_custom_labels(
ProjectVersionArn='arn:aws:rekognition:us-east-1:123456789012:project/MyFoodProject/version/MyFoodModel/1628...', # ARN de tu modelo
Image={
'S3Object': {
'Bucket': 'my-food-images-bucket',
'Name': 'test-image.jpg'
}
},
MinConfidence=75
)
for label in response['CustomLabels']:
print(f"Label: {label['Name']}")
print(f"Confidence: {label['Confidence']}")
Este componente actúa como la capa de entrada de nuestra arquitectura. Su salida, una lista de alimentos identificados y sus ubicaciones, alimenta los siguientes módulos, que podrían estimar el volumen de cada alimento a partir de la segmentación y, finalmente, calcular el contenido nutricional a partir de una base de datos.
