• No results found

4.2

Implementatie algoritme

Het doel is dus om op basis van gemeten gegevens een neuraal netwerk te trainen om te achterhalen of de speler ´e´en van de activiteiten uitvoert, of zich in een rusttoestand bevindt. Wanneer het neurale netwerk eenmaal vol- doende getraind is, zou het in staat moeten zijn om het type activiteit met vrij hoge nauwkeurigheid correct te voorspellen. Ook wanneer het model nieuwe, ongeziene gegevens van andere spelers binnenkrijgt. Dit is dus een voorbeeld van supervised learning.

4.2.1 Supervised learning

Supervised learning is een leermodel dat is gebouwd om voorspellingen te doen op nieuwe, onbekende inputdata. Een supervised learning-algoritme gebruikt een bekende set van invoergegevens en de bekende reacties op deze gegevens (uitvoer) om het regressie-/classificatiemodel te trainen. De uit- voer van het model is in ons geval de klasse waartoe een beweging behoort. Het algoritme traint vervolgens een model om voorspellingen te genereren voor de respons op nieuwe gegevens of de testdataset. Supervised learning maakt gebruik van classificatiealgoritmen en regressietechnieken om voor- spellende modellen te ontwikkelen. Deze algoritmen omvatten ondermeer lineair regression, logistic regression en neurale netwerken. In deze paper wordt gebruik gemaakt van neurale netwerken.

4.2.2 Voorbereiding

De implementatie van dit algoritme werd in Python uitgevoerd en is terug te vinden op de Github-pagina. Voor deep learning zelf wordt gebruik gemaakt van de libraries Tensorflow en Sklearn. Visualisaties gebeuren aan de hand van Matplotlib. Opdat het computermodel activiteiten zou kunnen herken- nen, wordt tijdens het trainingsproces een grote hoeveelheid data als input gegeven. Op basis van deze gegevens leert het model wat het typische verloop is qua lineaire versnellingen en hoekversnellingen bij een bepaalde slagbe- weging. De input wordt zo gevarieerd mogelijk genomen om een generiek inzetbaar model te bekomen dat goede resultaten bekomt voor verschillende personen. De uitvoering van een slag is namelijk verschillend voor ieder- een. De data bestaat zowel uit reeksen dezelfde opeenvolgende slagen als uit realistische scenario’s met afwisselende slagbewegingen, rustmomenten en verplaatsingen ertussen. Deze data bevindt zich in verschillende CSV- bestanden en wordt voor de training van het model samengevoegd. Voor het samenvoegen wordt de data echter wel tekstueel gelabeld volgens de juiste categorie.

Figuur 4.1: Overzicht trainingsproces van het model

Alvorens de data gebalanceerd wordt, worden de tijdstippen uit de data verwijderd. Deze worden in de classificatie dan ook niet gebruikt aangezien ze in dit onderzoek geen meerwaarde hebben. De inputdata is erg ongeba- lanceerd. Om na het balanceren toch nog voldoende info over te houden, wordt sommige data gedupliceerd of worden er voor deze categorie extra metingen uitgevoerd.

Aangezien we bij het trainen van het model nood hebben aan numerieke gegevens, worden de tekstuele labels omgezet naar cijfers. Hiervoor wordt gebruik gemaakt van de LabelEncoder van Sklearn. Deze codeert de doel- labels met een waarde tussen 0 en aantalKlasses-1. Dit gebeurt alfabetisch. In ons geval nemen deze labels dus waarden aan tussen 0 en 8. De inputdata voor het model wordt eerst geschaald. Aangezien de gyroscoopdata een be- reik heeft tussen -2000 en 2000 en de accelerometerdata een bereik tussen -16 en 16, wordt de accelerometerdata met een factor 125 vermenigvuldigd. Deze schaling heeft een positief effect op ons uiteindelijke model. In de eerste experimenten normaliseerden we onze data per waarneming. Normalisatie wordt namelijk in veel bestaande onderzoeken gebruikt. Dit was eigenlijk niet de meest optimale manier van normaliseren. Beter zou het geweest zijn de normalisatie uit te voeren op kolomniveau, maar dit levert problemen op wanneer de uiterste waarden in een dataset vari¨eren. Wanneer we later deze normalisatie weggelaten hebben, bekwamen we tussen de 10 en 15 procent betere resultaten. We kunnen dit verklaren doordat we dan de ruis in het

