• No results found

8.3.1 Werking van het netwerk

Het Vesalius netwerk is een neuraal netwerk dat is opgebouwd aan de hand van de UNet-structuur. De structuur is speciaal bedacht voor semantic segmentation in biomedische afbeeldingen. Een voorbeeld hiervan werd al gebruikt in de oude situatie. Dit is namelijk het herkennen van een wondgebied in een afbeelding.

8.3.1.1 Waarom een UNet-structuur?

Er zijn een aantal verschillen tussen een neuraal netwerk met een UNet-structuur en reguliere neurale netwerken. Er kunnen een aantal classes meegegeven worden die achterhaald moeten worden. Dit gebeurt op dezelfde manier als bij een regulier netwerk. Elk van deze classes krijgen een score. Hiervan wordt normaal gesproken de hoogste score gekozen als antwoord. Het verschil bij een netwerk met een UNet-structuur is dat elke individuele pixel van elke class een score bevat. Door alleen de scores boven een bepaalde hoeveelheid zichtbaar te maken (zie Figuur 11 voor uitwerking), kan bepaald worden of een pixel wel of niet bij een class hoort. Daarnaast is een netwerk met een UNet-structuur beter te trainen met een kleine dataset. Het doel bij het ontwerpen van de structuur was een dataset met dertig afbeeldingen (Ronneberger, 2015).

8.3.1.2 Werking van de UNet-structuur

Een netwerk met een UNet-structuur wordt op een bepaalde wijze opgebouwd. De structuur bestaat uit een Contracting en Expansive pad. In Figuur 8 is het Contracting pad het pad dat van links naar beneden loopt (pad 1). Het Expansive pad is het pad dat van beneden naar rechtsboven loopt (pad 2). Tussen de twee paden zit een middenstuk. Dit middenstuk maakt het upsampling naar de originele grootte van de afbeelding mogelijk.

Beide paden bestaan enkel uit lagen die bestaan uit twee Convolutional Layers. Deze layers worden gemaakt door 3x3 convolutions. Hierbij wordt de grootte van invoer behouden, maar valt er een rand van één pixel weg.

Figuur 34: Visualisatie 3x3 Convolution Bron: (Ronneberger, 2015)

Figuur 35: UNet-structuur met hoeveelheden per stap Bron: (Sreeni, 2019)

De grootte, breedte en diepte wordt na elke twee lagen aangepast. Dit wordt gedaan op basis van het pad waarin dit plaatsvindt. In pad 1 worden de grootte en breedte kleiner, maar de diepte groter. In pad 2 worden de grootte en breedte groter, maar de diepte juist kleiner. Het doel van pad 1 is het verduidelijken van de “wat” en het verminderen van de “waar”. De grootte en breedte halveren door na elke twee lagen een MaxPooling operatie uit te voeren. Het doel van het pad is bereikt op het moment dat de diepte na deze operatie vergroot wordt. Het doel van pad 2 is het samenstellen van een hoge resolutie segmentatiemap. Het samenstellen wordt gedaan door een combinatie van Upsampling operaties en concatenaties van de hogere resolutie features van pad 1. In Figuur 35 is te zien hoe de laatste laag van een stap in pad 1 wordt gebruikt bij het maken van de invoer voor een stap in pad 2.

8.3.1.3 Trainen met weinig data

Het trainen van het netwerk wordt gedaan met een kleine hoeveelheid trainingsdata, namelijk negen geannoteerde afbeeldingen. Er wordt gebruik gemaakt van data-augmentation en een data- generator om voldoende variërende trainingsdata te krijgen. De combinatie van de twee technieken maken een grote dataset die gebruikt wordt voor het trainen. De grootte van de dataset wordt door de technieken vergroot van negen naar driehonderd afbeeldingen. De data-generator genereert in een infinite-loop variërende data. De variërende data wordt gemaakt door middel van data- augmentation. Bij data-augmentation worden effecten toegepast op de afbeelding. Hierbij kan gedacht worden aan effecten als het draaien van de afbeelding, het vergroten/verkleinen van de afbeelding en het aanpassen van de HSV (kleur)waardes. Binnen Keras wordt vaak gebruik gemaakt van de fit methode. Deze methode start het trainingsproces. Aan de methode moet de opgesplitste dataset (cross-validation) meegegeven worden. Bij het gebruik van een data-generator moet er gebruik gemaakt worden van de fit_generator methode. Aan deze methode moet de generator en de hoeveelheid te genereren data meegegeven worden.

