Stain Detection
Software für die Erkennung von Flecken mittels neuronalen Netzen der Salienzerkennung.
Installation
Die Software ist in der Programmiersprache Python geschrieben. Dementsprechend wird ein entsprechender Interpreter benötigt. Außerdem nutzt die Software andere Python-Bibliotheken, wie PyTorch, NumPy und OpenCV. Um diese zu installieren wird der Paketmanager PIP genutzt. Des Weiteren ist es in Python üblich die Abhängigkeiten einzelner Projekte in virtuellen Umgebungen zu trennen. Dafür kommt hier venv zum Einsatz.
- Installiere Interpreter, Paketmanager und Manager für virtuelle Umgebungen:
sudo apt install python3 python3-pip python3-venv
- Erstelle eine virtuelle Umgebung:
python -m venv venv
- Laden der virtuellen Umgebung:
source venv/bin/activate
- Installation der Software:
./install.sh
Mit dem Script install.sh
wird die Software für die Fleckerkennung und deren Abhängigkeiten in der virtuellen Umgebung installiert.
Das bedeutet auch, dass man vor dem verwenden der Software immer sicherstellen muss, dass die virtuelle Umgebung geladen ist.
Nutzung
Alle unten aufgelisteten Befehle können mit dem Argument -h/--help
gestartet werden, um einen genauen Einblick in die möglichen Argumente zu bekommen.
- Datensatz vorverarbeiten:
python -m stain_detection.dataset.split
python -m stain_detection.dataset.patch_stain_based
python -m stain_detection.dataset.patch_sliding_window
- Training:
python -m stain_detection.train
- Salienzkarten berechnen:
python -m stain_detection.compute_sams
- Metriken Berechnen und Visualisieren:
python -m stain_detection.measures.compute_stats
python -m stain_detection.vis.rdr_curve
Aufbau
Das Projekt ist wie folgt strukturiert:
Unmittelbar im Ordner stain_detection
befinden sich ein paar Scripte für generelle Funktionen.
Mit stain_detection/train.py
kann ein Modell (weiter-)trainiert werden, mit stain_detection/compute_sams.py
können Salienzkarten berechnet werden und mit stain_detection/combine_sams.py
können mehrere Salienzkarten zu einer reduziert werden.
Des weiteren ist das Projekt in mehrere Submodule unterteilt, welche alle durch eigene Ordner in stain_detection/
definiert sind:
-
dataset
enthält Code um die Daten als Datensätze für das Training vorzubereiten und zu laden. -
measures
enthält Code um die Ergebnisse über verschiedene Metriken zu evaluieren. -
models
enthält Code zum Nutzen verschiedener neuronaler Netze der Salienzerkennung. -
util
enthält Utility Script die ich für verschiedene Untersuchungen genutzt habe. -
vis
enthält Scripte für die Visualisierung.
Dataset
-
split.py
erlaubt es die Splits der Daten anhand des Wäschestücks zu erstellen. Das wird fürs Training benötigt. -
transforms.py
enthält Transformationen für die Datenaugmentation beim Training. -
csv.py
enthält Code um einen Datensatz für das Training zu verwenden. Dafür wird der Ordner mit Daten benötigt sowie eine CSV-Datei in der Bildausschnitte definiert sind. So eine CSV-Datei kann mit den Scriptenpatch_stain_based.py
undpatch_sliding_window.py
erstellt werden.
Der Unterschied zwischen den beiden Methoden für die Erstellung von Bildausschnitten ist, dass patch_stain_based
Ausschnitte verschiedener Größe um gelabelte Flecken erstellt, während patch_sliding_window
Ausschnitte in immer der gleiche Größe erstellt indem ein Fenster über das Ausgangsbild geschoben wird.
Measures
-
pixel_wise.py
: Berechnung von pixelweise berechneten Metriken, wie Precision, Recall und Intersection over Union (IoU). -
region_wise.py
: Berechnung von regionenweisen Metriken bzw. der Region Detection Rate (RDR). -
compute_stats.py
: Berechnung der Daten auf denen die Metriken beruhen pro Bild (z.B. erkannte Regionen und falsche Vorhersagen). Das erlaubt verschiedene Parameter der Metriken zu nutzen. -
from_stats.py
: Berechnung und Ausgabe der Metriken basierend auf einer mitcompute_stats.py
erstellten CSV-Datei. -
util.py
: Utility Funktionen für die Berechnungen.
Models
-
__init__.py
enthält Code zum laden der verschiedenen Modelle - Die anderen Daten enthalten für die verschiedenen getesteten Modelle den Code, sowie Schritte zum Vorverarbeiten von Bildern und Nachbearbeiten der Outputs.
- Quellen zu den einzelnen Architekturen:
Vis
-
loss.py
: Visualisieren den Wert der Lossfunktion die während des Trainings optimiert wird. Dafür wird der Log eines Trainings benötigt. -
pr_curve.py
: Visualisiere eine PR-Kurve (Precision-Recall-Kurve). -
rdr_curve.py
: Visualisiere die RDR über verschiedene Schwellwerte. -
side_by_side.py
: Visualisiere Bilder indem sie nebeneinander dargestellt werden.
Daten
- Basisgewichte und vor-trainierte Gewichte verschiedener neuronaler Netze: Weights
- Erster aufgenommener Datensatz mit einer Beleuchtung und blindem Fleck in der Mitte: Dataset: Blindspot
- Zweiter aufgenommener Datensatz mit drei Beleuchtungen: Dataset: Three-Illuminations