Está en la página 1de 42

Convolutional Neural Networks

Semana 3
Detection Algotithms
• Object Localización:
Para desarrollar la detección de objetos, primero es necesario aprender acerca de la
localización de objetos.
El algoritmo debe ser capaz de delimitar donde está el objeto aparte de hacer la tarea
de clasificación:

En una imagen puede haber múltiples objetos y no solo uno.


Convolutional Neural Networks

• En un algoritmo de clasificación podríamos tener por ejemplo cuatro clases: Peatón,


coche, moto y ninguno. Por lo tanto, a la salida de la red neuronal hay una softmax son
cuatro nodos. Ahora tendríamos otra salida para la detección del cuadro delimitador
de objeto, esta salida tendrá cuatro números bx, by, bh, bw.
Convolutional Neural Networks

Ahora nuestros datos de entrenamiento no solo tendrán una etiqueta del objeto, sino
cuatro números adicionales. En este ejemplo, bx debería estar cerca de 0.5, bw sería
0.7, bh = 0.3 y bw = 0.4.

La etiqueta Y deberá tener un parámetro que llamaremos PC, detecta si hay un objeto
(Pc=1 hay objeto, Pc=0 No hay objeto). Si hay un objeto tendremos los valores de
bx,by,bw y bh. También tendremos C1, C2 y C3 (la probabilidad de cada una de las
clases). Hay que recordar que en este problema la imagen solo tiene un objeto.

• Landmark Detection

Puede que queramos detectar los bordes que delimitan un ojo, un labio, una cara etc.
Para ello es necesario tener más salidas en la red neuronal.
Convolutional Neural Networks

Lo anterior es un ejemplo para detectar emociones en las caras etc. Para tratar una red
como esta, se necesita un conjunto de entrenamiento etiquetado.
La idea anterior también se puede llevar a la detección de poses de personas.
Convolutional Neural Networks

• Object Detection
Vamos a construir otro algoritmo de detección de objetos. Vamos a usar una red
convolucional para realizar detección de objetos mediante algo llamado algoritmo de
detección de ventana deslizante.
Supongamos que queremos construir un algoritmo de detección de automóviles.
Lo primero que podemos hacer es crear un conjunto de entrenamiento de etiquetas,
con x e y con ejemplos muy recortados de coches:

Una vez entrenada la ConvNet

Podemos usarla para la detección de ventana deslizante.


Lo que se hace es, si tenemos una imagen de prueba como la siguiente:
Convolutional Neural Networks

Lo que se hace es que se comienza por elegir un cierto tamaño de ventana, y se


introduce en la red convolucional:

Se toma ese cuadrado como entrada de la convNet para que esta haga una predicción.
Y dirá si en el interior de ese cuadrado hay un coche o no. Luego se vuelve a alimentar
la red con el cuadrado desplazado a otra región y detecta si hay o no un coche. ETC

Pero hay una gran desventaja en la detección de ventana deslizante, y es el costo


computacional.

• Convolutional Implementation of Sliding Windows

Vamos a implementar el algoritmo anterior, pero de manera convolucional para que


no sea tan costoso computacionalmente.
Primero debemos ver como se pueden convertir capas completamente conectadas en
la red neuronal en capas convolucionales.
Supongamos que nuestro algoritmo de detección de objetos se alimenta con imágenes
de (14x14x3). Luego usamos 16 filtros 5x5 y obtenemos una salida de (10x10x16).
Luego hacemos MaxPool de (2,2) y reducimos a 5x5x16. Luego tenemos una capa
totalmente conectada de 400 unidades para conectarse a otra capa totalmente
conectada de 400 nodos y finalmente generamos Y. Hay cuatro clases. Peatones,
coches, motos y ninguna.
Convolutional Neural Networks

Vamos a ver como las Fc y softmax pueden convertirse en capas convolucionales. La


primera Fc la cambiamos por 400 convoluciones 5x5 La salida será de (1,1,400). La
siguiente Fc se cambia por 400 convolución 1x1. Por último, otros 4 filtros 1x1.

Se puede implementar las convoluciones con ventanas deslizantes. Supongamos que


tenemos una entrada de 14x14x3 etc…

La imagen del conjunto pruebas es 16x16x3. Podríamos deslizar nuestra imagen a


través de ella… (es una imagen bastante pequeña)

La red convolucional se ejecuta cuatro veces con el fin de


