Een voetbaldetector zag een kaal hoofd aan voor een bal met 98% betrouwbaarheid. Ik bouwde een fysicapoort die onmogelijke detecties downstream verwerpt.
Computer visionSportanalyseObjecttracking

Een geautomatiseerde camera volgde een hele voetbalwedstrijd lang een kaal hoofd. Ik bouwde de fysicapoort die nee zegt.

Ashutosh SinghalAshutosh Singhal15 juli 202610 min

In oktober 2020 volgde een geautomatiseerde camera bij Inverness Caledonian Thistle een groot deel van een voetbalwedstrijd lang het kale hoofd van een grensrechter in plaats van de bal. Onder de schijnwerpers glansde het hoofd als een bal, de Pixellot-camera volgde de detectie met de hoogste betrouwbaarheid die hij doorkreeg, en kijkers thuis kregen een langdurige, toegewijde close-up van een kale man die langs de zijlijn meeliep terwijl de wedstrijd zich buiten beeld afspeelde (gedocumenteerd op onze WP43-oplossingspagina).

Dat verhaal bleef me bij gedurende dit hele project, omdat het het duidelijkste beeld is dat ik ken van een fout die iedereen in computervisie heeft gevoeld en vrijwel niemand correct benoemt. De detector was niet kapot. Hij deed precies wat een detector doet. Hij kende een score toe aan een groep pixels, de glans op het hoofd scoorde hoog, en elk downstream-systeem vertrouwde die score. Plumbline, de demo die ik heb gebouwd, is te vinden op https://veriprajna.com/demos/physics-constrained-computer-vision, en het geheel vormt één betoog: de oplossing bevindt zich niet in de detector.

Het moment waarop ik stopte het model de schuld te geven

Ik besteedde de eerste dag hieraan met een poging een betere detector te bedenken, en ik kreeg het probleem niet weg. Een objectdetector is frame-onafhankelijk. Hij beoordeelt elk beeld op textuur en vorm, zonder geheugen van waar een echt object een ogenblik geleden was of waar het zich fysiek als volgende kan bevinden. Dus onder stadionlicht is een kaal hoofd lokaal gezien een uitstekende bal. Je kunt een scherper model trainen en het zal je nog steeds, op het frame waarin de glans piekt, een bal met 98% betrouwbaarheid voorschotelen die op het hoofd van een man zit. De betrouwbaarheid liegt niet over de pixels. Hij beantwoordt een vraag die niets te maken heeft met de vraag of een bal zich daar kan bevinden.

Dat was het moment waarop het perspectief voor mij kantelde.

Je vision-systeem heeft geen betrouwbaarheidsprobleem. Het heeft een fysicaprobleem.

Een echte bal gehoorzaamt aan restricties waaraan een kaal hoofd niet voldoet, en geen van die restricties bevindt zich in de score van de detector. Die ene herziening van het perspectief bepaalde de volledige architectuur. Ik stopte met proberen de detector slimmer te maken en begon met het bouwen van een laag die erachter zit en de fysica afdwingt waarvan de detector nooit heeft geweten.

Hoe "fysisch onmogelijk" eruitziet in code

Ik wilde zien hoe een detectie werd afgewezen om een reden die ik in begrijpelijke taal kon lezen, dus dat is wat ik als eerste heb gebouwd. Plumbline bevindt zich downstream van elke detector en voert drie deterministische poorten uit op elke kandidaat voordat er iets mee wordt gedaan. De kinematische poort gebruikt een Kalman-filter — een Unscented Kalman Filter op het synthetische pad met een model voor projectielbeweging — om te voorspellen waar een echte bal zich vervolgens kan bevinden, en meet vervolgens via een Mahalanobis-afstand hoe ver elke kandidaat van die voorspelling afwijkt: accepteren onder 3 sigma, afwijzen boven 5 sigma, en de band tussen 3 en 5 sigma markeren voor controle. De optische-flow-poort vergelijkt de lokale pixelbeweging van een kandidaat met de verwachte snelheid van het gevolgde traject, en wijst een "bal" af waarvan de flow de verkeerde kant op wijst of nauwelijks beweegt in open spel. De geometrische poort gebruikt een pinhole-model om te bepalen hoeveel pixels een bal van 22 cm kan beslaan op de geïmpliceerde diepte van de kandidaat, en verwerpt afmetingen die niet reëel kunnen zijn.

Geen hiervan is een model. Het is gewone numpy en scipy die je regel voor regel kunt lezen, buiten elk neuraal netwerk om, en dat is precies de reden waarom ik ze vertrouw. Vertrouwen hangt hier niet af van een black box die zichzelf achteraf probeert te verklaren.

Het kale hoofd faalt voor alle drie de poorten tegelijk. Ik heb die bedrieger opzettelijk geïnjecteerd, als een reproductie van het incident in Inverness in 2020 in plaats van een toevallige organische fout, omdat het geval dat een camera breekt precies het geval is dat nooit opduikt in de testset van een detector. Op het slechtste frame van de synthetische clip scoort het hoofd 82.3 sigma naast de voorspelde beweging van de bal, wat geen twijfelgeval is — het is kinematisch absurd. De echte bal, met een betrouwbaarheid van 0.87 en 0.4 sigma, passeert probleemloos en de camera blijft erop gericht.

