Articles

La Guía Completa para Principiantes de Aprendizaje Profundo: Redes Neuronales Convolucionales y Clasificación de imágenes

Posted by admin

» Una cosa que me llamó la atención desde el principio es que no pones en una fotografía lo que va a salir. O viceversa, lo que sale no es lo que pones.»

― Diane Arbus

Una notificación aparece en tu red social favorita que alguien publicó una foto que podría haber en ella.

Es correcto.

Es la peor foto tuya de la historia.

GIF via GIPHY

¿Cómo sucedió eso?

Clasificación de imágenes!

La red neuronal convolucional (CNN) es una clase de redes neuronales de aprendizaje profundo. Los CNN representan un gran avance en el reconocimiento de imágenes. Se utilizan con mayor frecuencia para analizar imágenes visuales y con frecuencia trabajan entre bastidores en la clasificación de imágenes. Se pueden encontrar en el centro de todo, desde el etiquetado de fotos de Facebook hasta los autos autónomos. Están trabajando duro entre bastidores en todo, desde la atención médica hasta la seguridad.

Son rápidos y eficientes. Pero, ¿cómo funcionan?

La clasificación de imágenes es el proceso de tomar una entrada (como una imagen) y generar una clase (como «gato») o una probabilidad de que la entrada sea una clase en particular («hay un 90% de probabilidad de que esta entrada sea un gato»). Puedes mirar una foto y saber que estás viendo una toma terrible de tu propia cara, pero ¿cómo puede una computadora aprender a hacer eso?

Con una red neuronal convolucional!

Una CNN tiene

  • Capas convolucionales
  • Capas ReLU
  • Capas agrupadas
  • una capa totalmente conectada

Una arquitectura clásica de CNN se vería algo como esto:

Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected

A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. En comparación con otros algoritmos de clasificación de imágenes, los CNN en realidad utilizan muy poco preprocesamiento. Esto significa que pueden aprender los filtros que tienen que ser hechos a mano en otros algoritmos. Los CNN se pueden utilizar en toneladas de aplicaciones, desde el reconocimiento de imágenes y videos, la clasificación de imágenes y los sistemas de recomendación hasta el procesamiento de lenguaje natural y el análisis de imágenes médicas.

Los CNN se inspiran en procesos biológicos. Se basan en una investigación genial realizada por Hubel y Wiesel en los años 60 con respecto a la visión en gatos y monos. El patrón de conectividad en una CNN proviene de su investigación sobre la organización de la corteza visual. En el ojo de un mamífero, las neuronas individuales responden a los estímulos visuales solo en el campo receptivo, que es una región restringida. Los campos receptivos de las diferentes regiones se superponen parcialmente para cubrir todo el campo de visión. ¡Así es como funciona la CNN!

Imagen por NatWhitePhotography en

CNNs tienen una capa de entrada, y la capa de salida, y las capas ocultas. Las capas ocultas generalmente consisten en capas convolucionales, capas ReLU, capas de agrupación y capas completamente conectadas.

  • Las capas convolucionales aplican una operación de convolución a la entrada. Esto pasa la información a la siguiente capa.
  • La agrupación combina las salidas de grupos de neuronas en una sola neurona en la siguiente capa.
  • Las capas completamente conectadas conectan cada neurona de una capa a cada neurona de la siguiente capa.

En una capa convolucional, las neuronas solo reciben entrada de una subzona de la capa anterior. En una capa completamente conectada, cada neurona recibe entrada de cada elemento de la capa anterior.

Una CNN funciona extrayendo funciones de imágenes. Esto elimina la necesidad de extracción manual de funciones. ¡Las funciones no están entrenadas! Se aprenden mientras la red entrena en un conjunto de imágenes. Esto hace que los modelos de aprendizaje profundo sean extremadamente precisos para tareas de visión artificial. Los CNN aprenden la detección de funciones a través de decenas o cientos de capas ocultas. Cada capa aumenta la complejidad de las características aprendidas.

GIF a través de GIPHY