8.3.1.4 Resultaat van het netwerk

Het getrainde model wordt opgeslagen op het moment dat deze door het netwerk getraind is. In Figuur 15 is te zien dat dit over een aantal bestanden wordt gedaan. Een aantal van deze bestanden kunnen toegepast worden, zodat er gebruik gemaakt kan worden van het model. Een voorbeeld hiervan is het gebruik van een tflite bestand in een Android-App. Het resultaat van het model heeft altijd een vaste vorm. Dit resultaat kan verkregen worden door het model toe te passen op een afbeelding. Het resultaat van het model is een nested array. Deze array bevat drie lagen, waarvan de eerste twee lagen de grootte van de uitvoer van het model is (laag 1: 256, laag 2: 256). De derde laag is het aantal scores dat per pixel gegeven zal worden. Gezien deze class in de oude situatie alleen het wondgebied was, had de derde laag een grootte van één. Door het toevoegen van de drie WCS- classificatiekleuren, zal de derde laag een grootte krijgen van vier.

8.3.2 Annoteren van nieuwe informatie

Het doel van het toepassen van Multi-Task Learning is om meer informatie uit een afbeelding te halen. In onderzoeksvraag 3.1 in de Onderzoeksresultaten is besloten dat de kleurstelling van een wond de nieuwe te achterhalen informatie wordt. Het annoteren van deze informatie wordt gedaan door het gebruik van masks. Deze masks bevatten, net als de wondsegmentatie masks in Figuur 5, segmenten die de kleur binnen een wond markeren. In Figuur 36 is een van de masks te zien die gebruikt is voor het annoteren van kleuren.

Figuur 36: Wond kleurstelling mask

De masks moesten, na het annoteren, worden toegevoegd aan de trainingsdata. Hiervoor moest een verandering gemaakt worden in de benadering van de trainingsdata. In de oude situatie werd voor het trainen alleen de originele afbeelding en de segmentatie masks gebruikt. De originele afbeeldingen werden opgeslagen in de ‘train’ map en de bijbehorende masks in de ‘masks’ map. Door de afbeelding en de mask dezelfde naam te geven, kon het systeem achterhalen welke mask bij welke afbeelding hoort. In de nieuwe situatie is ervoor gekozen om een CSV-bestand bij te houden met de beschikbare trainingsdata. Van elke originele afbeelding wordt bijgehouden welke masks erbij horen en waar deze staan. De inhoud van dit bestand is in Figuur 37 te zien. Dit CSV-bestand wordt door het systeem ingelezen en haalt zo de nodige informatie op. Het voordeel van deze manier van opslaan is dat de verschillende bestanden niet op dezelfde plek hoeven te staan, een afzonderlijke naam kunnen hebben en dat tekstuele features toegevoegd kunnen worden.

8.3.3 Toepassen van Multi-Task Learning

Het toepassen van Multi-Task Learning geeft de mogelijkheid om met behulp van de UNet-structuur meerdere segmenten in een afbeelding te herkennen. De nieuwe geannoteerde informatie moet hiervoor worden meegenomen in het trainingsproces. Vervolgens moet het resultaat van het netwerk uitgebreid worden. Op deze manier krijgt elke pixel een score voor zowel het wondgebied als de drie kleuren. Hoe dit is gedaan, staat in de stappen hieronder beschreven.

8.3.3.1 Toepassen nieuwe trainingsdata

De eerste stap voor het herkennen van de nieuwe segmenten is de nieuwe informatie toevoegen aan de trainingsdata. De trainingsdata is de invoer van het netwerk en bestaat uit een X en een Y. De X is de invoer zoals deze aan het getrainde model beschikbaar gesteld wordt. De X is in dit geval een afbeelding waar niets aan veranderd wordt. De Y bevat het correcte resultaat. Wanneer het resultaat afwijkt van Y, wordt dit als fout gezien en past het netwerk zich hierop aan. Dit betekent dat de nieuwe informatie aan Y moet worden toegevoegd. In Figuur 38 is te zien hoe bij het inlezen van de trainingsdata de masks uit de mask afbeeldingen gehaald worden. Door het aangeven van de RGB- grenzen (boundaries) worden alleen de pixels van een bepaalde kleur in de masks gestopt. Dit wordt opgeslagen als 1 wanneer de pixel wel de kleur bevat, anders wordt dit 0. Er wordt voor elke gegeven RGB-grens een nieuwe mask gemaakt. De masks worden vervolgens toegevoegd aan de Y van de trainingsdata, zodat deze worden meegenomen in het trainen.

