Stilgehouden.nl

Experimenten met snelle beeldherkenning op mobiele apparaten

Experimenten met snelle beeldherkenning op mobiele apparaten

Bron

Experimenten met snelle beeldherkenning op mobiele apparaten

Onze reis in het experimenteren met machine vision en beeldherkenning versnelde toen we een applicatie, BooksPlus, ontwikkelden om de ervaring van een lezer te veranderen. BooksPlus gebruikt beeldherkenning om afgedrukte pagina's tot leven te brengen. Een gebruiker kan worden ondergedompeld in rijke en interactieve inhoud door afbeeldingen in het boek te scannen met behulp van de BooksPlus-app.

U kunt bijvoorbeeld een artikel over een dichter scannen en direct naar de audio van de dichter luisteren. Op dezelfde manier kunt u afbeeldingen van historische kunstwerken scannen en een documentaire bekijken.

Toen we met de ontwikkeling begonnen, gebruikten we in de handel verkrijgbare SDK's die heel goed werkten toen we afbeeldingen lokaal probeerden te herkennen. Toch zouden deze mislukken omdat onze bibliotheek met afbeeldingen meer dan een paar honderd afbeeldingen bevatte. Een paar diensten voerden cloudgebaseerde herkenning uit, maar hun prijsstructuur voldeed niet aan onze behoeften.

Daarom hebben we besloten om te experimenteren om onze eigen oplossing voor beeldherkenning te ontwikkelen.

Wat waren de doelstellingen van onze experimenten?

We hebben ons gericht op het bouwen van een oplossing die zou kunnen worden geschaald naar de duizenden afbeeldingen die we moesten herkennen. Ons doel was om hoge prestaties te behalen en tegelijkertijd flexibel te zijn in het matchen van afbeeldingen op het apparaat en in de cloud.

Toen we de BooksPlus-app opschaalden, was het doel om een kosteneffectief resultaat te bouwen. We hebben ervoor gezorgd dat onze eigen inspanningen net zo nauwkeurig waren als de SDK's (in termen van fout-positieven en fout-negatieve overeenkomsten). Onze oplossingen moesten worden geïntegreerd met native iOS- en Android-projecten.

Een toolkit voor beeldherkenning kiezen

De eerste stap van onze reis was om te focussen op een toolkit voor beeldherkenning. We hebben besloten om OpenCV te gebruiken op basis van de volgende factoren:

  • Een rijke verzameling beeldgerelateerde algoritmen: OpenCV heeft een verzameling van meer dan 2500 geoptimaliseerde algoritmen, met veel bijdragen van de academische wereld en de industrie, waardoor het de belangrijkste open-source machine vision-bibliotheek is.
  • Populariteit: OpenCV heeft een geschatte download van meer dan 18 miljoen en heeft een gemeenschap van 47 duizend gebruikers, waardoor er overvloedige technische ondersteuning beschikbaar is.
  • Product met BSD-licentie: Aangezien OpenCV een BSD-licentie heeft, kunnen we het gemakkelijk aanpassen en opnieuw distribueren volgens onze behoeften. Omdat we deze technologie een whitelabel wilden geven, zou OpenCV ons ten goede komen.
  • C-Interface: OpenCV heeft C-interfaces en ondersteuning, wat erg belangrijk voor ons was omdat zowel native iOS- als Android-ondersteuning C; Dit zou ons in staat stellen om één codebase te hebben voor beide platforms.

De uitdagingen in onze reis

We stonden voor tal van uitdagingen bij het ontwikkelen van een efficiënte oplossing voor onze use case. Maar laten we eerst begrijpen hoe beeldherkenning werkt.

Wat is functiedetectie en matching in beeldherkenning?

Functiedetectie en matching is een essentieel onderdeel van elke computervisietoepassing. Het detecteert een object, haalt afbeeldingen op, robotnavigatie, enz.

Beschouw twee afbeeldingen van een enkel object waarop onder enigszins verschillende hoeken is geklikt. Hoe zou je je mobiel laten herkennen dat beide afbeeldingen hetzelfde object bevatten? Feature Detection and Matching komt hier in het spel.