Una CNN

  • comienza con una imagen de entrada
  • le aplica muchos filtros diferentes para crear li>
  • aplica una función ReLU para aumentar la no linealidad
  • aplica una capa de agrupación a cada mapa de entidades
  • aplana las imágenes agrupadas en un vector largo.
  • introduce el vector en una red neuronal artificial totalmente conectada.
  • procesa las características a través de la red. La capa final completamente conectada proporciona la «votación» de las clases que buscamos.
  • entrena a través de la propagación hacia adelante y la contrapropagación durante muchas, muchas épocas. Esto se repite hasta que tengamos una red neuronal bien definida con pesas entrenadas y detectores de características.

Entonces, ¿qué significa eso?

Al principio de este proceso, una imagen de entrada se divide en píxeles.

GIF via GIPHY

Para una imagen en blanco y negro, los píxeles son interpretados como una matriz 2D (por ejemplo, 2×2 píxeles). Cada píxel tiene un valor entre 0 y 255. (Cero es completamente negro y 255 es completamente blanco. La escala de grises existe entre esos números. Con base en esa información, la computadora puede comenzar a trabajar en los datos.

Para una imagen en color, esta es una matriz 3D con una capa azul, una capa verde y una capa roja. Cada uno de esos colores tiene su propio valor entre 0 y 255. El color se puede encontrar combinando los valores en cada una de las tres capas.

Convolución

El objetivo principal del paso de convolución es extraer entidades de la imagen de entrada. La capa convolucional es siempre el primer paso en una CNN.

Tiene una imagen de entrada, un detector de entidades y un mapa de entidades. Tome el filtro y aplíquelo bloque por bloque de píxeles a la imagen de entrada. Haces esto a través de la multiplicación de las matrices.

Digamos que tienes una linterna y una hoja de plástico de burbujas. Tu linterna brilla en un área de 5 burbujas x 5 burbujas. Para mirar toda la hoja, deslizarías tu linterna por cada cuadrado de 5×5 hasta que vieras todas las burbujas.

Foto por stux en

La luz de la linterna aquí está el filtro y la región que se deslizan sobre es el campo receptivo. La luz que se desliza a través de los campos receptivos es su linterna enrevesada. El filtro es una matriz de números (también llamados pesos o parámetros). La distancia que la luz de su linterna se desliza a medida que viaja (¿está moviendo su filtro sobre una fila de burbujas a la vez? Dos?) se llama zancada. Por ejemplo, una zancada de uno significa que estás moviendo el filtro sobre un píxel a la vez. La convención es un paso de dos.

La profundidad del filtro tiene que ser la misma que la profundidad de la entrada, por lo que si estuviéramos mirando una imagen en color, la profundidad sería 3. Eso hace que las dimensiones de este filtro sean 5x5x3. En cada posición, el filtro multiplica los valores del filtro con los valores originales del píxel. Esta es la multiplicación por elementos. Las multiplicaciones se suman, creando un solo número. Si comenzó en la esquina superior izquierda de su plástico de burbujas, este número es representativo de la esquina superior izquierda. Ahora mueve el filtro a la siguiente posición y repite el proceso alrededor del plástico de burbujas. La matriz con la que termina se llama mapa de entidades o mapa de activación. Puede usar más de un filtro, lo que hará un mejor trabajo de preservación de las relaciones espaciales.

GIF via GIPHY

Usted tendrá que especificar parámetros como el número de filtros, el filtro de tamaño, la arquitectura de la red, y así sucesivamente. La CNN aprende los valores de los filtros por sí sola durante el proceso de entrenamiento. Tienes muchas opciones con las que puedes trabajar para hacer el mejor clasificador de imágenes posible para tu tarea. Puede elegir rellenar la matriz de entrada con ceros (relleno de cero) para aplicar el filtro a los elementos limítrofes de la matriz de imagen de entrada. Esto también le permite controlar el tamaño de los mapas de características. Agregar relleno cero es una convolución amplia. No agregar relleno cero es una convolución estrecha.

¡Así es básicamente como detectamos imágenes! No miramos cada píxel de una imagen. Vemos características como un sombrero, un vestido rojo, un tatuaje, etc. Hay tanta información entrando en nuestros ojos en todo momento que no podríamos lidiar con cada píxel de ella. Permitimos que nuestro modelo haga lo mismo.

El resultado de esto es el mapa de entidades enrevesado. Es más pequeña que la imagen de entrada original. Esto hace que sea más fácil y rápido de tratar. ¿Perdemos información? Algunos, sí. Pero al mismo tiempo, el propósito del detector de características es detectar características, que es exactamente lo que hace esto.

Creamos muchos mapas de características para obtener nuestra primera capa convolucional. Esto nos permite identificar muchas características diferentes que el programa puede usar para aprender.

Los detectores de características se pueden configurar con diferentes valores para obtener resultados diferentes. Por ejemplo, se puede aplicar un filtro que puede enfocar y enfocar una imagen o desenfocar una imagen. Eso daría igual importancia a todos los valores. Puede mejorar los bordes, detectar bordes y mucho más. Lo haría aplicando diferentes detectores de entidades para crear diferentes mapas de entidades. La computadora es capaz de determinar qué filtros tienen más sentido y aplicarlos.

El propósito principal aquí es encontrar entidades en su imagen, colocarlas en un mapa de entidades y conservar la relación espacial entre píxeles. Eso es importante para que los píxeles no se mezclarán.

¡Visualicemos esto!

Saluda a mi pequeño amigo:

Photo by Kirgiz03 on

We’re going to use this guy for our input image.

We’ll make him black and white

Let’s define and visualize our filters

import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)

