vrijdag 26 februari 2016

MRI - 26 - En wat nu?

De belangrijkste aanpassing die ik nu wil proberen is de afbeeldingsgrootte aanpassen van 64x64 naar 106x106. Leuk ... maar dat neemt wel veel meer rekentijd. Momenteel doet hij 4.4 minuten per iteratie over. Dat is dus voor 200 iteraties zo'n 14.5 uur! Hij is al bij de 170 dus nog maar 2,2 uur. (even voor 23:30 vanavond). Dat is heel wat langer dan met de 64x64 variant met 53 seconden per iteratie. Ik heb mij maar eens aangemeld voor cuDNN van Nvidea waarmee een 4 tot 5x snelheidsverhoging zou kunnen worden verkregen. Ik wil echter wachten met de installatie om te voorkomen dat er nu allerlei problemen ontstaan.



Slicedistance: Tja, en wat zouden we nog meer kunnen om de score te verbeteren? In ieder geval kan de slice afstand worden meegenomen als gegeven. Die metadata waarde was ik, naast leeftijd en geslacht, nog vergeten. Uiteraard een heel belangrijke omdat het de 3e dimensie grootte aangeeft. Misschien dat de randgrootte, waarin de metadata is opgenomen in de afbeelding, nog ruimer moet. (nu 3 pixels om bij de convoluties niet te 'verdwijnen'.)

Modellen: Momenteel worden de systolische en de diastolische waarden in aparte modellen berekend. Ze krijgen wel beide de systolische en diastolische posities als input. Wellicht werkt 1 model met 2 outputs dan beter. Of 2 modellen met gesplitste input. Gevoelsmatig werkt de eerste beter. Uiteraard kunnen ook alle parameters uit het model worden aangepast. Er zijn nu afwisselend 6 convolutie lagen, 3 maxpooling en 4 dropout lagen. Best veel. Optimalisatie is 'Adam'. Ken ik op zich niet. Tot nu toe alleen met wat andere optimalisatie routines gewerkt. (sgd, rmsprop adagrad). De leernauwkeurigheid staat op 0.0001. Ook mee te experimenteren.  

Uint8: Toen ik in een tussenresultaat bijna volledig zwarte afbeeldingen kreeg heb ik ontdekt dat dat aan de conversie naar uint8 lag (unsigned byte). In het gebruikte voorbeeldmodel werd een aanroep gedaan naar de imresize functie van Scipy. Deze blijkt zelf te schalen naar een getal tussen 0 en 255 en tevens de input om te zetten naar een uint8. Omdat ik deze functie niet meer gebruikte bleef mijn matrix tussen 0 en 1. Met het maximum altijd op 1. Vandaar de witte puntjes in mijn eerdere afbeeldingen. Voor de snelheid en wellicht ook het terugbrenging van ruis kan ik nu toch ook weer uitgaan van uint8.

2/4 Chamber view: Ik wilde ook de 2 en 4 kamer view toevoegen aan het NN. Deze moeten toch ook heel veel informatie kunnen bijdragen aan de verwachte volumes. Nog niet zeker of ze nou het beste in een eigen model moeten worden getraind of in het (de) zelfde model(len).

Pre-learning: Een extra mogelijkheid waarmee ik al eerder bezig ben geweest is natuurlijk om het systeem eerst (handmatig) specifieke zaken te leren. Zoals de positie van het LV (linker boezem) en de positie van het aanknopingspunt van de hartkleppen bij de 2ch / 4ch view. Dit kan dan bijvoorbeeld als input dienen om  een nauwkeuriger uitsnede van de afbeelding te maken.

Eens kijken waar ik op uit ga komen met (een paar van) deze aanpassingen.  



      

Geen opmerkingen:

Een reactie posten