De Plumbline-poortfeed die een kaal hoofd met 98% betrouwbaarheid afwijst terwijl de naïeve tracker zich erop vastzet
Het scenario van de kale grensrechter. De detector reikt beide trackers een "bal" met hoge betrouwbaarheid aan op het hoofd van de grensrechter (tot 98%); het naïeve linkerpaneel zet zich erop vast, terwijl de poortfeed in het rechterpaneel de bedrieger op alle drie de poorten tegelijk afwijst (stilstaand midden in het spel, kinematisch absurd met 82.3 sigma op het slechtste frame, onmogelijke afmeting op diepte) en blijft koersen op zijn voorspelling.

Elke afwijzing laat een reden achter in het dossier

Ik wilde niet dat dit iets zou zijn dat je op goed vertrouwen moet aannemen, dus elke beslissing schrijft een dossier weg dat je kunt openen. Het geëxporteerde beslissingslogboek bevat bovenaan het seed-getal, het scenario, het detector-id en de poortdrempelwaarden, gevolgd door één rij per frame per kandidaat: de klasse en betrouwbaarheid die de detector afgaf, het numerieke oordeel van elke poort met de reden in begrijpelijke taal ("Mahalanobis 82 sigma >= 5 sigma: kinematically impossible"), en de uiteindelijke actie. In het scenario met de kale grensrechter wijzen de poorten alle 18 van de foutieve detecties met hoge betrouwbaarheid van de bedrieger af, en houdt de fysica-tracker de bal 97.7% van de tijd vast, tegenover 59.1% voor het volgen van de hoogste betrouwbaarheid en 20.5% voor een verhoogde drempelwaarde (synthetische scène, seed 7).

Voor iedereen die aansprakelijkheid draagt voor een geautomatiseerde visuele beslissing, is dat dossier het verschil tussen een incidentrapport en een schouderophalen. Het is ontworpen als archiveerbaar bewijsmateriaal voor waarom een camera deed wat hij deed — geen compliancedocument, gewoon de fysische reden, vastgelegd in het dossier, per frame.

Het geëxporteerde Physics-Gate Decision Log voor het bald_linesman-scenario
Het geëxporteerde beslissingslogboek, scenario bald_linesman, seed 7. 98% physics time-on-target tegenover 59% en 20% voor de twee baselines, met het oordeel per poort en de reden in begrijpelijke taal voor elk frame hieronder uitgeschreven.

De betrouwbaarheidsdrempel verhogen is de verkeerde knop

Wanneer ik engineers de afwijzing van het kale hoofd laat zien, is het eerste instinct vrijwel altijd hetzelfde: verhoog gewoon de betrouwbaarheidsdrempel totdat de valse bal wegvalt. Ik heb de demo gebouwd om dat instinct met cijfers te beantwoorden, omdat het goed voelt maar verkeerd is. Op de schone synthetische scène zonder enige bedrieger gooit het verhogen van de drempelwaarde 43.2% van de echte ballen met lage betrouwbaarheid weg, terwijl de fysicapoorten hun missers op de schone set beperken tot 2.3% — wat neerkomt op één enkel frame acquisitievertraging in plaats van een verloren bal. De drempelwaarde ruilt één fout-positief in voor een berg fout-negatieven.

De fysicapoorten werken op een totaal andere as. Ze kunnen de onmogelijke detectie afwijzen zonder de zwakke echte detectie weg te gooien, omdat wat ze controleren (kan een bal zich hier bevinden, zo bewegend, met deze afmeting) losstaat van hoe luid de detector heeft gestemd. Die orthogonaliteit is precies wat ik met de schone-scène-test onweerlegbaar wilde maken.

De eerlijkheidscontrole op de schone scène, fysica 2% missers tegenover 43% voor de baseline met verhoogde drempelwaarde
De eerlijkheidscontrole op de schone scène zonder bedrieger. Fysica mist 2% van de frames (acquisitievertraging van één frame) tegenover 43% voor de baseline met verhoogde drempelwaarde, en de toelichting vermeldt duidelijk dat de bedrieger met het kale hoofd een geïnjecteerde reproductie is van het incident in Inverness in 2020, en geen spontaan ontstane fout.

Er is een kleiner detail waar ik tijdens het testen aan gehecht raakte: het geval van occlusie. Een speler kruist gedurende een dozijn frames voor de bal langs, elke kandidaat wordt afgewezen, en in plaats van de speler te grijpen, koerst de fysica-tracker op zijn eigen voorspelling door de onderbreking heen en pikt de bal weer op zodra deze weer verschijnt. Zien hoe hij een leeg spoor aanhoudt in plaats van een verkeerd spoor te bluffen, was het eerste moment waarop de laag minder voelde als een filter en meer als een oordeelsvermogen.

Het cijfer dat ik bijna niet had getoond