obtener cuatro etiquetas. Pero gran parte de estos cálculos
están duplicados. Así que lo que permiten hacer las ventanas
deslizantes es compartir una gran cantidad de cálculo. Podemos
hacer lo siguiente:
Convolutional Neural Networks

En resumen, para implementar ventanas deslizantes, lo primero que se hace es


recortar una región, ejemplo 14x14 y ejecutar esto en la ConvNet y hacerlo de nuevo
para la siguiente región etc hasta que reconozca el coche. Pero en lugar de hacer de
manera secuencial como vimos al principio, se puede implementar en toda la imagen
28x28 y convolucionalmente hacer todas las predicciones al mismo tiempo con una
COnvNet vista anteriormente.
Convolutional Neural Networks

• Bounding Box Predictions


Lo visto anteriormente todavía tiene un problema que es que genera las cajas
delimitadoras de forma precisa. Veamos cómo mejorarlo.

Con las ventanas deslizantes vamos desplazando el cuadro delimitador hasta captar el
coche, pero puede que ninguna de las deslizaciones llegue a captarlo del todo. En el
siguiente ejemplo ninguno de los delimitadores coincide perfectamente con la
posición del coche.

También es posible que el mejor delimitador sea un rectángulo y no un cuadrado.


Una manera de conseguir generar delimitadores más precisos es con el algoritmo
YOLO.
Convolutional Neural Networks

Supongamos que tenemos una imagen 100x100. Se coloca una malla en la imagen
(usaremos 3x3 aunque en realidad se usa uno más fino como 19x19):

La idea es que vamos a tomar el algoritmo de clasificación y localización de imágenes


que hemos visto en casos anteriores, y se aplica a cada una de las nueve cuadriculas.
Para cada una de las nueve celdas de la cuadricula, se especifica una etiqueta Y, donde
la etiqueta Y es un vector de 8 dimensiones. Primeros generamos Pc como 0 o 1
(dependiendo de si hay o no una imagen en la cuadricula), luego bx.by,bh,bw y por
último c1,c2,c3 (peatón, coche, moto).
Convolutional Neural Networks

El volumen total de la salida será 3x3x8, tiene celdas 3x3 y un vector de 8 dimensiones.

Ahora la entrada para entrenar la red neuronal es de 100x100x3 y luego hay una
ConvNet habitual con ConV + Pooling etc. Y al final se debe elegir las capas conv y las
maxPool para tener a la salida un volumen de 3x3x8.

Este algoritmo funciona bien mientras no tengamos más de un objeto en la cuadrícula.

¿Cómo se delimitan los valores bx,by,bh, bw?


Convolutional Neural Networks

• Intersección sobre la unión

En la tarea de detección de objetos obtenemos lo siguiente:


Color rojo es lo que debería detectar y el purpura lo que detecta el algoritmo. ¿es un
buen resultado?

Lo que hace la intersección sobre la función de unión (IoU), es calcular la intersección


sobre la unión de estos dos cuadros delimitadores. Por lo tanto, la unión de estos dos
cuadros delimitadores es esta área:

La intersección de una unión es calcular el tamaño de la intersección y dividirlo por el


tamaño de la unión.
Convolutional Neural Networks

Por convencion para determinar si es un buen resultado debe ser mayor o igual a 0.5.

• Non-max Suppresion

Uno de los problemas de detector de objetos es que pueden existir dos o mas
detecciones un mismo cuadro delimitador. La non-max Suppersion es una manera de
corregirlo.

Supongamos que queremos detectar peatones, coches y motos en la siguiente imagen:

A cada coche se le debería asignar un


punto medio, pero técnicamente solo una
de esas celdas de la cuadricula debe
predecir que hay un coche.

Nuestro algoritmo puede terminar con múltiples detecciones de cada objeto:


Convolutional Neural Networks

Lo que hace Non-max suppresion es limpiar estas detecciones para que solo exista una
detección. Lo que hace es examinar las probabilidades asociadas a cada una de estas
detecciones (se mide con IoU).

Se descartan todas cajas delimitadoras con Pc<0.6


Convolutional Neural Networks

• Cajas de anclaje

Uno de los problemas de detección de objetos vistos hasta ahora, es que cada una de
las celdas solo puede detectar un solo objeto. Para solucionarlo existe la idea de las de
anclaje.
Tenemos una imagen como la siguiente:

Vemos que el punto medio del peatón y el del automóvil están casi en el mismo lugar y
ambos caen en la misma región de la celda en la malla.
En este caso la salida Y donde se puede detectar peatón, coche y moto, no es capaz de
detectar ni peatón ni coche, así que hay que elegir una de las dos detecciones para la
salida.
Con la idea de caja de anclajes, lo que se hace es predefinir dos formas diferentes de
cajas llamadas de anclaje:
Convolutional Neural Networks

