You only look once (YOLO) op Azure Machine Learning

De komende tijd publiceren we een aantal blogs omtrent AI op Azure. Deze serie van blogs geeft inspiratie en tips over hoe je hiermee succesvol kunt starten. In dit blog beschrijven hoe we een algoritme voor beeldherkenning op Azure hebben laten draaien om verschillende soorten vuil te detecteren. Ontdek alles over Azure Machine Learning en de mogelijkheden. Houd onze site in de gaten voor meer inspirerende verhalen en mogelijkheden om deze technologie in te zetten.

Object herkenning met YOLO

Wellicht heb je er wel eens van gehoord: YOLO! In deze context echter een acroniem voor You only LOOK once. Het is een object detectie algoritme, gemaakt om heel snel objecten in afbeeldingen te herkennen. Het is vele malen sneller dan vorige neurale netwerken, zonder in te leveren op kwaliteit. Omdat het algoritme wordt getraind op volledige afbeeldingen, neemt het daarnaast ook de context mee van de objecten in de afbeelding. Hierdoor herkent het model minder snel ‘per ongeluk’ objecten in de achtergrond die er niet zijn en hoef je ook minder complexe pipelines te bouwen om de juiste afbeeldingen naar het model te sturen. Dit is natuurlijk heel fijn voor veel data scientists en engineers.

Blog Vincent afbeelding 1 YOLO Azure Machine Learning

Het YOLO-model. Bron: https://arxiv.org/pdf/1506.02640v5.pdf  (origineel paper)

Azure Machine Learning

Om het proces nog eenvoudiger te maken is er daarnaast Azure Machine Learning (ML). Waar dit een aantal jaren geleden begon als een drag-and-drop interface om taken als het opsplitsen van een dataset of een regressieanalyse voor iedereen toegankelijk te maken, was dit niet helemaal waar data analisten en scientists op zaten te wachten. In het huidige Azure Machine Learning zit deze drag-and-drop functie nog steeds, maar het biedt daarnaast ook een platform waarop data scientists kunnen samenwerken en snel benodigde resources kunnen aanmaken. Wanneer data professionals samenwerken kunnen zij eenvoudig VM’s en clusters gebruiken voor het trainen van een model, maar ook de performance van een model bijhouden en deze als endpoint publiceren in een of meerdere containers (Azure Container Instance of Kubernetes).

Casus: Vuilherkenning

Verschillende gemeentes zijn aan het experimenteren hoe objectherkenning kan helpen bij het schoner houden van een stad. Wanneer bijvoorbeeld vuil op straat kan worden gedetecteerd, kan op basis van die informatie een efficiëntere route worden bepaald voor de veegwagens die het vuil moeten opvegen. De gemeente die wij hierin ondersteunden liep tegen de beperkingen aan van hun lokale hardware – het trainen duurde in sommige gevallen meer dan acht uur. Zij wilden gebruik maken van de kracht van cloud computing om zo eenvoudig op te schalen waar nodig.

Bestaande scripts op Azure Machine Learning

In eerste instantie hebben we een door de gemeente getraind model gebruikt om als endpoint te deployen. Voor we dit konden doen hebben we drie dingen nodig:

  • het model
  • een scoring script
  • omgevingsvariabelen

Het model is gebouwd op Tensorflow en is eenvoudig lokaal op te slaan. Dit creëert een folder met een weights-file voor het neurale netwerk, en een classes-file met de objecten die het model herkent. Deze folder kan in z’n geheel worden geüpload naar Azure ML. Vervolgens hebben we een scoring script gemaakt waarin we aangeven wat er moet gebeuren wanneer er iets naar de endpoint wordt gestuurd. Ten eerste zal het model moeten worden geladen welke je in een vorige stap hebt opgeslagen. Daarna wordt datgene wat er naar het endpoint is gestuurd door het model gehaald, waarna het model met een output komt, ook wel ‘scoring’ genoemd. Vervolgens kan je met die output doen wat je wil en daarna teruggeven als response. Hierbij is het aan te raden goed te overdenken wat je als response wilt teruggeven. Wanneer je alleen de het resultaat van het geanalyseerde plaatje nodig hebt, scheelt het weer in de data overdracht wanneer je ook alleen gedetecteerde objecten (classes) teruggeeft als JSON, in plaats van de hele afbeelding.

Vincent Azure Machine Learning YOLO

Output van YOLO model met bounding boxes rondom gedetecteerde objecten.

Deployment

Nadat we het model hebben geüpload en een scoring script hebben, kunnen we overgaan op deployment. Dit kan als een container instance of als een Kubernetes cluster. Kubernetes is gemaakt om met grote hoeveelheden data om te gaan. Wanneer je niet al te veel data naar het endpoint stuurt, is een container instance prima. Het proces is grotendeels gelijk: je maakt een image met daarin het scoring script, je definieert de omgevingsvariabelen en je kiest de configuratie van de container. De omgevingsvariabelen bevatten alle conda en pip packages die nodig zijn om het scoring script te draaien. Denk hierbij bijvoorbeeld aan de numpy library of aan Tensorflow; alles wat je ook zelf hebt moeten installeren op je computer voor je het script kon draaien. Het handigste is om dit in een YAML-bestand te hebben en deze vervolgens te uploaden. Voor de configuratie van je endpoint kan je denken aan autorisatie-optie, geheugen,  CPU of GPU gebruik. Dan is er een URI beschikbaar zijn die je, samen met de naam van het endpoint, nodig hebt voor het aanroepen. Goed om te weten is dat wanneer je voor een kubernetes cluster kiest, je er wel eerst een moet aanmaken. In tegenstelling tot een container instance wordt deze niet automatisch aangemaakt wanneer je een model wilt deployen vanuit Azure Machine Learning.

Aanroepen endpoint

Wanneer je hier bent aangekomen kan de enpoint worden getest door er bijvoorbeeld een JSON naartoe te sturen. Dit kan eenvoudig met de Request-library voor Python (bij gebruik van de SDK) waarmee je HTTP request kunt sturen. Het kan zijn dat je de eerste keren wat foutmeldingen krijgt. Omdat je niet altijd evenveel feedback krijgt over wat er niet goed gaat, is het handig met try en except statements te werken.

Conclusie

Azure ML biedt een aantal handige tools om implementatie te vereenvoudigen en gebruik te maken van de rekenkracht van cloud computing. De overstap van lokaal naar de cloud vergt echter wel wat kennis. Hier nog een aantal tips. Wanneer je net begint met Azure Machine Learning kun je eerst het hele proces in de Azure ML Designer uitvoeren. Hierdoor zie je snel wat er allemaal nodig is en krijg je wellicht een beter gevoel bij wat er allemaal gebeurd. Het is echter aan te raden de SDK te gebruiken. Hierin heb je veel meer mogelijkheden en daarnaast kun je alles eenvoudig reproduceren wanneer nodig. Test je scoring script eerst lokaal, dit maakt debuggen eenvoudiger en je bent minder tijd kwijt met het wachten totdat alles is geüpload.

Wil je meer weten over Azure Machine Learning, objectherkenning of over onze ervaringen met deze case? Neem dan onder aan dit blog contact met ons op. Wij helpen jouw organisatie graag verder met de mogelijkheden die deze technologie ons biedt.

Vincent Kieboom
Share
Meer blogs over data en Machine Learning?