Skip to content

geramargonzalez/PET_Detection_UNET

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

U-Net for Pet Image Segmentation

Segmentación Semántica a Nivel de Píxel sobre el Oxford-IIIT Pet Dataset


Información del Proyecto

Campo Detalle
Institución UTEC — Universidad de Ingeniería & Tecnología
Programa Especialización en Ciencia de Datos y Machine Learning
Curso Deep Learning (MIT Professional Education)
Autor Gerardo Gonzalez
Fecha Febrero 2026
Notebook GG_uNet_Pet.ipynb

Descripción General

Este proyecto implementa la arquitectura U-Net desde cero para resolver un problema de segmentación semántica sobre el dataset público Oxford-IIIT Pet Dataset. El objetivo es asignar una etiqueta de clase a cada píxel de una imagen, identificando si pertenece al cuerpo de la mascota (primer plano), al fondo de la escena, o a la franja de borde que los delimita.

El notebook está autocontenido: cubre desde la configuración del entorno y la carga del dataset hasta el entrenamiento, evaluación cuantitativa, visualización de predicciones e inferencia sobre imágenes locales.


Arquitectura: U-Net

U-Net fue propuesta originalmente por Ronneberger, Fischer y Brox (2015) para segmentación de imágenes biomédicas y se ha convertido en una de las arquitecturas más utilizadas para predicción densa. Su característica definitoria es la estructura simétrica codificador–decodificador con conexiones de salto (skip connections).

Input (96×96×3)
       │
  ┌────▼────┐
  │ Encoder  │  ← Bloques conv 3×3 + Max Pooling 2×2
  │  (x4)   │     Duplica canales en cada nivel: 32→64→128→256
  └────┬────┘
       │ Skip connections (concatenación)
  ┌────▼────┐
  │Bottleneck│  ← Representación más abstracta (512 filtros)
  └────┬────┘
       │
  ┌────▼────┐
  │ Decoder  │  ← Transposed Conv 2×2 + conv 3×3
  │  (x4)   │     Reduce canales: 512→256→128→64→32
  └────┬────┘
       │
  Output (96×96×3 clases)
Componente Función
Encoder (Contracting Path) Extrae representaciones jerárquicas de características a resoluciones progresivamente menores
Bottleneck Codifica la representación más abstracta y globalmente informada
Decoder (Expanding Path) Recupera la resolución espacial y produce predicciones densas
Skip Connections Preservan información espacial de alta resolución perdida durante el downsampling

Dataset: Oxford-IIIT Pet

Característica Valor
Imágenes totales 7,349
Razas 37 (25 perros + 12 gatos)
Clases de segmentación 3
Fuente tensorflow_datasets (oxford_iiit_pet)

Clases de segmentación (trimap):

ID Etiqueta Descripción
0 Mascota (Primer Plano) Píxeles del cuerpo de la mascota
1 Fondo Píxeles de la escena circundante
2 Borde Banda delgada que delimita la transición

Distribución de píxeles en el conjunto de entrenamiento:

  • Fondo: ~57.2%
  • Mascota: ~31.3%
  • Borde: ~11.5%

Estructura del Notebook

Sección Contenido
1 Introducción, motivación, descripción del problema y objetivos
2 Configuración del entorno, importación de librerías e hiperparámetros
3 Carga del dataset via TensorFlow Datasets
4 Pipeline de preprocesamiento (redimensionado, normalización, aumentación)
5 Análisis exploratorio de datos y distribución de clases
6 Definición de la arquitectura U-Net (desde cero con Keras Functional API)
7 Implementación de métricas personalizadas (IoU, Dice Coefficient)
8 Entrenamiento con callbacks (EarlyStopping, ReduceLROnPlateau, ModelCheckpoint)
9 Visualización del historial de entrenamiento y análisis de convergencia
10 Evaluación cuantitativa completa sobre el conjunto de test
11 Visualización de predicciones (mejores/peores casos, mapas de error, distribución de IoU)
12 Inferencia sobre imágenes locales del directorio images/
13 Conclusiones, análisis crítico y trabajo futuro

Configuración del Modelo

Parámetro Valor
Resolución de entrada 96 × 96 × 3
Profundidad encoder/decoder 4 niveles
Filtros base 32 (progresión: 32→64→128→256→512)
Parámetros entrenables 7,771,939 (~29.6 MB)
Optimizador Adam (lr = 5×10⁻⁴)
Función de pérdida Sparse Categorical Cross-Entropy
Regularización Dropout (0.2–0.3) + Batch Normalization
Épocas 25 (con EarlyStopping, patience=4)
Batch size 16
Aumentación de datos Volteo horizontal aleatorio

