Een veel voorkomend probleem waarbij artificiële intelligentie een grote hulp kan zijn is het identificeren en classificeren van bijvoorbeeld dronebeelden. Maar denk bijvoorbeeld ook aan het automatisch herkennen van handgeschreven of gescande tekst, gezichtsherkenning, rijhulpsystemen, nummerplaatherkenning, medische beeldvorming, het automatisch organiseren van foto-bibliotheken, sociale media, objecten zoeken in een beeld, objecten of texturen in een beeld segmenteren, of automatisch tellen. Als concreet voorbeeld zullen we in dit werk het classificeren van foto’s in twee categorieën bekijken (honden en katten), maar de technieken en conclusies hier gepresenteerd zijn ook toepasbaar op andere toepassingen.

 

  
Foto: Een typisch classificatieprobleem: bevat de foto een hond of een kat?

 

De meeste huidige technieken voor het oplossen van dergelijke classificatieproblemen vallen onder de noemer “artificiële intelligentie”, en meer specifiek in de groep van “gesuperviseerde leer-algoritmes”. Deze algoritmes proberen in eerste instantie een classificatietaak correct te leren uitvoeren op een dataset waarbij de antwoorden gekend zijn (de zogenaamde “training” dataset of “ground truth”). De hoop is dat deze getrainde algoritmes dan in tweede instantie ook correcte beslissingen zullen nemen op beelden die ze nog niet gezien hebben. Mensen kan men trouwens op dezelfde manier een classificatietaak leren, en zijn onderhevig aan veel van dezelfde beperkingen die hieronder worden beschreven. Termen die vaak gebruikt worden in de literatuur voor deze types van algoritmes en leerprocessen zijn “deep learning”, “machine learning”, “(convolutionele) neurale netwerken” of het overkoepelende “artificiële intelligentie”.

Om dergelijke algoritmes een taak aan te leren moet men in eerste instantie een groot aantal voorbeelden verzamelen die representatief zijn voor het classificatieprobleem, en waarbij men weet wat de onderliggende klasse is. Het opbouwen van een kwalitatieve trainingsdataset is echter erg arbeidsintensief, en onderhevig aan meerdere mogelijke problemen en subtiliteiten.

  • Een trainingsdataset moet representatief zijn voor het probleem. In ons voorbeeld zijn er veel rassen van katten en honden, en deze moeten goed vertegenwoordigd zijn in de dataset indien men een algoritme wil trainen dat goed kan veralgemenen. Het opzoeken van een groot aantal varianten binnen elke klasse kan erg arbeidsintensief en complex worden.
  • De trainingsdataset moet groot genoeg zijn. Een enkele foto van een specifiek ras is vaak niet genoeg om dit consistent correct te classificeren. Zijn er bijvoorbeeld ook foto’s van het dier genomen langs andere kanten (voor-, zij-, achter-, bovenaanzicht)? In welke positie of actie bevind het dier zich (liggen, zitten, lopen, …)?
  • Elk beeld in de trainingsdataset moet een bijhorende klasse hebben. Dit toekennen van de correcte klasse aan beelden noemt men “annoteren”, en dit kan arbeidsintensief zijn afhankelijk van het probleem. Eén foto als “kat” of “hond” aanduiden is geen zware taak, maar wordt dit wel als er duizenden foto’s te verwerken zijn. Andere taken vereisen veel intensievere annotatie, bijvoorbeeld voor segmenteren waarbij elk object uitgelijnd moet worden, of tel-problemen waarbij elk object moet aangeduid worden met een punt of een vierkant er rond. Verder is het van het hoogste belang dat deze annotatie correct gebeurd, gezien de algoritmes ervan uitgaan dat dit de onbetwistbare waarheid is en deze dan ook zullen proberen reproduceren. Fouten die optreden door vermoeidheid of verschillen in annotatie van persoon tot persoon kunnen een groot effect hebben of de efficiëntie van het leerproces. Ook ergonomie in het annoteren is van belang, en er is een grote markt voor annotatiesoftware die deze taak zo aangenaam mogelijk probeert te maken.

