Po co transfer learning w computer vision przy małych zbiorach
Kluczowe problemy małych datasetów w wizji komputerowej
Małe zbiory obrazów to codzienność w projektach komercyjnych: niszowe produkty, specyficzne urządzenia, medycyna, inspekcje przemysłowe. Największy wróg w takiej sytuacji to overfitting. Model bardzo szybko „uczy się na pamięć” kilku przykładów zamiast wyłapywać ogólne wzorce. Na krzywych trening/validation widać wtedy podręcznikowy obraz: loss treningowy spada do zera, a walidacyjny po początkowej poprawie odbija w górę.
Drugi problem to długi czas eksperymentowania. Trenowanie modeli CNN od zera wymaga mnóstwa prób: architektury, hiperparametry, augmentacje. Każdy eksperyment jest kosztowny obliczeniowo, a przy małym zbiorze bardzo łatwo dojść do wniosku, że „to w ogóle nie działa”, podczas gdy problemem jest tylko niewłaściwa strategia nauki.
Trzecia rzecz to słaba generalizacja. Nawet jeśli model osiąga 98% accuracy na walidacji, może kompletnie zawodzić na nowych obrazach: innych warunkach oświetleniowych, innym aparacie, nieco innej perspektywie. Przy małym zbiorze trudno zbudować sensowny przekrój realnego świata, więc klasyczne podejście „zbierz więcej danych i trenuj dłużej” po prostu się nie skaluje.
Transfer learning rozwiązuje te trzy problemy jednocześnie: dostarcza bogate cechy, skraca czas treningu i poprawia uogólnienie bez konieczności zebrania tysięcy przykładów.
Jak transfer learning obniża próg wejścia w projektach CV
Gotowe modele wytrenowane na ogromnych zbiorach (typowo ImageNet) niosą w wagach lata „doświadczenia” z milionami obrazów. W praktyce oznacza to, że nie musisz uczyć od zera wykrywania krawędzi, tekstur, prostych kształtów. Twoje zadanie sprowadza się do dopasowania tej gotowej „bazy wizualnej” do konkretnego problemu – identyfikacji kilku klas w niszowej domenie.
Z perspektywy infrastruktury transfer learning to mniej mocy obliczeniowej. Zamiast tygodniowego treningu ResNeta od zera możesz w kilka minut/few godzin dostroić pre-trained backbone na GPU klasy konsumenckiej albo nawet na CPU (przy niewielkiej liczbie epok). To obniża próg wejścia dla małych zespołów i pojedynczych specjalistów.
Szybkie prototypowanie to kolejny, często niedoceniany plus. W ciągu jednego dnia jesteś w stanie:
- sprawdzić kilka architektur (np. ResNet, EfficientNet, MobileNet),
- przetestować różne strategie zamrażania warstw,
- pobrać wagi z różnych źródeł (ImageNet, self-supervised) i porównać efekty.
To daje realną możliwość iteracji nad pomysłami, a nie jednorazowego „strzału” w ciemno.
Trenowanie od zera vs start z pre-trained – praktyczne porównanie
Trenowanie CNN od zera przypomina naukę rozpoznawania świata dla dziecka: od kontrastów, przez proste kształty, aż po całe obiekty. Potrzeba wielu powtórzeń, różnych przykładów i kontekstów. W CV oznacza to tysiące – dziesiątki tysięcy obrazów na klasę, aby model zaczął sensownie działać.
Start z pre-trained przypomina zatrudnienie specjalisty, który zna już „język wizualny”, a ty uczysz go tylko nowej terminologii. Sieć zna krawędzie, faktury, układy obiektów; trzeba jedynie dołożyć nowy klasyfikator lub delikatnie dostroić górne warstwy. Wymagane dane spadają o rząd wielkości; często kilkaset obrazów na klasę wystarcza, by osiągnąć dobre wyniki.
Z punktu widzenia czasu treningu różnica jest drastyczna. Dla ResNet50:
- od zera: setki epok, regularizacja, długie grid search’e hiperparametrów,
- z pre-trained: 5–20 epok przy zamrożonym backbone, ewentualnie dodatkowe 5–10 przy częściowym fine-tuningu.
To oznacza, że zamiast jednego bardzo drogiego eksperymentu możesz zrobić serię mniejszych i wybrać najlepszy wariant.
Krótkie scenariusze z praktyki: defekty i niszowe obiekty
Typowy przykład z przemysłu: klasyfikacja defektów na linii produkcyjnej (rysy, zabrudzenia, brak elementu). Zbiór danych bywa niewielki, bo defekty są rzadkie. Zamiast czekać miesiącami na zgromadzenie tysięcy przykładów, można:
- zebrać kilkadziesiąt–kilkaset zdjęć każdej kategorii (łącznie kilka tysięcy obrazów),
- użyć ResNet/EfficientNet z ImageNet jako backbone,
- zamrozić większość warstw i trenować tylko nową główkę + lekkie augmentacje.
W praktyce daje to model, który w kilka dni jest gotowy do pilotażu na linii.
Drugi przykład: rozpoznawanie obiektów w niszowej dziedzinie, np. klasyfikacja gatunków owadów ze zdjęć makro. Zdjęć jest niewiele, warunki różne. Transfer learning pozwala wykorzystać to, że tekstury, kształty ciał, proporcje to nadal zjawiska wizualne podobne do tych z fotografii ogólnych. Model uczony od zera na 1000–2000 obrazach zawiódłby całkowicie; pre-trained sieć ma realną szansę na osiągnięcie sensownych wyników.
Transfer learning jako domyślna strategia w CV
W większości projektów wizji komputerowej rozpoczęcie pracy od trenowania modelu od zera jest marnowaniem zasobów. Domyślnym wyborem powinien być transfer learning, a trenowanie od zera traktuj jako wyjątek: bardzo duże dane, nietypowa architektura lub ekstremalnie odległa domena (np. obrazy z fizyki wysokich energii). Przy każdym nowym zadaniu CV zacznij od pre-trained i dopiero jeśli okaże się to niewystarczające – szukaj bardziej „egzotycznych” rozwiązań.
Intuicja stojąca za transfer learningiem w wizji
Co „wie” pretrenowana sieć konwolucyjna
Sieci konwolucyjne uczą się reprezentacji hierarchicznej. W pierwszych warstwach filtrują:
- krawędzie pionowe, poziome, ukośne,
- proste przejścia tonalne, gradienty,
- lokalne tekstury (szum, ziarno, proste faktury).
W środkowych warstwach pojawiają się bardziej złożone wzorce: rogi, kontury, kombinacje kształtów, fragmenty obiektów. W najwyższych warstwach sieć reprezentuje już semantykę sceny: konfiguracje, które odpowiadają całym obiektom (twarz, koło, samochód) lub ich charakterystycznym częściom.
Transfer learning w CV polega na tym, że te wszystkie złożone cechy zostają „odziedziczone” przez twój model. Nie trzeba od nowa wynajdować filtrów wykrywających okręgi czy wzory tekstur – model już je ma w pierwszych blokach. Twoje zadanie to tylko ich użycie w nowym kontekście.
Dlaczego wiedza z ImageNetu działa nawet w odległych zadaniach
ImageNet zawiera miliony obrazów naturalnych: zwierzęta, obiekty codziennego użytku, krajobrazy. Mimo że może się wydawać, że medyczne zdjęcia RTG czy mikrofotografie z mikroskopu to zupełnie inny świat, podstawowa statystyka obrazów bywa zaskakująco podobna: zmiany jasności, struktury, kształty, krawędzie. Dlatego dolne warstwy CNN wytrenowanej na ImageNe-cie dobrze przenoszą się na szeroką gamę zadań, nawet bardzo specjalistycznych.
Różnice zaczynają się dopiero w najwyższych warstwach, gdzie sieć nauczyła się rozróżniać konkretne klasy z ImageNetu. Te górne reprezentacje są najmniej „uniwersalne” i najczęściej je wymieniamy lub mocno dostrajamy. W praktyce: dolne bloki nadają się świetnie jako feature extractor, a górne traktujemy bardziej elastycznie.
Kiedy transfer learning w CV błyszczy, a kiedy słabnie
Najlepsze efekty transfer learningu pojawiają się, gdy domena jest choć trochę podobna do ImageNetu:
- klasyczne zdjęcia RGB (produkty, systemy CCTV, zdjęcia użytkowników),
- przemysł – detekcja defektów, liczenie obiektów na taśmie, kontrola jakości,
- medycyna – dermatoskopia, zdjęcia endoskopowe, fotografie okulistyczne.
W tych przypadkach wystarczy często zamrożony backbone + nowy klasyfikator, żeby uzyskać bardzo sensowne wyniki.
Słabiej jest tam, gdzie dane są ekstremalnie nietypowe:
- grafiki wektorowe, diagramy CAD, schematy,
- obrazy binarne o zupełnie innej strukturze niż zdjęcia,
- specjalistyczne modalności (np. niektóre typy obrazowania medycznego, obrazy spektralne).
W takich sytuacjach transfer nadal może pomóc (przynajmniej w dolnych warstwach), ale skalę zysku trzeba sprawdzić empirycznie. Bywa, że lepiej sprawdzają się pre-trained modele z tej konkretnej domeny (np. sieci wytrenowane self-supervised na danych medycznych).
Feature learning vs dopasowanie klasyfikatora
W transfer learningu często miesza się dwa pojęcia:
- Uczenie cech (feature learning) – zmiana wag w backbone (całościowa lub częściowa), żeby lepiej dopasować reprezentację wizualną do nowej domeny.
- Dopasowanie klasyfikatora – zamiana ostatnich warstw na nową główkę (head) i trenowanie tylko tych nowych parametrów.
Pierwsze jest bardziej kosztowne, ale daje głębszą adaptację. Drugie jest tanie i szybkie, ale ograniczone do sytuacji, w których cechy wyuczone na zbiorze bazowym są już „wystarczająco dobre”.
Praktyczna strategia jest zwykle dwuetapowa:
- wykorzystać backbone jako zamrożony feature extractor i dopasować nowy klasyfikator,
- jeśli wyniki są blisko oczekiwań – zostać przy tym wariancie; jeśli brakuje kilku procent jakości – odblokować część górnych warstw i zrobić fine-tuning.
Takie podejście łączy szybkość z możliwością dalszego „wyciśnięcia” jakości, gdy projekt wymaga lepszych metryk.
Pre-trained jako uniwersalny ekstraktor cech, nie czarna skrzynka
Zamiast traktować pre-trained network jak magiczną skrzynkę, podejdź do niej jak do gotowego ekstraktora cech. Możesz:
- wypuścić embeddingi z przedostatniej warstwy i używać ich w klasyfikatorach tradycyjnych (SVM, k-NN, XGBoost),
- przekształcać zadanie – np. obliczać odległości w przestrzeni embeddingów do zadań typu wyszukiwanie podobnych obrazów czy clustering,
- wykorzystywać embeddingi do metrycznego uczenia (np. triplet loss, contrastive learning).
Takie podejście otwiera sporo opcji, szczególnie gdy twoim celem nie jest tylko klasyfikacja obrazów, ale również reprezentacja ich treści w dalszych elementach systemu.