functiedetectie en matching voor beeldherkenning

Een functie is een stukje informatie dat aangeeft of een afbeelding een specifiek patroon bevat of niet. Punten en randen kunnen als kenmerken worden gebruikt. De afbeelding hierboven toont de kenmerkpunten op een afbeelding. Men moet kenmerkpunten zodanig selecteren dat ze onveranderlijk blijven onder veranderingen in verlichting, translatie, schaling en rotatie in het vlak. Het gebruik van invariante kenmerkpunten is van cruciaal belang voor de succesvolle herkenning van vergelijkbare afbeeldingen onder verschillende posities.

De eerste uitdaging: trage prestaties

Toen we voor het eerst begonnen te experimenteren met beeldherkenning met behulp van OpenCV, gebruikten we de aanbevolen ORB-functiebeschrijvingen en FLANN-functievergelijking met 2 naaste buren. Dit gaf ons nauwkeurige resultaten, maar het was extreem traag.

De herkenning op het apparaat werkte goed voor een paar honderd afbeeldingen; de commerciële SDK zou na 150 images crashen, maar dat hebben we kunnen verhogen tot zo'n 350. Voor een grootschalige toepassing was dat echter onvoldoende.

Om een idee te geven van de snelheid van dit mechanisme, overweeg een database van 300 afbeeldingen. Het zou tot 2 seconden duren om een afbeelding te matchen. Met deze snelheid zou een database met duizenden afbeeldingen een paar minuten nodig hebben om een afbeelding te matchen. Voor de beste UX moet de matching in een oogwenk realtime zijn.

Het aantal overeenkomsten dat op verschillende punten van de pijplijn werd gemaakt, moest worden geminimaliseerd om de prestaties te verbeteren. We hadden dus twee keuzes:

  1. Verminder het aantal buren in de buurt, maar we hadden maar 2 buren: zo min mogelijk buren.
  2. Verminder het aantal kenmerken dat we in elke afbeelding hebben gedetecteerd, maar het verminderen van het aantal zou de nauwkeurigheid belemmeren.

We besloten 200 functies per afbeelding te gebruiken , maar het tijdverbruik was nog steeds niet bevredigend.

De tweede uitdaging: lage nauwkeurigheid

Een andere uitdaging die daar stond, was de verminderde nauwkeurigheid bij het matchen van afbeeldingen in boeken met tekst. Deze boeken hadden soms woorden rond de foto's, wat veel sterk geclusterde kenmerken aan de woorden zou toevoegen. Dit verhoogde de ruis en verminderde de nauwkeurigheid.

Over het algemeen veroorzaakte het drukken van het boek meer interferentie dan wat dan ook: de tekst op een pagina creëert veel nutteloze kenmerken, sterk geclusterd op de scherpe randen van de letters, waardoor het ORB-algoritme de basisafbeeldingskenmerken negeert.

De derde uitdaging: native SDK

Nadat de prestatie- en precisie-uitdagingen waren opgelost, was de ultieme uitdaging om de oplossing te verpakken in een bibliotheek die multi-threading ondersteunt en compatibel is met mobiele Android- en iOS-apparaten.

Onze experimenten die tot de oplossing hebben geleid: Experiment 1: het prestatieprobleem oplossen

Het doel van het eerste experiment was om de prestaties te verbeteren. Onze ingenieurs bedachten een oplossing om de prestaties te verbeteren. Ons systeem zou mogelijk elke willekeurige afbeelding kunnen krijgen die miljarden mogelijkheden heeft en we moesten bepalen of deze afbeelding overeenkwam met onze database. Daarom hebben we, in plaats van een directe match te doen, een tweeledige aanpak bedacht: eenvoudige matching en diepgaande matching.

Deel 1: Eenvoudige Matching:

Om te beginnen elimineert het systeem duidelijke niet-overeenkomsten. Dit zijn de afbeeldingen die gemakkelijk kunnen worden geïdentificeerd als niet overeenkomend. Dit kunnen duizenden of zelfs tienduizenden afbeeldingen in onze database zijn. Dit wordt bereikt door een zeer grove scan die slechts 20 functies in aanmerking neemt door het gebruik van een database op het apparaat om te bepalen of de afbeelding die wordt gescand tot onze interessante set behoort.

