Trénink klasifikátoru

Trénink klasifikátoru Kateřina Eliášová St, 15.04.2020 - 21:44

Upravený snímek (případně originál, který úpravu nevyžadoval) vstupuje do tréninku klasifikátoru. Zvolíme plugin TWS (Plugins>Segmentation>Trainable Weka Segmentation) – snímek se otevře znovu v klasifikátoru. Pak nastupuje ruční  označování struktur značkami (traces) a jejich přiřazování do tříd, trénink klasifikátoru a další úprava značek, přidání dalších tříd, dokud výsledná segmentace neodpovídá strukturám, které hodnotíme. Výsledný klasifikátor uložíme spolu s datovým souborem, který obsahuje informace o klasifikaci pixelů (ve formě vektorů), náležejících jednotlivým značkám. Výsledkem "práce" klasifikátoru je barevný segmentovaný obraz (Classified image) a pravděpodobnostní mapy (Probability maps) jednotlivých tříd, do kterých jsme přiřadili značky pro jednotlivé struktury. Segmentovaný obraz je výsledkem mnoha matematických operací, které probíhají na pozadí při tréninku klasifikátoru nebo při generování výsledků. Doba, po kterou tyto operace probíhají, závisí na vlastnostech počítače. Postup jsme po jednotlivých krocích popsali v následujících lekcích.

 

Několik úvodních kroků spuštění klasifikátoru je v přiloženém makru.

// Makro pro spuštění tréninku klasifikátoru Weka.
// Viz https://imagej.net/Trainable_Weka_Segmentation#Complete_macro_example:
// Uživatel vybere soubor, pravděpodobně s příponou TIF.

path = File.openDialog("Select a TIF File");
delay = 1000;
twsWindowName = "Trainable Weka Segmentation v3.2.34";
// Pokud nechcete pomocné texty, nastavte "false":
showMessages = true;


open(path);
 
// Spustíme TWS.
run("Trainable Weka Segmentation");
// Lepší je počkat.
wait(delay);
selectWindow(twsWindowName);

// Připravné operace.
call("trainableSegmentation.Weka_Segmentation.setFeature", "Hessian=false");
call("trainableSegmentation.Weka_Segmentation.setMembranePatchSize", "16");
call("trainableSegmentation.Weka_Segmentation.setMaximumSigma", "8.0");
// Přejmenování a přidání tříd.
call("trainableSegmentation.Weka_Segmentation.changeClassName", "0", "background");
call("trainableSegmentation.Weka_Segmentation.changeClassName", "1", "cell wall");
call("trainableSegmentation.Weka_Segmentation.createNewClass", "cell no phenolics");
call("trainableSegmentation.Weka_Segmentation.createNewClass", "cell with phenolics");

// Stanovení "oblasti zájmu" třídy - kde bude probíhat trénink pro danou třídu.
// Možná by se oblast zájmu mohla nastavit i pro ostatní třídy?
/*
makeRectangle(0, 0, 100, 100);
title = "Vyberte ROI pro cell wall";
msg = "Vyberte obdélník\nPro pokračování klepněte na 'OK'.";
waitForUser(title, msg);
// add one region of interest to each class
call("trainableSegmentation.Weka_Segmentation.addTrace", "1", "1");
*/

// BACKGROUND
run("Line Width...", "line=50");
setTool("freeline"); 
wait(delay);
if (showMessages) {
  msg = "<html>Vyberte vzorky pro trénink pozadí a přidávejte je tlačítkem <strong>Add to background</strong>.<br />"
      + "Šířku linky upravte poklepáním na Freehand lines.</html>";
  showMessage(msg);
}




 

 

 

1 - Otevření upraveného obrázku v pluginu Trainable Weka Segmentation

1 - Otevření upraveného obrázku v pluginu Trainable Weka Segmentation Kateřina Eliášová Čt, 16.04.2020 - 23:33

V nabídce ImageJ zvolíme plugin TWS (Plugins>Segmentation>Trainable Weka Segmentation) – otevřený snímek se otevře znovu v okně klasifikátoru. Pokud není žádný snímek otevřený, otevře se složka, ve které jsou připravené snímky uložené s výzvou k otevření snímku.

