Aufgabe 2

Fine-Tuning eines vortrainierten Modells (ResNet18)

Statt ein CNN von Grund auf zu trainieren, nutzt du Transfer Learning: Ein Modell, das bereits auf Millionen von Bildern trainiert wurde, wird für deine Pizza-Aufgabe angepasst. Erwartete Dauer: ca. 45 Minuten.

Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5 Aufgabe 6

Was ist Transfer Learning?

Stell dir vor, du stellst einen Koch ein. Option A: Du nimmst jemanden, der noch nie gekocht hat, und bringst ihm alles von Grund auf bei — vom Messerhalten bis zur Saucenherstellung. Option B: Du stellst einen erfahrenen Koch ein, der bereits jahrelang in verschiedenen Küchen gearbeitet hat, und zeigst ihm nur, wie deine speziellen Pizzarezepte funktionieren.

Transfer Learning ist Option B: Du nimmst ein Modell, das bereits gelernt hat, visuelle Merkmale zu erkennen, und passt es an deine spezifische Aufgabe an. In Aufgabe 1 hast du TinyVGG von Grund auf trainiert (Option A). Jetzt nutzt du ein vortrainiertes Modell (Option B).

Das Modell: ResNet18

ResNet18 ist ein Convolutional Neural Network mit 18 Schichten. Es wurde auf ImageNet vortrainiert — einem Datensatz mit 1,2 Millionen Bildern in 1.000 Kategorien (Hunde, Autos, Lebensmittel usw.). Das Modell hat ~11,2 Millionen Parameter und kennt bereits visuelle Konzepte wie Kanten, Texturen, Formen und Objekte.

Pretrained Backbone (Layers 1-17)            New Classifier Head
+-----------------------------------------+  +---------------------+
|                                         |  |                     |
| Layer 1-4:   Low-level features         |  |  Linear: 512 -> 256 |
|              (edges, colors, textures)  |  |  ReLU               |
|                                         |  |  Dropout(0.3)       |
| Layer 5-10:  Mid-level features         |  |  Linear: 256 -> 1   |
|              (shapes, patterns)         |  |  Sigmoid            |
|                                         |  |                     |
| Layer 11-17: High-level features        |  |  Output:            |
|              (objects, scenes)          |  |  0 = not pizza       |
|                                         |  |  1 = pizza           |
+-----------------------------------------+  +---------------------+
   Frozen (pretrained on ImageNet)              Trained on your data

Was bedeutet Fine-Tuning?

Fine-Tuning besteht aus drei Schritten:

  1. Vortrainiertes Wissen behalten: Die gelernten Bildmerkmale (Kanten, Texturen, Formen) werden übernommen.
  2. Ausgabeschicht ersetzen: Die Original-Ausgabe (1.000 ImageNet-Klassen) wird durch eine neue ersetzt (1 Ausgang: Pizza oder nicht).
  3. Auf deinen Daten trainieren: Nur der neue Klassifizierungskopf wird trainiert — der Rest bleibt eingefroren.
Vergleich mit Aufgabe 1: TinyVGG hatte ~8,6M Parameter und alle mussten von Grund auf gelernt werden. Bei ResNet18 nutzt du ~11,2M bereits gelernte Parameter und trainierst nur den neuen Kopf (~131K Parameter).
0

Umgebung prüfen

Aktiviere die virtuelle Umgebung und prüfe, ob alle Abhängigkeiten installiert sind:

cd pizza-ml
.venv\Scripts\activate
python check_environment.py
1

Alle 4 Modelle trainieren

Trainiere vier ResNet18-Modelle mit verschiedenen Kombinationen aus Datenqualität und Trainingsdauer:

Modell 1: Datensatz v1, 10 Epochs

python train-pizza-finetuning.py --data-dir ./data/v1 --epochs 10 --output pizza_resnet18_v1_10.pth

Modell 2: Datensatz v1, 50 Epochs

python train-pizza-finetuning.py --data-dir ./data/v1 --epochs 50 --output pizza_resnet18_v1_50.pth

Modell 3: Datensatz v2, 10 Epochs

python train-pizza-finetuning.py --data-dir ./data/v2 --epochs 10 --output pizza_resnet18_v2_10.pth

Modell 4: Datensatz v2, 50 Epochs

python train-pizza-finetuning.py --data-dir ./data/v2 --epochs 50 --output pizza_resnet18_v2_50.pth
Hinweis: Beim ersten Lauf werden die vortrainierten ResNet18-Gewichte automatisch heruntergeladen (~44 MB). Das passiert nur einmal.

Notiere deine Trainingsergebnisse:

Modell Daten Epochs Trainingsdauer Testgenauigkeit
pizza_resnet18_v1_10.pth v1 10 ___ ___%
pizza_resnet18_v1_50.pth v1 50 ___ ___%
pizza_resnet18_v2_10.pth v2 10 ___ ___%
pizza_resnet18_v2_50.pth v2 50 ___ ___%
2

