Poradniki
Poradniki · 10 min czytania · 26 lipca 2026

Jak obliczyć pola recepcyjne sieci konwolucyjnych - przewodnik

Grafika ilustrująca: Jak obliczyć pola recepcyjne sieci konwolucyjnych - przewodnik

Źródło: Link

Pracujesz z sieciami konwolucyjnymi i zastanawiasz się, dlaczego model nie wykrywa dużych obiektów? Albo czemu analiza obrazu daje dziwne wyniki na brzegach? Problem może leżeć w polach recepcyjnych - i nie, to nie jest magia dostępna tylko dla doktorantów z Google Research.

Pole recepcyjne (receptive field) to obszar na obrazie wejściowym, który wpływa na konkretny neuron w sieci. Jeśli twoja sieć ma małe pole recepcyjne, nie zobaczy dużego obiektu. Jeśli za duże - straci szczegóły. Tu zaczyna się problem: większość ludzi liczy to na czuja albo wcale.

W tym przewodniku pokażę, jak precyzyjnie obliczyć pola recepcyjne dla nowoczesnych architektur CNN - w tym tych z wieloma ścieżkami (ResNet, Inception). Bez zgadywania, bez ręcznego rysowania diagramów.

Zanim zaczniesz - czego potrzebujesz

Ten przewodnik zakłada, że:

  • Wiesz czym jest warstwa konwolucyjna i pooling (jeśli nie - zacznij od podstaw uczenia maszynowego)
  • Masz dostęp do architektury swojej sieci (lista warstw z parametrami: kernel size, stride, padding)
  • Rozumiesz podstawy Pythona (jeśli chcesz użyć gotowej biblioteki)

Nie potrzebujesz zaawansowanej matematyki. Wzory są proste - pokażę je w formie, którą możesz od razu użyć.

Pole recepcyjne mapuje cechy z sieci z powrotem na obraz wejściowy
Pole recepcyjne mapuje cechy z sieci z powrotem na obraz wejściowy

Dlaczego pola recepcyjne w ogóle mają znaczenie

Budujesz detektor samochodów. Twoja sieć analizuje obrazy 224×224 piksele. Liczysz warstwy, dodajesz konwolucje, wszystko działa... ale model nie wykrywa SUV-ów. Za to małe auta - bez problemu.

Sprawdzasz pole recepcyjne. Okazuje się, że wynosi 120 pikseli. SUV na twoim obrazie zajmuje 180 pikseli. Sieć fizycznie nie widzi całego obiektu - widzi fragmenty, ale nie całość. Stąd błędy.

To nie jest teoretyczny problem. Zespoły z Google Research (autorzy oryginalnej publikacji z 2019 roku) pokazali, że nieprawidłowe pole recepcyjne to częsta przyczyna słabych wyników w detekcji obiektów. Szczególnie gdy:

  • Pracujesz z obiektami różnej skali (małe i duże na tym samym obrazie)
  • Budujesz modele do analizy medycznej (guzy mogą być mikroskopijne lub zajmować pół zdjęcia RTG)
  • Optymalizujesz architekturę pod konkretne zadanie (transfer learning z gotowych modeli często daje złe pola recepcyjne)

Jeśli nie liczysz pól recepcyjnych, strzelasz w ciemno. A to kosztuje - czas treningowy, GPU, nerwy.

Jak obliczyć pole recepcyjne dla prostej sieci (krok po kroku)

Zacznijmy od najprostszego przypadku: sieć z jedną ścieżką (input → conv1 → conv2 → ... → output). Bez rozgałęzień, bez skip connections.

Krok 1: Zbierz parametry każdej warstwy

Dla każdej warstwy konwolucyjnej i poolingowej potrzebujesz trzech liczb:

  • Kernel size (k) - rozmiar filtra (np. 3×3 → k=3)
  • Stride (s) - krok przesunięcia (np. s=1 lub s=2)
  • Padding (p) - dopełnienie (np. p=1 dla "same" padding w kernelu 3×3)

Przykład: masz sieć z trzema warstwami conv:

  1. Conv1: k=7, s=2, p=3
  2. MaxPool: k=3, s=2, p=1
  3. Conv2: k=3, s=1, p=1

Krok 2: Policz pole recepcyjne rekurencyjnie

Wzór dla każdej warstwy (licząc od końca sieci do początku):

ri = ri+1 + (ki - 1) × jumpi

