Nuestra revisión completa del aprendizaje automático y las redes neuronales hasta ahora ha conducido hasta este punto: comprender las redes neuronales convolucionales (CNN) y el papel que desempeñan en el aprendizaje profundo.
En las redes neuronales tradicionales de alimentación directa (feedforward) (prealimentacion), cada neurona en la capa de entrada está conectada a cada neurona de salida en la siguiente capa; llamamos a esto una capa totalmente conectada (FC). Sin embargo, en las CNN, no utilizamos capas FC hasta la última capa(s) en la red. Por lo tanto, podemos definir una CNN como una red neuronal que intercambia una capa "convolucional" especializada en lugar de una capa "completamente conectada" para al menos una de las capas en la red[10]. Luego se aplica una función de activación no lineal, como ReLU, a la salida de estas convoluciones y el proceso de convolución => la activación continúa (junto con una mezcla de otros tipos de capas para ayudar a reducir el ancho y alto del volumen de entrada y ayudar a reducir el ajuste excesivo) hasta por fin llegamos al final de la red y aplicamos una o dos capas FC donde podemos obtener nuestras clasificaciones de salida finales.
Una función de activación no lineal, tal como ReUU, se aplica a la salida de las variaciones y el proceso de convolución => la activación continúa (junto con una mezcla de otros tipos de capas para ayudar a reducir el ancho y la altura del volumen de entrada y ayudar a reducir el exceso de ajuste) hasta que por fin lleguemos al final de la red y apliquemos una o dos capas FC donde podemos obtener nuestras clasificaciones de salida finales.
Cada capa en una CNN aplica un conjunto diferente de filtros, típicamente cientos o miles de ellos, y combina los resultados, alimentando la salida a la siguiente capa en la red. Durante el entrenamiento, una CNN automáticamente aprende los valores de estos filtros.
En el contexto de la clasificación de imágenes, nuestra CNN puede aprender a:
- Detectar bordes a partir de datos de píxeles sin procesar en la primera capa.
- Use estos bordes para detectar formas (es decir, "manchas") en la segunda capa.
- Utilice estas formas para detectar características de nivel superior como estructuras faciales, partes de un automóvil, etc. en las capas más altas de la red.
La última capa en una CNN usa estas características de nivel superior para hacer predicciones con respecto al contenido de la imagen. En la práctica, las CNN nos dan dos beneficios clave:
la invariancia local y la composicionalidad. El concepto de invariancia local nos permite clasificar una imagen que contiene un objeto en particular, independientemente de en qué lugar de la imagen aparezca el objeto. Obtenemos esta invariancia local mediante el uso de "capas de agrupación" (que se explican más adelante en este capítulo) que identifican las regiones de nuestro volumen de entrada con una alta respuesta a un filtro particular.
El segundo beneficio es la composiciónalidad (compositionality). Cada filtro compone un parche local de características de nivel inferior en una representación de nivel superior, similar a cómo podemos componer un conjunto de funciones matemáticas que se basan en la salida de funciones anteriores:
f(g(x(h(x))) - esta composición permite que nuestra red aprenda más funciones completas en la red. Por ejemplo, nuestra red puede crear bordes a partir de píxeles, formas a partir de bordes y por consiguiente objetos complejos a partir de formas, todo de forma automática que ocurre de forma natural durante el proceso de capacitación. El concepto de crear funciones de nivel superior a partir de las de nivel inferior es exactamente la razón por la cual las CNN son tan poderosas en visión computacional.
En el resto de este capítulo, analizaremos exactamente qué son las convoluciones y el papel que desempeñan en el aprendizaje profundo. Luego pasaremos a los bloques de creación de CNN: capas y los distintos tipos de capas que usarás para crear tus propias CNN. Terminaremos este capítulo analizando los patrones comunes que se utilizan para apilar estos bloques de construcción para crear arquitecturas CNN que se desempeñen bien en un conjunto diverso de tareas de clasificación de imágenes. Después de revisar este capítulo, tendremos (1) una sólida comprensión de las redes neuronales convolucionales y el proceso de pensamiento que implica la creación de una y (2) una serie de "recetas" de CNN que podemos utilizar para construir nuestras propias arquitecturas de red. En nuestro próximo capítulo, usaremos estos fundamentos y recetas para capacitar a las CNN por nuestra cuenta.
Entendiendo las Convoluciones
En esta sección, abordaremos una serie de preguntas, que incluyen:
- ¿Qué son las convoluciones de imágenes?
- ¿Qué hacen?
- ¿Por qué los usamos?
- ¿Cómo los aplicamos a las imágenes?
- ¿Y qué papel juegan las convoluciones en el aprendizaje profundo?
Listos!!
La palabra "convolución" suena como un término elegante y complicado, pero en realidad no lo es. Si tiene experiencia previa con la visión por computadora, el procesamiento de imágenes o OpenCV antes, ya ha aplicado las convoluciones, ya sea que usted no lo haya hecho.
¿Alguna vez aplicó desenfoque o suavizado a una imagen? Sí, eso es una convolución. ¿Qué pasa con la detección de bordes? Sí, convolución. ¿Has abierto Photoshop o GIMP para enfocar una imagen? Lo has adivinado - convolución. Las convoluciones son uno de los bloques de construcción fundamentales y más críticos en la visión por computadora y el procesamiento de imágenes.
Pero el término en sí mismo tiende a asustar a la gente; de hecho, en la superficie, la palabra parece tener una connotación negativa (¿por qué alguien querría "convulsionar" algo?) Confíe en mí, las convoluciones no son nada atemorizantes. En realidad son bastante fáciles de entender.
En los Términos de Aprendizaje Profundo, una convolución de una (imagen) es una multiplicación de dos matrices en forma de elementos, seguida de una suma.
Serio??
Si, Eso es todo. Acabas de aprender lo que es una convolución:
1. Tome dos matrices (las dos tienen las mismas dimensiones).
2. Multiplíquelos, elemento por elemento (es decir, no el producto de puntos, solo una simple multiplicación).
3. Suma los elementos juntos. Aprenderemos más sobre las convoluciones, los núcleos y cómo se utilizan en las CNN en el resto de esta sección.
Convoluciones versus correlación cruzada
Un lector con experiencia previa en visión de computadora y procesamiento de imágenes puede haber identificado mi descripción de una convolución anterior como una operación de correlación cruzada en su lugar. El uso de correlación cruzada en lugar de convolución es en realidad por diseño. La convolución (indicada por el operador *) sobre una imagen de entrada bidimensional l y el kernel bidimensional K se define como:
Sin embargo, casi todas las bibliotecas de aprendizaje automático y de aprendizaje profundo utilizan la función de correlación cruzada simplificada.
Todo lo que significa matemática es un cambio de signo en la forma en que accedemos a las coordenadas de la imagen l (es decir, no tenemos que “desplazar” el kernel en relación con la entrada al aplicar la correlación cruzada). Nuevamente, muchas bibliotecas de aprendizaje profundo utilizan la operación de correlación cruzada simplificada y la llaman convolución; usaremos la misma terminología aquí. Para los lectores interesados en aprender más sobre las matemáticas detrás de la convolución frente a la correlación cruzada, consulte el Capítulo 3 de Visión por Computador: Algoritmos y Aplicaciones de Szelski.
La analogía de “Big Matrix” y “Tiny Matrix”
Una imagen es una matriz multidimensional. Nuestra imagen tiene un ancho (número de columnas) y una altura (número de filas), al igual que una matriz. Pero a diferencia de las matrices tradicionales con las que ha trabajado en la escuela primaria, las imágenes también tienen una profundidad: el número de canales en la imagen.
Para una imagen RGB estándar, tenemos una profundidad de 3 - un canal para cada uno de los canales Rojo, Verde y Azul, respectivamente. Dado este conocimiento, podemos pensar en una imagen como matriz grande y un núcleo o matriz convolucional como una matriz pequeña que se utiliza para desenfoque, nitidez, detección de bordes y otras funciones de procesamiento. Esencialmente, este pequeño kernel se asienta sobre la imagen grande y se desliza de izquierda a derecha y de arriba a abajo, aplicando una operación matemática (es decir, una convolución) en cada coordenada (x, y) de la imagen original. .
Es normal que los núcleos se definan a mano para obtener varias funciones de procesamiento de imágenes. De hecho, es posible que ya esté familiarizado con el desenfoque (suavizado promedio, suavizado gaussiano, suavizado mediano, etc.), detección de bordes (laplaciano, Sobel, Scharr, Prewitt, etc.) y afilado (sharpening), todas estas operaciones son formas de mano. - núcleos definidos que están diseñados específicamente para realizar una función particular.
Entonces, eso plantea la pregunta: ¿hay una manera de aprender automáticamente este tipo de filtros? ¿E incluso utilizar estos filtros para la clasificación de imágenes y la detección de objetos? Usted apuesta allí. Pero antes de que lleguemos, necesitamos entender un poco más los núcleos y las convoluciones.
Kernels
Nuevamente, pensemos en una imagen como una gran matriz y un núcleo como una pequeña matriz (al menos con respecto a la imagen original de "gran matriz"), que se muestra en la Figura 11.1. Como lo demuestra la figura, estamos deslizando el kernel (región roja) de izquierda a derecha y de arriba a abajo a lo largo de la imagen original. En cada coordenada (x, y) de la imagen original, paramos y examinamos la vecindad de píxeles ubicados en el centro del núcleo de la imagen. Luego tomamos esta vecindad de píxeles, los convolucionamos con el kernel y obtenemos un solo valor de salida. El valor de salida se almacena en la imagen de salida en las mismas coordenadas (x, y) que el centro del núcleo.
Si esto suena confuso, no se preocupe, revisaremos un ejemplo en la siguiente sección. Pero antes de profundizar en un ejemplo, echemos un vistazo a cómo se ve un kernel (Figura 11.3):
Anteriormente hemos definido un kernel cuadrado de 3 × 3 (¿alguna conjetura sobre para qué se usa este kernel?). Los núcleos pueden ser de tamaño rectangular arbitrario MxN, siempre que tanto M como N sean enteros impares.
La mayoría de los núcleos aplicados al aprendizaje profundo y las CNN son matrices cuadradas
N × N, lo que nos permite aprovechar las bibliotecas de álgebra lineal optimizadas que operan con mayor eficiencia en las matrices cuadradas.
Usamos un tamaño de kernel impar para asegurarnos de que hay un número entero (x, y) -coordinado válido en el centro de la imagen (Figura 11.2). A la izquierda, tenemos una matriz de 3 × 3. El centro de la matriz se ubica en x = 1, y = 1, donde se utiliza la esquina superior izquierda de la matriz como origen y nuestras coordenadas están indexadas en cero. Pero a la derecha, tenemos una matriz de
2 × 2. El centro de esta matriz estaría ubicado en x = 0.5, y = 0.5. Pero como sabemos, sin aplicar la interpolación, no existe tal cosa como la ubicación de píxeles (0.5,0.5), ¡nuestros coordinadores de píxeles deben ser interactivos! Esta razón es exactamente la razón por la cual utilizamos los tamaños del kernel: para asegurarnos siempre de que exista una coordenada (x, y) válida en el centro del kernel.
Un ejemplo de cálculo de mano de convolución
Ahora que hemos discutido los conceptos básicos de los núcleos, analicemos la operación de convolución real y veamos un ejemplo de cómo se aplica realmente para ayudarnos a consolidar nuestro conocimiento en el procesamiento de imágenes, una convolución requiere tres componentes:
1. Una imagen de entrada.
2. Una matriz del kernel que vamos a aplicar a la imagen de entrada.
3. Una imagen de salida para almacenar la salida de la imagen convolucionada con el kernel. La convolución (es decir, la correlación cruzada) es realmente muy fácil. Todo lo que necesitamos hacer es:
1. Seleccione una coordenada (x, y) de la imagen original.
2. Coloque el centro del núcleo en esta coordenada (x, y).
3. Tome la multiplicación por elementos de la región de imagen de entrada y el kernel, luego sume los valores de estas operaciones de multiplicación en un solo valor. La suma de estas multiplicaciones se llama kernel output.
4. Use las mismas coordenadas (x, y) del Paso # 1, pero esta vez, almacene la salida del kernel en la misma ubicación (x, y) que la imagen de salida.
A continuación, puede encontrar un ejemplo de convolución (denotada matemáticamente como el operador *) Una región de 3 × 3 de una imagen con un núcleo de 3 × 3 usado para desenfocar:
Por lo tanto:
Después de aplicar esta convolución, estableceríamos el píxel ubicado en la coordenada (i, j) de la imagen de salida O en Oi, j = 132.
¡Eso es todo! La convolución es simplemente la suma de la multiplicación de la matriz de elementos entre el kernel y la vecindad que cubre el kernel de la imagen de entrada.
Comentarios
Publicar un comentario