R - Merkmalsextraktion in Radiographie und CT Bildern mit ML (Teil 2) (Stefan Bosse) [01.2024]

Merkmalsextraktion in Radiographie und CT Bildern mit ML (Teil 2)

Ziel ist die Markierung von versteckten Poren in Druckgussbauteilen (Platten) mittels X-ray Radiographie Bildern. Da es in gemessenen Bildern von realen Proben keine zuverlässige Kenntnis und Charakterisierung der Poren a-priori gibt werden synthetische Bilder mit Ground Truth Markierungen (von Poren und deren ROI Boundingboxen) verwendet um ein datengetriebene Prädiktormodell zu trainieren.

Das Prädiktormodell ist ein einfacher Pixelklassifikator. Ein Pixelklassifikator soll entscheiden ob ein Pixel eines Bildes zu einer bestimmten Klasse gehört, hier Pore oder nicht. Dazu wird ein bereich um das zentrale Pixel betrachtet (Maskierung, z.B. 20 × 20 Pixel Maske). Es wird ein einfaches Convolutional Neural Network als Musterdetektor verwendet.

Eingabe des CNN ist eine Ausschnitt des gesamten Bildes, Ausgabe ist hier ein skalarer Wert 0..1 der eine Vorhersage der Zugehörigkeit des zentralen Pixels des Ausschnitts zu einer Pore gibt.

Daten

In dieser Übung werden Radiographie Bilddaten von einer von Aluminium Gussbauteilen mit prozessbedingten Poreneinschlüssen verwendet. Die Bilder repräsentieren die Dichteverteilung orthogonal zur Oberfläche 8also in die Tiefe gehend, Zentralprojektion). Die Proben stammen von Fraunhofer IFAM, Bremen (Dirk Lehmhus), die Messdaten vom Fraunhofer IFAM, Bremen (Dirk Lehmhus) mit einer industriellen Röntgenanlage (Pixelgröße des Detektors ist 200μm, typische Vergrößerung M=2).

  1. Synthetische X-ray Radiographie Daten (Simulation) mit Ground Truth Labeling (ROIs); Bilder 1 und 2;
  2. Reale X-ray Radiographie Messdaten, hier Bild 3.

DATA: Variable PlateWRanElliPores1 Type: Binary DATA: Variable PlateWRanElliPores2 Type: Binary DATA: Variable BT226004 Type: Binary DATA: Variable ROIS1 Type: { x : number, y : number, path : { x : number, y : number } [17], name : string } [1][60] DATA: Variable ROIS2 Type: { x : number, y : number, path : { x : number, y : number } [17], name : string } [1][60]


R Starten

 ▸ 
[]
 ✗ 
 ≡ 


R Set-up

 ▸ 
[]
 ✗ 
 ≡ 


Daten

 ▸ 
[]
 ✗ 
 ≡ 

Aufbereitung der Daten

Zunächst visuelle Inspektion der Bilder:


Plot eines Bildes

 ▸ 
[]
 ✗ 
 ≡ 

Boundingboxen als Umrandung des ROI (Platte im X-ray Bild) können manuell ermittelt werden (Verwendung von plot(...,crosshair=TRUE))


Beschneidung der Bilddaten (Cropping)

 ▸ 
[]
 ✗ 
 ≡ 

Zum trainieren des CNN werden annotierte (gelabelte) Beispieldaten benötigt. Annotierte Bilder werden aus den ROI Listen der synthetischen (simulierten) Bilder gewonnen.

Die ROI Listen stammen von einem CAD Modell einer synthetischen Platte mit randomisiert verteilten Poren. Mittels X-ray Bildsimulation wurden die radiographischen X-ray Bilder erzeugt. Die Bilder besitzen als Koordinatensystem Pixeleinheiten, die ursprünglichen ROIs aus dem CAD Modell sind in physikalischen Einheiten (mm) angegeben und müssen in Pixelkoordinaten umgerechnet werden. Dies geschieht nachfolgend.


Transformation der ROI Label Listen

 ▸ 
[]
 ✗ 
 ≡ 

Die Umrechnung ist etwas "tricky", daher besser die Übereinstimmung der ROI Boundingsboxen mit den Poren im Radiographiebild nachfolgend prüfen.


