Convolución horizontal y vertical de strides

Autor: | Última modificación: 23 de agosto de 2022 | Tiempo de Lectura: 2 minutos
Temas en este post:

La convolución horizontal y vertical de strides se encuentra dentro de la serie de procesos que se llevan a cabo para las redes neuronales convolucionales en cada una de las capas de su arquitectura.

Por ello, en el desarrollo de este post, te mostramos cómo se comporta la convolución horizontal y vertical de strides.

Convolución horizontal y vertical de strides

Hay que partir de que los detectores de patrones en las redes convolucionales no están detectando nada, simplemente están multiplicando y sumando cosas.

Vamos a ver unos ejemplos para comprobar qué es lo que pasa cuando hacemos estas multiplicaciones y sumas para la convolución horizontal y vertical de strides:

# Hacemos los imports necesarios
import numpy as np
from scipy import signal
from scipy import misc
ascent = misc.ascent()
kernel = np.array([[-1, 0, +1],
                   [-1, 0, +1],
                   [-1, 0, +1]])
grad = signal.convolve2d(ascent, kernel, boundary='symm', mode='same')
import matplotlib.pyplot as plt

# función para mostrar dos imágenes juntas
def plot_two(img_orig, img_conv):
  fig, (ax_orig, ax_mag) = plt.subplots(1, 2, figsize=(20, 50))
  ax_orig.imshow(img_orig, cmap='gray')
  ax_orig.set_title('Original')
  ax_orig.set_axis_off()
  ax_mag.imshow((img_conv), cmap='gray')
  ax_mag.set_title('Gradiente')
  ax_mag.set_axis_off()
plot_two(ascent, grad)
Convolución horizontal y vertical de strides 1

Parece que estamos detectando algunos bordes que son, en definitiva, líneas.

Por tanto, parece que tenemos un detector de líneas verticales.

¿Cómo podríamos conseguir uno de líneas horizontales?

kernel = np.array([[-1, -1, -1],
                   [ 0,  0,  0],
                   [+1, +1, +1]])
grad_v = signal.convolve2d(ascent, kernel, boundary='symm', mode='same')
plot_two(ascent, grad_v)
Convolución horizontal y vertical de strides 2
kernel = 1/9 * np.ones((3,3))
grad_v = signal.convolve2d(ascent, kernel, boundary='symm', mode='same')
plot_two(ascent, grad_v)
Convolución horizontal y vertical de strides 3

Estos son algunos de los kernels más utilizados en redes convolucionales tradicionales:

Convolución horizontal y vertical de strides 4

Vamos a ver los ejemplos nosotros mismos:

# Cargamos y mostramos la imagen original
url_img = 'https://upload.wikimedia.org/wikipedia/commons/5/50/Vd-Orig.png'
from urllib.request import urlopen 
from io import BytesIO
from PIL import Image
file = BytesIO(urlopen(url_img).read()) 
img = np.asarray(Image.open(file), dtype='uint8')
plt.imshow(img)
plt.axis('off')

(-0.5, 99.5, 99.5, -0.5)

Convolución horizontal y vertical de strides 5
def convolve3d(img, kernel):
  img_out = np.zeros(img.shape)
  for i in range(img.shape[-1]):
     img_out[:,:,i] = signal.convolve2d(img[:,:,i], kernel, boundary='symm', mode='same')
  return img_out.astype('uint8')
# Probamos con el kernel identidad
kernel = [[0, 0, 0],
         [0, 1, 0],
         [0, 0, 0]]
img_ki = convolve3d(img, kernel)
plot_two(img, img_ki)
Convolución horizontal y vertical de strides 6

También puedes contar con más ejemplos de convolución horizontal y vertical de strides para continuar practicando.

¿Cómo seguir aprendiendo del Big Data?

Ahora que conoces cómo funciona la convolución horizontal y vertical de strides, te aconsejamos continuar aprendiendo al respecto y ajustar este conocimiento a tu desenvolvimiento laboral.

De hecho, desde KeepCoding te ofrecemos nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning. Gracias a este, podrás aprender todo lo relacionado con las herramientas y lenguajes actuales y más populares del mundo del manejo de los macrodatos. ¡Inscríbete ahora mismo!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Sabías que hay más de 5.000 vacantes para desarrolladores de Big Data sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!