LanzamientoAnálisis · En radarHabr AI→ original

Convolución en PHP puro: cuatro bucles encuentran bordes en una imagen

Las redes convolucionales parecen una caja negra hasta que escribes una convolución a mano. El autor de la octava parte de la serie para desarrolladores PHP toma una imagen de 5×5, un kernel de 3×3 y cuatro bucles anidados. El filtro se desliza por los píxeles, multiplica los valores por los pesos y los suma: en una zona oscura da 0, y en el borde, 570.

Procesado por IA desde Habr AI; editado por Hamidun News
Convolución en PHP puro: cuatro bucles encuentran bordes en una imagen
Fuente: Habr AI. Collage: Hamidun News.
Escuchar artículo
Ficha técnica y cifras clave
ParámetroDatos
Fuente originalHabr AI ↗
Editor jefe
Convolución en una CNNcuatro bucles, multiplicación y suma
Dato clave #2Un kernel con pesos -1, 0, 1 responde a un borde vertical
Dato clave #3Un borde produce dos respuestas por el tamaño de la ventana

La mayoría de los desarrolladores ha oído hablar de las redes neuronales convolucionales, pero pocos entienden qué ocurre dentro de la capa. La octava parte de la serie «IA para desarrolladores PHP» disipa esa niebla: el autor implementa la convolución en PHP 8.1+ puro, sin bibliotecas ni algoritmos de ML ya hechos.

Cómo ve una computadora una imagen

Para una máquina, una imagen es una matriz de números. En escala de grises, cada píxel toma un valor de 0 (negro) a 255 (blanco). El ejemplo usa una imagen de 5×5: las tres columnas de la izquierda tienen el valor 10 y las dos de la derecha, el valor 200. Entre la tercera y la cuarta columna hay un borde vertical, y eso es lo que hay que encontrar.

Para ello se usa un kernel de convolución (kernel), una pequeña matriz de pesos de 3×3. A la izquierda hay -1, en el centro 0 y a la derecha 1. El kernel compara el brillo de las partes izquierda y derecha de un fragmento: si son similares, los términos se anulan entre sí; si difieren, el resultado es grande en valor absoluto.

Cómo funciona en el código

La función convolve() recibe una matriz de entrada y un kernel. El tamaño del resultado es fácil de calcular: ancho de la entrada menos ancho del kernel más uno, y lo mismo para la altura. Para 5×5 y 3×3 se obtiene un mapa de características de 3×3. Los dos bucles externos desplazan la ventana por la imagen y los dos internos multiplican los píxeles por los pesos y acumulan la suma.

En la implementación, el stride es 1, el padding es 0 y el kernel no se voltea. En rigor, esto es correlación cruzada (cross-correlation) y no convolución matemática, pero en el aprendizaje profundo se suele llamar convolución. Los valores del resultado no se recortan al rango 0–255: el mapa de características puede contener números negativos y valores superiores a 255.

La salida es una matriz cuya primera columna está formada por ceros, mientras que las otras dos valen 570. En una región oscura uniforme, el filtro no ve ningún cambio y el resultado es cero. Cuando la ventana abarca píxeles oscuros y claros, cada fila da 190, y las tres filas suman 570.

Por qué hay dos respuestas para un solo borde

Los dos valores de 570 no significan dos bordes. Una ventana de 3 píxeles de ancho, al desplazarse de uno en uno, captura dos veces la transición de oscuro a claro, por lo que la respuesta se mantiene en dos posiciones contiguas. Es el comportamiento normal del kernel, no un error.

Más adelante en el artículo, el autor cambia los pesos y busca bordes horizontales, mostrando que cambiar el filtro cambia a qué reacciona la capa.

Qué hacer con esto

La conclusión práctica es modesta, pero honesta. Este código no sirve para producción: cuatro bucles anidados en PHP serán lentos con imágenes reales, y para un trabajo serio se necesitan bibliotecas optimizadas o llamadas a modelos externos. Sin embargo, si trabajas con visión por computadora mediante API o extensiones, entender la convolución ayuda a leer la documentación, depurar resultados inesperados y comprender qué aprende exactamente la red: en una CNN los pesos de los kernels no se fijan a mano, sino que se ajustan durante el entrenamiento.

El artículo es útil como material didáctico para equipos PHP que quieran entender la base de las CNN sin pasarse a Python.

Historia

Preguntas frecuentes sobre la noticia

Cómo ve una computadora una imagen?

Para una máquina, una imagen es una matriz de números. En escala de grises, cada píxel toma un valor de 0 (negro) a 255 (blanco). El ejemplo usa una imagen de 5×5: las tres columnas de la izquierda tienen el valor 10 y las dos de la derecha, el valor 200. Entre la tercera y la cuarta columna hay un borde vertical, y eso es lo que hay que encontrar. Para ello se usa un kernel de convolución (kernel), una pequeña matriz de pesos de 3×3. A la izquierda hay -1, en el centro 0 y a la derecha 1.

Cómo funciona en el código?

La función convolve() recibe una matriz de entrada y un kernel. El tamaño del resultado es fácil de calcular: ancho de la entrada menos ancho del kernel más uno, y lo mismo para la altura. Para 5×5 y 3×3 se obtiene un mapa de características de 3×3. Los dos bucles externos desplazan la ventana por la imagen y los dos internos multiplican los píxeles por los pesos y acumulan la suma. En la implementación, el stride es 1, el padding es 0 y el kernel no se voltea.

¿Qué se sabe sobre Por qué hay dos respuestas para un solo borde?

Los dos valores de 570 no significan dos bordes. Una ventana de 3 píxeles de ancho, al desplazarse de uno en uno, captura dos veces la transición de oscuro a claro, por lo que la respuesta se mantiene en dos posiciones contiguas. Es el comportamiento normal del kernel, no un error. Más adelante en el artículo, el autor cambia los pesos y busca bordes horizontales, mostrando que cambiar el filtro cambia a qué reacciona la capa.

ZK
Zhemal Khamidun — CPO de Alpina Digital, product manager de AlpinaGPT. Crea productos de IA desde 2019. Hamidun News es un proyecto personal que creció hasta ser un agregador en producción con más de 6.000 lectores.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
¿Qué te parece?
Cargando comentarios…