Verder is het van belang het getrainde algoritme grondig te valideren, en na te gaan of er inderdaad correct veralgemeend wordt wanneer ongeziene beelden worden gepresenteerd. Soms worden subtiele maar ongewenste zaken geleerd uit de trainingsdataset die niet direct duidelijk zijn voor ons, en voorbeelden zijn legio waarbij een classificatiealgoritme bizarre resultaten oplevert:

  • Een convolutioneel neuraal netwerk werd getraind om wolven van honden te leren onderscheiden. Dit netwerk leerde echter sneeuw of gras te herkennen in de beelden, omdat de wolven in de trainingsdataset steeds in besneeuwde landschappen aanwezig waren, en de honden op grasvelden.
  • Een deep learning netwerk gebruikt om tanks en camouflage te onderscheiden van vegetatie leerde in de plaats naar het weer te kijken: De tanks bevonden zich allemaal in regenachtige omstandigheden, terwijl de vegetatie klasse in de trainingsdataset steeds op zonnige dagen was genomen.
  • Het is in sommige omstandigheden mogelijk te achterhalen naar welke subtiele patronen in de data het algoritme gaat kijken om een beslissing te nemen, waardoor het ook mogelijk wordt met nauwkeurig geconstrueerde geometrische patronen of texturen het algoritme te misleiden.

Een trainingsdataset samenstellen met enkel witte honden en zwarte katten, of liggende honden en lopende katten, kan dus ongewenste resultaten opleveren omdat het algoritme enkel de aangeboden beelden en bijhorende klasse ter beschikking heeft, en zelf een relatie tussen gelijkaardige beelden en daaruit volgende veralgemening moet zoeken. Het achterhalen waar juist het algoritme op let is een moeilijke taak op zich, en vaak onmogelijk te achterhalen.

Een ander vaak voorkomend probleem is het overtrainen van algoritmes, waarbij men dezelfde data keer op keer opnieuw presenteert in de trainingsfase, totdat het algoritme amper nog een verbetering in performantie toont. Het algoritme kan dan erg gevoelig worden voor de specifieke beelden gebruikt in de training, en enkel nog goed presteren op deze of erg vergelijkbare beelden. Hierbij wordt de capaciteit tot veralgemening verloren, en het algoritme zal slecht presteren op ongeziene beelden. Dit vormt zeker een probleem wanneer de trainingsdataset relatief klein of van lage kwaliteit is.

 

Wat is data augmentatie?

Het is duidelijk dat een grote, diverse en kwalitatieve trainingsdataset onontbeerlijk is om een gesuperviseerd classificatiealgoritme correct te trainen en een goede capaciteit tot veralgemening te bekomen. Het verzamelen van dergelijke datasets is echter duur en arbeidsintensief, en optimaal gebruik van de reeds verzamelde of beschikbare data is dan ook belangrijk. Een populaire techniek om meer te halen uit de trainingsdata is “data augmentatie”. Het doel hierbij is een kwalitatieve en geannoteerde trainingsdataset te vergroten via “goedkope” operaties welke automatisch kunnen worden uitgevoerd door een computer. Voordat we een beschrijving geven van de mogelijke augmentatietechnieken geven we een simpel voorbeeld.

Beschouw onderstaand beeld van een kat. Indien we dit beeld spiegelen hebben we nog steeds een geldig beeld van een kat. Deze gespiegelde foto is echter totaal verschillend van de originele foto voor het algoritme: Texturen draaien om, saillante details die het netwerk leert gebruiken om beslissingen te nemen veranderen van plaats, en de volgorde van pixels, kleuren, lijnen en vormen veranderd. De klasse “kat” van de gespiegelde foto verandert echter niet, en is op voorhand gekend. Door onze kennis dat “een gespiegelde foto van een dier is nog steeds hetzelfde dier” kunnen we op eenvoudige wijze de hoeveelheid foto’s in onze trainingsdataset verdubbelen.

Links: originele beeld van een kat. Rechts: Gespiegeld beeld, nog steeds een kat.

We kunnen echter verder gaan, en proberen alle operaties te identificeren die we kunnen uitvoeren op de foto die resulteren in een herkenbare foto die de onderliggende klasse niet beïnvloed. Rotatie en translatie zijn bijvoorbeeld andere simpele voorbeelden, maar veel rijkere transformaties kunnen worden toegepast om de dataset te vergroten zonder veel moeite.

 

Simpele geometrische operaties

