Vincent Ogloblinsky - @vogloblinsky
Vincent Ogloblinsky
Compodoc maintainer
Web software architect
Indie hacker on side-projects
Il faut savoir exactement où est la surface d'affichage, au pixel près.
De face : un rectangle
De biais : un quadrilatère
Dans les deux cas : 4 côtés, 4 coins.
Toutes ces idées, je les ai testées
Déjà fait ?
No Ad (2011 - NY USA) : œuvres pré-assignées à des panneaux connus.
Ici, n'importe quel panneau.
Photos du web, d'Open Images, et de terrain à Rennes.
+ des images sans panneau, pour apprendre à ne rien voir
Même œil, autre question → autre réponse.
Entraînement sur mes ~500 photos de panneaux annotées : l'œil et le cerveau apprennent ensemble. Quand un coin est mal placé, l'erreur remonte du cerveau jusqu'à l'œil, qui s'ajuste un peu.
Pourquoi ça marche avec si peu d'images : l'œil a déjà vu des millions de photos. L'essentiel à apprendre, c'est notre question, au cerveau.
Même œil, autre question : seul le cerveau (la tête) change.
| Votre réponse | Ce que j'ai entraîné | Erreur / coin en px, image 224 × 224 |
|---|---|---|
| « Un rectangle, comme YOLO » | bbox, puis les coins dedans | 12,5 px |
| « Les pixels du panneau » | segmentation, puis coins du masque | 12,0 px |
| « Les 4 coins » | régression directe : 8 nombres | 11,7 px |
| « Les 4 bords » | une carte par côté, coins aux croisements | 7,7 px |
| « Les 4 coins » en mieux | une carte par coin (heatmaps) | 7,2 px |
Erreurs mesurées dans l'image réduite vue par le modèle (224 × 224), pas dans la photo d'origine.
Même jeu de test fixe de 119 images, même backbone.
La tête répond directement la position : 8 nombres, un (x, y) par coin.
haut-gauche → (57, 50)
Une seule réponse, sans nuance.
La tête répond une image par coin. Chaque case dit « le coin est-il ici ? », du froid au chaud.
Et quand le réseau hésite entre le bord du cadre et le bord de l'affiche ?
Analogie · « Où sont tes clés ? » Cuisine ou entrée… Une seule réponse : « dans le couloir ». Une carte : on entoure les deux, on va voir la plus probable.
L'image, puis une carte par coin : haut-gauche, haut-droit, bas-droit, bas-gauche.
Erreur moyenne par coin, en px de l'image 224 × 224 vue par le modèle. On ne change qu'une chose à la fois.
Pourquoi changer la tête rapporte 3 fois plus que changer l'œil ?
L'œil décrit l'image zone par zone, comme une carte. La heatmap répond aussi par une carte : chaque case dit juste « c'est ici ». La régression doit tout résumer en 8 nombres.
Deux candidats ? Deux zones s'allument, on garde la plus forte. La régression, elle, coupe la poire en deux et tombe dans le vide.
À chaque photo, des milliers de cases sont corrigées, pas 8 nombres. Précieux quand on n'a que quelques centaines d'images.
Analogie · montrer le coin du doigt sur la photo, plutôt que dicter ses coordonnées GPS.
On ne peut pas tout avoir : un œil plus fin voit mieux, mais met plus de temps à regarder. Et sur téléphone, chaque milliseconde compte.
Barres à l'échelle, à partir de zéro (0–9 px et 0–90 ms).
MnasNet-A1 : −1,5 px par rapport à ShuffleNetV2, pour seulement +3 ms avec une image d'entrée de 320px
EfficientNet-Lite0 : encore −0,6 px… mais +9 ms de plus. Ça ne vaut pas le coût.
Et plus léger ne veut pas dire mieux : MobileNetV3-Small, conçu pour le mobile, fait 11,1 px, aussi mal que la régression.
Jusqu'ici : des photos. Maintenant : une vidéo, à ~25 images par seconde.
CNN : 1 frame sur 10 flot optique + homographie : les autres
Entre deux images, un panneau plat bouge un peu, et de façon prévisible.
Analogie · on cherche un ami une fois dans la foule, puis on le suit des yeux.
Le « pipeline hybride » : un réseau de neurones + de la vision classique sans apprentissage.
Le suivi, censé alléger le travail, rendait l'app 7× plus lente que le CNN seul sur iPhone.
L'indice : démarrer le suivi et continuer le suivi coûtaient pareil. Le coupable est donc l'étape commune.
Préparer l'image = copier l'image de la caméra, puis la passer en noir et blanc (le suivi ne regarde que la luminosité).
Profiler avant de juger une architecture.
Le flot (optique) = le suivi entre deux passages du CNN : on mesure de combien chaque point du panneau a bougé d'une image à la suivante.
Dans la rue : l'œuvre déborde du cadre, un liseré de pub dépasse.
Pourquoi ? Le modèle ne voit qu'une image réduite, et répond avec une grille de cases :
Le modèle désigne une case, pas un pixel : ~15 px d'erreur, c'est à peine plus d'une demi-case.
Analogie · un point juste sur une carte au 1/100 000 devient une erreur de plusieurs maisons sur le plan du quartier.
Au-delà de 448 px, des coins partent sur un mât, un kiosque.
Les 4 cartes deviennent identiques : le backbone a appris à voir à une certaine échelle.
Un premier correctif « marchait » sur 3 exemples… et échouait sur les 119.
Un complément, pas un remplacement : seul, l'edge-fitting serait perdu parmi les milliers de bords d'une rue.
Coût : ~90 ms sur iPhone… mais seulement 1 frame sur 10. Fluidité quasi intacte.
Analogie · le CNN montre du doigt le coin du tableau, de loin. L'edge-fitting s'approche et pose une règle le long de chaque bord.
Le CNN dit « à peu près où », la géométrie dit « exactement où ».
Homographie : la formule qui déforme un rectangle pour le poser sur les 4 coins du panneau. Calculée par la carte graphique (WebGL).
D'où viennent les œuvres ?
SPARQL = le langage pour interroger Wikidata, le « SQL » des données liées. À chaque scan, l'app demandait (simplifié) :
« Une peinture, avec image, au ratio du panneau, dans un musée proche. »
Ce qu'on a mesuré
Construit une fois, chez moi
Un script « aspire » Wikidata (~5 min) puis les textes Wikipédia des œuvres (2 à 3 h).
→ un fichier JSON de ~950 Ko (~270 Ko compressé), livré avec l'app.
Au scan : tirage local et instantané, même sans réseau. Seule la photo vient encore de Commons, en miniature.
Mettre à jour = relancer le script.
Le tirage, à chaque scan
Ce qui a changé : pas la quantité de code, la vitesse d'itération
5 hypothèses et 3 expériences par jour : qu'est-ce qui est prouvé ? écarté ? pourquoi ?
knowledge/ : un mini graphe de connaissances en Markdown, dans le repo.
« L'auteur n'est pas une preuve. »
Une hypothèse reste une opinion tant qu'aucune expérience ne l'a testée.
On ne supprime pas une hypothèse réfutée.
Elle explique pourquoi on n'a pas pris ce chemin.
Any questions ?
Slides : https://bit.ly/4e2XF38
Crédit photos - Unsplash.com