SortieAnalyse · Sur le radarHabr AI→ original

Convolution en PHP pur : quatre boucles pour détecter les contours d'une image

Les réseaux convolutifs ressemblent à une boîte noire tant qu'on n'a pas écrit une convolution à la main. L'auteur de la huitième partie de la série pour développeurs PHP prend une image 5×5, un noyau 3×3 et quatre boucles imbriquées. Le filtre glisse sur les pixels, multiplie les valeurs par les poids et additionne : on obtient 0 sur la zone sombre et 570 sur le contour.

Traité par IA depuis Habr AI ; édité par Hamidun News
Convolution en PHP pur : quatre boucles pour détecter les contours d'une image
Source : Habr AI. Collage: Hamidun News.
Écouter l'article
Fiche synthèse et chiffres clés
ParamètreDonnées
Source primaireHabr AI ↗
Rédacteur en chef
Convolution dans un CNNquatre boucles, multiplication et somme
Chiffre clé #2Un noyau aux poids -1, 0, 1 réagit à un contour vertical
Chiffre clé #3Un seul contour produit deux réponses en raison de la taille de la fenêtre

La plupart des développeurs ont entendu parler des réseaux de neurones convolutifs, mais peu comprennent ce qui se passe à l'intérieur d'une couche. La huitième partie de la série « L'IA pour les développeurs PHP » dissipe ce brouillard : l'auteur implémente la convolution en PHP 8.1+ pur, sans bibliothèque ni algorithme de ML prêt à l'emploi.

Comment l'ordinateur voit une image

Pour une machine, une image est une matrice de nombres. En noir et blanc, chaque pixel prend une valeur de 0 (noir) à 255 (blanc). L'exemple utilise une image 5×5 : les trois colonnes de gauche valent 10 et les deux de droite valent 200. Entre la troisième et la quatrième colonne passe un contour vertical, et c'est lui qu'il faut trouver.

Pour cela, on utilise un noyau de convolution (kernel), une petite matrice de poids 3×3. À gauche, on trouve -1, au centre 0, à droite 1. Le noyau compare la luminosité des parties gauche et droite d'une zone : si elles sont semblables, les termes s'annulent ; si elles diffèrent, le résultat est grand en valeur absolue.

Comment cela fonctionne dans le code

La fonction convolve() prend en entrée une matrice et un noyau. La taille du résultat se calcule simplement : largeur de l'entrée moins largeur du noyau plus un, et de même pour la hauteur. Pour du 5×5 et du 3×3, on obtient une carte de caractéristiques 3×3. Les deux boucles externes déplacent la fenêtre sur l'image, les deux boucles internes multiplient les pixels par les poids et cumulent la somme.

Dans l'implémentation, le stride vaut 1, le padding vaut 0 et le noyau n'est pas retourné. À proprement parler, il s'agit d'une cross-correlation et non d'une convolution mathématique, mais en apprentissage profond on l'appelle convolution. Les valeurs du résultat ne sont pas ramenées à la plage 0–255 : la carte de caractéristiques peut contenir des nombres négatifs et des valeurs supérieures à 255.

En sortie, on obtient une matrice dont la première colonne est composée de zéros et dont les deux autres valent 570. Sur une zone sombre uniforme, le filtre ne voit aucune variation et le résultat est nul. Quand la fenêtre englobe à la fois des pixels sombres et clairs, chaque ligne donne 190, et les trois lignes totalisent 570.

Pourquoi deux réponses pour un seul contour

Les deux valeurs 570 ne signifient pas qu'il y a deux contours. Une fenêtre de 3 pixels de large, décalée d'un pas, capte deux fois la transition du sombre au clair, si bien que la réponse persiste sur deux positions voisines. C'est le comportement normal du noyau, pas un bug.

Plus loin dans l'article, l'auteur modifie les poids et cherche des contours horizontaux, montrant que changer de filtre change ce à quoi réagit la couche.

Que faire de tout cela

La conclusion pratique est modeste mais honnête. Ce code n'est pas adapté à la production : quatre boucles imbriquées en PHP seront lentes sur de vraies images, et un travail sérieux exige des bibliothèques optimisées ou l'appel à des modèles externes. En revanche, si vous faites de la vision par ordinateur via des API ou des extensions, comprendre la convolution aide à lire la documentation, à déboguer des résultats inattendus et à saisir ce qu'apprend réellement le réseau : dans un CNN, les poids des noyaux ne sont pas fixés à la main, mais ajustés pendant l'entraînement.

L'article est utile comme support pédagogique pour les équipes PHP qui veulent comprendre les fondements des CNN sans passer à Python.

Dossier

Questions clés sur cet article

Comment l'ordinateur voit une image?

Pour une machine, une image est une matrice de nombres. En noir et blanc, chaque pixel prend une valeur de 0 (noir) à 255 (blanc). L'exemple utilise une image 5×5 : les trois colonnes de gauche valent 10 et les deux de droite valent 200. Entre la troisième et la quatrième colonne passe un contour vertical, et c'est lui qu'il faut trouver. Pour cela, on utilise un noyau de convolution (kernel), une petite matrice de poids 3×3. À gauche, on trouve -1, au centre 0, à droite 1.

Comment cela fonctionne dans le code?

La fonction convolve() prend en entrée une matrice et un noyau. La taille du résultat se calcule simplement : largeur de l'entrée moins largeur du noyau plus un, et de même pour la hauteur. Pour du 5×5 et du 3×3, on obtient une carte de caractéristiques 3×3. Les deux boucles externes déplacent la fenêtre sur l'image, les deux boucles internes multiplient les pixels par les poids et cumulent la somme. Dans l'implémentation, le stride vaut 1, le padding vaut 0 et le noyau n'est pas retourné.

Pourquoi deux réponses pour un seul contour?

Les deux valeurs 570 ne signifient pas qu'il y a deux contours. Une fenêtre de 3 pixels de large, décalée d'un pas, capte deux fois la transition du sombre au clair, si bien que la réponse persiste sur deux positions voisines. C'est le comportement normal du noyau, pas un bug. Plus loin dans l'article, l'auteur modifie les poids et cherche des contours horizontaux, montrant que changer de filtre change ce à quoi réagit la couche.

ZK
Zhemal Khamidun — CPO d'Alpina Digital, product manager d'AlpinaGPT. Conçoit des produits IA depuis 2019. Hamidun News est un projet personnel devenu un agrégateur en production avec plus de 6 000 lecteurs.
✦ 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'en pensez-vous ?
Chargement des commentaires…