Zoals reeds beschreven kan men simpele geometrische operaties gaan toepassen op de beelden om nieuwe geaugmenteerde data te genereren:

  • Spiegeling over een as: Links-rechts spiegeling is in bovenstaand voorbeeld toegepast. Boven-onder spiegeling is in ons geval niet toepasbaar gezien het in ondersteboven beelden zou resulteren, maar kan in sommige andere machine learning problemen wel toegepast worden. Merk op dat puntspiegeling door het centrum hetzelfde is als over beide assen spiegelen.
  • Translatie: Het beeld licht verschuiven zonder dat het object uit het beeld verdwijnt of afgesneden wordt.
  • Rotatie: Het beeld roteren over een willekeurige kleine hoek. Merk op dat een maximale rotatiehoek moet worden beschouwd om het geaugmenteerde beeld realistisch te houden.
  • Schalen: Zolang het dier duidelijk herkenbaar blijft kan men het beeld verkleinen, en zolang het dier helemaal binnen de foto blijft kan men het beeld vergroten.
  • Shearing: Het beeld lichtjes “shearen”, (bv. de bovenste lagen naar links en de onderste lagen naar rechts verschuiven).
  • Knippen/Cropping: Een deel van het beeld wegknippen

Voorbeelden van geometrische operaties: Origineel, gespiegeld, geroteerd, translatie/cropping, shearing, schalen

Merk op dat deze operaties ook kunnen gecombineerd worden, wat het aantal mogelijke augmentaties dramatisch vergroot.

 

Beeldgrootte en blur

Objecten in een beeld kunnen vaak sterk van grootte variëren door verschillende oorzaken: De objecten zelf kunnen een intrinsieke variatie in grootte hebben (kleine en grote dieren), de afstand waarop het object is gefotografeerd heeft een invloed, en de resolutie van de camera speelt een rol. In veel classificatieproblemen weet men op voorhand niet duidelijk wat de schaal van de objecten gaat zijn, en wenst men een robuustheid tegen deze herschaling te integreren. Hier kan data augmentatie opnieuw een belangrijke rol spelen.

Ook zijn niet alle fijne details altijd van belang en kunnen beelden van erg hoge resolutie zelfs een negatief effect hebben op het trainingsproces gezien het algoritme meer moeite heeft grootschalige structuren te leren die duizenden tot miljoenen pixels kunnen overspannen (de kat in de foto hierboven bijvoorbeeld bevat ongeveer 30 000 pixels). Om dit te omzeilen kan men de foto’s kleiner maken door ze te herschalen, of fijne details uitvagen door een blur operatie op het beeld uit te voeren. Opnieuw moet aandacht besteed worden dat men door de augmentatietechnieken geen beelden genereert die niet meer herkenbaar zijn. Een kat reduceren tot 3 pixels of een grote grijze blob is geen gewenste augmentatie.

Het originele beeld, gevolgd door hetzelfde beeld met dalende resolutie, en met stijgende niveaus van Gaussische blur

 

Kleur augmentatie

Vaak kan men de kleuren of de distributie ervan in een foto aanpassen om een nieuwe, herkenbare, foto te genereren. Dit type van augmentatie kan erg belangrijk zijn wanneer een wijd bereik van mogelijke kleuren en kleurbalans verwacht wordt. In ons voorbeeld is dit het geval: Foto’s kunnen onder eender welke lichtcondities genomen worden (dag/nacht, binnen/buiten, type belichting, …), wat de intensiteit en distributie ervan zal veranderen. Verschillende kleurtransformaties kunnen deze effecten nabootsen, en resulteren in een veel rijkere trainingsdataset. Voorbeelden zijn:

  • Intensiteit: Alle kleurwaarden kunnen herschaald worden naar een ander bereik. Dit zal een foto helderder of donkerder maken, en simuleert een andere sluitertijd of intensiteit van flash belichting.
  • Kleurbalans: Het histogram van kleurwaarden in het beeld kan veranderd worden, om de witbalans aan te passen of de temperatuur van de belichting te veranderen.
  • Andere kleuroperaties: verzadiging, chroma, belichting, waarde, helderheid, contrast, … Vele hiervan zijn gerelateerd, en allen zullen de histogrammen van de kleurkanalen aanpassen.
  • Kleurkanalen verwijderen: Vaak is een zwart-wit foto voldoende om een dier te herkennen. Dit type augmentatie wordt zelden toegepast omdat de kleurkanalen vaak veel extra informatie bevatten welke het netwerk heeft leren gebruiken.

