ML Atlas

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 treningowychMLPCNNViT (kafelki 2×2)ViT (kafelki 1×1)
1000,8770,9060,7240,671
3000,9270,9530,8680,853
13470,9640,9830,9650,945
1347, piksele wymieszane0,9680,9740,9510,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") albo resnet50(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.05 w torch.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”.

Zobacz też