Mówiąc najprościej, operacja splotu jest kombinacją iloczynu elementarnego dwóch macierzy. Dopóki te dwie matryce zgadzają się co do wymiarów, nie powinno być problemu, więc mogę zrozumieć motywację twojego zapytania.
A.1 Jednak celem splotu jest zakodowanie źródłowej macierzy danych (całego obrazu) w kategoriach filtra lub jądra. Mówiąc dokładniej, próbujemy zakodować piksele w sąsiedztwie pikseli kotwicznych / źródłowych. Spójrz na poniższy rysunek:
Zazwyczaj każdy piksel obrazu źródłowego traktujemy jako piksel kotwiczny / źródłowy, ale nie jesteśmy do tego zobowiązani. W rzeczywistości często zdarza się, aby dodać krok, w którym w kotwicy / źródle piksele są oddzielone określoną liczbą pikseli.
Okej, więc jaki jest piksel źródłowy? Jest to punkt kontrolny, w którym jądro jest wyśrodkowane, a my kodujemy wszystkie sąsiednie piksele, w tym piksel kotwiczący / źródłowy. Ponieważ jądro ma symetryczny kształt (nie symetryczny w wartościach jądra), z każdej strony (4) piksel kotwicy ma jednakową liczbę (n) pikseli. Dlatego, niezależnie od liczby pikseli, długość każdej strony naszego symetrycznie ukształtowanego jądra wynosi 2 * n + 1 (każda strona kotwicy + piksel kotwicy), dlatego też filtry / jądra mają zawsze nieparzyste rozmiary.
Co jeśli zdecydujemy się zerwać z „tradycją” i zastosujemy jądra asymetryczne? Wystąpiłyby błędy aliasingu, więc my tego nie robimy. Uważamy, że piksel jest najmniejszą jednostką, tzn. Nie ma tutaj koncepcji subpikseli.
A.2 Problemem granicznym jest zajmowanie się różnymi podejściami: niektórzy go ignorują, niektórzy padają na zero, niektórzy odbijają lustro. Jeśli nie zamierzasz obliczyć operacji odwrotnej, tj. Dekonwolucji, i nie jesteś zainteresowany idealną rekonstrukcją oryginalnego obrazu, nie martwi Cię ani utrata informacji, ani wstrzyknięcie hałasu z powodu problemu granicznego. Zazwyczaj operacja łączenia (średnia lub maksymalna) powoduje usunięcie artefaktów granicznych. Dlatego możesz zignorować część swojego „pola wejściowego”, twoja operacja łączenia zrobi to za ciebie.
-
Zen splotu:
W starej szkole przetwarzania sygnału, kiedy sygnał wejściowy był splatany lub przepuszczany przez filtr, nie było możliwości oceny z góry, które elementy skręconej / filtrowanej odpowiedzi są istotne / informacyjne, a które nie. W związku z tym celem było zachowanie komponentów sygnału (wszystkich) w tych transformacjach.
Te elementy sygnału są informacją. Niektóre elementy mają więcej informacji niż inne. Jedynym powodem jest to, że jesteśmy zainteresowani wydobywaniem informacji wyższego poziomu; Informacje dotyczące niektórych klas semantycznych. W związku z tym te elementy sygnału, które nie dostarczają informacji, którymi jesteśmy szczególnie zainteresowani, mogą zostać przycięte. Dlatego, w przeciwieństwie do old-schoolowych dogmatów dotyczących splotu / filtrowania, możemy dowolnie łączyć / przycinać reakcję splotu według własnego uznania. Chcemy to rygorystycznie usunąć wszystkie składniki danych, które nie przyczyniają się do poprawy naszego modelu statystycznego.
1) Załóżmy, że
input_field
wszystkie mają wartość zero, z wyjątkiem jednego wpisu o indeksieidx
. Dziwny rozmiar filtra zwróci dane z pikiem wyśrodkowanym wokółidx
, a nie równomierny rozmiar filtra nie - rozważmy przypadek jednolitego filtra o rozmiarze 2. Większość ludzi chce zachować lokalizacje pików podczas filtrowania.2) Wszystkie
input_field
są istotne dla splotu, ale brzegówoutput_field
nie można dokładnie obliczyć, ponieważ niezbędne dane nie są zawarte winput_field
. Jeśli chcę obliczyć odpowiedź dla pierwszego elementuoutput_field
, filtr musi być wyśrodkowany na pierwszym elemencieinput_field
. Ale są też elementy filtrujące, które nie odpowiadają żadnemu dostępnemu elementowiinput_field
. Istnieją różne sztuczki, aby zgadywać krawędzieoutput_field
.źródło
W przypadku filtra o nieparzystej wielkości wszystkie piksele poprzedniej warstwy byłyby symetrycznie wokół piksela wyjściowego. Bez tej symetrii będziemy musieli uwzględnić zniekształcenia między warstwami, które występują podczas używania jądra o równej wielkości. Dlatego filtry jądra o równej wielkości są w większości pomijane, aby promować prostotę implementacji. Jeśli myślisz o splotie jako interpolacji między podanymi pikselami a pikselem środkowym, nie możemy interpolować do piksela środkowego za pomocą filtra o parzystej wielkości.
źródło: https://towardsdatascience.com/deciding-optimal-filter-size-for-cnns-d6f7b56f9363
źródło