Filter shape: (4, 4)

y vemos:

Filter 1: 



]

he Aquí una visualización de nuestros cuatro filtros

Ahora vamos a definir una convolucional capa (soy amante de PyTorch ahora, así que eso es lo que estamos usando aquí.)

Veremos

Net(
(conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
)

Agregaremos un poco más de código

Luego un poco más

Y podremos visualizar la salida de una capa convolucional antes de que se aplique una función de activación ReLU.

Ahora vamos a crear un kernel personalizado utilizando un operador de Sobel como un filtro de detección de bordes. El filtro Sobel se utiliza muy comúnmente en la detección de bordes. Hace un buen trabajo al encontrar patrones de intensidad en una imagen. Aplicar un filtro Sobel a una imagen es una forma de tomar una aproximación de la derivada de la imagen por separado en la dirección x o y.

vamos a convertir nuestro pequeño amigo a escala de grises para el filtrado

gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

Aquí vamos!

que Desee comprobar hacia fuera las matemáticas? Eche un vistazo a Introducción a las Redes Neuronales Convolucionales de Jianxin Wu

Capa ReLU

La capa ReLU (unidad lineal rectificada) es otro paso hacia nuestra capa de convolución. Está aplicando una función de activación en sus mapas de características para aumentar la no linealidad en la red. ¡Esto se debe a que las imágenes en sí mismas son altamente no lineales! Elimina los valores negativos de un mapa de activación poniéndolos a cero.

La convolución es una operación lineal con cosas como la multiplicación y adición de matrices en cuanto a elementos. Los datos del mundo real que queremos que nuestra CNN aprenda serán no lineales. Podemos explicarlo con una operación como ReLU. Puedes usar otras operaciones como tanh o sigmoid. ReLU, sin embargo, es una opción popular porque puede entrenar la red más rápido sin ninguna penalización importante a la precisión de generalización.

Echa un vistazo a C.-C. Jay Kuo Entendiendo las Redes Neuronales Convolucionales Con un Modelo Matemático.

¿Quieres profundizar más? Prueba con Kaiming He, et al. Profundizando en los Rectificadores: Superando el Rendimiento a Nivel Humano en la Clasificación de ImageNet.

Si necesita un poco más de información sobre los fundamentos absolutos de las funciones de activación, ¡puede encontrarla aquí!

Así es como nuestro pequeño amigo está cuidando una función de activación ReLU que convierte en negro todos los valores negativos de píxeles

viz_layer(activated_layer)

Related Post

Leave A Comment