07 · Architektury · 4 min czytania · Interaktywne · aktualizacja
Czym jest sieć konwolucyjna (CNN) i dlaczego tak dobrze rozpoznaje obrazy?
W skrócie
CNN to sieć zbudowana z warstw splotowych i poolingu, która składa obraz z hierarchii wzorców: od krawędzi, przez fragmenty, po całe obiekty.
Co to jest
Sieć konwolucyjna (CNN, convolutional neural network) to sieć neuronowa, której główne warstwy wykonują splot: małe, uczone filtry przesuwają się po obrazie i wykrywają lokalne wzorce. Kolejne warstwy łączą wzorce z poprzednich w coraz bardziej złożone, a na końcu zwykle stoi kilka warstw gęstych lub uśrednienie, które zamienia mapy cech na decyzję.
Typowy przepływ: obraz → [splot → ReLU → pooling] × kilka → spłaszczenie lub globalne uśrednienie → warstwa gęsta → softmax. Pierwsze warstwy uczą się krawędzi i plam koloru, środkowe — tekstur, łuków i rogów, głębokie — części obiektów (oko, koło, litera). To nie jest zaprogramowane; tak wychodzi z treningu, co widać, gdy wizualizuje się filtry i mapy aktywacji.
CNN od 2012 roku zdominowały widzenie komputerowe: klasyfikację, detekcję obiektów, segmentację, analizę obrazów medycznych. Dziś konkurują z nimi transformery wizyjne, ale sploty pozostają standardem tam, gdzie danych jest mniej lub liczy się szybkość.
Mechanizm — dlaczego tak działa
Siła CNN to wbudowane założenia o obrazach (tzw. indukcyjne obciążenie). Zwykła sieć gęsta traktuje 64 piksele jak 64 niezależne liczby — nie wie, które leżą obok siebie. Gdyby piksele losowo przemieszać (wszystkie obrazy tak samo), sieć gęsta nauczyłaby się równie dobrze. CNN zakłada co innego: sąsiednie piksele są powiązane (lokalność), a ten sam wzorzec może wystąpić w dowolnym miejscu (współdzielenie wag). Te założenia są prawdziwe dla zdjęć, więc sieć nie musi ich odkrywać z danych.
Drugim filarem jest hierarchia i rosnące pole recepcyjne. Neuron w pierwszej warstwie widzi okienko 3×3. Neuron w drugiej widzi 3×3 neuronów pierwszej, czyli 5×5 pikseli; po poolingu 2×2 pole rośnie jeszcze szybciej. Głębokie neurony „widzą” więc duże fragmenty obrazu, choć każda pojedyncza operacja jest lokalna. Złożony kształt powstaje jako kompozycja prostych — tak jak twarz składa się z oczu, a oko z łuków i plam.
Trzeci filar to odporność na przesunięcie. Splot przesuwa mapę cech razem z obrazem, a pooling i globalne uśrednienie na końcu sprawiają, że ostateczna decyzja niewiele zależy od tego, gdzie dokładnie leży obiekt. Ta odporność nie jest pełna — duże przesunięcia czy obroty nadal szkodzą, dlatego stosuje się augmentację danych.
Ograniczenia: CNN słabo modelują relacje między odległymi częściami obrazu (potrzebują wielu warstw, by je „zobaczyć”), są wrażliwe na tekstury (potrafią rozpoznawać kota po futrze, a nie po kształcie) i podatne na przykłady adwersarialne. Bardzo głębokie CNN uczą się dobrze dopiero z połączeniami rezydualnymi i normalizacją.
Na przykładzie
Na zbiorze Digits 8×8 (podział 75/25, stratyfikowany) porównaliśmy dwie sieci o podobnej liczbie parametrów, każdą trenowaną 60 epok optymalizatorem Adam, z trzema różnymi ziarnami losowymi. Sieć gęsta 64→64→10 ma 4810 parametrów. Mała CNN — splot 3×3 z 16 filtrami, max pooling 2×2, splot 3×3 z 32 filtrami, globalny max pooling i warstwa 32→10 — ma 5130 parametrów. Na zwykłym zbiorze testowym obie są dobre: sieć gęsta 97,3%, CNN 98,2–99,6%.
Różnica wychodzi, gdy przesuniemy obrazy testowe o jeden piksel w prawo. Dokładność sieci gęstej spada do 46–49%, a przy przesunięciu o 2 piksele do 13–16%, czyli niewiele powyżej zgadywania (10%). CNN po przesunięciu o 1 piksel ma 82–89%, a o 2 piksele 71–89%. Sieć gęsta nauczyła się „piksel 27 jasny = cecha zera”; CNN nauczyła się wzorców, które rozpozna także w innym miejscu. Dla skali: LeNet-5 (1998) miała około 60 tys. parametrów, AlexNet (2012) około 61 mln, VGG-16 około 138 mln, a ResNet-50 — dzięki blokom z wąskim gardłem — tylko 25,6 mln.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- W PyTorch sieć składa się z
nn.Conv2d,nn.ReLU,nn.MaxPool2d,nn.BatchNorm2di na końcunn.AdaptiveAvgPool2d(1)+nn.Linear. - Przy małej liczbie zdjęć nie trenuj od zera: weź wytrenowaną na ImageNet sieć z
torchvision.models(np.resnet50(weights="IMAGENET1K_V2")) i dostrój ją (transfer learning). - Typowy wzorzec: gdy rozdzielczość maleje 2×, liczba kanałów rośnie 2× (64 → 128 → 256 → 512).
- Augmentacja (
torchvision.transforms: losowe kadrowanie, odbicia, zmiany jasności) jest niemal obowiązkowa — uczy odporności, której splot nie daje sam. - Częsty błąd: brak normalizacji wejścia tymi samymi średnimi i odchyleniami, z którymi trenowano gotowy model.
Najczęstsze pytania
- Czym CNN różni się od zwykłej sieci gęstej?
- Każdy neuron CNN patrzy tylko na mały fragment wejścia, a te same wagi są używane w każdym miejscu obrazu. Dzięki temu sieć ma rzędy wielkości mniej parametrów i rozpoznaje wzorce niezależnie od położenia, czego sieć gęsta musiałaby się uczyć osobno dla każdego miejsca.
- Czy CNN są jeszcze potrzebne w erze transformerów?
- Tak. Transformery wizyjne wygrywają przy bardzo dużych zbiorach danych, ale przy mniejszych danych, ograniczonym sprzęcie i zadaniach czasu rzeczywistego CNN często są lepsze lub tańsze. Wiele nowoczesnych architektur łączy oba podejścia.
- Ile warstw powinna mieć CNN?
- Dla obrazów 8×8 czy 28×28 wystarczą 2–4 warstwy splotowe. Dla zdjęć 224×224 standardem są dziesiątki warstw (ResNet-18, ResNet-50), ale wtedy zwykle korzysta się z gotowej architektury i wag.
- Dlaczego CNN potrafią się mylić na lekko zmienionym obrazie?
- Uczą się cech, które statystycznie pomagają, a nie koniecznie tych, którymi kieruje się człowiek — np. tekstury zamiast kształtu. Dlatego niewidoczne dla oka zaburzenia (przykłady adwersarialne) potrafią zmienić decyzję.
Źródła
- LeCun, Bottou, Bengio, Haffner „Gradient-Based Learning Applied to Document Recognition”, Proceedings of the IEEE 86(11), 1998.
- Krizhevsky, Sutskever, Hinton „ImageNet Classification with Deep Convolutional Neural Networks”, NeurIPS 2012.
- Goodfellow, Bengio, Courville „Deep Learning”, MIT Press, 2016, rozdz. 9.
- Zhang i in. „Dive into Deep Learning”, d2l.ai, rozdz. 7 i 8 („Modern Convolutional Neural Networks”).
- Géron „Hands-On Machine Learning”, 3rd ed., 2022, rozdz. 14.