Figuur 38: Masks uit afbeeldingen halen

De tweede stap is de uitvoer van het netwerk veranderen. Op deze manier wordt de juiste hoeveelheid resultaten per pixel gegeven. Dit wordt aangegeven door het aantal classes (de diepte) van de laatste laag aan te passen naar het aantal masks. De laatste laag van het netwerk heeft een Sigmoid activatie functie. Dit houdt in dat er een individuele score is per class. Het resultaat van het netwerk is hierdoor per pixel een score voor elke soort informatie.

Het is belangrijk om te weten dat het toevoegen van meer classes niet betekent dat het netwerk aan de reguliere Multi-Class Learning doet. Multi-Class en Multi-Task Learning lijken veel op elkaar, omdat er in beide situaties gebruik wordt gemaakt van meerdere classes. Bij MCL worden meerdere classes meegegeven om uiteindelijk één resultaat te krijgen. Bij MTL ligt de nadruk op het achterhalen van meerdere classes wat door de UNet-structuur mogelijk gemaakt wordt (Tsjolder, 2020).

8.3.3.2 Vergelijking van resultaten

Na het implementeren van Multi-Task Learning kan het netwerk meerdere soorten informatie van een afbeelding krijgen. Het netwerk achterhaalt nu zowel het wondgebied als de kleurstelling van de wond. Het opsplitsen van de resultaten van het netwerk heeft geleid tot een aantal interessante bevindingen.

Figuur 39: Gebruikte afbeelding voor

vergelijken van resultaten Hoe sterker de rode kleur, hoe hoger de score Figuur 40: STL: wondgebied

Figuur 41: MTL: wondgebied

Hoe sterker de rode kleur, hoe hoger de score Hoe sterker de rode kleur, hoe hoger de score Figuur 42: MTL: rode wondkleur

Figuur 43: MTL: gele wondkleur

Hoe sterker de gele kleur, hoe hoger de score Hoe sterker de witte kleur, hoe hoger de score Figuur 44: MTL: zwarte wondkleur In de resultaten is het verschil tussen de oude (STL) en nieuwe (MTL) situatie te zien. Onder elke afbeelding staat hoe het herkende gebied zichtbaar wordt gemaakt. Het opvallende is dat er een verschil is in het gebied dat herkend wordt als wond. Het gebied dat bij STL herkend wordt als wond is accurater dan het gebied dat met MTL herkend wordt. Dit betekent echter niet dat MTL niet goed werkt. Het netwerk ziet in de afbeelding namelijk wel dat het een zwarte wond is. Dit is te achterhalen door de lage score die de rode en gele gebieden hebben. Een lage score in deze gebieden is zichtbaar als een zwart gebied.

8.3.4 Optimaliseren van het netwerk

Het is verstandig om te kijken of het netwerk geoptimaliseerd kan worden. Dit gebeurt meestal na het maken van veranderingen in een neuraal netwerk. Het netwerk werkt op dit moment nog niet optimaal, maar er was niet voldoende tijd om het optimaliseren af te ronden. Er is gekeken naar mogelijkheden om het netwerk te optimaliseren. Daarnaast is er gekeken welke vervolgstappen er nog genomen kunnen worden. Dit optimaliseren is gedaan aan de hand van de manieren genoemd in onderzoeksvraag 3.3 van de Onderzoeksresultaten.

Door te kijken naar hoe het netwerk traint, kan de werking van het netwerk geanalyseerd worden. Tijdens het trainen van het netwerk worden een aantal gegevens opgeslagen in een tensorboard log. Het gebruik van tensorboard maakt inzichtelijk of er iets veranderd moet worden aan de manier waarop het netwerk getraind wordt. Dit wordt gedaan door middel van verschillende grafieken.