Przegląd najpopularniejszych architektur i źródeł wag
Główne rodziny modeli dla transfer learningu w CV
W praktyce transfer learning w CV opiera się najczęściej na kilku rodzinach architektur:
- ResNet – klasyka, bardzo stabilna i dobrze zrozumiana. ResNet18/34 są lekkie, ResNet50/101 głębsze i dokładniejsze. Świetny wybór na start, szczególnie gdy dopiero budujesz swój workflow.
- EfficientNet – zaprojektowane z myślą o wydajności. Dają dobry kompromis między jakością a szybkością. Oznaczenia B0–B7 opisują rosnącą wielkość i koszt obliczeniowy.
- MobileNet – lekkie modele zoptymalizowane pod urządzenia mobilne i edge. Dobre tam, gdzie priorytetem jest niski czas inferencji i mały rozmiar modelu.
- Vision Transformer (ViT) – architektury oparte na transformerach zamiast klasycznych konwolucji. Bardzo mocne, szczególnie przy dużych danych i dobrym pre-trainie. W transfer learningu też potrafią błyszczeć, choć wymagają trochę innego „podejścia” (np. większa uwaga na augmentacje).
Dla 80% zastosowań komercyjnych dobrymi pierwszymi kandydatami są ResNet i EfficientNet. ViT i pokrewne modele opłaca się włączać, gdy masz już opanowany podstawowy pipeline i chcesz powalczyć o ostatnie kilka procent jakości.
Skąd brać pre-trained wagi do modeli wizji komputerowej
Najpopularniejsze i sprawdzone źródła pre-trained wag to:
- torchvision – oficjalna biblioteka PyTorch z zestawem klasycznych architektur (ResNet, VGG, MobileNet, DenseNet, itp.). Prosta integracja i dobra dokumentacja.
- timm (PyTorch Image Models) – ogromna kolekcja modeli, od klasyków po najnowsze architektury. Często zawiera kilka wariantów pre-trainu (ImageNet, self-supervised, inne zbiory).
- TensorFlow/Keras – moduł tf.keras.applications z popularnymi modelami i wagami. Idealny, jeśli pracujesz głównie w ekosystemie TensorFlow.
- Hugging Face – nie tylko NLP. Coraz więcej modeli CV, w tym ViT, ConvNeXt, Swin Transformer, z różnymi wariantami wag i dodatkowymi konfiguracjami.
- Modele self-supervised – np. MoCo, SimCLR, DINO. Szczególnie interesujące, gdy potrzebujesz mocnej reprezentacji przy ograniczonej liczbie etykiet.
Jak wybierać model pod konkretny problem
Sam wybór architektury bywa ważniejszy niż późniejsze drobne sztuczki treningowe. Dobrze jest podejść do tego pragmatycznie, z perspektywy ograniczeń projektu:
- Mały zbiór + mało mocy obliczeniowej – lekkie ResNety (18/34), MobileNet, EfficientNet B0/B1. Szybko się trenują, mniej przeuczają.
- Mały zbiór + duża moc obliczeniowa – możesz sięgnąć po większe ResNety (50/101), EfficientNet B3/B4, a nawet mniejsze ViT, ale z agresywniejszym regularization i mocną augmentacją.
- Dużo danych nieoznaczonych + mało etykiet – modele self-supervised (DINO, MoCo, SimCLR) trenowane najpierw na danych bez etykiet, potem fine-tuning na małym oznaczonym zbiorze.
- Edge / mobile / embedded – MobileNet, EfficientNet-lite, modele pruned/quantized z repozytoriów typu timm lub TensorFlow Model Garden.
Dobrym nawykiem jest zbudowanie dwóch baseline’ów na starcie: jednego lekkiego (np. ResNet18), drugiego trochę cięższego (np. ResNet50). Pozwala to szybko ocenić, czy problem wymaga bardziej złożonej architektury, czy raczej lepszego przetwarzania danych.
Kluczowe scenariusze użycia transfer learningu w CV
Klasyfikacja obrazów na małych zbiorach
To najprostszy i najczęstszy scenariusz. Masz kilka tysięcy (albo kilkaset) obrazów w kilku klasach i potrzebujesz solidnego klasyfikatora. Typowy workflow:
- Ładujesz pre-trained backbone (np. ResNet50) z wagami z ImageNetu.
- Usuwasz oryginalną warstwę klasyfikującą.
- Dodajesz nowy head: najczęściej
GlobalAveragePooling+ 1–2 warstwy gęste z dropoutem + wyjście softmax/sigmoid. - Na start zamrażasz backbone i trenujesz tylko head na stosunkowo wysokim learning rate.
- Oceniacz wyniki, a gdy metryki „stają w miejscu” – odmrażasz kilka górnych bloków i robisz fine-tuning z mniejszym LR.
Ten wzorzec można stosować niemal mechanicznie przy każdym nowym zadaniu klasyfikacji – oszczędza długich eksperymentów architektonicznych.
Detekcja obiektów i segmentacja
W detekcji i segmentacji transfer learning jest jeszcze ważniejszy, bo etykietowanie jest drogie. Zaznaczanie boxów czy masek dla każdego obiektu to często godziny pracy annotatorów.
Modele takie jak Faster R-CNN, RetinaNet, YOLO czy Mask R-CNN również korzystają z backbone’ów pre-trained na ImageNecie. Dla małych zbiorów działa podobny schemat:
- korzystasz z gotowego modelu detekcji/segmentacji z pre-trained backbone,
- zamrażasz większość backbone’u, trenujesz tylko „head” detekcyjny/segmentacyjny,
- po pierwszej stabilizacji wyników stopniowo odblokowujesz wyższe bloki.
Jeśli liczba oznaczonych obrazów jest naprawdę mała (dziesiątki), dobrym trikiem jest:
- na start trenować tylko ostatnie warstwy detektora (np. klasyfikację kotwic i regresję boxów),
- wprowadzić mocną augmentację przestrzenną (losowe cropy, scale jittering),
- dołożyć pseudo-labeling na nieoznaczonych obrazach – model sam proponuje boxy, które ręcznie weryfikujesz lub stosujesz z progiem ufności.
Segmentacja (np. U-Net, DeepLab) korzysta z tych samych zasad. Backbone z pre-trained wagami + od zera uczone dekodery maski dają ogromny boost jakości przy niewielu maskach GT.
Wyszukiwanie podobnych obrazów i systemy rekomendacji
Transfer learning sprawdza się świetnie tam, gdzie nie masz klasycznych etykiet klas, ale zależy ci na miarach podobieństwa między obrazami – np. wyszukiwanie podobnych produktów w e-commerce czy wyszukiwanie stylu (similar shoes, similar furniture).
Praktyczny przepis:
- wypuszczasz embedding z przedostatniej warstwy pre-trained modelu (np. wektor 512D/2048D),
- normalizujesz go (np. L2-normalizacja),
- budujesz indeks najbliższych sąsiadów (FAISS, Annoy, ScaNN),
- dla nowego obrazu liczysz embedding i szukasz najbliższych wektorów w indeksie.
Jeżeli masz trochę par pozytywnych/negatywnych (podobne/niepodobne), możesz dodatkowo fine-tunować backbone pod metryczne uczenie (triplet loss, contrastive loss). Nawet kilkaset dobrze wybranych par potrafi znacząco poprawić jakość wyszukiwania.
Few-shot i zero-shot learning z pre-trained reprezentacjami
W wielu projektach realny problem to nie „mały zbiór”, ale wręcz kilka przykładów na klasę. Wtedy klasyczny fine-tuning często przeucza się w minutę. Z pomocą przychodzą pre-trained reprezentacje + proste klasyfikatory:
- wyciągasz embeddingi dla wszystkich dostępnych przykładów,
- dla każdej klasy trzymasz kilka wektorów referencyjnych (ang. prototypes),
- nowy obraz przypisujesz do klasy z najbliższym prototypem (np. najmniejsza odległość kosinusowa).
To prosty wariant prototypical networks, ale z gotowym, silnym backbone’em zamiast uczenia od zera. Sprawdza się znakomicie, gdy system musi obsłużyć ciągle pojawiające się nowe klasy, a ty nie chcesz za każdym razem przeuczać całego modelu.
Jak przygotować dane obrazowe pod skuteczny transfer learning
Standaryzacja i preprocessing zgodny z pre-trainem
Najczęstszy grzech przy transfer learningu to „wrzucenie” obrazów w innym formacie niż ten, na którym trenowano model bazowy. Różnice w skali pikseli czy normalizacji potrafią zabić część korzyści z pre-trainu.
Kilka zasad, które opłaca się wdrożyć:
- Rozdzielczość wejścia – dostosuj do oczekiwań modelu (np. 224×224, 256×256). Jeśli twoje obrazy mają mocno różne proporcje, użyj resize + center crop lub resize + letterbox w detekcji.
- Zakres pikseli – dopasuj do pre-processingu z oryginalnego repozytorium (np. skala 0–1 vs 0–255).
- Normalizacja kanałów – użyj tych samych średnich i odchyleń standardowych kanałów RGB, które były użyte przy pre-trainie (często podane w dokumentacji: np. mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225] dla ImageNetu).
Jeśli pracujesz z inną liczbą kanałów niż 3 (np. RGB + NIR), możesz:
- skopiować wagę pierwszej warstwy na dodatkowy kanał (prosty hack, a działa zaskakująco dobrze),
- zredukować dane do 3 kanałów (np. PCA na kanałach spektralnych),
- zastąpić pierwszą warstwę własną, trenowaną od zera, resztę zostawiając pre-trained.
Drobne dopasowanie pre-processingu zwiększa szansę, że backbone zachowa jak najwięcej użytecznej wiedzy z pre-trainu. To szybki zysk bez dotykania kodu modelu.
Balans klas i walka z biasem datasetu
Przy małych zbiorach każdy błąd w kompozycji danych jest wielokrotnie „wzmacniany” przez trening. Jeśli jedna klasa jest mocno nadreprezentowana, model nauczy się ją faworyzować, niezależnie od jakości backbone’u.
Praktyczne kroki:
- sprawdź liczebności klas i w razie potrzeby użyj weighted loss (np. w cross-entropy) lub samplera z wagami (balanced sampler),
- dostarczaj mocniejszą augmentację dla klas rzadkich (oversampling na poziomie batchy, a nie kopiowanie tych samych obrazów 1:1),
- upewnij się, że podział train/val/test nie łamie rozkładu – szczególnie gdy dane pochodzą z różnych źródeł (inne kamery, inne zakłady produkcyjne).
Nierówny i „brudny” zbiór szybko podkopuje sensowne wyniki i zaciera korzyści z pre-trained wag. Poświęcenie jednego dnia na audyt danych często daje większy przyrost jakości niż kolejny tydzień zabawy learning rate’em.
Podział na zbiory – przeciek danych kontra stabilne metryki
Przy małych zbiorach łatwo o przeciek informacji między train a validation, np. gdy różne zdjęcia tego samego obiektu (lub pacjenta) trafiają do różnych splitów. Model uczy się wtedy rozpoznawać obiekt, a nie klasę.
Przykłady bezpieczniejszych podziałów:
- w medycynie – split po pacjencie, nie po obrazie,
- w przemyśle – split po linii produkcyjnej, dniu lub partii,
- w systemach nadzoru – split po kamerze lub lokalizacji.
Dzięki temu metryki na walidacji lepiej odzwierciedlają prawdziwą generalizację, a nie znajomość konkretnych egzemplarzy. To kluczowe, gdy decydujesz, czy fine-tuning ma sens, czy wystarczy zamrożony backbone.