Deel 2: Diepgaande Matching

Na deel 1 hadden we nog maar heel weinig afbeeldingen met vergelijkbare kenmerken uit een grote dataset – de interessante set. Onze tweede matchingstap wordt uitgevoerd op deze paar afbeeldingen. Alleen op deze interessante afbeeldingen werd een diepgaande match uitgevoerd. Om de bijpassende afbeelding te vinden, worden hier alle 200 kenmerken op elkaar afgestemd. Als gevolg hiervan hebben we het aantal feature-matching loops verminderd dat op elke afbeelding wordt uitgevoerd.

Elk kenmerk werd vergeleken met elk kenmerk van het trainingsbeeld. Dit bracht de overeenkomende lussen omlaag van 40.000 (200×200) naar 400 (20×20). We zouden een lijst krijgen met de best mogelijke overeenkomende afbeeldingen om de werkelijke 200 functies verder te vergelijken.

Met het resultaat waren we meer dan tevreden. De dataset van 300 afbeeldingen die voorheen 2 seconden nodig hadden om overeen te komen met een afbeelding, zou nu slechts 200 milliseconden duren. Dit verbeterde mechanisme was 10x sneller dan het origineel, met vertraging nauwelijks waarneembaar voor het menselijk oog.

Experiment 2: Het schaalprobleem oplossen

Om het systeem op te schalen, werd deel 1 van de matching op het apparaat gedaan en kon deel 2 in de cloud worden gedaan – op deze manier werden alleen afbeeldingen die een potentiële match waren naar de cloud gestuurd. We zouden de 20 functie-vingerafdrukken match-informatie naar de cloud sturen, samen met de extra gedetecteerde afbeeldingsfuncties. Met een grote database met interessante afbeeldingen zou de cloud kunnen schalen.

Deze methode stelde ons in staat om een grote database (met minder functies) op het apparaat te hebben om duidelijke niet-overeenkomsten te elimineren. De geheugenvereisten zijn verminderd en we hebben crashes geëlimineerd die werden veroorzaakt door systeembronnenbeperkingen, wat een probleem was met de commerciële SDK. Omdat de echte matching in de cloud plaatsvond, konden we schalen door de kosten van cloudcomputing te verlagen door geen cloud-CPU-cycling te gebruiken voor duidelijke non-matches.

Experiment 3: Verbetering van de nauwkeurigheid

Nu we betere prestatieresultaten hebben, moet de praktische nauwkeurigheid van het matchingproces worden verbeterd. Zoals eerder vermeld, was de hoeveelheid ruis enorm bij het scannen van een foto in de echte wereld.

Onze eerste benadering was om het CANNY-randdetectiealgoritme te gebruiken om de vierkante of rechthoekige randen van de afbeelding te vinden en de rest van de gegevens eruit te knippen, maar de resultaten waren niet betrouwbaar. We observeerden twee problemen die nog steeds overeind stonden. De eerste was dat de afbeeldingen soms bijschriften bevatten die deel zouden uitmaken van de algemene afbeeldingsrechthoek. Het tweede probleem was dat de afbeeldingen soms esthetisch in verschillende vormen werden geplaatst, zoals cirkels of ovalen. We moesten een simpele oplossing bedenken.

Ten slotte analyseerden we de afbeeldingen in 16 grijstinten en probeerden we gebieden te vinden die scheef waren in de richting van slechts 2 tot 3 grijstinten. Deze methode vond nauwkeurig tekstgebieden in de buitenste regionen van een afbeelding. Na het vinden van deze delen, zou het vervagen ervan ervoor zorgen dat ze inactief zijn en het herkenningsmechanisme verstoren.

Experiment 4: Een native SDK voor mobiel implementeren

We zijn er snel in geslaagd om de nauwkeurigheid en efficiëntie van het functiedetectie- en matchingsysteem bij het herkennen van afbeeldingen te verbeteren. De laatste stap was het implementeren van een SDK die op zowel iOS- als Android-apparaten zou kunnen werken, zoals het zou zijn geweest als we ze in native SDK's hadden geïmplementeerd. In ons voordeel ondersteunen zowel Android als iOS het gebruik van C-bibliotheken in hun native SDK's. Daarom werd een beeldherkenningsbibliotheek geschreven in C en werden twee SDK's geproduceerd met dezelfde codebase.

