Hola Sergio, no entiendo por qué la activación de la última capa convolucional es una sigmoide. ¿Al estar clasificando entre más de dos outputs posibles por qué no necesitamos una función de activación 'softmax'?
Gracias por el recurso complementario Sergio, super interesante y bien detallado!
Segun Gemini:
En resumen:
Sigmoide: Se utiliza para la segmentación binaria, donde cada píxel se clasifica en una de dos clases.
Softmax: Se utiliza para la segmentación multiclase, donde cada píxel se clasifica en una de varias clases.
Al elegir la función de activación adecuada, puedes adaptar tu red U-Net para resolver una variedad de tareas de segmentación de imágenes.
Al 2025 ya hay librerias que contienen la arquitectura de U-net y no es necesario crearla desde cero:
por ejemplo:
- ! pip install segmentation-models-pytorch. Compatible con Pytorch.
La red U-Net es una arquitectura de red neuronal convolucional utilizada para tareas de segmentación. Está diseñada para funcionar especialmente bien con conjuntos de datos limitados y es ampliamente utilizada en segmentación médica, entre otras aplicaciones de segmentación de imágenes.
### Estructura de la Red U-Net
U-Net tiene una estructura de encoder-decoder en forma de "U":
1. **Encoder (Contracción)**: Reduce el tamaño espacial de la imagen mientras extrae características importantes.
2. **Decoder (Expansión)**: Restaura la resolución de la imagen para obtener un mapa de segmentación del mismo tamaño que la imagen original.
3. **Conexiones Skip**: Conectan capas de encoder con capas de decoder correspondientes, lo que ayuda a recuperar información detallada y mejora la precisión.
### Ejemplo de Implementación en Keras/TensorFlow
Aquí tienes un código básico para construir una red U-Net en Keras:
1. **Encoder**: Las capas de convolución extraen características importantes de la imagen. Cada bloque incluye dos capas Conv2D seguidas de una MaxPooling2D para reducir la resolución.
2. **Bottleneck**: Es la parte más profunda de la red, donde las características son representadas en una resolución mínima pero con más profundidad.
3. **Decoder**: Cada capa Conv2DTranspose aumenta la resolución, y las conexiones skip (concatenate) con el encoder permiten conservar la información espacial y mejorar la precisión de la segmentación.
4. **Salida**: La última capa Conv2D genera la máscara de segmentación con una activación sigmoid para mapas binarios de clase única (ajustar según el número de clases en num\_classes).
### Consideraciones de Entrenamiento
- **Tamaño del Dataset**: U-Net funciona bien con datasets relativamente pequeños.
- **Tamaño de la Imagen**: Cambia el parámetro input\_size si tu dataset tiene un tamaño de imagen diferente.
- **Más de una Clase**: Si tienes más de una clase, ajusta num\_classes y usa categorical\_crossentropy como función de pérdida.
Este modelo se puede entrenar con imágenes y máscaras de segmentación para crear un pipeline de segmentación preciso, útil en aplicaciones de visión artificial como medicina, agricultura, y más.
Hola Profe, tengo una consulta cuando se definen c2 a c5 en ves de llevar el input_shape no deberian tener la salida del dropout anterior?
gracias
Habra una forma de hacer eso en jupyter notebook.. siento que corre ecxelente en colab pero no en el notebook