4.2. IMPLEMENTATIE ALGORITME 35 signaal kunnen ’opentrekken’ wat uiteraard nefast is. Er werd dus besloten deze techniek niet verder te gebruiken.

Vervolgens verdelen we de data onder in frames. Een groot aantal badmin- tonslagen bevatten gemeenschappelijke bewegingen. Het is dus belangrijk grote delen van een slag in ´e´en keer te beschouwen bij de classificatie. We kiezen hier voor verschillende framesizes tussen de 40 en 160 samples. Zoals we verderop zullen bespreken, genereren we een model per framesize. Een frame bevat dus data uit een tijdsperiode van 0.4 tot 1.6 seconden. Voor ieder frame wordt het meest voorkomende label gebruikt als label voor het volledige frame. Tijdens het trainingsproces maken we geen gebruik van overlappende frames. Overlappende frames blijken een negatieve invloed te hebben op de prestaties van ons model.

Er zijn drie soorten datasets: een train-, test- en validatieset. De trai- ningsset wordt gebruikt voor het fitten van het model. De validatieset is een reeks gegevens die gebruikt wordt om een evaluatie te geven van een model tijdens het trainen, terwijl hyperparameters van het model worden geoptimaliseerd. De testset dient dan uiteindelijk om het gefitte model te evalueren. Dit is dus nieuwe data. Er wordt gebruik gemaakt van CNN 2D Convolutions in Keras. Verderop bespreken we ook een model dat deze convolutionele lagen achterwege laat.

4.2.3 Keras Convolutional Neural Networks

Convolutional Neural Networks (CNN) zijn een categorie in deep neural networks. Ze zijn zeer goed gebleken in het verwerken van gegevens die nauw met elkaar zijn verbonden. CNN’s worden voornamelijk gebruikt voor computervisie: voor het aansturen van taken zoals beeldclassificatie, ge- zichtsherkenning, het identificeren en classificeren van alledaagse objecten en beeldverwerking in robots en autonome voertuigen. Ze worden ook ge- bruikt voor video-analyse en -classificatie, semantische parsing, automatisch genereren van onderschriften, ophalen van zoekopdrachten, classificatie van zinnen en meer [24].

Keras is een eenvoudige maar krachtige deep learning library voor Python. Het is een framework dat runt bovenop TensorFlow, Microsoft Cognitive Toolkit of Theano. Deze library laat toe met een beperkt aantal lijnen code een vrij geavanceerd neuraal netwerk uit te bouwen. In deze thesis wordt geen gebruik gemaakt van computervisie. De data afkomstig van de metin- gen met gyroscoop en accelerometer worden hieraan meegegeven.

4.2.4 Lagen van het model

Het modeltype Sequential is de eenvoudigste manier om een model in Keras te bouwen. Hiermee kan het model laag voor laag opgebouwd en aange- past worden. Door middel van de functie add() kunnen lagen toegevoegd worden aan ons model. De eerste laag die we toevoegen aan ons netwerk is een Conv2D-laag. De eerste parameter hier is ‘filters’. Deze geven we een waarde van 16 in onze eerste Conv2D-laag. Bij de andere kiezen we voor een grootte van 32. Dit is gelijk aan het aantal kanalen in de uitvoer van een convolutional layer. Dit aantal kan worden aangepast om hoger of lager te zijn, afhankelijk van de grootte van de dataset. De parameter ‘kernelsize’ is de grootte van de filtermatrix voor onze convolutie. We kiezen hier voor een kernelgrootte van 3x3 aangezien deze waarde over het algemeen ook in andere onderzoeken [25] gunstig blijkt te werken. De gekozen kernelgrootte betekent dus dat we een 3x3 filtermatrix zullen krijgen. Deze matrix schuift over de verschillende assen van de inputdata waardoor een feature map wordt opgebouwd. Activation is de activeringsfunctie voor de laag. De functie die we gebruiken voor onze twee convolutionele lagen is de ReLU of Rectified Linear Activation. Het is bewezen dat deze activeringsfunctie goed werkt in neurale netwerken [26].

Wanneer gegevens doorheen een deep neural network passeren, veranderen de waarden waardoor sommige te groot of te klein worden. Door de data te normaliseren per batch, worden eventuele nadelen die hieraan gekoppeld zouden zijn, weggefilterd. Doorgaans zorgt dit voor betere eindresultaten. Meermaals worden Dropout-lagen toegevoegd. Dropout is een techniek waarbij willekeurig geselecteerde neuronen tijdens de training worden ge- negeerd. Dit voorkomt overfitting van het model. Tussen de Conv2D-lagen en de Dense layer wordt er een ‘Flatten’ laag toegevoegd. Flatten dient als verbinding tussen de convolutionele en Dense lagen.

