Dlaczego zwoje zawsze używają liczb nieparzystych jako filter_size

13

Jeśli spojrzymy na 90-99% artykułów opublikowanych za pomocą CNN (ConvNet). Zdecydowana większość z nich używa najczęściej używanych filtrów o liczbach nieparzystych : {1, 3, 5, 7}.

Sytuacja ta może prowadzić do pewnych problemów: przy tych rozmiarach filtrów zwykle splot nie jest idealny z wypełnieniem 2 (wspólne wypełnienie), a niektóre krawędzie pola input_ gubią się w procesie ...

Pytanie 1: Dlaczego warto używać tylko liczb nieparzystych dla rozmiarów filtrów zwojów?

Pytanie 2: Czy faktycznie problemem jest pominięcie niewielkiej części pola input_ podczas splotu? Dlaczego tak / nie?

Jonathan DEKHTIAR
źródło

Odpowiedzi:

14

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: wprowadź opis zdjęcia tutaj 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.

Dynamiczny Gwiezdny Pył
źródło
Dziękuję za twój przeszczep, ale czy nie jest to łatwiejsze do zrozumienia, patrząc na definicję splotu w kategoriach matematycznych? en.wikipedia.org/wiki/Convolution#Discrete_convolution Ponieważ tutaj widzimy, że zawsze będziemy mieć m terminów po lewej i prawej stronie źródła ... stąd zawsze będzie to skutkować nierówną kwotą.
zwep
@zwep Zgoda! Fora pytań i odpowiedzi nie zastępują encyklopedii; ale po prostu je uzupełnij. Jednak szersza perspektywa do komentarza: definicja jest zwykle jedynie recenzowanym najlepszym wyborem spośród dostępnych opcji; to nie jest prawda ewangelii. Niemniej jednak należy najpierw nauczyć się zasad, zanim je złamiesz, aby można było jasno przekazać społeczności dokładnie, w jaki sposób i dlaczego robisz to inaczej. Przyczyny i alternatywne wybory związane z pewną definicją znajdują się w artykułach naukowych i zazwyczaj nie w encyklopedii.
Dynamiczny Stardust
5

1) Załóżmy, że input_fieldwszystkie mają wartość zero, z wyjątkiem jednego wpisu o indeksie idx. 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_fieldsą istotne dla splotu, ale brzegów output_fieldnie można dokładnie obliczyć, ponieważ niezbędne dane nie są zawarte w input_field. Jeśli chcę obliczyć odpowiedź dla pierwszego elementu output_field, filtr musi być wyśrodkowany na pierwszym elemencie input_field. Ale są też elementy filtrujące, które nie odpowiadają żadnemu dostępnemu elementowi input_field. Istnieją różne sztuczki, aby zgadywać krawędzie output_field.

Dave Kielpinski
źródło
2

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.

Dlaczego filtry o równej wielkości nie będą działać

źródło: https://towardsdatascience.com/deciding-optimal-filter-size-for-cnns-d6f7b56f9363

Sushanth
źródło