Gefrustreerde man (Afbeelding door Gerd Altmann van Pixabay)
Deze blogpost is oorspronkelijk gepubliceerd op de website van Xailient. Het is hier herdrukt met toestemming van Xailient.
Ben je ooit zo enthousiast geweest na het lezen van een how-to-tutorial of een github-leesmij-bestand, om er daarna achter te komen dat het niet zo eenvoudig is als ze zeggen dat het zou zijn?
Ik heb talloze van dergelijke gevallen gehad en het is een zeldzaam moment dat ik ontdek dat een oplossing die ik heb gedownload of een tutorial die ik volgde gewoon werkte. Dat moment toch! Als je hiermee resoneert en je eigen verhalen hebt om te delen, hoor ik het graag.
Voor nu zal ik mijn worstelverhaal delen over het uitvoeren van objectdetectie op een Raspberry Pi.
Voor nu zal ik mijn worstelverhaal delen over het uitvoeren van objectdetectie op een Raspberry Pi.
Ik hou ervan om nieuwe technologieën uit te proberen en het te zien werken en pas een jaar geleden maakte ik kennis met Raspberry Pi, een klein, betaalbaar apparaat, waar je camera's en andere sensoren aan kunt bevestigen en je python-code kunt inzetten en zien het werkt meteen. Hoe cool is dat? Ik bestelde er meteen een voor mezelf, met een pi-camera, een Raspberry Pi Sense HAT en met een kleine behuizing van de website van Raspberry Pi Australia en kon niet wachten om ermee te spelen.
Toen ik de volgende week de Raspberry Pi 3 Ultimate Kit kreeg, had ik mijn objectdetectiepython-script klaar om te kopiëren en in de Pi uit te voeren. Ik opende het pakket, haalde de Pi en de Pi-camera eruit, monteerde het, stopte het in de zwarte behuizing en verbond het met de stroombron. Ik had geen muis of toetsenbord, ik had een tv en een HDMI-kabel die bij de Raspberry Pi-kit werden geleverd, en dus was mijn eerste worsteling om hem op internet aan te sluiten. Mijn tweede was om mijn python-script naar de Pi te kopiëren. Een paar uur onderzoek en het uitproberen van verschillende dingen die mensen online moesten zeggen, kreeg mijn Pi verbonden met internet en met VNC-viewer kon ik er nu op afstand verbinding mee maken vanaf mijn laptop en mijn python-script kopiëren.
Vooraf getrainde AI-modellen beschikbaar om hier gratis te downloaden
Als je moeite hebt om je Pi met internet te verbinden via wifi en er op afstand toegang toe te krijgen, gebruik dan deze tutorial “Directe verbinding maken met je Raspberry Pi ”, het is erg handig, eenvoudig te volgen en nog belangrijker, het werkt!
Raspberry Pis (Foto door Jeff Loucks op Unsplash)
Ik zou op en neer gesprongen hebben als mijn programma meteen had gewerkt, waarschijnlijk vanaf mijn balkon zou hebben geschreeuwd en iedereen zou hebben verteld dat het werkte. Helaas werkte het niet. Het klaagde over ontbrekende bibliotheken, en zelfs de een na de ander aan te pakken, leek het nooit te stoppen. Op de een of andere manier heb ik zelfs de pip-installatie in de Pi beschadigd. Ik denk dat dit is waar veel andere ontwikkelaars ook mee te maken hebben, ontbrekende afhankelijkheid, versie niet ondersteund, incompatibel platform en de lijst is eindeloos.
Fout (Afbeelding door bartekhdd van Pixabay
Zou het niet fijn zijn als er een script of een programma was dat ik kon uitvoeren en dat alle vereiste bibliotheken en afhankelijkheden voor mij zou installeren.
Moet het zo moeilijk zijn?
De volgende dag lukte het me eindelijk om de objectdetectiecode werkend te krijgen op een Raspberry Pi die verschillende objecten kon detecteren en er een kader omheen kon tekenen. Ik gebruikte YOLOv3, dat destijds een ultramodern objectdetectiemodel was, extreem snel en nauwkeurig. Ik was gelukkig. Jeej! Eindelijk!
Ik heb gemerkt dat de uitvoervideo, met het selectiekader, achterblijft, bijvoorbeeld wanneer je een slechte internetverbinding hebt en je probeert een video op YouTube te bekijken. Het was slecht! Ik was opgewonden dat het werkte, maar was tegelijkertijd een beetje teleurgesteld dat de snelste objectdetectie niet snel genoeg was op de Pi. Ik bedoel, het zou niet eens een goede demo zijn om het aan mijn ouders of vrienden te laten zien.
Dus mijn volgende worsteling was om het sneller te laten werken op de Pi.
blokquote>
Na heel veel onderzoek kwam ik erachter dat ik niet de enige was die ermee worstelde en dat het geen gemakkelijk probleem was om op te lossen. Het was zelfs een van de uitdagingen waar de meeste ontwikkelaars het over hadden om objectdetectie op een edge-apparaat uit te voeren.
“… we waren in staat om tot 0,9 frames te krijgen per seconde, wat niet snel genoeg is om real-time detectie te vormen. Dat gezegd hebbende, gezien de beperkte verwerkingskracht van de Pi, is 0,9 frames per seconde voor sommige toepassingen nog steeds redelijk.” — Computer vision-expert en blogger Adrian Rosebrock, vermeldt in een van zijn blogs.
Er waren enkele modellen zoals SqueezeNet en MobileNetSSD waar ontwikkelaars het over hadden die waren geoptimaliseerd voor Raspberry Pi en die iets betere resultaten konden krijgen, maar nogmaals, daar was een leercurve voor. Ik was zo gefrustreerd dat ik zoveel moeite moest doen om een klein experiment te doen dat ik wilde. Als snelheid het probleem was, hoe kan ik dan verwachten dat ik dit kan gebruiken voor een realtime oplossing? Er kunnen gevallen zijn waarin het geen frames in realtime hoeft te verwerken, 1 frame per 10-20 seconden was acceptabel, maar hoe zit het met oplossingen die objecten vaker moeten detecteren.
Uiteindelijk heb ik uiteindelijk de darknet-implementatie van YOLOv3 gebruikten met een vooraf getraind Tiny YOLOv3-model. De inferentiesnelheid was beter dan wat ik had, maar ik was niet tevreden met de algehele prestaties van de oplossing. Ik had veel vragen en zorgen.
Waarom neemt het zoveel ruimte in beslag? Ik kan geen andere code parallel uitvoeren.
Waarom wordt de Pi zo warm? Het voelt alsof hij elk moment kan ontploffen.
Mijn Pi loopt zo vaak vast en ik moet hem opnieuw opstarten. Ik heb geen idee waarom het gebeurt of hoe ik het kan oplossen.
Waarom herstart deze Pi in godsnaam steeds opnieuw?
Mijn zoektocht naar een sneller object detectie die beter presteerde dan YOLOv3 op een Raspberry Pi ging door tot de dag dat ik ontdekte dat Xailient, een startup in Sydney, beter presteerde dan YOLOv3 en Tiny YOLOv3 en een nieuwe benchmark had neergezet. Het was geweldig nieuws voor mij en ik wist dat ik op de een of andere manier hun objectdetectiemodel in handen moest krijgen en het moest uitproberen. Drie maanden later was ik hier bij Xailient (wat een verhaal voor een andere keer is) en experimenteerde ik met de huidige state-of-the-art real-time objectdetectie op de Pi.
Vooraf getrainde AI modellen zijn hier gratis te downloaden!
Sabina Pokhrel
Customer Success AI Engineer, Xailient