07 · Architektury · 5 min czytania · aktualizacja
CNN czy transformer — która architektura jest lepsza do obrazów?
W skrócie
Sieć splotowa ma wbudowane założenia o obrazach i uczy się z mniej licznych danych. Transformer wizyjny jest elastyczniejszy, ale wymaga dużych zbiorów.
Co to jest
Przy małych i średnich zbiorach obrazów, ograniczonym budżecie obliczeń i treningu od zera wybierz sieć splotową (CNN); transformer wizyjny (ViT) wybierz, gdy masz bardzo dużo danych albo korzystasz z modelu wstępnie wytrenowanego na ogromnym zbiorze i zależy Ci na elastyczności, np. łączeniu obrazu z tekstem. Różnica wynika z założeń wbudowanych w architekturę: CNN „wie” z góry, że obraz składa się z lokalnych wzorców, które mogą pojawić się wszędzie, a transformer musi się tego nauczyć z danych.
CNN przesuwa po obrazie małe filtry, np. 3×3 piksele, z tymi samymi wagami w każdym miejscu. Kolejne warstwy widzą coraz większy fragment obrazu: krawędzie, potem tekstury, potem części obiektów.
ViT tnie obraz na kafelki (np. 16×16 pikseli), każdy zamienia w wektor-token i przepuszcza całą sekwencję przez bloki samouwagi, jak tekst w modelu językowym. Każdy kafelek od pierwszej warstwy może „patrzeć” na każdy inny.
Mechanizm — dlaczego tak działa
Obciążenie indukcyjne CNN. Splot zakłada dwie rzeczy: lokalność (piksel zależy głównie od sąsiadów) i ekwiwariancję względem przesunięć (kot w lewym rogu to ten sam kot co w prawym). Dzielenie wag między położeniami drastycznie zmniejsza liczbę parametrów i sprawia, że wzorzec nauczony w jednym miejscu działa wszędzie. To założenie jest prawdziwe dla zdjęć, więc oszczędza dane.
Transformer: mniej założeń, więcej danych. Samouwaga jest z natury obojętna na kolejność tokenów; informację o położeniu dostarczają osadzenia pozycyjne, których model musi się nauczyć. Nic nie wymusza lokalności — sieć może ją odkryć, ale potrzebuje na to przykładów. W zamian dostaje globalny kontekst od pierwszej warstwy i lepiej skaluje się z danymi. Dosovitskiy i in. (2021) pokazali, że ViT trenowany na ImageNet-1k przegrywał z podobnej wielkości sieciami ResNet, a dorównywał im i wygrywał dopiero po pretreningu na zbiorach liczących od 14 do 300 milionów obrazów (ImageNet-21k, JFT-300M).
Granica się zaciera. DeiT (Touvron i in., 2021) pokazał, że silna augmentacja, regularyzacja i destylacja pozwalają trenować ViT na samym ImageNet. ConvNeXt (Liu i in., 2022) pokazał z kolei, że CNN zmodernizowana pomysłami z transformerów dorównuje im w tej samej skali. Dziś o wyniku częściej decydują dane, pretrening i przepis treningowy niż sama rodzina architektur.
Koszt. Samouwaga ma koszt rosnący kwadratowo z liczbą kafelków, więc obrazy o wysokiej rozdzielczości są dla ViT drogie; splot rośnie liniowo z liczbą pikseli. Dlatego w detekcji i segmentacji popularne są hybrydy i transformery z lokalnymi oknami uwagi.
Na przykładzie
Digits: obrazki cyfr 8×8, 1347 treningowych i 450 testowych (podział warstwowy, random_state=0). Porównuję małą CNN (dwa sploty 3×3 z 16 i 32 filtrami, pooling, 6090 parametrów), mały ViT (kafelki 2×2, czyli 16 tokenów, wymiar 32, dwa bloki, cztery głowy, 18 090 parametrów; wariant z kafelkami 1×1 ma 64 tokeny i 19 530 parametrów) oraz zwykłą sieć MLP (8970 parametrów). Każdy model: Adam, współczynnik 0,001, ok. 3000 kroków po 32 obrazki, trzy ziarna losowości; trening na 100, 300 albo wszystkich 1347 obrazkach. Trafność na teście:
| Obrazków treningowych | MLP | CNN | ViT (kafelki 2×2) | ViT (kafelki 1×1) |
|---|---|---|---|---|
| 100 | 0,877 | 0,906 | 0,724 | 0,671 |
| 300 | 0,927 | 0,953 | 0,868 | 0,853 |
| 1347 | 0,964 | 0,983 | 0,965 | 0,945 |
| 1347, piksele wymieszane | 0,968 | 0,974 | 0,951 | 0,953 |
CNN wygrywa przy każdej wielkości danych, mając najmniej parametrów. ViT przy 100 obrazkach traci do niej 18 punktów, przy 300 — 8,5, przy pełnym zbiorze — 1,8. Luka maleje z danymi, zgodnie z tym, co obserwuje się w dużej skali. ViT przegrywa nawet ze zwykłym MLP przy małych zbiorach: samouwaga bez założeń o obrazie to dużo swobody, a mało przykładów, by ją okiełznać.
Ostatni wiersz to test założeń: te same piksele w każdym obrazku przestawiłem jedną stałą, losową permutacją. MLP i ViT z kafelkami 1×1 (każdy piksel to osobny token z własnym osadzeniem pozycyjnym) są na taką zmianę obojętne — różnice mieszczą się w rozrzucie między ziarnami. CNN traci 0,9 punktu, bo jej filtry zakładają sąsiedztwo pikseli, którego już nie ma. Przy obrazkach 8×8 to założenie daje niewiele, przy zdjęciach 224×224 — bardzo dużo.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
Reguła wyboru:
- Trening od zera, do kilkudziesięciu tysięcy obrazów → CNN, np.
torchvision.models.resnet18(num_classes=k), z augmentacją (transforms.RandomResizedCrop,RandomHorizontalFlip). - Dowolna wielkość danych, ale dostępny pretrening → dostrój gotowy model:
torchvision.models.vit_b_16(weights="IMAGENET1K_V1")alboresnet50(weights="IMAGENET1K_V2"); porównaj oba na walidacji. - Bardzo duże zbiory, multimodalność (obraz + tekst), modele bazowe → transformer.
- Wysoka rozdzielczość, detekcja, segmentacja, urządzenia mobilne → CNN lub hybrydy z lokalną uwagą; kwadratowy koszt globalnej uwagi szybko rośnie.
- Mały ViT od zera wymaga silnej regularyzacji: augmentacja (Mixup, RandAugment),
weight_decay=0.05wtorch.optim.AdamW, rozgrzewka współczynnika uczenia. - Porównuj architektury przy tym samym budżecie: liczba parametrów, kroków treningu i ta sama augmentacja.
Najczęstsze pytania
- Czy transformery wyparły sieci splotowe?
- Nie. W modelach bazowych i multimodalnych dominują transformery, ale CNN wciąż są standardem w wielu zastosowaniach przemysłowych, na urządzeniach brzegowych i przy małych zbiorach. Nowoczesne CNN (np. ConvNeXt) dorównują transformerom przy porównywalnym przepisie treningowym.
- Dlaczego ViT potrzebuje tak dużo danych?
- Bo musi sam odkryć to, co CNN ma wbudowane: że sąsiednie piksele są powiązane i że ten sam wzorzec może wystąpić w różnych miejscach. Odkrywanie reguł z danych kosztuje przykłady. W zamian, gdy danych jest bardzo dużo, mniej sztywne założenia przestają ograniczać model.
- Co wybrać do transfer learningu na małym zbiorze?
- Oba rodzaje wstępnie wytrenowanych modeli działają dobrze; przy bardzo małych zbiorach (setki obrazów) ResNet lub EfficientNet bywają stabilniejsze, a duże ViT po pretreningu na ogromnych zbiorach często dają najlepsze cechy. Rozstrzygnij walidacją — koszt sprawdzenia obu jest niewielki.
Źródła
- LeCun Y., Bottou L., Bengio Y., Haffner P. „Gradient-Based Learning Applied to Document Recognition”, Proceedings of the IEEE 86(11), 1998, s. 2278–2324.
- Dosovitskiy A. i in. „An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale”, ICLR 2021.
- Touvron H. i in. „Training data-efficient image transformers & distillation through attention”, ICML 2021.
- Liu Z., Mao H., Wu C.-Y., Feichtenhofer C., Darrell T., Xie S. „A ConvNet for the 2020s”, CVPR 2022.
- Zhang A., Lipton Z. C., Li M., Smola A. J. „Dive into Deep Learning”, d2l.ai, rozdz. 7 „Convolutional Neural Networks” i podrozdz. 11.8 „Transformers for Vision”.