Gdzie:

  • ri - pole recepcyjne po warstwie i
  • ki - kernel size warstwy i
  • jumpi - "skok" (iloczyn wszystkich stride'ów od warstwy i+1 do końca)

Dla ostatniej warstwy: r = 1 (pojedynczy piksel), jump = 1.

Krok 3: Przykład liczbowy

Weźmy sieć z kroku 1. Liczymy od tyłu:

  1. Conv2: r=1, jump=1 (ostatnia warstwa)
    r = 1 + (3-1)×1 = 3, jump_nowy = 1×1 = 1
  2. MaxPool: r=3, jump=1
    r = 3 + (3-1)×1 = 5, jump_nowy = 1×2 = 2
  3. Conv1: r=5, jump=2
    r = 5 + (7-1)×2 = 17, jump_nowy = 2×2 = 4

Pole recepcyjne całej sieci: 17 pikseli. Każdy neuron w warstwie wyjściowej "widzi" obszar 17×17 pikseli z obrazu wejściowego.

Rekurencyjne obliczanie pola recepcyjnego - każda warstwa zwiększa zasięg
Rekurencyjne obliczanie pola recepcyjnego - każda warstwa zwiększa zasięg

Nowoczesne architektury - sieci z wieloma ścieżkami

ResNet, Inception, DenseNet - wszystkie mają rozgałęzienia. Dane idą kilkoma ścieżkami jednocześnie, a potem się łączą (concatenation lub addition). Jak tu liczyć pole recepcyjne?

Zasada: bierz maksimum

Jeśli masz dwie ścieżki A i B, które łączą się w punkcie C:

  1. Policz pole recepcyjne dla ścieżki A (metoda z poprzedniej sekcji)
  2. Policz pole recepcyjne dla ścieżki B
  3. Pole recepcyjne w punkcie C = max(rA, rB)

Dlaczego maksimum? Bo neuron "widzi" tyle, ile widzi najszersza ścieżka. Jeśli jedna ścieżka ma r=50, a druga r=30, to neuron ma dostęp do obszaru 50 pikseli (nawet jeśli druga ścieżka widzi mniej).

Przykład: ResNet block

Typowy blok ResNet ma:

  • Ścieżka główna: Conv 1×1 → Conv 3×3 → Conv 1×1
  • Skip connection: bezpośrednie połączenie (identity) lub Conv 1×1

Liczysz pole recepcyjne dla obu ścieżek osobno, potem bierzesz większą wartość. W praktyce skip connection często ma mniejsze pole (bo to tylko 1×1 conv lub identity), więc liczy się ścieżka główna.

Jeśli budujesz agenta AI z wizją komputerową, musisz wiedzieć, jak duże obiekty model potrafi "zobaczyć" - inaczej agent będzie gubił kontekst.

Gotowe narzędzia - biblioteka do automatycznego liczenia

Ręczne liczenie działa, ale jest męczące. Zespół z Google Research (André Araujo, Wade Norris, Jack Sim) wypuścił w 2019 roku bibliotekę open-source do TensorFlow, która robi to automatycznie.

Jak z niej korzystać (uproszczony przykład)

Zakładając, że masz model w TensorFlow/Keras:

  1. Zaimportuj bibliotekę (dostępna w repozytorium TensorFlow)
  2. Przekaż architekturę modelu
  3. Dostaniesz mapę: która warstwa ma jakie pole recepcyjne

Biblioteka radzi sobie z:

  • Wieloma ścieżkami (ResNet, Inception)
  • Różnymi typami warstw (conv, pooling, depthwise conv)
  • Nietypowymi konfiguracjami (dilated convolutions, atrous conv)

To oszczędza godziny debugowania. Zamiast zgadywać "czemu model nie widzi dużych obiektów", dostajesz konkretną liczbę: pole recepcyjne = 127 pikseli, a obiekt ma 200.

Jeśli dopiero zaczynasz przygodę z sieciami neuronowymi, zrozumienie jak działa backpropagation pomoże ci lepiej rozumieć, dlaczego architektura wpływa na wyniki.

Automatyczne obliczanie pól recepcyjnych - kod robi to za ciebie
Automatyczne obliczanie pól recepcyjnych - kod robi to za ciebie

Praktyczne zastosowania - kiedy to naprawdę się przydaje

Teoria to jedno, ale kiedy faktycznie potrzebujesz liczyć pola recepcyjne?

1. Detekcja obiektów na różnych skalach

Budujesz detektor ludzi w tłumie. Masz osoby blisko kamery (duże) i daleko (małe). Jeśli pole recepcyjne jest za małe, model nie wykryje dużych osób. Jeśli za duże - straci małe.

Rozwiązanie: multi-scale detection. Liczysz pola recepcyjne dla różnych warstw sieci i wybierasz te, które pasują do rozmiarów obiektów.

2. Transfer learning - dostosowanie gotowych modeli

Pobierasz ResNet-50 pretrenowany na ImageNet. Chcesz go użyć do analizy zdjęć satelitarnych. Problem: ImageNet ma obiekty ~100-300 pikseli, a twoje budynki zajmują 20-50 pikseli.

Liczysz pole recepcyjne ResNet-50. Okazuje się, że wynosi ~400 pikseli. To za dużo - model będzie "widział" zbyt szeroki kontekst i gubił małe budynki. Musisz zmodyfikować architekturę (mniejsze stride'y, mniejsze kernele w pierwszych warstwach).

3. Debugowanie dziwnych wyników

Model działa świetnie na zbiorze treningowym, ale na produkcji daje losowe wyniki. Sprawdzasz obrazy - okazuje się, że w produkcji obiekty są większe niż w treningu. Pole recepcyjne jest za małe, model widzi tylko fragmenty.

Bez liczenia pól recepcyjnych możesz tracić tygodnie na szukanie błędu w danych, augmentacji, learning rate. A problem leży w architekturze.

Jeśli pracujesz z AI w marketingu, pola recepcyjne decydują, czy model rozpozna logo na banerze (małe) czy całą kompozycję reklamy (duża).

Częste błędy i jak ich unikać

Błąd 1: Zakładanie, że "więcej warstw = większe pole"

Nie zawsze. Jeśli dodajesz warstwy z małymi kernelami (1×1) i stride=1, pole recepcyjne rośnie minimalnie. Liczy się kombinacja kernel size i stride, nie liczba warstw.

Błąd 2: Ignorowanie padding

Padding wpływa na rozmiar feature map, ale nie na pole recepcyjne (w podstawowym wzorze). W praktyce padding zmienia jednak, jak brzegi obrazu są przetwarzane. Jeśli masz obiekty na brzegach, padding ma znaczenie.

Błąd 3: Liczenie tylko dla ostatniej warstwy

W sieciach z multi-scale detection (np. YOLO, SSD) potrzebujesz pól recepcyjnych dla kilku warstw jednocześnie. Nie wystarczy policzyć dla outputu - musisz wiedzieć, co widzi każda warstwa pośrednia.

Błąd 4: Mylenie pola recepcyjnego z rozmiarem feature map

Pole recepcyjne to obszar na obrazie wejściowym, który wpływa na neuron. Feature map to wyjście warstwy (może być 7×7, 14×14 itd.). To dwie różne rzeczy. Pole recepcyjne może być 200 pikseli, a feature map 7×7.

Co zrobić z tą wiedzą teraz

Masz trzy opcje:

  1. Policz ręcznie - weź swoją architekturę, wypisz parametry warstw, użyj wzoru z sekcji "Jak obliczyć pole recepcyjne". Zajmie to 15-30 minut, ale zrozumiesz mechanizm.
  2. Użyj biblioteki - jeśli pracujesz w TensorFlow, znajdź bibliotekę z publikacji Google Research (dostępna w ich repo). Dla PyTorch są nieoficjalne porty.
  3. Zmodyfikuj architekturę - jeśli pole recepcyjne nie pasuje do twoich danych, zmień stride'y albo kernel size w pierwszych warstwach. To prostsze niż przebudowa całego modelu.

Jeśli budujesz własne modele (a nie tylko używasz gotowych), liczenie pól recepcyjnych powinno być standardowym krokiem - tak jak sprawdzanie liczby parametrów czy czasu treningu. Inaczej strzelasz w ciemno i liczysz na szczęście.

A jeśli chcesz zrozumieć, jak tokenizacja w GPT i Claude wpływa na pole recepcyjne w modelach językowych (tak, tam też istnieje!), to temat na osobny artykuł.

Chcesz ogarnąć sieci neuronowe od podstaw?

Pola recepcyjne to tylko wierzchołek góry lodowej. Na darmowym webinarze pokazuję, jak budować, debugować i wdrażać modele AI - bez matematycznych fajerwerków, za to z konkretnymi przykładami.

Zapisz się na darmowy webinar →

Wolisz uczyć się we własnym tempie? Sprawdź kurs AI Evolution

Podsumowanie - co zapamiętać

Pole recepcyjne to nie abstrakcyjna teoria - to konkretny parametr, który decyduje, czy twój model zobaczy cały obiekt, czy tylko fragment. Jeśli pracujesz z detekcją obiektów, segmentacją, analizą obrazów medycznych - musisz to liczyć.

Wzór jest prosty: r = r_poprzednie + (kernel - 1) × jump. Dla sieci z rozgałęzieniami bierzesz maksimum z wszystkich ścieżek. Jeśli nie chcesz liczyć ręcznie, są biblioteki (TensorFlow ma oficjalną).

Jeden krok na start: Otwórz architekturę swojego modelu (jeśli masz). Wypisz kernel size i stride dla pierwszych trzech warstw. Policz pole recepcyjne ręcznie (10 minut). Sprawdź, czy pasuje do rozmiarów obiektów w twoich danych. Jeśli nie - wiesz, co trzeba zmienić.

Najczęstsze pytania

Czy mogę użyć tej metody dla sieci z attention (np. Vision Transformer)?

Nie bezpośrednio. Transformery nie mają klasycznych warstw konwolucyjnych, więc pole recepcyjne liczy się inaczej (zależy od rozmiaru patchy i liczby warstw attention). Dla ViT pole recepcyjne teoretycznie obejmuje cały obraz od pierwszej warstwy, ale efektywne pole (to, co model faktycznie wykorzystuje) jest mniejsze i wymaga osobnej analizy.

Jak duże powinno być pole recepcyjne dla mojego zadania?

Zależy od rozmiaru obiektów w pikselach. Zasada: pole recepcyjne powinno być co najmniej 1.5-2× większe niż największy obiekt, który chcesz wykryć. Jeśli obiekty mają 100 pikseli, celuj w pole ~150-200. Jeśli masz obiekty różnej skali, potrzebujesz multi-scale detection (różne warstwy z różnymi polami).

Czy dilated convolutions zmieniają sposób liczenia pola recepcyjnego?

Tak. W dilated conv (atrous conv) kernel size efektywnie rośnie o współczynnik dilation. Jeśli masz kernel 3×3 z dilation=2, efektywny kernel to 5×5 (ale z dziurami). Wzór: k_efektywne = k + (k-1)×(dilation-1). Potem liczysz pole recepcyjne normalnie, podstawiając k_efektywne zamiast k.

Czy powinienem liczyć pole recepcyjne przed czy po treningu modelu?

Przed. Pole recepcyjne zależy tylko od architektury (kernel size, stride, padding), nie od wag. Jeśli pole jest za małe, trening nie pomoże - model fizycznie nie widzi całego obiektu. Liczysz to na etapie projektowania architektury, nie po fakcie.

Czy mogę zwiększyć pole recepcyjne bez dodawania nowych warstw?

Tak. Zwiększ stride w istniejących warstwach (ale to zmniejszy rozdzielczość feature map) lub użyj dilated convolutions (zwiększają pole bez utraty rozdzielczości). Albo zwiększ kernel size (ale to zwiększa liczbę parametrów i koszt obliczeniowy). Każda opcja ma swoje kompromisy.

Na podstawie: Computing Receptive Fields of Convolutional Neural Networks (Distill.pub, 2019)

Informacje o artykule

Darmowy AI Starter Kit

10 gotowych promptów do codziennej pracy + 5 narzędzi + plan na pierwszy tydzień. PDF, 4 strony konkretu.

Udostępnij:
Nie przegap nowych artykułów - dodaj SukcesAI do swoich źródeł w wyszukiwarce Google.
Dodaj do preferowanych źródeł
Jan Gajos

Ekspert AI & Founder, AI Evolution

Pasjonat sztucznej inteligencji, który od 18 lat działa z sukcesem biznesowo i szkoleniowo. Wprowadzam AI do swoich firm oraz codziennego życia. Fascynują mnie nowe technologie, gry wideo i składanie klocków Lego - tam też widzę logikę i kreatywność, które AI potrafi wzmacniać. Wierzę, że dobrze użyta sztuczna inteligencja to nie ogłupiające ułatwienie, lecz prawdziwy przełom w sposobie, w jaki myślimy, tworzymy i pracujemy.