Esta arquitectura surge con el objetivo de solucionar el problema que tiene la estimaci´on de profundidad ya que usualmente se producen im´agenes borrosas o de baja calidad. En esta arquitectura de red se utiliza una estructura de autoenconder compuesta por dos ramas prin- cipales un encoder y un decoder. El encoder es una primera rama que se encarga de realizar una compresi´on de la informaci´on mientras que el decoder, bas´andose en la informaci´on com- primida intenta recuperar una informaci´on general para reconstruir una nueva imagen. Este autoencoder se puede encuadrar en el tipo de autoencoders de cambio de modalidad donde la entrada es un tipo de imagen (en este caso una imagen RGB real) y la salida es una mo- dalidad diferente como es en este caso una imagen de profundidad de un solo canal de color. Estos m´etodos no realizan un submuestreo tan agresivo en cuanto a la resoluci´on espacial de la imagen de entrada, lo que ayuda a producir estimaciones de profundidad mucho m´as acertadas.
La idea de esta arquitectura es utilizar un autoencoder con “skip connections” para cumplir los objetivos de precisi´on compartiendo informaci´on de las capas iniciales con las capas m´as profundas de la red. Esto hace a la arquitectura muy similar a la presentada anteriormente (UNet). La diferencia principal en esta implementaci´on radica en la red de base utilizada como “Encoder” y el tipo de funciones de “ Up-sampling ” empleadas, as´ı como en que la arquitectura previa utiliza el mismo n´umero de bloques de “ Upsampling” que la arquitectura original respetando su dise˜no. El “Decoder ” de la nueva arquitectura cumple la funci´on de ser profundo (”Deep”) presentando varias capas intermedias entre cada bloque Up-Sampling y proporcionando mediante la nueva arquitectura im´agenes de resoluci´on mayor a la salida que con la arquitectura UNet.
Figura 22: Arquitectura de la red Deep Autoencoder.[21]
Se comenzar´a describiendo la arquitectura utilizada para el “ Encoder ”. La imagen de entrada es convertida a un vector de caracter´ısticas mediante la utilizaci´on de la red “ DenseNet-169 ” [74]. Las redes DenseNet toman los conceptos de las redes Resnet, que tal como se explic´o en la arquitectura “ ResNet-Unet ”, se diferencia de las redes tradicionales que conectaban cada capa de neuronas con la siguiente, pudiendo ahora conectar una capa con cualquiera que venga despu´es de ella sin necesidad de que sea la inmediata. La ventaja de la utilizaci´on de las ResNets es que el gradiente puede fluir directamente por la funci´on identidad desde las capas del final hasta las del comienzo. Un inconveniente es que, aunque al final de cada bloque de la red es necesario sumar la funci´on identidad con la salida de las capas, esto puede impedir el flujo de la informaci´on en la red de manera adecuada.
Figura 23: DenseNet de 5 capas.[22]
Para mejorar este flujo de informaci´on, en las redes DenseNet se agrega una caracter´ıstica denominada “Dense connectivity” donde se diferencian del concepto de conexi´on entre capas que se utilizaba en las ResNets. Como se observa en la Figura 23, se propone la conectividad de cualquier capa de neuronas con todas las capas subsecuentes. Por lo tanto, la capa N
recibir´a los mapas de caracter´ısticas de todas las capas anteriores como entrada:
xl=Hl([x0, x1, ..., xl−1]) (2)
Figura 24: Deep DenseNet con 3 DenseBlocks.
La diferencia entre las distintas redes DenseNet se basa en el n´umero de funciones compuestas que utilizan en cada capa del proceso. La Figura 24 muestra que existen unos DenseBlocks que est´an formados por las funciones compuestas y que est´an descritos en la Ecuaci´on 2 como H. Estas funciones est´an compuestas de una normalizaci´on (“Batch Normalization”) seguidas de una activaci´on (“ReLU”) y de una Convoluci´on con Kernel 3x3. Entre estos bloques mencionados, se encuentran unas de las partes m´as esenciales de toda CNN, como lo son las “Pooling Layers”, que se utilizan para disminuir el tama˜no del mapa de caracter´ısticas a uno m´as peque˜no. Las capas de transici´on entre los DenseBlocks est´an compuestas por una capa Pooling 2x2 y una capa convolucional 1x1.Estas capas convolucionales son utilizadas como cuellos de botella para reducir el n´umero de par´ametros de entrada y as´ı aumentar la eficiencia de la red.
El vector resultante de pasar la imagen de entrada a trav´es del encoder es alimentado luego a una serie de capas de “Up-sampling” sucesivas para lograr construir un mapa de profundidad final con la mitad de la resoluci´on que la imagen de entrada. Estas capas “Up-sampling” y sus asociadas conexiones (“Skip-Connections”), forman el decoder de esta arquitectura. El decoder comienza con una capa convolucional 1x1 con el mismo n´umero de canales de salida que los del encoder. Luego de esto, se a˜naden bloques de “Up-sampling” seguidos de capas convolucionales con kernels 3x3 con la mitad de filtros a la salida de los que hay a la entrada. La primera de las capas de convoluci´on es aplicada a la salida de la capa anterior y a la capa de Pooling del encoder, logrando obtener las mismas dimensiones espaciales. Cada bloque de “upsampling” viene seguido por una funci´on de activaci´on Leaky ReLU.
Las capas que se observan en la Figura 25 hasta CON V2 son las correspondientes a la red DenseNet-169. Luego se describen todas las capas del decoder (d´onde cada convoluci´on es seguida de normalizaci´on y activaci´on) teniendo finalmente a la salida una dimensi´on de 240x320x1 para im´agenes de entrada de tama˜no 480x640x3. La dimensi´on final de la salida consigue una resoluci´on mayor que con la red anterior (dise˜no original de la UNet) as´ı como de nuevo proporcional un ´unico canal de color de salida que representar´a la profundidad de cada p´ıxel.
Figura 25: Arquitecturas Deep Autoencoder.
La funci´on de p´erdidas utilizada en esta arquitectura busca un balance entre la reconstrucci´on de los mapas de profundidad a trav´es de la m´ınima diferencia de los valores de profundidad, pero tambi´en penalizando las distorsiones que ocurren en la estimaci´on de la imagen de profundidad. B´asicamente estos detalles se encuentran en los bordes de los objetos de la imagen. Por lo tanto, para el entrenamiento de esta red se define una funci´on de p´erdidas L
como la suma de tres funciones de p´erdidas:
L(y,yˆ) =αLdepth(y,yˆ) +Lgrad(y,yˆ) +LSSIM(y,yˆ). (3)
Los valores y y ˆy representan la imagen original de profundidad y la predicha por la red respectivamente. El primer valor con sub´ındice “depth” corresponde a la comparaci´on respecto a cada punto definido en los valores de profundidad como representa la Ecuaci´on 4, definiendo as´ı la normaL1: Ldepth(y,yˆ) = 1 n n X p |y−yˆ|. (4)
El segundo t´ermino es la funci´on/normaL1definida sobre el gradientegde la imagen estimada que se puede representar mediante la Ecuaci´on 5:
Lgrad(y,yˆ) = 1 n n X p |gx(y,yˆ)|+|gy(y,yˆ)|. (5)
Donde los valores de g corresponden a las diferencias entre las componentes x e y de los gradientes de las im´agenes real y estimada. Esto permite tener en cuenta los problemas de border tratando con esta funci´on de aprenderlos de una manera m´as precisa.
Por ´ultimo, el t´ermino correspondiente a ”Structural Similarity (SSIM)”se presenta en la Ecuaci´on 6:
LSSIM(y,yˆ) =
1−SSIM(y,yˆ)
2 (6)
La funci´on SSIM es una m´etrica muy utilizada en el campo del “Computer Vision”para la comparaci´on de im´agenes y esta ser´a detallada posteriormente en apartados siguientes. El par´ametro α que se define en la ecuaci´on 3 se fija a un valor de 0,1 tras pruebas emp´ıricas buscando el equilibrio entre los tres t´erminos de la funci´on.