Elk mobiel apparaat heeft verschillende bronnen beschikbaar. De duurdere mobiele apparaten hebben meerdere kernen om meerdere taken tegelijkertijd uit te voeren. We hebben een bibliotheek met meerdere threads gemaakt met een configureerbaar aantal threads. De bibliotheek zou tijdens runtime automatisch het aantal threads configureren volgens het optimale aantal van het mobiele apparaat.

Gevolgtrekking

Samenvattend hebben we een grootschalige toepassing voor beeldherkenning ontwikkeld (gebruikt in meerdere velden, waaronder Augmented Reality) door de nauwkeurigheid en efficiëntie van de machinevisie te verbeteren: functiedetectie en matching. De reeds bestaande oplossingen waren traag en onze use case produceerde ruis die de nauwkeurigheid drastisch verminderde. We wilden in een oogwenk nauwkeurige matchresultaten.

Daarom hebben we een paar tests uitgevoerd om de prestaties en nauwkeurigheid van het mechanisme te verbeteren. Dit verminderde het aantal feature matching loops met 90%, wat resulteerde in een 10x snellere match . Toen we eenmaal de gewenste prestaties hadden, moesten we de nauwkeurigheid verbeteren door de ruis rond de tekst in de afbeeldingen te verminderen. We konden dit bereiken door de tekst te vervagen na analyse van de afbeelding in 16 verschillende grijstinten. Ten slotte is alles gecompileerd in de C-taalbibliotheek die kan worden gebruikt met iOS en Android.

Het berichtExperimenten met snelle beeldherkenning op mobiele apparaten verscheen eerst op ReadWrite .

Bart Beekveld

Meta snijdt aanwervingsplannen terwijl het zich voorbereidt op 'ernstige tijden' In een wekelijkse Q&A-sessie voor medewerkers zei Meta-CEO Mark Zuckerberg naar verluidt dat het bedrijf "een van de ergste recessies in de recente geschiedenis doormaakt". Volgens Reuters heeft de uitvoerende macht onthuld dat Meta zijn streefaantal voor nieuwe ingenieurs dit jaar met ongeveer 30 procent heeft verlaagd. Meta zei eerder dat het zijn aanwervingsplannen vertraagt vanwege zwakke omzetprognoses, maar nu heeft Zuckerberg meer details bekendgemaakt met exacte cijfers. Blijkbaar zal Meta, van plannen om dit jaar 10.000 nieuwe ingenieurs in dienst te nemen, slechts tussen de 6.000 en 7.000 aannemen. Verder zei de CEO dat Meta de verwachtingen van de huidige werknemers verhoogt en hen agressievere doelen geeft, zodat ze zelf kunnen beslissen of het bedrijf niet voor hen is. "[S]elf-selectie is OK met mij," zei hij. In een memo aan werknemers heeft Chief Product Officer Chris Cox benadrukt dat het bedrijf "zich in ernstige tijden bevindt en de tegenwind hevig is". Hij somde ook de zes investeringsprioriteiten van het bedrijf op voor de tweede helft van het jaar, te beginnen met de metaverse initiatieven Avatars en de virtuele wereld Horizon Worlds. Volgens de memo, volledig gepubliceerd door The Verge, streeft Meta er ook naar om zo snel mogelijk geld te verdienen met Reels. De tijd die aan Reels wordt besteed, is sinds vorig jaar wereldwijd meer dan verdubbeld, zo staat in de memo, waarbij 80 procent van die groei afkomstig is van Facebook. Cox noemde Reels, het korte videoformaat gemaakt als antwoord op TikTok, een "lichtpuntje" voor het bedrijf in de eerste helft van 2022. Meta is van plan de ervaring te blijven verbeteren, inclusief het aanbrengen van wijzigingen in het startscherm op Instagram en Facebook om de video's meer native op te nemen. Daarnaast is Meta van plan zich in de tweede helft van het jaar te concentreren op haar AI-initiatieven, evenals op WhatsApp en Messenger. Het is van plan WhatApp-gemeenschappen te testen voordat de functie eind 2022 over de hele wereld wordt gelanceerd. Het bedrijf gaat ook Instagram Creator-kanalen en koppelbare chats ontwikkelen, die in de komende maanden zullen worden uitgerold. Cox schreef in de memo: "Ik moet onderstrepen dat we ons hier in ernstige tijden bevinden en dat de tegenwind hevig is. We moeten feilloos presteren in een omgeving van tragere groei, waar teams geen enorme toestroom van nieuwe ingenieurs en budgetten mogen verwachten. We moeten meedogenlozer prioriteiten stellen, nadenken over het meten en begrijpen van wat impact drijft, investeren in de efficiëntie en snelheid van ontwikkelaars binnen het bedrijf, en slankere, gemenere, betere opwindende teams runnen."