Kleuroperaties: Origineel, auto witbalans, warmer, kouder, kleinere sluitertijd, grotere sluitertijd

Merk op dat een andere aanpak kan zijn alle beelden te kalibreren ten opzichte van een gekende kleurendistributie, bijvoorbeeld door een wit paneel in de foto op te nemen. Dit is vaak echter praktisch onmogelijk, en resulteert in een minder robuust algoritme met onvoorspelbaar gedrag op ongeziene belichting.

 

Ruis

Het toevoegen van ruis aan een foto is één van de meest populaire augmentatietechnieken, en heeft vaak een aanzienlijk positief effect op de generalisatiecapaciteit van een algoritme gezien er minder afhankelijkheid zal zijn van erg kleine lokale details en patronen. Ook het overfitten kan drastisch gereduceerd worden door een dataset te augmenteren met ruizige varianten van de originele beelden. Het ruisniveau is meestal een parameter (afhankelijk van het type ruis), en kan gekozen worden als de maximale waarde waarbij een mens nog gemakkelijk de beelden kan herkennen. Gezien ruis in het beeld eerder esthetisch van aard is maar de onderliggende klasse van het beeld niet veranderd wensen we uiteraard algoritmes te bekomen die robuust zijn tegen alle mogelijke types van ruis.

Ruis toevoegen kan op vele manieren gebeuren gezien elke pixel apart op een willekeurige wijze veranderd wordt, en dus elke instantie van ruis uniek is. Ook de gebruikte manier om ruis te genereren kan verschillen:

  • Gaussische ruis gaat een willekeurig getal trekken uit een normale distributie en dit toevoegen aan elk kleurkanaal in elke pixel, onafhankelijk van de grootte van het signaal. Dit type ruis is reeds aanwezig wegens thermische en elektronische effecten in de camera hardware, en kan kunstmatig worden toegevoegd voor een andere of grotere ruisconfiguratie te krijgen
  • Spike ruis of “zout-en-peper” ruis is discrete ruis waarbij willekeurige pixels aanzienlijk veranderd worden (bv. volledig zwart of wit). Dit ruistype komt van nature voor door bijvoorbeeld digitale fouten of defecte hardware (pixels in een CCD of in een computerscherm).
  • Poisson ruis is afhankelijk van de grootte van het signaal, en komt van nature voor door de discrete aard van fotonen in licht. Dit type van ruis is enkel van belang wanneer de hoeveelheid ontvangen licht laag is, bijvoorbeeld in erg donkere situaties, in hoge-snelheidsbeelden met erg korte sluitertijden, of in spectrale beelden met een beperkte golflengtegevoeligheid per spectraal kanaal.
  • Vele ander types van ruis kunnen beschouwd worden in fotografie, zoals door digitale discretisatie (kwantisatie), sensorfouten (bv. rij- of kolomruis), periodieke ruis, …

Toevoegen van ruis: Origineel, Gaussische ruis met niveaus 0.2, 0.5 en 0.8, Spike ruis met niveaus 0.2 en 0.8

 

Andere augmentatietechnieken

In principe kunnen alle optische effecten en transformaties gebruikt worden om geaugmenteerde data te genereren, zolang de onderliggende klasse duidelijk herkenbaar blijft. Men moet hier dan echter wel de afweging maken of het toevoegen van bepaalde operaties nut heeft: We willen het algoritme in de eerste plaats robuust maken ten opzichte van de in de natuur voorkomende variabiliteit en veranderende omstandigheden in acquisitie. Verder moet men de grootte van de uiteindelijke trainingsdataset in beschouwing nemen en realistische augmentaties prioriteit geven. Elke foto augmenteren naar duizenden andere varianten gaat uiteindelijk niet veel nieuwe informatie meer bijdragen, en heeft enorme kosten qua verwerkingstijden en opslagruimte. Anderzijds kunnen onnatuurlijke augmentaties vaak wel het algoritme robuuster maken, omdat het algoritme leert rekening houden met meerdere informatiebronnen in de plaats van één of enkele saillante details. Denk hierbij bijvoorbeeld aan het herkennen van katten of honden wanneer de details van het gezicht ontbreken, de ogen/oren/neus onherkenbaar zijn of ontbreken, enkel de vorm of het silhouet zichtbaar is, of men de beslissing moet nemen aan de hand van patronen in de pels.