Split del dataset:

  • Entrenamiento: 2,944 imágenes
  • Validación: 736 imágenes
  • Test: 3,669 imágenes

Resultados

Métricas en el Conjunto de Test

Métrica Valor
Pixel Accuracy 89.64%
Mean IoU (Jaccard) 0.7292
Mean Dice Coefficient (F1) 0.8308

Desglose por Clase (IoU)

Clase IoU Interpretación
Mascota (Primer Plano) 0.8060 Segmentación sólida del objeto de interés principal
Fondo 0.8938 Mayor rendimiento — clase dominante con separación visual clara
Borde 0.4878 Clase más difícil — banda delgada y anotación inherentemente ambigua

Distribución por Imagen (IoU de Primer Plano)

Calidad Rango IoU Cantidad Porcentaje
Excelente > 0.9 906 24.7%
Bueno 0.7 – 0.9 2,067 56.3%
Regular 0.5 – 0.7 502 13.7%
Deficiente ≤ 0.5 194 5.3%

El 81.0% de las imágenes de test superan un IoU de 0.7 en la clase de primer plano.


Requisitos

pip install tensorflow tensorflow-datasets scikit-learn matplotlib numpy
Librería Uso
tensorflow / keras Construcción, entrenamiento e inferencia del modelo
tensorflow-datasets Carga del Oxford-IIIT Pet Dataset
numpy Manejo de arrays y cálculo numérico
matplotlib Visualización de imágenes, máscaras y métricas
scikit-learn Métricas auxiliares y matriz de confusión

Estructura del Repositorio

UNET/
├── GG_uNet_Pet.ipynb     # Notebook principal del proyecto
├── README.md             # Este archivo
└── images/               # Imágenes locales para inferencia
    ├── Abyssinian_100.mat
    ├── Abyssinian_101.mat
    └── Abyssinian_102.mat

Cómo Ejecutar

  1. Clonar o descargar el repositorio.
  2. Crear un entorno virtual e instalar las dependencias:
    pip install tensorflow tensorflow-datasets scikit-learn matplotlib numpy
  3. Abrir el notebook en VS Code o Jupyter:
    jupyter notebook GG_uNet_Pet.ipynb
  4. Ejecutar las celdas en orden secuencial desde la sección 2.

Nota: El dataset se descarga automáticamente via tensorflow_datasets en la primera ejecución (~800 MB). Se recomienda GPU para acelerar el entrenamiento; el notebook es funcional en CPU con la resolución de 96×96 seleccionada.


Hallazgos Principales

  • La arquitectura U-Net, con ~7.8M parámetros entrenados sobre menos de 3,000 imágenes a 96×96, alcanza una pixel accuracy del 89.64% y un Dice de 0.831 en el conjunto de test.
  • Las skip connections son validadas empíricamente: los píxeles mal clasificados se concentran mayoritariamente en las fronteras de los objetos, confirmando que la información espacial de alta resolución es crítica.
  • La jerarquía de rendimiento por clase (Fondo > Mascota > Borde) se alinea con el desbalance de clases y la dificultad intrínseca de la segmentación de bordes delgados.
  • El modelo generaliza bien a la diversidad del dataset (37 razas, variación en pose, escala e iluminación), con el 81% de imágenes superando IoU = 0.7.

Trabajo Futuro

Mejora Impacto esperado
Aumentar resolución a 256×256 Mejora significativa en IoU de Borde
Aumentación de datos más completa (deformaciones elásticas, jitter de color) Mayor robustez a variabilidad intra-clase
Dice Loss / Focal Loss para desbalance de clases Mejora del IoU en clase Borde
Backbone preentrenado (ResNet-34, EfficientNet) Representaciones más ricas con dataset pequeño
Post-procesamiento con CRFs o morfología Refinamiento de contornos sin reentrenamiento

Referencias

  • Ronneberger, O., Fischer, P., & Brox, T. (2015). U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI.
  • Parkhi, O. M., Vedaldi, A., Zisserman, A., & Jawahar, C. V. (2012). Cats and Dogs. CVPR.
  • Cordts, M. et al. (2016). The Cityscapes Dataset for Semantic Urban Scene Understanding. CVPR.
  • Litjens, G. et al. (2017). A Survey on Deep Learning in Medical Image Analysis. Medical Image Analysis.

Proyecto desarrollado para el curso de Deep Learning — MIT Professional Education / UTEC, Especialización en Ciencia de Datos y Machine Learning.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors