
NIEUWS / GEGEVENSWETENSCHAP
Stelt u zich eens voor dat u de directeur bent van een nieuwe high-tech start-up, die een gloednieuw product (laten we zeggen een nieuw IoT-apparaat) op de markt wil brengen. U hebt aan veel conferenties, tentoonstellingen en demo's deelgenomen om vooraf over uw product te communiceren en de bekendheid ervan te vergroten. Het directe effect dat u verwacht is dat de verkoop van uw product, zodra het op de markt komt, hoog genoeg zal zijn om aan uw doelstellingen te voldoen.
Stelt u zich eens voor dat u de directeur bent van een nieuwe high-tech start-up, die een gloednieuw product (laten we zeggen een nieuw IoT-apparaat) op de markt wil brengen. U hebt aan veel conferenties, tentoonstellingen en demo's deelgenomen om vooraf over uw product te communiceren en de bekendheid ervan te vergroten. Het directe effect dat u verwacht is dat de verkoop van uw product, zodra het op de markt komt, hoog genoeg zal zijn om aan uw doelstellingen te voldoen.
Hier is één probleem: u hebt geen middelen om de vraag naar uw product te anticiperen en in te schatten.
Een eenvoudig feit dat u kunt controleren is hoeveel mensen er op internet over uw product praten. U kunt een kijkje nemen op de belangrijkste sociale netwerken (Facebook, Twitter, Instagram...) en kwantificeren hoeveel berichten uw product vermelden. Dit zou u een idee geven van de omvang van de verkoop die u kunt verwachten.
U hebt twee opties om een product in een sociaal bericht te herkennen. U kunt de tekst analyseren door Text Mining uit te voeren of u kunt Beeldherkenning uitvoeren op de afbeelding van de post. Er is echter één probleem met het analyseren van de tekst: wanneer een product wordt uitgebracht, is de kans klein dat iedereen de naam ervan kent en het meteen na de releasedatum vermeldt. Beeldherkenning is daarom de voorkeursoplossing. Om een product op afbeeldingen te herkennen (als u meerdere producten moet herkennen), moet u het volgende uitvoeren Objectdetectie en dat is waar Tensorflow om de hoek komt kijken.
Wat is Tensorflow?
Tensorflow is een open-source wiskundebibliotheek, die stabiele Python en C API's biedt, gebruikt voor verschillende data manipulatietaken. Het is zeer bekend en wordt gebruikt voor Machine Learning- en Deep Learning-toepassingen, zoals Neurale Netwerken. De use cases waarvoor Tensorflow het meest bekend is, zijn beeldherkenning, natuurlijke taalverwerking en spraak-naar-tekst analyse.
Ons specifieke gebruik is Objectdetectie. U kunt Tensorflow op verschillende niveaus gebruiken:
- Niveau 1: Gebruik een kant-en-klaar voorgetraind model en pas dit direct toe op uw data om de producten te herkennen. Deze methode is het minst complex en het snelst, omdat u geen model hoeft te bouwen of te trainen.
- Niveau 2: Train een model op uw eigen data, zodat het model kan leren en het bereik van uw producten nauwkeurig kent. Dit niveau vereist het trainen van een model op data die u vooraf gelabeld hebt. Dit kost meer tijd, maar levert relevantere resultaten op omdat het model de exacte productreferenties herkent.
- Niveau 3: Maak uw eigen model vanaf nul. In dit niveau traint u niet alleen een model, maar bouwt u het vanaf het begin op. Het kan gaan om het afstemmen van parameters op een bestaand model, maar ook om het ontwikkelen van een nieuwe neurale netwerkarchitectuur. Het is meer bedoeld voor onderzoeksdoeleinden, omdat het een tijdrovende aanpak is.
Hieronder beschrijven we elk gebruiksniveau voor Tensorflow in meer detail.
Niveau 1 - Een voorgetraind model gebruiken
Het eerste basisgebruik is het gebruik van een model dat al getraind is op een gelabelde dataset. Deze optie moet gekozen worden wanneer de data waarop u het model wilt toepassen erg lijkt op de getrainde data. Bijvoorbeeld wanneer u algemene objecten zoals schoenen, smartphones, tassen enzovoort wilt herkennen. Deze aanpak is dus niet geschikt als u verwacht een merk en een precies model uit uw productassortiment te herkennen.
Gewoonlijk worden dergelijke modellen getraind op standaard datasets, zoals de Coco dataset (github link hier) of ImageNet dataset (link hier). Deze datasets bestaan uit enorme verzamelingen afbeeldingen die al gelabeld zijn en klaar voor gebruik voor modeltraining. Het wordt veel gebruikt om beeldclassificatie en objectdetectiemodellen te trainen, die gebruikt kunnen worden als voorgetrainde modellen voor algemene productherkenning.
Nu we meer weten over de data, geven we een kort overzicht van het voorgetrainde model dat u zou kunnen gebruiken. Een van de meest gebruikte bronnen om voorgetrainde modellen te vinden is Keras. Het heeft een module waarin u verschillende soorten beeldclassificatiemodellen kunt vinden (VGG16, ResNet50, IncetopnV3...), die getraind zijn op standaard datasets. ImageNet voor deze gevallen. De workflow is dan eenvoudig: u laadt het model en past het direct toe op uw afbeeldingen om de kenmerken te extraheren. U kunt bijvoorbeeld direct classificeren welke van uw afbeeldingen horloges, oortelefoons, headsets bevatten... Er is nog een ander voorbeeld dat meer specifiek is voor objectdetectie en dat werd ontwikkeld door het Tensorflow-team van Google. Zij bouwden een reeks voorgetrainde modellen (een ervan is gebaseerd op de Coco dataset), die direct op nieuwe afbeeldingen kunnen worden gebruikt voor objectdetectie (github link hier). Deze modellen kunnen ook gebruikt worden als modellen om te hertrainen op uw eigen data, wat we zullen behandelen op niveau 2.
Niveau 2 - Zelf een model trainen data
Als u werkt met een dataset die nogal verschilt van de oorspronkelijke dataset die gebruikt is voor het trainen van het model, dan werkt het niet om deze gewoon toe te passen. U zult uw eigen trainings dataset moeten bouwen en het model daarop opnieuw moeten trainen.
De meeste beeldherkenningsproblemen vereisen het gebruik van Convolutionele Neurale Netwerken (CNN). De eerste lagen (convolutielagen) extraheren patronen en kenmerken uit het beeld. Deze kenmerken worden vervolgens doorgegeven aan de laatste lagen (volledig verbonden lagen) voor voorspelling. Er zijn twee manieren om een model op uw eigen data opnieuw te trainen: Transfert Leren en Fijnafstemming.
Transfert Leren bestaat uit het gebruik van de voorgetrainde convolutielagen van het originele model en het trainen van de volledig verbonden lagen op de kenmerken die uit onze set afbeeldingen zijn gehaald. Het idee hier is om de kennis die is opgedaan tijdens het trainen van het model op de originele dataset te gebruiken voor ons probleem. Deze techniek is efficiënt in gevallen waarin de twee datasets vergelijkbaar zijn, bijvoorbeeld een model dat getraind is om auto's te herkennen, kan opnieuw getraind worden om vrachtwagens te herkennen. De reden hiervoor is dat afbeeldingen van auto's vergelijkbaar zijn met afbeeldingen van vrachtwagens en dat de patronen die door de convolutielagen uit deze afbeeldingen worden geëxtraheerd waarschijnlijk vergelijkbaar zijn. De onderstaande figuur illustreert het proces:
Als uw dataset sterk afwijkt van de originele dataset, moet u het volgende uitvoeren Fijnafstemming. In tegenstelling tot Transfer Learning, wordt hier het hele netwerk (of op zijn minst de meeste convolutielagen) opnieuw getraind. De convolutielagen worden dus getraind op uw afbeeldingen en kunnen kenmerken extraheren die volledig zijn aangepast aan uw afbeeldingen. Het voordeel van Fine Tuning is dat het model volledig wordt getraind op de dataset en waarschijnlijk betere prestaties zal leveren, maar het is ook tijdrovender en rekenkundig duurder. De onderstaande afbeelding illustreert het proces:
Om een dataset voor objectdetectie te maken, moet u veel trainingsafbeeldingen verzamelen, maar "Hoeveel precies?" zou men zich kunnen afvragen. Sommigen zeggen honderden, anderen zeggen duizenden of zelfs honderdduizenden, maar er is eigenlijk geen ground truth. Het wordt echter aanbevolen om meer dan honderd afbeeldingen te hebben voor elke klasse die u door uw model wilt laten herkennen.
Zodra u uw afbeeldingen hebt verzameld, moet u ze labelen. Het labelproces bestaat uit het maken van JSON-bestanden met de coördinaten en de klasse van het object dat het model op elk beeld moet detecteren en herkennen.. Dit deel wordt meestal handmatig gedaan, maar het kan gedeeltelijk geautomatiseerd worden door code. Er zijn verschillende open-source tools ontwikkeld om het handmatig labelen te versnellen, en één daarvan is de BBox-Label-Tool op Github. Het hulpprogramma bestaat uit een gebruikersinterface, waarin alle afbeeldingen worden geladen en waarmee de gebruiker met 2 klikken een afbeelding kan labelen:
De gebruiker hoeft alleen maar op de linkerbovenhoek en de rechterbenedenhoek van het object te klikken, waarna het gereedschap een rechthoek rond de afbeelding tekent en de coördinaten in een bestand opslaat. Dit brengt de tijd voor het labelen (afgezien van het toevoegen van de objectklasse) terug tot 3 seconden. Het uiteindelijke JSON-bestand, na het toevoegen van de objectklasse, zou er als volgt uit moeten zien:
De laatste stap is het converteren van de bestanden naar een enkel bestand, speciaal geformatteerd voor Tensorflow. Er wordt een eenvoudige tutorial gegeven hier.
Zodra u uw dataset hebt gemaakt, kunt u beginnen met het trainen van uw model, maar eerst moet u een voorgetraind model vinden! Recent onderzoek naar deep learning heeft geleid tot de ontwikkeling van verschillende neurale netwerkgebaseerde modellen voor objectdetectie. Een bekende architectuur is de Faster R-CNN gebaseerd op Region Proposal Networks (RPN). Faster R-CNN heeft twee netwerken: een RPN voor het genereren van regiovoorstellen en een netwerk dat deze voorstellen gebruikt om objecten te detecteren. Het Tensorflow-team van Google heeft een reeks deep learning-modellen ontwikkeld die gemakkelijk bruikbaar zijn voor data-wetenschappers en één daarvan is een objectdetectiemodel dat gebaseerd is op Faster R-CNN. Het model wordt aangeboden op Tensorflow's Github pagina met een handleiding. De handleiding toont de stappen om het model opnieuw te trainen (met Transfer Learning) en te implementeren op Google ML Engine.
Niveau 3 - Maak uw eigen model vanaf nul
Als u de ziel van een onderzoeker hebt of u hebt een zeer specifiek computervisieprobleem, dan kunt u uw eigen model vanaf nul maken. In dit geval hebt u drie opties :
- Een beeldclassificatiemodel bouwen met CNN's
De eenvoudigste oplossing voor productherkenning is het classificeren van afbeeldingen met de architectuur van Convolutionele Neurale Netwerken. Deze modellen nemen een afbeelding als invoer en voeren een label uit dat het object aangeeft. Ze moeten dus alleen worden gebruikt als uw afbeeldingen slechts één object bevatten dat u wilt detecteren. Het gebruik van een beeldclassificatiemodel voor objectdetectie zal echter waarschijnlijk slechte prestaties leveren, simpelweg vanwege de ruis rond het object in de afbeelding. Beeldclassificatiemodellen zijn ontworpen om kenmerken uit het hele beeld te halen en het beeld als geheel te classificeren. Het probleem hierbij is dat twee verschillende afbeeldingen, bijvoorbeeld een afbeelding van een kamer en een afbeelding van een straat, die beide het gewenste object bevatten, hetzelfde label kunnen hebben. Dit maakt de classificatietaak moeilijk. Hier zijn twee handleidingen over hoe u CNN's vanaf nul kunt opbouwen.
- Een objectdetectiemodel bouwen
Zoals eerder gezegd, zijn er recentelijk objectdetectiemodellen opgedoken met het onderzoek naar Deep Learning. De Faster R-CNN-architectuur werd eind 2015 geïntroduceerd als een iteratie van de oudere Fast R-CNN-architectuur. Het voert :
a) een lijst van begrenzende boxen
b) een label toegewezen aan elk begrenzingskader
c) een waarschijnlijkheid voor elk label en bounding box
Eerst wordt een voorgetrainde CNN op de afbeelding toegepast, waardoor een kenmerkenkaart wordt gemaakt. Deze kenmerken worden vervolgens doorgegeven aan een RPN om kandidaatregio's (bounding boxes) te vinden die relevante objecten bevatten. De laatste stap bestaat uit het gebruiken van de kenmerken die door de CNN en de bounding boxes zijn berekend om de inhoud van de bounding boxes te classificeren en de coördinaten ervan aan te passen (zodat ze beter bij het object passen). Dit gebeurt via de RCNN-module. De onderstaande afbeelding illustreert de architectuur:
Meer details vindt u in deze handleiding, en er is open-source werk over dit onderwerp beschikbaar hier.
- Een hybride model bouwen met objectdetectiearchitecturen en CNN's
Als u uw prestaties wilt verbeteren, kunt u de hybride aanpak overwegen. Het is mogelijk dat een objectdetectiebenadering resulteert in slechte classificatie (het object wordt goed gedetecteerd, maar het verkeerde label wordt voorspeld). In dat geval kunt u eerst een objectdetectiemodel trainen op uw dataset, met slechts één label ("object" bijvoorbeeld) en vervolgens uw afbeeldingen bijsnijden op basis van de coördinaten van de begrenzende vakken. Hierdoor ontstaat een set afbeeldingen die alleen het relevante object bevat dat in de oorspronkelijke afbeeldingen is gedetecteerd. U kunt deze set vervolgens gebruiken als trainingsset voor CNN-beeldclassificatie.
Uitbreiding - Geautomatiseerd machinaal leren
Tegenwoordig zien we de ontwikkeling van nieuwe initiatieven die erop gericht zijn om het proces van het maken en aanpassen van uw eigen model voor iedereen beschikbaar te maken, zelfs voor mensen zonder technische achtergrond. Het doel is dat u in plaats van kant-en-klare modellen (zoals niveau 1) te gebruiken, uw eigen model kunt trainen zonder dat u over de onderliggende kennis hoeft te beschikken.
Hoe werkt het?
De oplossing automatiseert het maken van het beeldclassificatiemodel of objectdetectiemodel. U hoeft alleen maar een gelabelde dataset met uw afbeeldingen te leveren en deze naar de oplossing te sturen. Deze data wordt opgenomen om er een computervisiemodel op te trainen (als niveau 2 of niveau 3). Het zal een getraind model uitvoeren, soms zelfs een API, die u kunt gebruiken om de labels te voorspellen en objecten op nieuwe afbeeldingen te lokaliseren. Het model optimaliseert zichzelf, dus u hoeft niet te weten hoe u het moet implementeren en hoe u het moet parametriseren.
Wat zijn de oplossingen?
Er zijn twee belangrijke spelers op dit gebied, die tools hebben uitgebracht die op dit moment nog in bèta zijn.
- Ten eerste hebben we Google en zijn Google Cloud AutoML-component uit zijn Cloud-platformsuite (link hier). Cloud AutoML is niet alleen ontworpen voor computer vision-problemen, maar kan ook nuttig zijn voor alle Machine Learning-toepassingen, evenals Natural Language Processing en vertaling.
- Ten tweede hebben we het open source initiatief AutoKeras (link hier). Het is gebaseerd op Keras, en vertrouwt op het automatisch zoeken naar de architectuur en hyperparameters van deep learning-modellen.
Mede-geschreven artikel door Matthieu Montaigu en Kasra Mansouri, Data Wetenschappers bij Artefact.
Wilt u meer weten over verkoopprognoses dankzij op maat gemaakte productherkenningsmodellen? Onze experts staan tot uw beschikking om al uw vragen te beantwoorden!

BLOG









