Zarówno terminy „upsampling”, jak i „transponowanie splotu” są używane, gdy wykonujesz „dekonwolucję” (<- niezbyt dobry termin, ale pozwólcie, że użyję go tutaj). Początkowo myślałem, że oznaczają to samo, ale wydaje mi się, że różnią się po przeczytaniu tych artykułów. czy ktoś może wyjaśnić?
Transponuj splot : wygląda na to, że możemy go użyć, gdy propagujemy straty za pośrednictwem splotowej sieci neuronowej.
https://github.com/vdumoulin/conv_arithmetic
https://arxiv.org/pdf/1312.6034v2.pdf , sekcja 4 „Dla warstwy splotowej ...”
Upsampling : wygląda na to, że używamy go, gdy chcemy upsamplować od mniejszych danych wejściowych do większych danych wejściowych w strukturze convnet-decovnet.
https://www.youtube.com/watch?v=ByjaPdWXKJ4&feature=youtu.be&t=22m
Odpowiedzi:
Ponieważ nie ma szczegółowej i oznaczonej odpowiedzi, postaram się jak najlepiej.
Najpierw zrozumiemy, skąd bierze się motywacja do takich warstw: np. Autoencoder splotowy. Za pomocą splotowego autokodera można wyodrębnić elementy obrazów podczas szkolenia autokodera w zakresie rekonstrukcji oryginalnego obrazu. (Jest to metoda bez nadzoru.)
Taki autoencoder składa się z dwóch części: kodera, który wydobywa cechy z obrazu oraz dekodera, który rekonstruuje oryginalny obraz z tych funkcji. Architektura enkodera i dekodera jest zwykle dublowana.
W autokoderze splotowym koder działa z warstwami splotu i puli. Zakładam, że wiesz, jak one działają. Dekoder próbuje wykonać kopię lustrzaną kodera, ale zamiast „zmniejszać wszystko” ma na celu „powiększanie wszystkiego”, tak aby pasował do oryginalnego rozmiaru obrazu.
Przeciwieństwem warstw splotowych są transponowane warstwy splotowe (znane również jako dekonwolucja , ale poprawnie mówiąc matematycznie jest to coś innego). Działają z filtrami, jądrami, krokami tak jak warstwy splotu, ale zamiast mapować np. Z pikseli wejściowych 3x3 na 1 wyjście, mapują od 1 piksela wejściowego do 3x3 pikseli. Oczywiście również propagacja wsteczna działa nieco inaczej.
Przeciwieństwem warstw pulujących są warstwy próbkowania w górę, które w najczystszej postaci zmieniają rozmiar obrazu (lub kopiują piksel tyle razy, ile potrzeba). Bardziej zaawansowaną techniką jest odsprzęganie, które odwraca maxpooling, zapamiętując położenie maksimów w warstwach maxpooling i w warstwach unpooling kopiuje wartość do dokładnie tego miejsca. Cytat z tego ( https://arxiv.org/pdf/1311.2901v3.pdf ) referatu:
Aby uzyskać więcej informacji technicznych i kontekst, zapoznaj się z tym naprawdę dobrym, demonstracyjnym i szczegółowym wyjaśnieniem: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html
I spójrz na https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding
źródło
Może to zależeć od używanego pakietu.
W keras są różne. Upsampling zdefiniowano tutaj https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py Pod warunkiem, że używasz backendu tensorflow, tak naprawdę dzieje się tak, że keras wywołuje funkcję resize_images tensorflow , która zasadniczo jest interpolacją, a nie wyszkolony.
Transponowany splot jest bardziej zaangażowany. Jest zdefiniowany w tym samym skrypcie pythonowym wymienionym powyżej. Wywołuje funkcję tensorflow conv2d_transpose , ma jądro i można go trenować.
Mam nadzieję że to pomoże.
źródło
Dekonwolucja w kontekście splotowych sieci neuronowych jest równoznaczna z transpozycją splotu. Dekonwolucja może mieć inne znaczenie w innych dziedzinach.
Transponowanie splotu jest jedną ze strategii między innymi przeprowadzania próbkowania.
źródło
tutaj jest całkiem dobra ilustracja różnicy między 1) transpozycją splotu i 2) upsamplowaniem + splotem. https://distill.pub/2016/deconv-checkerboard/
Podczas gdy splot transponujący jest bardziej wydajny, artykuł opowiada się za upsamplingiem + splotem, ponieważ nie cierpi na artefakt szachownicy.
źródło