Lo que se hace ahora es asociar dos predicciones con los dos cuadros de anclaje (se
pueden usar más cajas de anclaje). El vector de salida será:

La caja de anclaje 1 corresponde a la del peatón y la caja de anclaje 2 a la del coche.


Luego se usa IoU para delimitar….
En resumen:

NOTA: La salida es 3x3x16 ya que 2*8=16


Convolutional Neural Networks

¿Si solo hubiese un coche?

¿Qué pasa si tenemos dos cuadros de anclaje, pero tres objetos en la misma celda de
cuadrícula?
Convolutional Neural Networks

En este caso el algoritmo no funciona bien. Pero es muy poco probable que dos
objetos tengan el mismo punto medio, así que no ocurrirá con frecuencia.

• Yolo Algorithm

Primero vamos a ver como se construye el conjunto de entrenamiento.


Supongamos que estamos tratando de entrenar un algoritmo para detectar tres
objetos: peatones, coches y motocicletas.
Si estamos usando dos cajas de anclaje la salida será de la forma:

La salida será 3x3, porque estamos usando celdas de cuadrícula de 3x3, x 2 que es el
número de anclajes x8 porque es la dimensión de Pc,bx,by,bh,bw,c1,c2,c3. Y también
se puede representar como una salida de 3x3x16.
Así que, para construir el modelo de entrenamiento, se pasa por cada una de las nueve
celdas de cuadricula y formamos un vector de destino apropiado “Y”.

La primera celda no detecta nada:


Convolutional Neural Networks

Solo para la celda 8 detecta algo, un coche:

Veamos como el algoritmo puede hacer predicciones:

Dada una imagen la red neuronal emitida una salida de volumen 3x3x2x8. Donde cada
una de las nueve celdas de cuadriculas se obtiene un vector como este.
Finalmente, se ejecuta con la non-max supressed:
Convolutional Neural Networks

• Semantic Segmentation with U-Net

El objetivo es dibujar alrededor del objeto detectado. Este algoritmo es útil para
muchas aplicaciones comerciales
Convolutional Neural Networks

Esto es útil por ejemplo a la hora de que un coche se mantenga en la carretera. Otras
aplicaciones:

A nivel de pixel, si forma parte del coche es 1, de lo contrario es 0:

También se pueden detectar más zonas:


Convolutional Neural Networks

El algoritmo que hace la segmentación es el siguiente:

A partir de una ConvNet, eliminamos las capas Fc y volvemos a aumentar la dimensión


de la imagen original:

Para hacerlo es necesario hacer una convolución transpuesta.


Convolutional Neural Networks

• Transpose Convolutions

Las convoluciones transpuestas son una de las claves para la arquitectura U-Net. Se
toman 2x2 entradas y se convierten en una salida 4x4.
Recordemos la convolución normal:

La convolución transpuesta es:

Veamos un ejemplo:
Convolutional Neural Networks

La siguiente celda como hay un stride = 2 sería:

Vemos como se superponen rojo y verde, hay que sumar:

Siguiente elemento sería:


Convolutional Neural Networks

El último elemento sería:

• U-Net Architecture Intuition

Debemos hacer un skip conection. Resulta que, la siguiente capa final decide qué
región es un gato. Dos tipos de información son útiles. Una es la información
contextual de alto nivel, espacial y de alto nivel que obtiene de esta capa anterior.
Donde, con suerte, la red neuronal, hemos descubierto que en la esquina inferior
derecha de la imagen o tal vez en la parte derecha de la imagen, están sucediendo
cosas parecidas a gatos. Pero lo que falta es una información espacial muy detallada y
de grano fino. Debido a que este conjunto de activaciones aquí tiene una resolución
espacial más baja para aumentar, es simplemente más baja. Entonces, lo que hace la
conexión de salto es permitir que la red neuronal tome esta información de
características de muy alta resolución y bajo nivel donde podría capturar para cada
posición de píxel. Pero una textura más detallada como información para tomar una
decisión sobre si un determinado píxel es parte de un gato o no.
Convolutional Neural Networks

• U-Net Architecture
Convolutional Neural Networks
Convolutional Neural Networks
Convolutional Neural Networks
Convolutional Neural Networks

Semana 4
Face recognition
• What is Face Recognition:

En primer lugar, vamos a empezar por repasar algunas de las terminologías utilizadas
en el reconocimiento facial.
En la literatura de reconocimiento facial, se habla a menudo de verificación facial y
reconocimiento facial.
En la verificación facial el trabajo del sistema es verificar si la imagen de entrada es o
no la de la persona interesada. Por lo tanto, a veces también se llama problema 1 a 1,
en el que solo quieres saber si la persona es la persona que dice ser.
El reconocimiento facial, es bastante más complicado que el problema de verificación.
Supongamos que tenemos un sistema de verificación con el 99% de precisión. Este
porcentaje de precisión podría no ser tan malo, pero supongamos que K es igual a 100
en un sistema de reconocimiento. Si aplicamos este sistema a una tarea de
reconocimiento con 100 personas en su base de datos, ahora hay 100 veces más de
posibilidades de hacer un error y si la posibilidad de cometer errores en cada persona
es solo 1%. Es decir, necesitaríamos un sistema con 99.9 de precisión como mínimo.

Lo que haremos a continuación será crear un sistema de verificación facial como un


bloque esencial y si la precisión es lo suficientemente alta, entonces lo usaremos para
crear un sistema de reconocimiento facial.
Convolutional Neural Networks

• One shot Learning


Uno de los desafíos del reconocimiento facial que necesitas resolver es el problema de
“una sola captura”. Lo que eso significa, es que para la mayoría de las aplicaciones de
reconocimiento facial necesitas ser capaz de reconocer a una persona dada una sola
imagen, o con solo un ejemplo de la cara de esa persona. Históricamente los
algoritmos de aprendizaje profundo no funcionan bien si solo se tiene un ejemplo de
entrenamiento. Vamos a ver un ejemplo de lo que esto significa y veamos como
abordar este problema.
Supongamos que ten emos una base de datos de cuatro imágenes de empleados.
Una persona quiere pasar por un torno. Lo que el sistema tiene que hacer es, a pesar
de haber visto una sola imagen de esta persona, reconocer que es la misma persona.
Y, en cambio, si ve a alguien que no está en la base de datos, entonces debe reconocer
que no es ninguna de las cuatro personas de la base de datos. Así que el problema de
una sola captura tiene que aprender un solo ejemplo para reconocer a la persona de
nuevo. Se necesita esto para la mayoría de los sistemas de reconocimiento facial,
porque es posible que solo tengas solo una imagen de cada uno de los empleados en
la base de datos.
Un enfoque que se podría intentar es introducir la imagen de la persona, pasarla por
una ConvNet y que genere una etiqueta y, usando una unidad softmax con 5 salidas
correspondientes a los 4 empleados o ninguno de ellos.
Pero esto realmente no funciona bien. Ya que tiene un conjunto de datos de
entrenamiento tan pequeño, que no es suficiente para entrenar una red neuronal
robusta para esta tarea. ¿Y qué pasa si una persona nueva se una al equipo? Ahora
habría seis salidas y habría que volver a entrenar la red. No parece un buen enfoque.

Lo que se debe hacer es aprender una función de similitud. En particular, deseas que
una red neuronal aprenda una función que se va a denotar con la letra d, que recibe
dos imágenes y da como resultado el grado de diferencia entre las dos imágenes. Así
que, si las dos imágenes son la misma persona, la diferencia será pequeña. Así que si la
diferencia es menor que un umbral ‘tau’ es la misma persona. Así es como se aborda el
problema de verificación facial.
Convolutional Neural Networks

• Siamese network
El trabajo de la función d es indicar cuanto de diferentes son dos rostros entre si. Una
manera de lograr esto es utilizar una red siamesa.

En este caso no usaremos una softmax. En su lugar nos centraremos en el vector de


128 números calculados por una capa Totalmente conectada que es la más profunda
de la red. A este vector lo llamamos f(X1)

La imagen está representada por un vector de 128 valores. La forma en la que se


puede construir un sistema de reconocimiento facial es que si deseas comparar dos
imágenes:

Lo que se puede hacer es alimentar esta segunda imagen a la misma red neuronal con
los mismos parámetros y obtener un vector diferente de 128 números, que codifica
esta segunda imagen.
Por último, si creemos que estas codificaciones sin una buena representación de estas
dos imágenes, lo que se puede hacer es definir la imagen.
Convolutional Neural Networks

• Triplet Loss Function


Para aplicar Triplet loss es necesario comparar pares de imágenes.
Convolutional Neural Networks

• Face Verification and Binary Classification

