Im Rahmen des Projekts „Dr. Skinner“ wurde ein eigenes Convolutional Neural Network in PyTorch entwickelt, das Fotos von Hautkrankheiten einer von 21 angelernten Krankheitsklassen oder einer neutralen Klasse zuordnet. Als Trainingsgrundlage diente ein öffentlicher Datensatz von Kaggle mit insgesamt 15.400 Bildern.. Im Vordergrund stand für unsere Gruppe der Lerneffekt des Projekts. Daher haben wir eigene und vortrainierte Modelle eingesetzt und vergleichen, sowie die Auswirkungen von Parameteränderungen untersucht.
Zentraler Bestandteil der Arbeit sind
die systematische Auswahl und Aufbereitung der Rohdaten,
der Aufbau und das Training mehrerer Modellvarianten einschließlich eines Vergleichs mit vortrainierten ResNet-Netzwerken,
die Optimierung wesentlicher Hyperparameter (Schichtanzahl, Batch Size, Epochen, Datenaugmentation),
sowie die Evaluation der Modellleistung anhand quantitativer Kennzahlen und visueller Analysen (Grad-CAM).
1. Datenauswahl und -beschaffung
Systematische Recherche öffentlicher Bilddatensätze für Hautkrankheiten
Auswahl eines Kaggle-Datensatzes mit 21 Krankheitsklassen und einer neutralen Klasse (insgesamt 15.400 Bilder)
2. Codeverwaltung
Gemeinsame Codebasis in einem GitHub-Repository
Branching-Strategie für Features, Bugfixes und Experimente
3. Datenzugriff und -vorbereitung
Download des Datensets über die Kaggle-API (Authentifizierung mittels persönlichem Kaggle Key)
Vorverarbeitung:
Versuch, sichtbares Wasserzeichen zu entfernen
Aufteilung in Trainings-, Validierungs- und Testsplit
4. Aufbau und Training des eigenen Modells
Implementierung eines Convolutional Neural Network in PyTorch
Verwendung von TomlReader zur externen Konfiguration folgender Parameter:
Anzahl der Schichten
Batch Size ◦ Anzahl der Epochen
Lernrate und Optimierer
Training auf einer Nvidia-GPU (CUDA) bzw. auf AMD-GPU unter Linux, ansonsten CPU
5. Vergleich mit vortrainiertem ResNet
Einbindung und Fine-Tuning von ResNet-18 und ResNet-34 als Referenzmodelle
Einheitliche Trainings- und Evaluierungsprotokolle für fairen Leistungsvergleich
6. Modell- und Architekturoptimierung
Variation der Modelltiefe
Einfache Netze (weniger Schichten)
ResNet-18 vs. ResNet-34
Datenaugmentationsverfahren zur Erhöhung der Datensatzvariabilität
Rotation, Spiegelung, Cropping
Anpassung der Batch Size
Variation der Epochenzahl
Reduktion der Anzahl der Klassen auf vier Hauptgruppen zur Verbesserung der Klassenbalance
Integration zusätzlicher Residual Connections in eigener Architektur
Visuelle Evaluierung mit Grad-CAM-Heatmaps zur Überprüfung der Lernfokusbereiche
7. Hardwarebeschleunigung
Einsatz von CUDA für Training und Inferenz auf Nvidia-GPUs
Alternative Nutzung von AMD-GPUs unter Ubuntu, um Plattformunabhängigkeit zu gewährleisten
Einfluss des Datensatzes
Der gewählte Kaggle-Datensatz mit 21 Krankheitsklassen und einer neutralen Klasse erwies sich in mehrfacher Hinsicht als limitierend.
Starkes Klassenungleichgewicht: Die Anzahl der Bilder pro Klasse variierte zwischen 275 und 1 651, was selbst mit Klassengewichtung zu verzerrten Modellergebnissen führte.
Heterogene Bildaufnahmen: Kombination aus Ganzkörper- und Nahaufnahmen erschwerte das Erlernen konsistenter Merkmale.
Wasserzeichen: Automatisierte Entfernung war nur bedingt erfolgreich. Der zeitliche Mehraufwand für Vorverarbeitung überstieg den Nutzen.
Grad-CAM-Auswertung: Wasserzeichen beeinflussten die Entscheidungspfade des Netzwerks aber nur marginal. Insgesamt deutet dies darauf hin, dass die Detailunterschiede der Hautkrankheiten in Kombination mit der geringen Datenmenge pro Klasse für das Netzwerk zu fein sind, um zuverlässig erlernt zu werden.
Auswirkungen der Parameteranpassung
Systematische Variation einzelner Hyperparameter lieferte differenzierte Erkenntnisse zur Trainingsstabilität und Genauigkeit:
Batch Size
Wechsel von 1 auf 8 führte zu einem deutlichen Anstieg der Validierungsgenauigkeit.
Weitere Erhöhung brachte keine nennenswerte Verbesserung.
Klassenreduktion
Eingrenzung auf die vier häufigsten Krankheitsgruppen steigerte die Klassifikationsgenauigkeit, da das Klassenungleichgewicht abnahm.
Auswahl anhand für Laien sichtbarer optischer Unterschiede führte zu einer weiteren Leistungssteigerung, trotz insgesamt geringerer Bildanzahl.
Netzwerkarchitektur
Reduktion der Schichten im selbstentwickelten Modell verbesserte die Konvergenz und verringerte Überanpassung (Overfitting).
Erhöhung der Epochen über 10 hinaus zeigte bei keinem Modell signifikante Verbesserungen.
Bilddimensionen
Variationen oberhalb eines Schwellenwerts („nicht zu klein“) hatten nur marginale Effekte auf die Modellleistung.
Hardwarebeschleunigung und Plattformwahl
Unter Windows stehen nur Nvidia-GPUs (CUDA) zur Beschleunigung zur Verfügung; AMD-Karten werden nicht unterstützt, wodurch Training im CPU-Modus deutlich langsamer erfolgt.
Als praktische Lösung wurde Ubuntu eingesetzt, da hier auch AMD-GPUs genutzt werden können.
Deutliche Reduzierung der Trainingszeit pro Epoche mit GPU Unterstützung im Vergleich zur reinen CPU-Berechnung.
Weitere technische Herausforderungen
Gelegentliche Systemabstürze unter Linux während der Modellberechnung erschwerten reproduzierbare Experimente.
Hintergrundprozesse terminierten nicht immer automatisch, was manuelle Eingriffe erforderte.
Artefakte in der GPU-Speichernutzung ließen sich nur durch Neustarts vollständig bereinigen.
Zusammenfassende Erkenntnisse und Ausblick
Die Modellgenauigkeit hängt in hohem Maße von der Qualität und Struktur des Datensatzes ab, ebenso wie von der gewählten Trainingskonfiguration. Vorab ist nicht eindeutig bestimmbar, welche Kombination aus Schichtanzahl, Epochenzahl und Datenaugmentation die besten Ergebnisse liefert. Trial-and-Error bleibt aktuell das primäre Vorgehen.
Für zukünftige Weiterentwicklung empfiehlt sich die Implementierung eines automatisierten Hyperparameter-Optimierungsframeworks (z. B. Bayesian Optimization oder Grid Search), um den manuellen Abstimmungsaufwand zu reduzieren.
Der Vergleich mit vortrainierten ResNet-Modellen bestätigte, dass ResNet-18 und ResNet-34 eine höhere Grundgenauigkeit aufweisen als das selbstentwickelte Modell. Ein Wechsel von ResNet-18 auf ResNet-34 brachte jedoch keinen signifikanten Mehrwert, sodass hinsichtlich Modellkomplexität ResNet-18 als effizientere Ausgangsbasis betrachtet werden kann.
GitHub Repo
https://github.com/APohl24/Dr.-Skinner
Dataset
https://www.kaggle.com/datasets/pacificrm/skindiseasedataset
Python Framework Pytorch
https://pytorch.org/
ResNet - Vortrainiertes Modell
https://pytorch.org/hub/pytorch_vision_resnet/
CUDA GPU Hardwarebeschleunigung
https://developer.nvidia.com/cuda-toolkit
Konfiguration TomlReader
https://github.com/xoofx/Tomlyn
Heatmaps über Grad Cam
https://github.com/jacobgil/pytorch-grad-cam
Team & Rollen
André Pohlmann
Ammar
Stefan Kraneburg
Stefan 2
Mentor:in
Nils Uhrberg