Figuur 45: Training Binary Cross-Entropy Loss Figuur 46: Training Accuracy (1=100%)

Figuur 47: Validation Accuracy (1=100%) Figuur 48: Validation Loss

In bovenstaande grafieken is het verloop van een trainingsproces te zien. De grafieken bestaan uit twee waardes, waarbij de horizontale as het aantal afgelegde epochs is. Elke epoch bestaat uit driehonderd steps die bestaan uit batches van twee. Er is gekozen om dit trainingsproces wat langer door te laten lopen, zodat visueel wordt op welk punt het netwerk het beste presteert. Voor het optimaliseren van het trainingsproces is vooral gekeken naar de validatie resultaten. De grafieken met daarin de trainingsresultaten zijn toegevoegd om meer informatie weer te geven over het trainingsproces.

Door te kijken naar de validation accuracy wordt zichtbaar of het netwerk wel of niet overfit. Wanneer de accuracy sterk omlaaggaat, betekent dit dat het netwerk aan het overfitten is. Het netwerk traint in dit geval te veel op de trainingsdata en presteert slecht op de validatiedata. Het beste punt om het trainen te stoppen, zou volgens Figuur 47 tussen de tien en veertien epochs zijn. De training- en

Aan de hand van de bevindingen kunnen een aantal conclusies getrokken worden. Het aantal epochs dat voor het trainen gebruikt wordt, ligt in het ideale geval rond de tien. Door het toepassen van Early- Stopping kan het beste punt van het trainen voor het model worden gebruikt. Deze techniek houdt de voortgang van een aantal voorgaande epochs bij. Wanneer er na een gegeven aantal epochs geen verbetering is, stopt het netwerk met trainen en wordt het resultaat van de beste epoch gebruikt. Door te kijken naar de validation loss kan er bepaald worden hoeveel stappen er genomen moeten worden om te kijken of er geen afwijkende resultaten zijn. De validation loss valideert namelijk of het netwerk goed aan het trainen is of niet. In Figuur 48 is een afwijking in de loss te zien bij epoch 3. De loss gaat tijdelijk omhoog, voordat deze bij epoch 5 weer omlaaggaat. Er is gekozen om Early-Stopping na drie stappen toe te passen om rekening te houden met eventuele langer durende afwijkingen. Het aantal epochs voor het trainen zal ook verhoogd worden naar dertien. Hiervoor is gekozen, omdat het ideale aantal epochs rond de tien ligt. Daarnaast moet er voor Early-Stopping een uitloop van drie epochs zijn.

Voor het trainen van het netwerk zijn zowel de nieuwe hoeveelheid epochs als Early-Stopping toegepast. De resultaten van het netwerk zijn echter nog niet optimaal. Er kan nog naar onderwerpen zoals de opbouw van het netwerk (door te kijken naar het aantal neuronen per laag) en de werking van de loss functie gekeken worden (of deze wel het gewenste resultaat heeft). Op deze manier kan het netwerk nog beter geoptimaliseerd worden. Daarnaast blijft het een aanbeveling om meer trainingsdata voor het trainen te verkrijgen.

9 Reflectie

De initiële doelstelling van de opdracht was om het datacollectie systeem voor het Vesalius netwerk te verbeteren. Het toepassen van Multi-Task Learning werd als uitbreiding aan de afstudeeropdracht toegevoegd, omdat het niet zeker was of deze zonder de uitbreiding complex genoeg zou zijn. Na het opstellen van de requirements, het uitvoeren van een onderzoek en het maken van een begin aan de realisatie, bleek de opdracht toch complexer te zijn dan gedacht. Het is wel gelukt om aan beide onderdelen te werken en deze ook grotendeels af te ronden.

Het verbeteren van het datacollectie systeem is volledig afgerond wanneer de resultaten vergeleken worden met de opgestelde requirements. Er staat er nu een systeem dat goed te gebruiken is voor het verzamelen van nieuwe trainingsdata. Daarnaast is aan requirements voldaan. Het uitbreiden van het Vesalius netwerk is helaas niet helemaal afgerond. De requirements voor de uitbreiding van het netwerk zijn wel afgerond. Het netwerk herkent nog steeds het wondgebied in de afbeelding. Daarnaast achterhaalt deze nu ook de nieuwe informatie. De keerzijde is dat het toevoegen van Multi- Task Learning tot minder accurate resultaten heeft geleid. Er is helaas niet genoeg tijd geweest om de resultaten van de nieuwe informatie in de app te visualiseren.

