Skip to main content

Trening modelu

·3 mins

Architektura i strategia treningu #

Do treningu użyto EfficientNet-B0 z wagami pretrenowanymi na ImageNet, w technice transfer learning z dwufazowym procesem:

  • Faza 1 — trening głowicy klasyfikatora. Warstwy konwolucyjne zamrożone, trenowana tylko nowa warstwa wyjściowa (2562 parametry z ok. 4 milionów). Learning rate: 1e-3.
  • Faza 2 — fine-tuning. Cała sieć odmrożona, trening z bardzo małym learning rate (1e-4), żeby dostroić wagi do ptaków karmnikowych bez utraty wiedzy z ImageNet.

Trening odbywał się na Kaggle (GPU, darmowe godziny obliczeniowe), po wcześniejszej migracji z Google Colab.

Krzywe uczenia

Krzywe uczenia EfficientNet-B0 — wyraźny skok accuracy i spadek loss w momencie startu fine-tuningu (epoka 9).

Wyniki na zbiorze testowym #

Na zbiorze testowym (431 zdjęć) model osiągnął 99,1% accuracy:

Metryka Birds NoBirds
Precision 1.00 0.98
Recall 0.98 1.00
F1-score 0.99 0.99

Macierz pomyłek

Macierz pomyłek — tylko 3 błędy na 431 zdjęć.

Recall dla klasy Birds (0.98) to kluczowa metryka dla tego systemu — model wyzwala profesjonalny aparat fotograficzny, więc lepiej zrobić jedno zdjęcie za dużo niż przeoczyć ptaka.

Przegląd tych trzech błędów ujawnił dodatkowo ważną obserwację metodologiczną. Dwa z nich wynikały z niespójności między formatem zdjęcia użytym do ręcznej klasyfikacji (pełny kadr) a formatem, na którym trenowała się sieć (kadr przycięty) — ptak siedział z boku, na gałęzi lub w locie tuż przed lądowaniem, czyli w obszarze usuwanym przez przycinanie. Względem oryginalnego zdjęcia etykieta była poprawna, względem faktycznego kadru treningowego — już nie. Trzeci przypadek to inna sytuacja: ptak widoczny na zdjęciu, ale w dużej mierze zasłonięty przez słupek karmnika — częściowa okluzja, a nie problem z kadrowaniem.

Realna skuteczność modelu jest więc prawdopodobnie nieco wyższa niż wskazuje sama macierz pomyłek, przynajmniej dla dwóch z tych trzech przypadków.

Weryfikacja GradCAM #

Wysoka accuracy sama w sobie nie mówi, na czym sieć się skupia — może “oszukiwać”, np. korzystając z tła czy samej konstrukcji karmnika zamiast faktycznie rozpoznawać ptaka. Żeby to zweryfikować, wygenerowano heatmapy Grad-CAM, pokazujące które obszary zdjęcia miały największy wpływ na decyzję sieci.

GradCAM przykład 1

Grad-CAM — aktywacja skupiona wyraźnie na sylwetce ptaka.

GradCAM przykład 2

Grad-CAM dla innej pozycji ptaka w kadrze — ten sam wzorzec: uwaga sieci podąża za ptakiem, nie za tłem.

We wszystkich sprawdzonych przypadkach aktywacja konsekwentnie pokrywa się z sylwetką ptaka, niezależnie od jego pozycji w kadrze czy tła. To potwierdza, że wysoki wynik accuracy nie jest efektem przypadkowej korelacji (np. z charakterystycznym tłem konkretnego karmnika), tylko realnego rozpoznawania ptaka.

Wnioski #

Model w obecnej formie jest gotowy do testów wdrożeniowych na Raspberry Pi. Dwa kierunki dalszej pracy wynikające z tego etapu:

  1. Spójność formatu zdjęć między etykietowaniem a treningiem — do uwzględnienia przy zbieraniu danych z kolejnego sezonu.
  2. Zachowanie tej samej strategii przycinania (crop) na etapie inferencji na Raspberry Pi, co na etapie treningu — inaczej model zobaczy inny kadr niż ten, na którym się uczył.

Zobacz też: Dataset · Sprzęt