Meta snijdt aanwervingsplannen terwijl het zich voorbereidt op 'ernstige tijden' In een wekelijkse Q&A-sessie voor medewerkers zei Meta-CEO Mark Zuckerberg naar verluidt dat het bedrijf "een van de ergste recessies in de recente geschiedenis doormaakt". Volgens Reuters heeft de uitvoerende macht onthuld dat Meta zijn streefaantal voor nieuwe ingenieurs dit jaar met ongeveer 30 procent heeft verlaagd. Meta zei eerder dat het zijn aanwervingsplannen vertraagt vanwege zwakke omzetprognoses, maar nu heeft Zuckerberg meer details bekendgemaakt met exacte cijfers. Blijkbaar zal Meta, van plannen om dit jaar 10.000 nieuwe ingenieurs in dienst te nemen, slechts tussen de 6.000 en 7.000 aannemen. Verder zei de CEO dat Meta de verwachtingen van de huidige werknemers verhoogt en hen agressievere doelen geeft, zodat ze zelf kunnen beslissen of het bedrijf niet voor hen is. "[S]elf-selectie is OK met mij," zei hij. In een memo aan werknemers heeft Chief Product Officer Chris Cox benadrukt dat het bedrijf "zich in ernstige tijden bevindt en de tegenwind hevig is". Hij somde ook de zes investeringsprioriteiten van het bedrijf op voor de tweede helft van het jaar, te beginnen met de metaverse initiatieven Avatars en de virtuele wereld Horizon Worlds. Volgens de memo, volledig gepubliceerd door The Verge, streeft Meta er ook naar om zo snel mogelijk geld te verdienen met Reels. De tijd die aan Reels wordt besteed, is sinds vorig jaar wereldwijd meer dan verdubbeld, zo staat in de memo, waarbij 80 procent van die groei afkomstig is van Facebook. Cox noemde Reels, het korte videoformaat gemaakt als antwoord op TikTok, een "lichtpuntje" voor het bedrijf in de eerste helft van 2022. Meta is van plan de ervaring te blijven verbeteren, inclusief het aanbrengen van wijzigingen in het startscherm op Instagram en Facebook om de video's meer native op te nemen. Daarnaast is Meta van plan zich in de tweede helft van het jaar te concentreren op haar AI-initiatieven, evenals op WhatsApp en Messenger. Het is van plan WhatApp-gemeenschappen te testen voordat de functie eind 2022 over de hele wereld wordt gelanceerd. Het bedrijf gaat ook Instagram Creator-kanalen en koppelbare chats ontwikkelen, die in de komende maanden zullen worden uitgerold. Cox schreef in de memo:
"Ik moet onderstrepen dat we ons hier in ernstige tijden bevinden en dat de tegenwind hevig is. We moeten feilloos presteren in een omgeving van tragere groei, waar teams geen enorme toestroom van nieuwe ingenieurs en budgetten mogen verwachten. We moeten meedogenlozer prioriteiten stellen, nadenken over het meten en begrijpen van wat impact drijft, investeren in de efficiëntie en snelheid van ontwikkelaars binnen het bedrijf, en slankere, gemenere, betere opwindende teams runnen."