Dataset
Table of Contents
Cel i skala #
Binarny klasyfikator rozróżnia dwie klasy:
Birds/— karmnik z ptakiem widocznym na zdjęciuNoBirds/— karmnik bez ptaka (tło, liście, zmieniające się oświetlenie)
Finalny dataset: 4363 zdjęcia dostarczone i manualnie skatalogowane przez Ewelinę i jej rodzinę — 2113 w klasie Birds/ i 2250 w klasie NoBirds/. Balans klas wyszedł bardzo równy, mimo że ptaki pojawiają się nieregularnie — zasługa cierpliwego, wielotygodniowego zbierania materiału przy karmniku.
Struktura katalogów #
dataset/
├── raw/ # Surowe zdjęcia z RPi i aparatu
│ └── YYYY-MM-DD_HH-MM-SS.jpg
├── labeled/
│ ├── Birds/ # Zweryfikowane: ptak obecny
│ └── NoBirds/ # Zweryfikowane: brak ptaka
└── augmented/ # Wygenerowane: augmentacja
├── Birds/
└── NoBirds/
Pipeline zbierania danych #
1. Automatyczne zdjęcia (RPi5) #
Raspberry Pi robi zdjęcia w trybie ciągłym (lub wyzwalane przez detekcję ruchu). Zdjęcia trafiają do raw/ z timestampem w nazwie pliku.
Planowana optymalizacja: pre-filtr ruchu — zdjęcie zapisuje się tylko gdy w kadrze wykryto ruch. Redukuje liczbę pustych klatek do ręcznego przejrzenia.
2. Transfer do stacji roboczej #
rsync -avz pi@raspberrypi.local:/home/pi/data/raw/ ~/dataset/raw/
3. Ręczne labelowanie #
Przeglądanie raw/ i przenoszenie plików do Birds/ lub NoBirds/. Prosty skrypt Python z interfejsem klawiszowym przyspiesza proces:
# Szybki labeler: strzałki lewo/prawo do klasyfikacji
# → ptak / ← brak ptaka / q wyjście
(pełny skrypt — wkrótce w repozytorium)
4. Augmentacja #
Dla klasy Birds/ (mniej licznej): obroty, flipy poziome, zmiany jasności/kontrastu, lekkie rozmycia. Cel: wyrównanie klas bez tracenia jakości informacji.
Weryfikacja i korekta etykiet # #
Ręczne etykietowanie ponad 4000 zdjęć to żmudna praca, więc dodatkowo przepuściliśmy cały zbiór przez automatyczną weryfikację — pretrenowany na ImageNet model EfficientNet-B0 (1000 klas, w tym 59 klas ptaków), działający lokalnie, bez kosztów API.
| Kategoria | Liczba zdjęć |
|---|---|
| Sprawdzonych łącznie | 4363 |
| Potencjalnie błędnych | 887 |
| Niepewnych (score blisko progu) | 2426 |
| Zgodnych z etykietą (wysokie confidence) | 1050 |
Model ImageNet nie był trenowany na ptakach karmnikowych, więc duża liczba “niepewnych” wyników była spodziewana — potraktowaliśmy je jako wskazówkę do ręcznej weryfikacji, a nie ostateczną ocenę.
Zdjęcia oznaczone jako potencjalnie błędne zostały ręcznie przejrzane, co pozwoliło znaleźć rzeczywiste pomyłki w etykietowaniu:
| Typ błędu | Liczba plików |
|---|---|
Błędnie w Birds/ (brak ptaka na zdjęciu) |
17 |
Błędnie w NoBirds/ (ptak na zdjęciu) |
31 |
| Łącznie poprawionych etykiet | 48 |
| Procent błędów w datasecie | 1,1% |
1,1% błędów w ręcznie zebranym zbiorze tej wielkości to bardzo dobry wynik — świadczy o starannej, konsekwentnej pracy przy klasyfikacji. Poprawione pliki trafiły do właściwych folderów automatycznie, skryptem fix_labels.py.
Alternatywna metoda weryfikacji. W repozytorium projektu znajduje się też skrypt weryfikujący etykiety przy pomocy Claude Vision API — potencjalnie dokładniejszy niż ogólny model ImageNet, bo rozumie kontekst zdjęcia, a nie tylko klasyfikuje obiekt. Nie użyliśmy go finalnie do tego zbioru — przy 4363 zdjęciach koszt API względem korzyści jest niewspółmiernie wysoki dla projektu edukacyjnego. To rozwiązanie, które ma sens przy większej, strategicznej skali (np. firmowy projekt monitoringu), gdzie dokładność etykiet bezpośrednio przekłada się na wymierną wartość biznesową.
Wyzwania #
Kamuflaż upierzenia — ptaki potrafią wtopić się w tło. Te trudne przypadki są wartościowe dla treningu, nie należy ich odrzucać.
Zmienne oświetlenie — wschód/zachód słońca, zachmurzenie, cień. Dataset powinien reprezentować pełne spektrum warunków.
Balans klas — karmnik jest pusty przez większość czasu. Zbyt duża przewaga NoBirds/ wymaga oversamplingu lub class weights przy treningu.
Status # #
✅ Zbieranie i etykietowanie zakończone. 4363 zdjęcia, zweryfikowane dwuetapowo (automatycznie przez model ImageNet + ręcznie), z finalnym poziomem błędów 1,1%. To ta wersja datasetu posłużyła do treningu modelu opisanego na głównej stronie projektu — wynik: 99,1% accuracy.
Cały ten zbiór to zasługa Eweliny i jej rodziny — karmnik, przynęcanie ptaków, tygodnie fotografowania i ręczna klasyfikacja. Bez tej pracy nie byłoby czego trenować.