Alle 4 Modelle testen

Sage für jedes Modell alle 4 Testbilder vorher. Notiere die Ergebnisse und die Konfidenz.

Modell 1: v1 + 10 Epochs

python train-pizza-finetuning.py --predict test_images/pizza_margherita.jpg --output pizza_resnet18_v1_10.pth
python train-pizza-finetuning.py --predict test_images/pizza_supreme.jpg --output pizza_resnet18_v1_10.pth
python train-pizza-finetuning.py --predict test_images/ice.jpg --output pizza_resnet18_v1_10.pth
python train-pizza-finetuning.py --predict test_images/flammkuchen.jpg --output pizza_resnet18_v1_10.pth

Modell 2: v1 + 50 Epochs

python train-pizza-finetuning.py --predict test_images/pizza_margherita.jpg --output pizza_resnet18_v1_50.pth
python train-pizza-finetuning.py --predict test_images/pizza_supreme.jpg --output pizza_resnet18_v1_50.pth
python train-pizza-finetuning.py --predict test_images/ice.jpg --output pizza_resnet18_v1_50.pth
python train-pizza-finetuning.py --predict test_images/flammkuchen.jpg --output pizza_resnet18_v1_50.pth

Modell 3: v2 + 10 Epochs

python train-pizza-finetuning.py --predict test_images/pizza_margherita.jpg --output pizza_resnet18_v2_10.pth
python train-pizza-finetuning.py --predict test_images/pizza_supreme.jpg --output pizza_resnet18_v2_10.pth
python train-pizza-finetuning.py --predict test_images/ice.jpg --output pizza_resnet18_v2_10.pth
python train-pizza-finetuning.py --predict test_images/flammkuchen.jpg --output pizza_resnet18_v2_10.pth

Modell 4: v2 + 50 Epochs

python train-pizza-finetuning.py --predict test_images/pizza_margherita.jpg --output pizza_resnet18_v2_50.pth
python train-pizza-finetuning.py --predict test_images/pizza_supreme.jpg --output pizza_resnet18_v2_50.pth
python train-pizza-finetuning.py --predict test_images/ice.jpg --output pizza_resnet18_v2_50.pth
python train-pizza-finetuning.py --predict test_images/flammkuchen.jpg --output pizza_resnet18_v2_50.pth
3

Alle vier ResNet18-Modelle vergleichen

Trage deine Ergebnisse in die folgende Tabelle ein:

Metrik v1+10 Ep. v1+50 Ep. v2+10 Ep. v2+50 Ep.
Testgenauigkeit ___%___%___%___%
pizza_margherita.jpg ____________
pizza_supreme.jpg ____________
ice.jpg ____________
flammkuchen.jpg ____________
Fragen:
  • Welches ResNet18-Modell ist das beste?
  • Macht Datenqualität bei einem vortrainierten Modell noch einen Unterschied?
  • Wie verhält sich der Effekt von mehr Epochs im Vergleich zu Aufgabe 1?
4

Der grosse Vergleich — TinyVGG vs. ResNet18

🖨️ Leere Vergleichstabelle zum Ausdrucken

Kombiniere deine Ergebnisse aus Aufgabe 1 (TinyVGG, von Grund auf) und Aufgabe 2 (ResNet18, Fine-Tuning):

Metrik TinyVGG (Aufgabe 1) ResNet18 (Aufgabe 2)
v1+10 v1+50 v2+10 v2+50 v1+10 v1+50 v2+10 v2+50
Architektur TinyVGG (~8,6M) ResNet18 (~11,2M)
Ansatz Von Grund auf Fine-Tuning
Daten v1 v1 v2 v2 v1 v1 v2 v2
Epochs 10501050 10501050
Testgenauigkeit ___%___%___%___% ___%___%___%___%
pizza_margherita.jpg ____________ ____________
pizza_supreme.jpg ____________ ____________
ice.jpg ____________ ____________
flammkuchen.jpg ____________ ____________
Referenzdaten anzeigen (falls eigene Ergebnisse fehlen)
Testgenauigkeit
TinyVGG ResNet18
v1+10v1+50v2+10v2+50 v1+10v1+50v2+10v2+50
Testgenauigkeit 68.00%72.40%81.80%85.60% 85.60%84.80%95.00%95.40%
Bildvorhersagen
TinyVGG ResNet18
v1+10v1+50v2+10v2+50 v1+10v1+50v2+10v2+50
pizza_margherita.jpg PIZZA 67%PIZZA 59%PIZZA 87%PIZZA 92% PIZZA 76%PIZZA 78%PIZZA 98%PIZZA 100%
pizza_supreme.jpg PIZZA 65%PIZZA 53%PIZZA 87%PIZZA 78% PIZZA 78%PIZZA 77%PIZZA 71%PIZZA 94%
ice.jpg NOT PIZZA 69%NOT PIZZA 65%NOT PIZZA 75%NOT PIZZA 93% NOT PIZZA 84%NOT PIZZA 67%NOT PIZZA 100%NOT PIZZA 100%
flammkuchen.jpg NOT PIZZA 53%NOT PIZZA 52%NOT PIZZA 57%PIZZA 56% PIZZA 61%PIZZA 74%NOT PIZZA 74%PIZZA 64%
Wichtige Erkenntnisse
  1. Datenqualität ist der grösste Hebel. TinyVGG springt von 68% (v1) auf 82% (v2) — 14% Verbesserung allein durch saubere Daten.
  2. Mehr Epochs helfen weniger als saubere Daten. TinyVGG v1+50 (72%) ist immer noch schlechter als TinyVGG v2+10 (82%).
  3. Transfer Learning gibt einen enormen Vorsprung. ResNet18 v1+10 (86%) erreicht bereits TinyVGG v2+50 (86%).
  4. Saubere Daten + Transfer Learning = bestes Ergebnis. ResNet18 v2+10 (95%) übertrifft alles andere, sogar mit nur 10 Epochs.
  5. Flammkuchen ist der schwierigste Test. Er täuscht die meisten Modelle wegen der visuellen Ähnlichkeit zu Pizza. Nur ResNet18 v2+10 lehnt ihn korrekt ab (74%).