Triplet Loss es una buena manera de aprender los parámetros para el reconocimiento
facial. Hay otra manera de aprender estos parámetros.
Otra forma de entrenar una red neuronal es tomar un par de redes neuronales para
tomar esta red siames y hacer que ambas calculen estas embeddings, tal vez 128
dimensiones de embeddings o más, y luego hacer una predicción. Donde la salida será
1 si son las mismas personas o 0 en caso contrario.
Convolutional Neural Networks

Esta es una forma de tratar el reconocimiento facial como un problema de clasificación


binaria.

• What is Neural Style Transfer?

Es una de las aplicaciones más interesantes y divertidas. Se puede generar una obra de
arte propia. Pero ¿Qué es?
Convolutional Neural Networks

• What are Deep ConvNets learning?

Veámoslo con un ejemplo:


Estamos entrenando una ConvNet, esta es una red AlexNet y queremos visualizar lo
que las unidades ocultas están calculando en las diferentes capas.

Comencemos con una unidad oculta en la capa 1 y vemos cual es la imagen que
maximiza la activación de esa unidad en particular. Ahora, debemos observar que una
unidad oculta en la capa 1, solo verá una porción relativamente pequeña de la red
neuronal.

Ahora, se puede elegir una unidad oculta diferente en la capa 1 y hacer lo mismo

Esto da la sensación de que, las unidades, entrenan unidades ocultas en la capa 1, a


menudo están buscando características relativamente simples, como el borde o un
tono de color en particular.

¿Y que, pasa si hacemos esto mismo para otras capas ocultas más profundas?
En las capas más profundas, una unidad oculta, verá una región más grande de la
imagen. Donde en el extremo de cada píxel podría afectar hipotéticamente la salida de
estas capas posteriores de la red neuronal. Así que en realidad las unidades
posteriores se ven parches de imágenes más grandes.
Convolutional Neural Networks

• Cost Function

Vamos a definir una función de Costo J(G) que mire que tan buena es una imagen
generada en particular y usaremos el descenso del gradiente para minimizar J(G) con
el fin de generar la imagen.

¿Qué tan buena es una imagen en particular?


Para ello vamos a definir dios partes para la función de Costo, la primera parte se
denomina costo de contenido J_Content, lo que hace es medir cuanto es de similar el
contenido de la imagen generada G a la imagen de Contenido C. Luego se añade otra
función de Costo de estilo J_style que mide lo similar que es la imagen G al estilo de la
imagen S. Finalmente se ponderan ambos con dos hiperparametros Alpha y Beta.
Convolutional Neural Networks

• Content Cost Function


Convolutional Neural Networks

• Style Cost Función


Convolutional Neural Networks
Convolutional Neural Networks

• 1D and 3D Generalizations

A pesar de que la mayor parte de lo aprendido se ha centrado en las imágenes, en una


especie de datos 2D, porque las imágenes son muy generalizables. Resulta que muchas
de las ideas aprendidas también se aplican, no solo a imágenes 2D, sino también a los
datos 1D, así como a los datos 3D.

En la primera semana del curso, se aprendió acerca de la convolución 2D, donde se


puede introducir una imagen 14x14 y convolucionar con un filtro de 5x5 que da como
resultado una salida 10x10.

Una idea similar se puede aplicar a los datos 1D. Por ejemplo, con una señal de un
electrocardiograma.

Si queremos usar señales de electrocardiogramas para hacer diagnósticos médicos,


por ejemplo, entonces tendremos datos 1D. Así que en lugar de una entrada de 14x14,
tal vez tengamos una entrada de 14 dimensiones. Y nuestro filtro de convolución
podría ser un filtro de 5 dimensiones. Lo que un filtro 1D permite hacer es tomar el
filtro de 5 dimensiones y aplicarlo a lo largo de la señal 1D.
Convolutional Neural Networks

Si convolucionamos una señal de 14 dimensiones con un filtro de 5 dimensiones


tendremos una señal de 10 dimensiones.

Datos 3D son por ejemplo una tomografía computarizada, es un tipo de escaneo de


rayos X que da un modelo tridimensional del cuerpo. Lo que hace la tomografía es
tomar varias rebanadas a través del cuerpo.
Así que, si queremos aplicar una ConvNet para detectar características de esta
tomografía computerizada, podemos generalizar las ideas anteriores.
Así que, si tenemos un volumen 3D, por ejemplo, 14x14x14 y un filtro de 5x5x5 dará
como salida un volumen 10x10x10 (también podríamos haber puesto los canales).

También podría gustarte