Codigo modular para el Laboratorio 02 de Machine Learning:
- clasificacion de genero con
GaussianNB - guia de regresion de edad para estudiantes
- base de despliegue minima con
Streamlit
La implementacion sigue la idea del PDF y reutiliza la logica central del notebook de referencia: carga del dataset UTKFace, preprocesamiento clasico de rostros, vectorizacion, PCA y clasificacion probabilistica.
El proyecto esta pensado para que los alumnos puedan:
- entender un flujo completo de Machine Learning,
- leer codigo modular en vez de un solo notebook,
- entrenar y evaluar un clasificador de genero,
- completar por su cuenta la regresion de edad,
- preparar el salto hacia una aplicacion visual.
.
├── dataset
│ └── .gitkeep
├── main.py
├── main_visual.py
├── requirements.txt
└── src
├── __init__.py
├── classification.py
├── config.py
├── data.py
├── inference.py
├── preprocessing.py
├── regression.py
├── streamlit_app.py
└── visualization.py
main.py: orquesta la ejecucion completa del laboratorio desde consola.main_visual.py: punto de entrada paraStreamlit.src/config.py: parametros globales del experimento.src/data.py: lectura de archivos, parseo de etiquetas y construccion del dataset.src/preprocessing.py: conversion a grises, resize, ecualizacion, mascara oval y vectorizacion.src/classification.py: separacion train/test, entrenamiento conPCA + GaussianNB, evaluacion y guardado.src/regression.py: interfaces comentadas para que los estudiantes implementen la regresion de edad.src/inference.py: utilidades para reutilizar el preprocesamiento y hacer inferencia de genero.src/visualization.py: figuras para distribucion de datos, matriz de confusion y proyeccion PCA.src/streamlit_app.py: app minima para cargar una imagen y dejar marcado donde integrar detector de caras y modelos.
- leer las imagenes de UTKFace,
- extraer
edadygenerodesde el nombre del archivo, - preprocesar cada rostro,
- construir la matriz
X, - separar entrenamiento y prueba,
- ajustar
PCA + GaussianNBconGridSearchCV, - evaluar con
accuracy,precision,recall,f1y matriz de confusion, - guardar el mejor pipeline y reportes.
- clasificador completo de genero con
GaussianNB - seleccion de componentes PCA
- evaluacion sobre conjunto de prueba
- guardado del pipeline entrenado
- figuras de apoyo para analisis
src/regression.py- integracion de un detector de caras para inferencia sobre imagenes nuevas
- prediccion de edad en la app visual
La app de Streamlit queda deliberadamente minima para que el curso complete esa parte en la fase de deployment.
Instalar dependencias:
pip install -r requirements.txtCopiar las imagenes de UTKFace dentro de dataset/. El codigo recorre esa carpeta de forma recursiva, por lo que tambien funciona si el dataset viene organizado en subcarpetas.
Ejemplo general:
python main.pyEl comando anterior usa por defecto la carpeta local dataset/.
Ejemplo indicando otra ruta:
python main.py --dataset-dir "/ruta/a/UTKFace"Ejemplo rapido con menos imagenes:
python main.py --max-images 200Opciones utiles:
--output-dir: carpeta donde se guardan modelos, reportes y figuras.--img-size WIDTH HEIGHT: tamano del rostro preprocesado.--pca-components 30 50 80 100 150 200: lista de componentes a evaluar.--max-images: limite opcional para pruebas rapidas.
Dentro de artifacts/ se generan subcarpetas como estas:
artifacts/models/pipeline_genero.pklartifacts/reports/metricas_genero.jsonartifacts/reports/resumen_dataset.csvartifacts/figures/distribucion_dataset.pngartifacts/figures/matriz_confusion_genero.pngartifacts/figures/proyeccion_pca_genero.png
Para abrir la version minima en Streamlit:
streamlit run main_visual.pyLa interfaz actual:
- permite cargar una imagen,
- muestra la fotografia cargada,
- explica donde integrar el detector de caras,
- deja marcado donde cargar los modelos.
El PDF indica que la etapa final debe detectar rostros antes de inferir. Esa parte no esta automatizada todavia en esta version minima. Los estudiantes deben agregar:
- un detector de caras,
- el recorte de cada rostro detectado,
- la reutilizacion del mismo preprocesamiento,
- la llamada a los modelos entrenados.
Por requerimiento del laboratorio, la regresion de edad no se implementa por completo aqui. En su lugar se dejan interfaces comentadas, docstrings y sugerencias de trabajo para que los alumnos construyan esa parte.