zaterdag 11 februari 2017

Even spelen met DL

Siraj heeft een prachtige serie, door zijn snelheid haast onnavolgbare, tutorials over deel learning. Een daarvan gaat over 'de AI artist'. Gaaf om eens even mee bezig te gaan. Het blijkt vrij makkelijk om aan het werk te krijgen alleen werkt deze met (veel) 'runtime attributen', dus even precies nagaan hoe dat ook alweer moet werken. Gelukkig zijn de meeste optioneel.

Door het combineren van kunstenaarsstijl en een bestaande foto kunnen prachtige kunstwerken worden gerealiseerd. Hier wat voorbeelden. In de derde kolom staat uiteraard het resultaat meesterwerk.







Maar soms gaat het niet helemaal goed :-)


Maar dan daarna zijn het weer meesterwerkjes:










woensdag 8 februari 2017

03- Lungs - histogrammen

De heb ik dus omgezet naar 1595 numpy files die op zichzelf ook weer 235gB innemen. Hmmm misschien had ik daar toch even iets langer bij stil moeten staan. Er zijn daarover ook in de kaggle competitie wat suggesties gedaan.
Elke file is genormaliseerd naar HU waarden en tevens naar dezelfde 'fysieke standaard'. 1mm x 1mm x 1mm pixels. Dus 10 pixels per centimeter. Een scan kan dan bijvoorbeeld 151 afbeeldingen van 310 x 310 pixels zijn. Dus ook evenredig met het aantal millimeters.

Ik kan nu kijken hoe de verdeling van de waardes zijn in een dergelijk blok van pixels.



Rond de -1000 is lucht en rond de nul is water. De kanker zochten we tussen -300 en -50. Dan moeten we het water waarschijnlijk voor een belangrijk deel proberen uit te sluiten. Als ik inzoom op het nulpunt denk ik dat ik HU waarden hoger dan -20 helemaal moet uitsluiten. En wellicht ook kleiner dan -330 oid. 


Ingezoomd rond nul.
De redenatie rond de gauss krommen lijkt leuk maar ik ik maar daar een denkfout. Door te vermenigvuldigen met de gauss-kromme worden de HU waarden aangepast en kruipt de hoogste frequentie rond het nulpunt. De hoogste pieken zitten echter wel rond de locaties met de te zoeken HU-waarden. Ik denk dat ik het effect alleen met een soort statistische relatie kan weergeven. Even kijken of dat lukt.
  Nog iets teveel nulwaarden erin. Ik breng de breedte terug van 150 naar 100:
En hier inclusief de emphysema en de calc. (Hoewel de laatste in de grafiek wegvalt)



 Zou het zo onderscheidende 'features' opleveren? Laat ik eens een kanker geval ernaast zetten.


Hmmm, alleen op het oog hier vooral door de emphysima. Ik ben benieuwd!!!

Hier is een beter zicht op het verschil:

Geen kanker

Wel kanker


 

dinsdag 7 februari 2017

02- Lungs - Meer onderzoek naar HU waarden

Een prof (Dr. Bram van Ginneken, Professor of Functional Image Analysis at Radboud University Medical Center, ) Heeeee Nederland!!!!neemt ons mee door een aantal ct-scans om aan te geven wat er feitelijk gezocht moet worden.  Daarin worden als je goed kijkt zowel de laag als de HU- waarde van de scan weergegeven. Het vraagt wat handigheid om de video op de goede tijd te stoppen maar dan lijkt er een beeld te ontstaan welke HU waarde de kankercellen en andere indicatieve kenmerken hebben.

Hier een stukje uit het in de video behandelde onderzoek met de relevante 'predictors':



Helaas zijn er geen zaken als sex, familie geschiedenis en leeftijd in de data beschikbaar. Wel emphysema / nodule size / location of nodule / part-solid (HU waarde?) / Lower nodule count / spiculation. Althans daar ga ik vanuit dat dit uit de afbeeldingen en de HU waardes is af te leiden.
Ik leg voorlopig ongeveer deze waarden vast:


# calcium > 1000
# cancer : -300 <-> -50
# emphysima -1005<-> -800 

Het eerste idee is dat ik deze reeksen wellicht kan benadrukken door er een juiste 'gauss-kromme' op los te laten.  
De schaal krijg ik even niet gelijk aan de HU-schaal dus ik heb er 2000 bij op geteld. De piek rond 1000 is dus de emphysima, De brede piek zijn de kankercellen en de piek bij 3000 is calcium. De rest van de HU waarden zijn dan vermoedelijk onnodig en kunnen naar nul worden teruggebracht. Daarmee wordt de beschikbare data wellicht een heel stuk teruggebracht. De breedte van curves moet ik ook nog wat mee experimenteren. 










maandag 6 februari 2017

01- Lungs - Nieuwe kaggle competitie: Data Science Bowl 2017 Can you improve lung cancer detection?

Druk druk druk ....
De nieuwe kaggle competitie https://www.kaggle.com/c/data-science-bowl-2017  houdt mij aardig bezig. Eerst een jottabyte aan gegevens downloaden .... Oke meer in de richting van 150gB maar toch ... Heel veel data voor een 1595 patienten waarvan weer slechts een deel,  1397 gelabeld zijn. (En dus 598 moeten worden 'geraden').

Gelukkig had ik wat ervaring met het dicom-medisch data type en zijn er veel tutorials bij geschreven. oa:

https://www.kaggle.com/gzuidhof/data-science-bowl-2017/full-preprocessing-tutorial/discussion
https://www.kaggle.com/ankasor/data-science-bowl-2017/improved-lung-segmentation-using-watershed/discussion 

Dat kan aardige plaatjes opleveren:

Maar het vraagt wel enorm veel datapreprocessingstijd. Een viertal dagen om alle data naar een beter bruikbare vorm om te zetten. Hierin wordt alles behalve de longen zoveel mogelijk weggefilterd. Tevens wordt alles omgezet naar zogenaamde Hu waarden. (Hounsfield Unit (HU)). Nu maar hopen dat dat goed is gegaan. Het lijkt er wel op. Deze is bijvoorbeeld redelijk:

De Hu waarden zijn : 

Waarom staan daar geen kankercellen bij ? :-) Gaan we uitzoeken.