Augmentacja danych – klucz do generalizacji na małych zbiorach
Klasyczne augmentacje geometryczne i fotometryczne
Przy małych zbiorach augmentacja staje się twoim „dodatkowym zbiorem danych”. Jej celem jest uodpornienie modelu na zmiany, które nie zmieniają klasy. W klasycznym wydaniu to m.in.:
- losowe obroty i przesunięcia (rotation, translation),
- skalowanie i losowe cropy,
- odbicia lustrzane (flip horizontal/vertical),
- zmiana jasności, kontrastu, nasycenia, balansu bieli,
- dodawanie szumu, lekkie rozmycie (blur), JPEG compression.
Siłę augmentacji dostosuj do zadania. Dla klasyfikacji ogólnej możesz sobie pozwolić na agresywne transformacje. Dla detekcji drobnych defektów w produkcji zbyt mocne rozmycie czy przyciemnienie może zniszczyć istotne szczegóły.
Silne augmentacje nowej generacji
Ostatnie lata przyniosły kilka technik, które mocno pomagają szczególnie transformerom, ale konwolucjom też:
- Mixup – liniowe mieszanie dwóch obrazów i ich etykiet. Uczy model bardziej „miękkich” granic między klasami, co zmniejsza przeuczenie.
- CutMix – wycinanie fragmentu jednego obrazu i wklejanie w drugi, z odpowiednią mieszanką etykiet. Działa świetnie w klasyfikacji.
- Random Erasing – losowe „wymazywanie” fragmentu obrazu (szary lub losowy szum). Zmusza model do szukania kilku wskazówek, a nie jednej charakterystycznej plamy.
- AutoAugment / RandAugment – automatyczne wyszukiwanie lub losowe stosowanie zestawu augmentacji o różnej intensywności.
Na małych zbiorach silne augmentacje mogą być wręcz krytyczne, ale mają swoją cenę: wolniejsza zbieżność i ryzyko „przekombinowania” danych. Dobrym kompromisem jest:
- trening pierwszych epok z klasycznymi, umiarkowanymi augmentacjami,
- dodanie Mixup/CutMix w środkowej fazie, gdy model już „coś rozumie”,
- stopniowe osłabianie augmentacji pod koniec (tzw. augmentation scheduling).
Augmentacje specyficzne dla domeny
Naprawdę duże zyski pojawiają się, gdy augmentacje odzwierciedlają realne zjawiska w twoim środowisku:
- w systemach CCTV – symulacja różnych pór dnia, mgły, deszczu, lekkie rozmycie ruchu,
- w przemyśle – różne poziomy oświetlenia, zabrudzenia, odbicia światła od metalu, rotacje odpowiadające położeniu obiektu na taśmie,
- w medycynie – typowe artefakty: szum Poissona, różne ustawienia aparatu, obcięte fragmenty pola widzenia.
Augmentacje domenowe są często prostsze niż się wydaje (np. dodanie półprzezroczystej plamy imitującej zabrudzenie obiektywu), a ich wpływ na generalizację potrafi być większy niż zmiana modelu.
Kontrola jakości augmentacji
Łatwo przesadzić. Kilka prostych praktyk chroni przed „zepsuciem” zbioru:
- losowo wizualizuj kilkadziesiąt zaugmentowanych przykładów z każdej klasy – szybko zobaczysz, czy etykiety nadal mają sens,
- trzymaj osobny pipeline bez augmentacji dla walidacji i testu,
- nie mieszaj zbyt wielu agresywnych augmentacji naraz – lepiej 2–3 dobrze dobrane niż 10 losowych.
Dobrze ustawiona augmentacja pozwala małemu zbiorowi zachowywać się jak kilka razy większy. Daj sobie czas na eksperymenty – to inwestycja, która szybko się spłaca.
Praktyczne strategie trenowania: zamrażanie, odblokowywanie i dobór learning rate
Typowe warianty zamrażania warstw
W transfer learningu masz trzy główne tryby pracy z backbone’em:
- Full freeze – zamrażasz wszystkie warstwy backbone’u, uczysz tylko head. Ekstremalnie szybkie, małe ryzyko przeuczenia, idealne na start i przy bardzo małych zbiorach.
Najważniejsze punkty
- Przy małych zbiorach danych kluczowym problemem jest overfitting i słaba generalizacja – model uczy się „na pamięć” kilku przykładów i sypie się przy minimalnej zmianie warunków (oświetlenie, kamera, perspektywa).
- Transfer learning dostarcza gotowe, bogate reprezentacje wizualne, dzięki czemu nie trzeba od zera uczyć sieci wykrywania krawędzi, tekstur i prostych kształtów – skupiasz się tylko na dopasowaniu ich do swojej niszowej domeny.
- Start z pre-trained modelem dramatycznie skraca czas eksperymentów: zamiast setek epok i tygodni treningu można w kilka–kilkanaście epok zbudować sensowny prototyp nawet na zwykłym GPU lub mocniejszym CPU.
- Wymagania co do liczby danych spadają o rząd wielkości – często wystarczy kilkaset obrazów na klasę, by sieć z backbone’em z ImageNetu czy self-supervised osiągała wyniki nieosiągalne dla modelu trenowanego od zera na tym samym zbiorze.
- W zastosowaniach komercyjnych (np. defekty na linii produkcyjnej, niszowe gatunki owadów) praktyczny workflow to: zebrane kilkadziesiąt–kilkaset zdjęć na klasę, pre-trained ResNet/EfficientNet, zamrożony backbone, trenowanie nowej „główki” + lekkie augmentacje – po kilku dniach masz model gotowy do pilotażu.
- Domyślną strategią w większości projektów CV powinien być transfer learning, a trenowanie od zera zostaje zarezerwowane na sytuacje ekstremalne: ogromne zbiory, bardzo nietypowa architektura lub zupełnie inna domena obrazów.






