Introducción a Computer Vision

1

¿Qué es la visión computarizada y cuáles son sus tipos?

Detección de objetos

2

Introducción a object detection: sliding window y bounding box

3

Generando video de sliding window

4

Introducción a object detection: backbone, non-max suppression y métricas

5

Visualización de IoU en object detection

6

Tipos de arquitecturas en detección de objetos

7

Arquitecturas relevantes en object detection

8

Utilizando un dataset de object detection

9

Carga de dataset de object detection

10

Exploración del dataset de object detection

11

Visualización de bounding boxes en el dataset de object detection

12

Aumentado de datos con Albumentation

13

Implementando Albumentation en object detection

14

Visualizando imágenes con aumentado de datos

15

Utilizando un modelo de object detection pre-entrenado

16

Probar detección de objetos con modelo pre-entrenado

17

Fine-tuning en detección de objetos

18

Fine-tuning en detección de objetos: carga de datos

19

Fine-tuning en detección de objetos: data augmentation

20

Fine-tuning en detección de objetos: entrenamiento

21

Fine-tuning en detección de objetos: visualización de objetos

Quiz: Detección de objetos

Segmentación de objetos

22

Introduciendo la segmentación de objetos

23

Tipos de segmentación y sus arquitecturas relevantes

24

¿Cómo es un dataset de segmentación?

25

Utilizando un dataset de segmentación de objetos

26

Visualización de nuestro dataset de segmentación

27

Creando red neuronal U-Net para segmentación

28

Entrenando y estudiando una red de segmentación

29

Generando predicciones con modelo de object segmentation

Quiz: Segmentación de objetos

Un paso más allá

30

El estado de la cuestión en computer vision

31

Comparte tu proyecto de detección y segmentación de objetos para conducción autónoma y certifícate

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
21 Hrs
23 Min
28 Seg

Creando red neuronal U-Net para segmentación

27/31
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

comparto este enlace donde se explica la arquitectura de U-net

https://www.youtube.com/watch?v=waIPUsecaaQ

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: ```python import tensorflow as tf from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Conv2DTranspose, concatenate, Dropout from tensorflow.keras.models import Model def unet\_model(input\_size=(128, 128, 3), num\_classes=1): inputs = Input(input\_size) \# Encoder conv1 = Conv2D(64, 3, activation="relu", padding="same")(inputs) conv1 = Conv2D(64, 3, activation="relu", padding="same")(conv1) pool1 = MaxPooling2D(pool\_size=(2, 2))(conv1) conv2 = Conv2D(128, 3, activation="relu", padding="same")(pool1) conv2 = Conv2D(128, 3, activation="relu", padding="same")(conv2) pool2 = MaxPooling2D(pool\_size=(2, 2))(conv2) conv3 = Conv2D(256, 3, activation="relu", padding="same")(pool2) conv3 = Conv2D(256, 3, activation="relu", padding="same")(conv3) pool3 = MaxPooling2D(pool\_size=(2, 2))(conv3) conv4 = Conv2D(512, 3, activation="relu", padding="same")(pool3) conv4 = Conv2D(512, 3, activation="relu", padding="same")(conv4) drop4 = Dropout(0.5)(conv4) pool4 = MaxPooling2D(pool\_size=(2, 2))(drop4) \# Bottleneck conv5 = Conv2D(1024, 3, activation="relu", padding="same")(pool4) conv5 = Conv2D(1024, 3, activation="relu", padding="same")(conv5) drop5 = Dropout(0.5)(conv5) \# Decoder up6 = Conv2DTranspose(512, 2, strides=(2, 2), padding="same")(drop5) merge6 = concatenate(\[drop4, up6], axis=3) conv6 = Conv2D(512, 3, activation="relu", padding="same")(merge6) conv6 = Conv2D(512, 3, activation="relu", padding="same")(conv6) up7 = Conv2DTranspose(256, 2, strides=(2, 2), padding="same")(conv6) merge7 = concatenate(\[conv3, up7], axis=3) conv7 = Conv2D(256, 3, activation="relu", padding="same")(merge7) conv7 = Conv2D(256, 3, activation="relu", padding="same")(conv7) up8 = Conv2DTranspose(128, 2, strides=(2, 2), padding="same")(conv7) merge8 = concatenate(\[conv2, up8], axis=3) conv8 = Conv2D(128, 3, activation="relu", padding="same")(merge8) conv8 = Conv2D(128, 3, activation="relu", padding="same")(conv8) up9 = Conv2DTranspose(64, 2, strides=(2, 2), padding="same")(conv8) merge9 = concatenate(\[conv1, up9], axis=3) conv9 = Conv2D(64, 3, activation="relu", padding="same")(merge9) conv9 = Conv2D(64, 3, activation="relu", padding="same")(conv9) conv9 = Conv2D(num\_classes, 1, activation="sigmoid")(conv9) model = Model(inputs=inputs, outputs=conv9) return model \# Crear el modelo model = unet\_model(input\_size=(128, 128, 3), num\_classes=1) model.compile(optimizer='adam', loss='binary\_crossentropy', metrics=\['accuracy']) model.summary() ``` \### Explicación del Código 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