Ausgabe ROI

 ▸ 
[]
 ✗ 
 ≡ 

Die ROIS (x,y,path) stammen aus der CAD Modellierung der synthetischen Platten. Es fehlen noch rechteckige Bereiche ohne Poren, d.h., Hintergrund. Diese können manuell ausgewählt werden (s.o.)


Background ROIs

 ▸ 
[]
 ✗ 
 ≡ 


Plot eines annotierten synthetischen Bildes (1/2)

 ▸ 
[]
 ✗ 
 ≡ 

Jetzt müssen die Trainings- und Testdaten aus den vorherigen ROI Listen extrahiert werden.


Erzeugen der Bildsegmente für die Merkmalsklassen P und N

 ▸ 
[]
 ✗ 
 ≡ 


Plot eines Bildsegments

 ▸ 
[]
 ✗ 
 ≡ 

Frage. Würde man mittels visueller Inspektion der Segmentbilder Poren von Hintergrund unterscheiden können?

CNN Pixel Klassifizierer

Ein semantischer Pixelklassifizierer ist lokaler Strukturdetektor mit dem Ziel ein Eingabebild auf ein Merkmalsbild abzubilden. Dazu wird der Pixeklklassifizierer auf alle Pixel des Eingabebildes angewendet. Um lokale Strukturen erkennen zu können wird ein Bildausschnitt rund um ein zentrales Pixel benötigt, z.B. ein Segment mitd er Größe von 20 × 20 Pixel.

#pixelcls


Erzeugen des CNN Pixelklassifizier Modells

 ▸ 
[]
 ✗ 
 ≡ 

Der Pixelklassifizierer besteht aus:

  1. Einer ersten Filterschicht (Convolution) mit 4-8 Filtern (Kernels) der Größe 5 × 5 pixel. Jedes Filter ist mit 25 Parametern unabhängig konfigurierbar und trainierbar. Diese Schicht wird direkt auf die kleinen maskierten Eingabilder als Teilausschnitt des großen Bildes angewendet.
  2. Einer Poolingschicht. Im Grunde wieder eine Filterschicht, aber nicht dynamisch parametrisierbar sonder mit einer statischen Funktion, hier die Maximumsfunktion. Diese wählt aus der Filtermaske den größten Wert als Wert für die Zielmatrix aus.
  3. Optional weitere Convolution-Pooling Schichtenpaare.
  4. Eine neuronale vollständig verbundene Schicht, d.h. jedes Neuron dieser Schicht (mindestens eines oder eines pro Zielklasse!) wird mit allen Elementen der Matrizen der letzten Ausgabeschicht verbunden. Die Verbindungen sind gewichtet und parametrisierbar.

Trainings- und Testdaten


Erzeugen der gesamten Datentabelle

 ▸ 
[]
 ✗ 
 ≡ 

Die Trainingsdaten sollten in der Reihenfolge randomisiert werden (Shuffling). Dies kann einfach mit der sample Funktion erreicht werden.


Erzeugen der Trainings- und Testdatentabelle (Sampling)

 ▸ 
[]
 ✗ 
 ≡ 

Training


Training des Modells

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Führe das Training durch. Wähle zunächst 10 Epochen. Dann notiere den letzten Klassifikationsfehler (error) und den "Verlust" (loss). Führe nach 10 Epochen nachfolgenden Test mit den Trainings- und Testdaten durch. Gibt es Unterschiede, und warum könnte der fehler des nachfolgenden Tests (mit den Trainingsdaten) vom letzten ausgegeben Fehler des Trainings abweichen? Führe weitere 10 Trainingsepochen durch (usw.).

Test


Test des Modells

 ▸ 
[]
 ✗ 
 ≡ 

Frage. Was gibt die Prädiktion (predict) zurück? Welche Bedeutung hat der Score Wert?

Inferenz


Anwendung des Modells auf ein gesamtes Bild

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Wende die Inferenz auf ein synthetisches und das eine gemessene Bild an. Wie sind die Ergebnisse?


Raum für weitere Experimente

 ▸ 
[]
 ✗ 
 ≡ 


Created by the NoteBook Compiler Ver. 1.27.1 (c) Dr. Stefan Bosse (Tue Feb 20 2024 23:06:57 GMT+0100 (Central European Standard Time))