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
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.
- 23 oct. 2026Le paradoxe du développement assisté par l'IA : pourquoi la vitesse grimpe de 55 % sur une page blanche mais chute de 19 % dans du code mature
- 3 juil. 2026Un réseau de neurones en C++ pour prévoir le PIB, sans TensorFlow : il tourne sur un Arduino à 400 roubles
- 9 oct. 2026SLVR gagne 14,2 points sur BLINK Relation avec Qwen2.5-VL-7B, sans CoT textuel
- 22 oct. 2026AgentVQA a testé 22 VLM sur des tâches d'agent : le meilleur n'atteint que 58,5%
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.
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.
L'essentiel de l'IA — une fois par semaine
Sept actus qui ont vraiment compté, choisies à la main. Sans bruit ni communiqués.
C'est fait ! Vérifiez votre boîte mail pour la confirmation.