Een beperkte demonstratie van bijkomende mogelijke augmentatietechnieken is hieronder gegeven, met een indicatie wanneer deze van toepassing kunnen zijn. Merk op dat deze lijst erg onvolledig is, en dat zelf ontworpen of probleem-specifieke augmentatietechnieken steeds kunnen toegevoegd worden. Indien bepaalde effecten verwacht worden in het praktisch gebruik van het classificatiealgoritme kunnen deze effecten toegevoegd worden in de augmentatie.

Normale beeld, een ontbrekend blok, mosaiek transformatie, streep transformatie (bv. gescand beeld uit een krant), lensvervorming, mist effect (bv. vochtige lenzen)

Lens flare (foto achter glas), pixel shift (verstoord video signaal), hex transformatie (TV signaal), rand detectie (enkel vormen blijven over), fotokopie effect, watershed transformatie (beperkt aantal kleurwaarden)

 

Augmentatie in de praktijk

Data augmentatie wordt toegepast in de trainingsfase van een classificatiealgoritme, dus nadat reeds een trainingsdataset verzameld is. Omdat dit vaak over een groot aantal beelden gaat (typisch honderden tot tienduizenden, afhankelijk van de toepassing) is een dergelijke dataset een aanzienlijk volume data, wat de nodige beperkingen in opslag en transport meebrengt. Data augmentatie is in staat elk beeld te multipliceren in een onbeperkt aantal varianten, en het is dus niet gewenst om data augmentatie op voorhand te doen, waarbij alle geaugmenteerde beelden worden bijgehouden.

In de plaats wordt typisch een data generator gebruikt. Het trainingsproces van de meeste classificatiealgoritmes werkt in kleine batches van inputbeelden, met batchgroottes van 1 tot enkele tientallen beelden. Een datagenerator is een object in het trainingsproces dat dergelijke batches van inputbeelden met bijhorende klassen kan genereren. Een datagenerator vereist dan ook:

  • Een dataset met geannoteerde input beelden. Dit zijn de verzamelde ground truth beelden.
  • Een beschrijving van de gewenste augmentaties, hun eventuele parameters en de toegelaten combinaties van augmentaties.

Indien een datagenerator dan gevraagd wordt een nieuwe trainingsbatch te genereren, worden het gevraagde aantal beelden willekeurig uit de input dataset genomen en geaugmenteerd met willekeurige parameters. Hierdoor kan een onbeperkt aantal trainingsbeelden gegenereerd worden zonder de nood aan het opslaan van de geaugmenteerde beelden.

De meeste software bibliotheken voor deep learning en andere varianten van artificiële intelligentie bevatten reeds data generatoren (bv. Pytorch, keras, tensorflow, …). De aanwezige types van augmentatie zijn typisch de geometrische operaties (schalen, spiegelen, roteren, shearing), simpele kleurtransformaties (kleurschaling, witbalans) en het toevoegen van ruis. Deze types van augmentatie kunnen dus erg snel geïmplementeerd worden in de meeste softwarepakketten voor artificiële intelligentie.

Anderzijds kan het interessant zijn zelf een data generator te implementeren:

  • Men wenst transformaties te gebruiken die niet standaard beschikbaar zijn
  • Men wenst meer controle over de transformaties en hun combinaties
  • De transformatie heeft een effect op de annotatie van het object, waardoor meer werk nodig is dan enkel het input beeld te transformeren. Bijvoorbeeld wanneer de uitvoer van het algoritme complexer is dan enkel een klasselabel, zoals een foto, een dichtheidsmap, een segmentatie, etc… Bepaalde augmentaties van het invoerbeeld (bv. een rotatie) zal dan ook uitgevoerd moeten worden op de uitvoer.


Auteur

Rob Heylen
Rob Heylen is een onderzoeker bij Flanders Make gespecialiseerd in beeldverwerking, remote sensing en artificiële intelligentie.

 

Contacteer EUKA/Flanders Make voor meer informatie
Updates en nieuwe artikels ontvangen in je mailbox? Schrijf je dan snel in voor onze nieuwsbrief!

Pin It on Pinterest