Na tréninkovém panelu vlevo (Training) se nacházejí tlačítka pro trénink klasifikátoru a generování výsledků: Train classifier spouští tréninkový proces; Toggle overlay umožňuje překlikávat mezi obrázkem s nakreslenými značkami a překryvným barevným výsledkem tréninku klasifikátoru a porovnávat jak se dosažená segmentace shoduje se strukturami na snímku; Create results generuje  a ukazuje výsledný barevný segmentovaný obraz; Get probability na základě aktuálního klasifikátoru zobrazuje pravděpodobnost, že každý pixel patří do definované třidy ve formě pravděpodobnostních map. 

Pod tréninkovým panelem je panel možností (Options): Apply classifier umožňuje aplikovat aktuální klasifikátor na jakýkoli snímek, připravený v souboru pro segmentaci (je třeba otevřít snímek a zvolit zda výsledkem má být segmentovaný obraz nebo pravděpodobnostní mapa); Load classifier umožňuje načíst dříve vytvořený a uložený klasifikátor a aplikovat na aktuální snímek; Save classifier uloží aktuální klasifikátor ve formátu .model pro pozdější použití. Load data načte data z předcházejících značek nakreslených do aktuálního nebo jiného snímku. Save data uloží data o aktuálně vytvořených značkách ve formátu ARFF. Create new class umožní vytvořit a pojmenovat novou třídu; výchozí počet tříd, se kterým klasifikace začíná, jsou dvě. V Settings je možné měnit matematické parametry klasifikace pixelů, přejmenovat třídy nebo změnit průhlednost překryvného výsledného obrazu, aby pod ním byl nebo nebyl vidět původní snímek histologického řezu (Results overlay opacity - výchozí nastavení je na hodnotě 33).

Na pravé straně se nachází panel se seznamem značek pro každou třídu a tlačítka pro přidání značky (tj. aktuálního ROI) do specifické třídy. 

2 - Přiřazení struktur do dvou tříd a první běh tréninku klasifikátoru

2 - Přiřazení struktur do dvou tříd a první běh tréninku klasifikátoru Kateřina Eliášová Čt, 16.04.2020 - 23:43

V předchozím textu jsme zmínili, že jsme pro segmentaci obrazu zvolili čtyři třídy. Podle výchozího nastavení ovšem začíná plugin TWS se dvěma třídami. Pokud histologický řez nevyplňuje celý snímek, je na počátku tréninku klasifikátoru vhodné odlišit vlastní řez od okolního pozadí. Proto jsme nejprve definovali třídy pozadí (background) a buněčná stěna (cell wall). Další dvě třídy jsme přidávali postupně, vždy po tréninku klasifikátoru. 

Značky do tříd je možné přiřazovat pomocí nástrojů pro kreslení ROI, které jsou k dispozici v nástrojovém menu ImageJ - použít lze obdélník, ovál, elipsu, polygon, štětec nebo od ruky kreslenou linku (freehand line), která má ve výchozím nastavení šířku 1 pixelu. Linka od ruky je automaticky vybrána při spuštění TWS a i my jsme ji používali výhradně. Šířku linky můžeme změnit v okně, které se otevře po dvojkliknutí levým tlačítkem myši na ikonu linky od ruky. Širší linku jsme používali pro značení celých buněk a pro označení pozadí kolem řezu, pro značení buněčných stěn byla vhodnější linka tenčí. Snímek můžeme zvětšovat nebo zmenšovat tlačítky "+" a "-" nebo po zapnutí lupy na nástrojové liště ImageJ také levým a pravým tlačítkem myši. 

Každou značku je třeba ručně přiřadit do třídy hned po nakreslení. Nepřiřazená značka po nakreslení další značky zmizí. Značku, kterou jsme po nakreslení přiřadili do třídy, ale nejsme spokojeni, s tím, jak jsme ji nakreslili nebo jsme se spletli a zařadili ji do špatné třídy, zrušíme dvojklikem levou klapkou myši na zápis v seznamu na pravé straně okna TWS. Není možné značku smazat přímo v obrázku. Po smazání v seznamu změní značka na obrázku barvu a po kliknutí na jiné místo ve snímku zmizí.

Na horním obrázku ukazujeme první nakreslené a do seznamů dvou tříd přidané značky.

Na dolním obrázku ukazujeme výsledek prvního kola tréninku klasifikátoru. Je zřejmé, že klasifikátor pouze odlišil řez od pozadí, do kterého zařadil i některé velké vakuoly.

 