Fully Connected layers in neurale netwerken zijn die lagen waar alle in- puts van ´e´en laag verbonden zijn met elke activation-eenheid van de volgende laag. In de meeste populaire modellen voor machine learning zijn de laatste paar lagen Fully Connected layers die de gegevens, die door eerdere lagen zijn ge¨extraheerd, samenvoegt om de uiteindelijke uitvoer te vormen.

‘Dense’ is het laagtype dat we zullen gebruiken voor onze outputlaag. Dit is een standaard laagtype dat in veel gevallen wordt gebruikt voor neu- rale netwerken. We hebben 9 knooppunten in onze outputlaag, ´e´en voor elke mogelijke uitkomst (0-8). De labels 0 tot 6 zijn de verschillende slagbewe- gingen die we detecteren. Het label 7 plakken we op de verplaatsingen. Met het laatste label, 8, duiden we de rustmomenten aan. De activation in de

4.2. IMPLEMENTATIE ALGORITME 37 Dense-laag is ‘softmax’. Bij softmax is de som van de uitvoerwaarden gelijk aan 1, zodat de output kan worden ge¨ınterpreteerd als kansen. Het model maakt dan zijn voorspelling op basis van welke klasse de grootste kans heeft [27][28][29]. We tonen een overzicht van het gebruikte model in Figuur 4.2.

Figuur 4.2: Samenvatting model CNN

4.2.5 Compileren van het model

Bij het compileren van het model geven we drie parameters op: de optimizer, een lossfunctie en metrics. De optimizer bepaalt het learning rate. Adam is over het algemeen een goede optimizer om in veel gevallen te gebruiken. Deze optimizer past de leersnelheid tijdens de training aan. De learning rate bepaalt hoe snel de optimale gewichten voor het model worden berekend. Een lagere learning rate kan leiden tot nauwkeurigere gewichten (tot op een bepaald punt) die minder grote ’sprongen’ maken. Nadeel is dat de tijd die nodig is om de gewichten te berekenen, langer zal zijn.

We gebruiken ‘sparse categorical crossentropy’ voor onze lossfunctie. Dit is een van de meest gebruikelijke keuzes voor classificatie. Een lagere loss- score geeft aan dat het model beter presteert. Om het nog gemakkelijker te interpreteren, gebruiken we de ‘accuracy’-metric om de nauwkeurigheids- score op de validatieset te zien wanneer we het model trainen.

4.2.6 Trainen van het model

Vervolgens wordt het model getraind op onze trainingsdata. Dit wordt ge- daan aan de hand van de fit-functie. Aan deze functie geven we variabelen Xtrain en ytrain mee. Het doel is dat het model y (de klasse) kan voorspellen wanneer hij enkel X (de accelerometer- en gyroscoopdata) gegeven krijgt. In de functie geven we ook het aantal rondes waarin het model getraind wordt, het aantal epochs, op. Hoe meer epochs we doorlopen, hoe vaker het model de trainingsdata voorgeschoteld krijgt. Het model kan gedurende zo een ronde verbeteren, tot op zekere hoogte. Hier gebruiken we 400 epochs. We geven in elke epoch een score aan het model onder de vorm van een validatie-loss. Een lagere loss betekent dus een ’beter’ model. We hebben echter niet de garantie dat de laatste epoch het beste model als uitvoer heeft. Daarom maken we gebruik van checkpoints waar we enkel het model met de laagste validatie-loss behouden. De batch size definieert het aantal sam- ples dat in ´e´en keer aan het netwerk wordt doorgegeven gedurende zulke epochs. We gebruiken een batch size van 64. Om de nauwkeurigheid op ongeziene data te controleren tijdens het trainen, geven we aan de functie ook de validatiedata mee.

4.2.7 Gebruik van het model

Eens het model volledig getraind is kunnen we dit gebruiken voor het ma- ken van voorspellingen. Een groot voordeel aan het Keras-framework van Python is dat een getraind model als een file kan worden opgeslagen en in een andere context kan ingelezen worden. Dit zorgt er voor dat een model maar ´e´en keer getraind moet worden. Anderzijds is het ook een eenvoudige manier om het model in meerdere situaties te hergebruiken.

GERELATEERDE DOCUMENTEN