Diskussionsfragen:
  • Welcher Ansatz (von Grund auf vs. Fine-Tuning) liefert bessere Ergebnisse?
  • Wie gross ist der Unterschied zwischen Datensatz v1 und v2?
  • Kann Transfer Learning schlechte Datenqualität kompensieren?
  • Was ist wichtiger: mehr Daten, bessere Daten oder ein besseres Modell?

Zusammenfassende Fragen

  1. Was ist Transfer Learning? Erkläre es mit der Koch-Analogie.
  2. Warum schneidet ResNet18 besser ab als TinyVGG?
  3. Macht Transfer Learning Datenqualität irrelevant?
  4. Wann würdest du Training von Grund auf dem Fine-Tuning vorziehen?
  5. Was sind die zwei wichtigsten Entscheidungen bei einem realen ML-Projekt?
Lösung — Erst öffnen wenn alle Aufgaben erledigt sind
ResNet18 erwartete Genauigkeiten
Modell Erwartete Genauigkeit
ResNet18 v1+10 ~80–85%
ResNet18 v1+50 ~82–88%
ResNet18 v2+10 ~92–96%
ResNet18 v2+50 ~94–98%
Vergleich: TinyVGG vs. ResNet18
Modell TinyVGG (Aufgabe 1) ResNet18 (Aufgabe 2)
v1+10 (unsauber, wenig Training) ~65–70% ~80–85%
v1+50 (unsauber, mehr Training) ~65–75% ~82–88%
v2+10 (sauber, wenig Training) ~75–80% ~92–96%
v2+50 (sauber, mehr Training) ~80–90% ~94–98%
Erkenntnisse
Erkenntnis 1: ResNet18 v2+10 übertrifft TinyVGG v2+50

Bereits mit 10 Epochs und sauberen Daten erreicht ResNet18 (~92–96%) bessere Ergebnisse als TinyVGG mit 50 Epochs (~80–90%). Transfer Learning kompensiert fehlende Trainingszeit massiv.

Erkenntnis 2: Warum Transfer Learning so gut funktioniert
  • ResNet18 wurde auf ImageNet (1.2 Mio. Bilder, 1000 Klassen) vortrainiert
  • Es kennt bereits Kanten, Texturen, Formen und Farben
  • Beim Fine-Tuning muss es nur noch lernen: „Wie sehen Pizzen aus?“ — nicht: „Was ist ein Kreis?“
  • TinyVGG dagegen startet bei null und muss alles von Grund auf lernen
Erkenntnis 3: Das Flammkuchen-Problem gilt auch hier
  • Auch ResNet18 klassifiziert Flammkuchen als Pizza — mit noch höherer Confidence
  • Das bessere Modell macht den gleichen „Fehler“, weil es kein Datenproblem ist, sondern ein Klassenproblem
  • Lösung: „Flatbread/Flammkuchen“-Klasse oder Negativbeispiele im Trainingsset
Erkenntnis 4: Datenqualität bleibt entscheidend

Selbst mit unsauberen Daten schlägt ResNet18 das TinyVGG mit sauberen Daten. Aber der Sprung von v1 zu v2 ist bei beiden Modellen signifikant. Transfer Learning macht schlechte Daten nicht irrelevant — es verschiebt nur die Baseline nach oben.

Kernaussagen:
  • Transfer Learning übertrifft Training von Grund auf in allen Szenarien deutlich.
  • Die zwei wichtigsten Entscheidungen: (1) Datenqualität sicherstellen und (2) vortrainierte Modelle nutzen statt von Grund auf zu trainieren.