3 - Přidání další klasifikační třídy, označení struktur, další běh tréninku

3 - Přidání další klasifikační třídy, označení struktur, další běh tréninku Kateřina Eliášová Čt, 16.04.2020 - 23:49

Dalším krokem po proběhnutí prvního tréninku klasifikátoru bylo nadefinování další třídy - buňky bez fenolů (Create new class) (viz horní obrázek). Značky, kterými jsme chtěli tyto ROI přiřadit do třídy, jsme kreslili přes celé buňky, snažili jsme se zahrnout celý obsah buněk včetně jader a vakuol. Samostatnou třídu buněčná jádra jsme nedefinovali, protože naším cílem bylo rozlišit celé buňky podle obsahu vakuol (+fenoly x -fenoly) a ne podle velikosti nebo tvaru jádra. Po přidání značek i do ostatních tříd, především do třídy buněčná stěna, jsme znovu spustili trénink klasifikátoru. Výsledek ukazuje prostřední obrázek. Je zřejmé, že se už do značné míry podařila segmentace buněčných stěn, ale stále ještě jsou některé vakuoly přiřazovány do třídy pozadí (překryvná barva je červená). Výsledek dalšího přidání značek do chybně klasifikovaných míst a následného tréninku ukazuje spodní obrázek. Je vidět, že stále méně vakuol je přiřazováno chybně, ale jádra jsou vzhledem k výraznému zbarvení často přiřazována do třídy buněčná stěna (překryvná barva je zelená).  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4 - Přidání čtvrté klasifikační třídy a čtvrtý běh tréninku

4 - Přidání čtvrté klasifikační třídy a čtvrtý běh tréninku Kateřina Eliášová Čt, 16.04.2020 - 23:53

Dalším krokem bylo vytvoření poslední, čtvrté třídy - buňky s fenoly (cell with phenolics). Na horním obrázku jsou vidět do snímku přidané žluté značky. Na spodním obrázku je výsledek následného tréninku klasifikátoru se žlutě vyznačenou oblastí buněk s obsahem fenolických látek především na pravé straně snímku. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 - Přidání značek a poslední běh tréninku

5 - Přidání značek a poslední běh tréninku Kateřina Eliášová Pá, 17.04.2020 - 00:18

Dalším přidáním značek a jejich přiřazením do příslušných tříd (viz horní obrázek) jsme se snažili zpřesnit segmentaci snímku (viz dolní obrázek). Vzhledem k uspokojivým výsledkům jsme se rozhodli ukončit trénink klasifikátoru. Výsledný model klasifikátoru a příslušná data o klasifikaci pixelů v jednotlivých ROI jsme uložili. Obojí je ke stažení v příloze. 

6 - Výsledný segmentovaný obrázek a pravděpodobnostní mapy

6 - Výsledný segmentovaný obrázek a pravděpodobnostní mapy Kateřina Eliášová Pá, 17.04.2020 - 00:21

Po ukončení tréninku klasifikátoru jsme vygenerovali (Create results) výsledný segmentovaný obraz (Classified image - horní barevný obrázek) a čtyři pravděpodobnostní mapy (Probability maps - černobílé obrázky pro jednotlivé třídy v pořadí od shora - pozadí, buněčná stěna, buňky bez fenolů, buňky s fenoly). Pravděpodobnostní mapa třídy buňky s fenoly se stala výchozím snímkem pro další kvantitativní analýzu, kterou popisujeme v kapitole Měření. 

Na segmentovaném snímku jsou oblasti spadající do jednotlivých tříd vyznačeny příslušnými barvami. Je zřejmé, že segmentace nebyla dokonalá, protože v buňkách bez obsahu fenolických látek (zbarveny fialově) jsou některá jádra částečně přiřazena do zelené třídy buněčná stěna a vyskytují se zde malé oblasti přiřazené do třídy buňky s fenoly; některé části vakuol v obou typech buněk byly přiřazeny do červené třídy pozadí. To znamená, že jsme trénink klasifikátoru ukončili příliš brzy a bylo třeba ještě pokračovat nebo je segmentace příliš obtížná vzhledem k podobnosti v odstínech barvení jader a buněčných stěn. Případně očima nevidíme zelenavé zbarvení v některých buňkách, které klasifikátor odhalil. 

Na černobílých snímcích pravděpodobnostních map je daná třída vždy vykreslena bíle.