Cristóbal Silva
Si el input es una imágen,
¿cuántos parámetros tiene la primera capa oculta de H neuronas?
Imagen pequeña
80x80x3
19,200 x H
Fotografía 720p
1280x720x3
2,764,800 x H
Alto x Ancho x Nº de Canales (RGB)
¡Solo en la primera capa!
Usualmente se requería vasto conocimiento en Visión Computacional
para atacar estos problemas
Bounding-Box
Segmentación
Clasificación de Imágenes
Segmentación Semántica
cat
Detección
Reconocimiento
cat
grass
Usualmente se requería vasto conocimiento en Visión Computacional
para atacar estos problemas
Bounding-Box
Segmentación
Clasificación de Imágenes
Segmentación Semántica
cat
Detección
Reconocimiento
cat
grass
¡Foco de esta clase!
1 | 7 | 7 | 8 | 9 | 4 | 2 | 6 |
3 | 8 | 6 | 3 | 4 | 9 | 6 | 0 |
4 | 7 | 4 | 7 | 0 | 1 | 1 | 4 |
6 | 6 | 2 | 6 | 3 | 6 | 2 | 5 |
8 | 5 | 1 | 2 | 2 | 0 | 6 | 3 |
0 | 5 | 5 | 4 | 2 | 7 | 9 | 3 |
6 | 3 | 9 | 1 | 9 | 6 | 0 | 9 |
1 | 4 | 0 | 5 | 2 | 1 | 0 | 1 |
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
*
filtro o kernel
=
3 | 3 | 5 |
2 | 1 | 1 |
3 | 0 | 4 |
1 | 7 | 7 | 8 | 9 | 4 | 2 | 6 |
3 | 8 | 6 | 3 | 4 | 9 | 6 | 0 |
4 | 7 | 4 | 7 | 0 | 1 | 1 | 4 |
6 | 6 | 2 | 6 | 3 | 6 | 2 | 5 |
8 | 5 | 1 | 2 | 2 | 0 | 6 | 3 |
0 | 5 | 5 | 4 | 2 | 7 | 9 | 3 |
6 | 3 | 9 | 1 | 9 | 6 | 0 | 9 |
1 | 4 | 0 | 5 | 2 | 1 | 0 | 1 |
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
3 | 3 | 5 |
2 | 1 | 1 |
3 | 0 | 4 |
*
filtro o kernel
=
\(1\cdot3 + 3\cdot2 + 4\cdot3 + 7\cdot3 + 8\cdot1 + 7\cdot0 + 7\cdot5 + 6\cdot1 + 4\cdot4 = 107\)
107
1 | 7 | 7 | 8 | 9 | 4 | 2 | 6 |
3 | 8 | 6 | 3 | 4 | 9 | 6 | 0 |
4 | 7 | 4 | 7 | 0 | 1 | 1 | 4 |
6 | 6 | 2 | 6 | 3 | 6 | 2 | 5 |
8 | 5 | 1 | 2 | 2 | 0 | 6 | 3 |
0 | 5 | 5 | 4 | 2 | 7 | 9 | 3 |
6 | 3 | 9 | 1 | 9 | 6 | 0 | 9 |
1 | 4 | 0 | 5 | 2 | 1 | 0 | 1 |
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
*
filtro o kernel
=
\(7\cdot3 + 8\cdot2 + 7\cdot3 + 7\cdot3 + 6\cdot1 + 4\cdot0 + 8\cdot5 + 3\cdot1 + 7\cdot4 = 156\)
107
156
3 | 3 | 5 |
2 | 1 | 1 |
3 | 0 | 4 |
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
filtro
horizontal
Podemos construir filtros/kernels que obtengan representaciones específicas de una imagen
Detección de Bordes
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
filtro
vertical
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
filtro
horizontal
Podemos construir filtros/kernels que obtengan representaciones específicas de una imagen
Detección de Bordes
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
filtro
vertical
+
A cualquier imagen podemos aplicarle un operador o transformación cuya salida es una nueva imagen modificada
Convolución
Podemos construir filtros/kernels que obtengan representaciones específicas de una imagen
Detección de Bordes
Si la imagen es \( (n\times n) \) y el filtro es \( (f\times f) \) entonces la imagen resultante es \( (n-f+1\times n-f+1) \)
Tamaño de Salida
Ejemplo
Tamaño de Entrada | |
Tamaño de Filtro | |
Tamaño de Salida |
\( 10-3+1 \times 10-3+1 = 8 \times 8 \)
\( 10\times 10 \)
\( 3\times 3 \)
Padding
Padding es una técnica donde se aumenta artificialmente el tamaño de la imagen para mantener el tamaño de la original después del filtro.
1 | 7 | 7 | 8 | 9 |
3 | 8 | 6 | 3 | 4 |
4 | 7 | 4 | 7 | 0 |
6 | 6 | 2 | 6 | 3 |
8 | 5 | 1 | 2 | 2 |
Sin Padding
\((p=0\))
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 7 | 7 | 8 | 9 | 0 |
0 | 3 | 8 | 6 | 3 | 4 | 0 |
0 | 4 | 7 | 4 | 7 | 0 | 0 |
0 | 6 | 6 | 2 | 6 | 3 | 0 |
0 | 8 | 5 | 1 | 2 | 2 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
Padding
(\(p=1\))
relleno: 0
\( (n+2p-f+1\times n+2p-f+1) \)
Tamaño de salida con Padding \(p\)
Stride
Stride es una técnica donde en vez de barrer por todos los pixeles de una imagen, nos saltamos algunos entremedio para evitar redundancia
1 | 7 | 7 | 8 | 9 | 4 | 2 | 6 |
3 | 8 | 6 | 3 | 4 | 9 | 6 | 0 |
4 | 7 | 4 | 7 | 0 | 1 | 1 | 4 |
6 | 6 | 2 | 6 | 3 | 6 | 2 | 5 |
8 | 5 | 1 | 2 | 2 | 0 | 6 | 3 |
0 | 5 | 5 | 4 | 2 | 7 | 9 | 3 |
6 | 3 | 9 | 1 | 9 | 6 | 0 | 9 |
1 | 4 | 0 | 5 | 2 | 1 | 0 | 1 |
3 | 3 | 5 |
2 | 1 | 1 |
3 | 0 | 4 |
*
filtro o kernel
=
\(1\cdot3 + 3\cdot2 + 4\cdot3 + 7\cdot3 + 8\cdot1 + 7\cdot0 + 7\cdot5 + 6\cdot1 + 4\cdot4 = 107\)
107
\( \lfloor \frac{n-f}{S}+1 \rfloor \times \lfloor \frac{n-f}{S}+1 \rfloor \)
Tamaño de salida con Stride \(S\)
Stride
Stride es una técnica donde en vez de barrer por todos los pixeles de una imagen, nos saltamos algunos entremedio para evitar redundancia
1 | 7 | 7 | 8 | 9 | 4 | 2 | 6 |
3 | 8 | 6 | 3 | 4 | 9 | 6 | 0 |
4 | 7 | 4 | 7 | 0 | 1 | 1 | 4 |
6 | 6 | 2 | 6 | 3 | 6 | 2 | 5 |
8 | 5 | 1 | 2 | 2 | 0 | 6 | 3 |
0 | 5 | 5 | 4 | 2 | 7 | 9 | 3 |
6 | 3 | 9 | 1 | 9 | 6 | 0 | 9 |
1 | 4 | 0 | 5 | 2 | 1 | 0 | 1 |
3 | 3 | 5 |
2 | 1 | 1 |
3 | 0 | 4 |
*
filtro o kernel
=
\(7\cdot3 + 6\cdot2 + 4\cdot3 + 8\cdot3 + 3\cdot1 + 7\cdot0 + 9\cdot5 + 4\cdot1 + 0\cdot4 = 121\)
107
121
\( \lfloor \frac{n-f}{S}+1 \rfloor \times \lfloor \frac{n-f}{S}+1 \rfloor \)
Tamaño de salida con Stride \(S\)
stride = 1
Convolución en volúmen
Los conceptos anteriores sirven para una imagen 2D,
¿qué ocurre con las imágenes RGB?
Los filtros en este caso deben tener una dimensión igual al número de canales de la imagen a convolucionar
Entrada:
Filtro:
Salida:
\( n \times n \times c \)
\( f \times f \times c \)
\( n-f+1 \times n-f+1 \)
¡Mismo tamaño!
La salida sigue siendo 2D pues cada pixel de salida es la suma de todo el cubo que general el filtro
Convolución en volúmen
Los conceptos anteriores sirven para una imagen 2D,
¿qué ocurre con las imágenes RGB?
*
\( n \times n \times 3 \)
\( f \times f \times 3 \)
=
\( n-f+1 \times n-f+1 \)
Aprovechar estructura compartida entre pixeles de una imagen para reducir el número de parámetros.
Cada filtro aprendido en el entrenamiento representará una estructura visual característica de los objetos a clasificar (bordes, caras, curvas, etc.)
*
*
Aplicamos K filtros de \( f \times f \times c \)
El valor de cada filtro se aprende con el entrenamiento de la red
Motivación
Cada filtro aprendido en el entrenamiento representará una estructura visual característica de los objetos a clasificar (bordes, caras, curvas, etc.)
ReLU( + bias)
ReLU( + bias)
La salida de la capa convolucional es una función de activación aplicada cada filtro
(e.g. ReLU)
Aprovechar estructura compartida entre pixeles de una imagen para reducir el número de parámetros.
Motivación
Aprovechar estructura compartida entre pixeles de una imagen para reducir el número de parámetros.
Motivación
Sabemos que
Tamaño de Salida
Entonces
donde cada filtro aprenderá sus propios pesos
1 | 7 | 7 | 2 |
3 | 8 | 6 | 3 |
4 | 7 | 4 | 7 |
6 | 6 | 2 | 6 |
max-pool
size = 2
stride = 2
8 | |
La capa de pooling no aprende ningún parámetro, solamente es una operación sobre matrices.
Reducir dimensionalidad para tener menos parámetros.
A partir de la ventana de pixeles, la salida puede ser:
Motivación
También ayuda a la invariancia a traslación, pero puede perder información útil al tratar de generalizar
1 | 7 | 7 | 2 |
3 | 8 | 6 | 3 |
4 | 7 | 4 | 7 |
6 | 6 | 2 | 6 |
8 | 6 |
max-pool
size = 2
stride = 2
La capa de pooling no aprende ningún parámetro, solamente es una operación sobre matrices.
Reducir dimensionalidad para tener menos parámetros.
A partir de la ventana de pixeles, la salida puede ser:
Motivación
También ayuda a la invariancia a traslación, pero puede perder información útil al tratar de generalizar
1 | 7 | 7 | 2 |
3 | 8 | 6 | 3 |
4 | 7 | 4 | 7 |
6 | 6 | 2 | 6 |
8 | 6 |
7 |
max-pool
size = 2
stride = 2
La capa de pooling no aprende ningún parámetro, solamente es una operación sobre matrices.
Reducir dimensionalidad para tener menos parámetros.
A partir de la ventana de pixeles, la salida puede ser:
Motivación
También ayuda a la invariancia a traslación, pero puede perder información útil al tratar de generalizar
1 | 7 | 7 | 2 |
3 | 8 | 6 | 3 |
4 | 7 | 4 | 7 |
6 | 6 | 2 | 6 |
8 | 6 |
7 | 7 |
max-pool
size = 2
stride = 2
La capa de pooling no aprende ningún parámetro, solamente es una operación sobre matrices.
Reducir dimensionalidad para tener menos parámetros.
A partir de la ventana de pixeles, la salida puede ser:
Motivación
También ayuda a la invariancia a traslación, pero puede perder información útil al tratar de generalizar
reverse
max-pool
size = 2
stride = 2
8 | 8 | 6 | 6 |
8 | 8 | 6 | 6 |
7 | 7 | 7 | 7 |
7 | 7 | 7 | 7 |
8 | 6 |
7 | 7 |
El upsample es opcional, y se usa en arquitecturas donde se espera que la salida tenga un tamaño igual a la entrada (arquitecturas encoder-decoder)
Reducir dimensionalidad para tener menos parámetros.
A partir de la ventana de pixeles, la salida puede ser:
Motivación
La operación inversa al pooling es expandir la imagen (upsample) replicando valores para volver al tamaño original
conv1
\( n\times n\times 1 \)
\( n\times n\times 3 \)
\( \frac{n}{2}\times \frac{n}{2}\times 3 \)
input
pool1
conv2
\( \frac{n}{2}\times \frac{n}{2}\times 5 \)
Por simplicidad se asume que todas las convoluciones tienen padding.
fc1
out
\( M\times 1 \)
0
0
0
0
0
0
0
0
1
0
\( 10 \)
Input: Imágen de tamaño \( n\times n \)
Salida: Vector one-hot de tamaño 10
La capa fc1 es una capa “Fully-Connected”, donde los filtros de conv2 se concatenan para formar un vector que se usa para mapear a las M neuronas de esta capa.
(3 filtros \(f_1\times f_1\))
(5 filtros \(f_2\times f_2\))
(\(2\times 2\) con stride 2)
(\(M\) neuronas)
Entre fc1 y out funciona igual que un perceptrón multi-capa.
Veamos cuántos parámetros tiene una red convolucional con las siguientes características
608
3216
48,120
10,164
850
8 filtros de 5x5x3 + bias
\( \Rightarrow (5\cdot 5\cdot 3 + 1) \cdot 8 \) \( = 608 \)
16 filtros de 5x5 + bias \( \Rightarrow \left(5\cdot 5\cdot 8 + 1\right)\cdot 16 \) \(= 3216 \)
400 entradas + 120 salidas + 120 bias
\(\Rightarrow 400\cdot 120 + 120\) \(=48,120\)
Veamos cuántos parámetros tiene una red convolucional con las siguientes características
608
3216
48,120
10,164
850
Convolutional Neural Networks for Visual Recognition,
Lecture 7, Stanford CS231n (2016)
Existen varias metodologías para entender qué aprenden las CNNs.
Algunas técnicas destacadas ordenadas por dificultad de implementar:
Filtros aprendidos en la primera capa de la red AlexNet
Convolutional Neural Networks for Visual Recognition,
Lecture 7, Stanford CS231n (2016)
Activación de primeras dos capas para la foto de un gato en una red entrenada con imágenes de perros y gatos
Existen varias metodologías para entender qué aprenden las CNNs.
Algunas técnicas destacadas ordenadas por dificultad de implementar:
Deep Learning with Python,
Francois Chollet, 1st edition, 2017
Existen varias metodologías para entender qué aprenden las CNNs.
Algunas técnicas destacadas ordenadas por dificultad de implementar:
Ejemplos que maximizan activación de algunas neuronas de la primera capa de una red convolucional.
Son 9 ejemplos por neurona. Notar como se maximizan ante orientaciones particulares.
Convolutional Neural Networks,
Andrew Ng, Coursera, 2017
Existen varias metodologías para entender qué aprenden las CNNs.
Algunas técnicas destacadas ordenadas por dificultad de implementar:
Ejemplos que maximizan activación de algunas neuronas de la primera capa de una red convolucional.
Son 9 ejemplos por neurona. Notar como se maximizan ante orientaciones particulares.
Convolutional Neural Networks,
Andrew Ng, Coursera, 2017
Existen varias metodologías para entender qué aprenden las CNNs.
Algunas técnicas destacadas ordenadas por dificultad de implementar:
Feature Visualization,
Chris Olah et. al., distill.pub, 2017
Representación de features locales y globales en función de objetivo de optimización
Visualización
Arquitecturas
Otras referencias
Redes Neuronales Convolucionales