Wanneer ik terugkijk naar wat er gevraagd werd en wat er uiteindelijk gerealiseerd is, ben ik erg tevreden. Ik heb af gekregen wat ik af wilde hebben en daarnaast heb ik een interessant en mooi product neergezet. Het doel om de techniek ook beschikbaar te maken voor de zorg, heeft ervoor gezorgd dat ik enthousiast ben geworden over het systeem. Het product is op dit moment nog niet zover, maar dit laat wel zien wat de mogelijkheden zijn voor de toekomst van Ons Wondzorg.

10 Aanbevelingen

Opslaglocatie feedback afbeeldingen

Er is een structuur opgezet waarbij het neurale netwerk nieuwe modellen traint met trainingsdata van de Github-Repository en feedback data van de API. Dit is gerealiseerd bij het automatisch hertrainen. Verder is er bedacht om de feedback data in een centrale interne database op te slaan. Het inrichten van de database en de daarbij horende structuur vergt echter veel tijd. Er is besloten om deze uitbreiding toe te passen in een later stadium. De manier waarop dit momenteel geregeld wordt, is om beide applicaties op dezelfde server te houden. Binnen deze server kan er gebruik gemaakt worden van een synchronisatiecommando om de feedback data te kunnen gebruiken bij het trainen. (Her)trainen van het neuraal netwerk

Bij het automatisch opnieuw trainen wordt een commando uitgevoerd. Dit commando zorgt ervoor dat er een nieuw model getraind wordt. Dit model heeft geen kennis van de vorige trainsessie. Het zal beter zijn om te kijken naar het effect van het verder trainen van een al eerder getraind model.

Beveiliging Github API-token

In de Release structuur van de nieuwe situatie wordt een API-token gebruikt om toegang te krijgen tot het downloaden van trainingsdata en het releasen van getrainde modellen. De token wordt opgeslagen in een Ansible-Vault. Op het moment dat er bij het deployen het juiste wachtwoord wordt meegegeven, wordt dit wachtwoord ge-decrypt. Op deze manier kan de token gebruikt worden in de release omgeving zonder dat deze zichtbaar is in de code. Hierdoor is de token voor iedereen op de server beschikbaar. Naar mijn mening moet hiervoor een betere oplossing bedacht worden. Er moet een manier worden bedacht waarbij de token niet zomaar door iedereen benaderd kan worden. De token kan dan wel in de code toegepast worden maar niet door alles en iedereen ingezien worden.

11 Literatuur

GitHub. (sd). CS231n Convolutional Neural Networks for Visual Recognition. Opgehaald van GitHub: http://cs231n.github.io/neural-networks-3/#sanitycheck

Multitask learning in TensorFlow with the Head API. (2019, januari 4). Opgehaald van Towards Data Science: https://towardsdatascience.com/multitask-learning-in-tensorflow-with-the-head- api-68f2717019df

Red Hat, Inc. (2020, april 17). cron - Manage cron.d and crontab entries - Ansible Documentation. Opgehaald van Ansible: https://docs.ansible.com/ansible/latest/modules/cron_module.html Ronneberger, O. (2015). U-Net: Convolutional Networks for Biomedical Image Segmentation.

Opgehaald van Uni Freiburg: https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/ Sankesara, H. (2019, januari 23). UNet - Towards Data Science. Opgehaald van Towards Data

Science: https://towardsdatascience.com/u-net-b229b32b4a71

Sreeni. (2019, december 3). 73 - Image Segmentation using U-Net - Part1 (What is U-net?) - YouTube. Opgehaald van YouTube: https://youtu.be/azM57JuQpQI?t=928

Tang, L. (2006, november 6). Multitask learning. Opgehaald van Lei Tang: http://leitang.net/presentation/multitask.pdf

TensorFlow. (2019, oktober 2). Github TensorFlow. Opgehaald van Github:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/i ndex.md