El kernel de bordes horizontales puede quedar como
img_new_horizontal = nd.convolve(img_gray,kernel.T)
Con el kernel original que definimos en la clase
Redes convolucionales y su importancia
La importancia del computer vision
¿Qué herramientas usaremos para redes neuronales convolucionales?
¿Qué son las redes convolucionales?
Mi primera red neuronal convolucional
Creando nuestra primera red convolucional
Entrenando nuestra primera red convolucional
Manejo de imágenes
Consejos para el manejo de imágenes
Manejo de imágenes con Python
Fundamentos de redes neuronales convolucionales
Kernel en redes neuronales
El kernel en acción
Padding y Strides
Capa de pooling
Arquitectura de redes convolucionales
Quiz: Fundamentos de redes neuronales convolucionales
Resolviendo un problema de clasificación
Clasificación con redes neuronales convolucionales
Creación de red convolucional para clasificación
Entrenamiento de un modelo de clasificación con redes convolucionales
Optimización de red neuronal convolucional
Data augmentation
Aplicando data augmentation
Callbacks: early stopping y checkpoints
Batch normalization
Optimización de modelo de clasificación
Entrenamiento de nuestro modelo de clasificación optimizado
Quiz: Optimización de red neuronal convolucional
Resolviendo una competencia de Kaggle
Clasificando entre perros y gatos
Entrenamiento del modelo de clasificación de perros y gatos
Resumen y siguientes pasos
Siguientes pasos con redes neuronales convolucionales
Comparte tu proyecto de clasificación con redes convolucionales y certifícate
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Aportes 24
Preguntas 2
El kernel de bordes horizontales puede quedar como
img_new_horizontal = nd.convolve(img_gray,kernel.T)
Con el kernel original que definimos en la clase
Por si se preguntaban qué pasa con un Kernel = 0’s
Algunos ejemplos de los kernel
kernel = np.array([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])
kernel = np.array([[ 1, 0, 1],
[ 0, 0, 0],
[ 1, 0, 1]])
kernel = np.array([[ 0, 0, 0],
[ 0, -1, 0],
[ 0, 0, 0]])
Ustedes sabían que si usan este kernel pueden trasladar la imagen? 😆
s = 55 # kernel's size
kernel= np.zeros((s, s))
kernel[s-1][s//2] = 1
Jugando y creando nuevos kernel
Lo convertí en función para ir probando varios kernels más fácil.
def test_kernels(img: np.ndarray, kernel: np.ndarray):
img_new = nd.convolve(img_gray, kernel)
fig, axes = plt.subplots(1,2, figsize=(15,10))
axes[0].imshow(img, cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_new, cmap=plt.cm.gray)
axes[1].set_title('New')
axes[1].axis('off')
test_kernels(img_gray, kernel)
# test con matriz identidad
test_kernels(img_gray, [[1,0,0],[0,1,0],[0,0,1]])
Kernel para bordes verticales:
kernel1 = np.array([[-1,-1,-1],
[0,0,0],
[1,1,1]])
“kernel” se refiere a una matriz pequeña que se desliza sobre la entrada de la imagen para realizar la operación de convolución. Estos kernels son esenciales para extraer características relevantes de la imagen y son la base de cómo funcionan las capas convolucionales en una CNN.
Les comparto mi notebook:
https://colab.research.google.com/drive/1C76h7EpwVSLqDkPHN83RdV6Wqeg9ps0o?usp=sharing
<#kernel, para bordes verticales
kernel = np.array([[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1]])
#utilizo la traspuesta de kernel
img_new = nd.convolve(img_gray, kernel.T)
fig, axes = plt.subplots(1,2, figsize=(15,10))
axes[0].imshow(img_gray ,cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_new ,cmap=plt.cm.gray)
axes[1].set_title('Convolucion')
axes[1].axis('off')
import cv2
cv2.imwrite('kernel.png',img_new)>
Probando el kernel para bordes horizontales
Código:
kernel_2 = np.array([[1,1,1],
[0,0,0],
[-1,-1,-1]])
img_2 = nd.convolve(img_gray, kernel_2)
fig, axes = plt.subplots(1,2, figsize = (15,10))
axes[0].imshow(img_gray, cmap=plt.cm.gray)
axes[0].set_title('Original')
axes[0].axis('off')
axes[1].imshow(img_2, cmap=plt.cm.gray)
axes[1].set_title('Convolution')
axes[1].axis('off')
Así puse lo que en mi intuición es un filtro para líneas diagonales hacia abajo:
Luego este fue el resultado:
wau, no se si el profesor es muy bueno o que pero hasta el momento he entendido todo muy bien.
Una cosa, podrias hacer una actualizacion al curso de despliegues de machine learning , es que me gustaria ver como tu lo explicas, muchas gracias.
Este fue el kernel usado para lineas horizontales:
[-1,-1,-1],
[0,0,0],
[1,1,1]
Este fue el kernel que usé para resaltar las caracteristicas horizontales
Este fue el resutlado del ejercicio planteado
Probé el kernel con la matriz identidad y resultó en un desenfoqué
Kernel para mostrar lineas horizontales
kernel = np.array([[-1, -2, -1],
[0, 0, 0],
[1,2, 1]])
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?