Ik had de test met echte beelden bijna geschrapt, en het behouden ervan is de beslissing waar ik het meest trots op ben in dit hele project. Alles hierboven draait op een synthetische scène met bekende grondwaarheid, wat een zuivere benchmark mogelijk maakt, maar een synthetische overwinning is gemakkelijk te wantrouwen. Dus nam ik een echte uitzendclip, voerde er frame voor frame echte YOLO11x-detecties op uit, injecteerde het hoofd van de grensrechter als valse bal vanuit de daadwerkelijke persoonsdetectie, en draaide dezelfde drie poorten ongewijzigd. Twee eerlijke compromissen volgden. Eén enkele ongekalibreerde uitzendclip heeft geen metrische diepte, dus de kinematische poort draait daar in het beeldvlak als een 2-D Kalman-filter in plaats van in de wereldruimte, en het simuleren van een 3-D filter zou een leugen zijn geweest. En de score daalde. Op de echte clip houdt de fysicapoort de bal 68.3% van de tijd vast, tegenover 43.8% voor het volgen van de hoogste betrouwbaarheid en 30.0% voor de verhoogde drempelwaarde.

Ik heb een tijdje met die 68.3% gezeten, want 97.7% is het getal dat verkoopt en 68.3% is het getal dat klopt op lastige videobeelden. Ik heb het eerlijke getal op het scorebord laten staan, binnen de app, waar iedereen het kan lezen. Een verificatielaag die zichzelf overschat, heeft al gefaald in de enige taak die hij beweert uit te voeren. Waar het om gaat is de richting: dezelfde poortcode verslaat, ongewijzigd, beide baselines op zowel echte als gesimuleerde detecties, en is openhartig over zijn eigen limieten.

Het scorebord met echte beelden, fysica 68% doelgericht tegenover 44% voor de naïeve tracker
Het paneel "Over deze demo" bij de echte beelden. Op de echte uitzendclip met echte YOLO11x-detecties behouden de fysicapoorten 68% doelgerichtheid tegenover 44% voor het volgen van de hoogste betrouwbaarheid — eerlijk lager dan het synthetische plafond omdat echte beelden lastiger zijn en op die manier zijn gemeten.

Waar dit werkelijk het substraat voor is

Ik was niet van plan om een voetbalproduct te bouwen, en ik wil zorgvuldig zijn over wat deze demo wel en niet is. Het is geen claim dat we elk bestaand productiesysteem voor camera's overtreffen, aangezien latere firmware van Pixellot het letterlijke geval met het kale hoofd al afhandelt, en de detector is niet het product. Het product is de dunne, inspecteerbare laag tussen een detector en wat er ook maar handelt op basis van de output ervan. Deze meetwaarden gaan over trackingkwaliteit, niet over het foutpercentage van een detector, en daarom blijft de waarde overeind, hoe goed de onderliggende detector ook wordt.

Die laag is nu belangrijker dan toen ik begon. Computervisie wordt agentic, met systemen die een frame niet alleen labelen maar er ook naar handelen, en de onbeantwoorde governance-vraag die onder al deze systemen ligt, is hoe je voorkomt dat een autonome agent handelt op basis van een fysisch onmogelijke detectie. SoccerNet noemt multi-object tracking nog altijd "verre van opgelost", zonder dat er al een fysica-bewuste methode in de benchmarks is geïntegreerd. Het kale hoofd was voor mij nooit het interessante deel. Het interessante deel is dat de restrictie die het opmerkt — dat een echt object moet gehoorzamen aan de wetten van de fysica — ook standhoudt tegen een perfecte toekomstige detector, want een bal die op constante hoogte zweeft en drie mijl per uur beweegt, klopt bij geen enkele betrouwbaarheid. Als je wilt zien hoe een detectie wordt overruled en de exacte reden wilt lezen waarom deze werd overruled, is de demo te vinden op https://veriprajna.com/demos/physics-constrained-computer-vision, waar de echte clip en de synthetische scènes naast elkaar draaien.

En als je het liever met eigen ogen ziet dan dat je mij op mijn woord gelooft: hier zie je het geheel van begin tot eind draaien, de echte clip en de synthetische scènes naast elkaar.

De camera volgde een kaal hoofd omdat niemand hem ooit heeft verteld wat een bal kan doen. Alles wat ik heb gebouwd is simpelweg die instructie, opgeschreven waar je het zelf kunt controleren.

Gerelateerd onderzoek

Ook gepubliceerd op

Bouw uw AI met vertrouwen.

Werk samen met een team met diepgaande ervaring in het bouwen van de volgende generatie enterprise-AI. Laat ons u helpen bij het ontwerpen, bouwen en implementeren van een AI-strategie waarop u kunt vertrouwen.

Veriprajna Deep Tech-adviesbureau is gespecialiseerd in het bouwen van veiligheidskritische AI-systemen voor de gezondheidszorg, de financiële sector en gereguleerde domeinen. Onze architecturen worden gevalideerd aan de hand van gevestigde protocollen met uitgebreide compliancedocumentatie.