Jakie są różnice między Convolutional1D, Convolutional2D i Convolutional3D?

10

Dowiedziałem się o Convolutional Neural Networks. Patrząc na Kerasprzykłady, natknąłem się na trzy różne metody splotu. Mianowicie 1D, 2D i 3D. Jakie są różnice między tymi trzema warstwami? Jakie są ich przypadki użycia? Czy są jakieś linki lub odniesienia, które pokazują ich przypadki użycia?

Saurabh
źródło

Odpowiedzi:

5

Jedyną różnicą jest wymiarowość przestrzeni wejściowej. Dane wejściowe dla warstwy splotowej mają następujący kształt:

input_shape = (rozmiar_wsadu, wymiary_wejściowe, kanały)

  • Kształt wejściowy dla conv1D : (batch_size, W, kanały)

    Przykład: 1 sekundowy stereofoniczny sygnał głosowy próbkowany przy częstotliwości 44100 Hz, kształt: (batch_size, 44100,2)

  • Kształt wejściowy dla conv2D : (batch_size, (H, W), kanały)

    Przykład: obraz RGB 32x32, kształt: (rozmiar partii, 32,32,3)

  • Kształt wejściowy dla conv3D : (batch_size, (H, w, D), kanały)

    Przykład (trudniejsze): 1 sekundowe wideo 32x32 obrazów RGB przy 24 fps, kształt: (batch_size, 32,32,3,24)

Co to jest kanał?

Kluczową sprawą jest zastanowienie się, co kanał oznacza dla naszych danych wejściowych. Warstwa splotowa stosuje różne filtry dla każdego kanału, dlatego ciężary warstwy konwekcyjnej mają następujący kształt:

(kernel_size,num_channels,num_filter_per_channels)

Przykład:

Warstwa splotowa z 12 filtrami i kwadratową matrycą jądra o rozmiarze 3. Ta warstwa zastosuje 12 różnych filtrów dla każdego kanału. W podanych wcześniej przykładach:

  • 1 sekundowy stereofoniczny sygnał głosowy próbkowany przy częstotliwości 44100 Hz, rozmiar jądra = 3

    12 x 2 = 24 filtry jednowymiarowe, 12 filtrów dla każdego kanału

     Weigths shape: (3, 2, 12)
  • Obraz RGB 32x32, rozmiar jądra = (3,3)

    12 x 3 = 36 filtrów dwuwymiarowych, 12 filtrów dla każdego kanału

    Weights shape: (3, 3, 3, 12)
  • 1 sekundowe wideo 32x32 obrazów RGB przy 24 fps, kernel_size = (3,3,3)

    24 x 12 = 288 trójwymiarowych filtrów, 12 filtrów dla każdego kanału

    Weights shape: (3, 3, 3, 24, 12)

Dlatego decydowanie o tym, co oznacza kanał, jest bardzo ważne, ponieważ każdy kanał ma swój własny zestaw filtrów. W przypadku pierwszych przykładów wydaje się proste stwierdzenie, że sygnały stereo i obrazy RGB są różnymi kanałami ... tak naprawdę są one tak nazywane (kanały stereo, kanały RGB). W przykładzie wideo jest bardziej niejednoznaczny ... Ustawienie wideo jako wejścia 3D z wymiarem czasowym jako kanałem może nie być najlepszą opcją, ponieważ w ten sposób kolejność wyświetlania klatek czasowych nie ma znaczenia (wyniki dla filtry każdego kanału są sumowane), co powoduje utratę wewnętrznej dynamiki czasowej danych wejściowych. Jednym lepszym podejściem (w zależności od aplikacji) jest przetwarzanie obrazów RGB ze zwojami 2D w rekurencyjnej sieci neuronowej. To samo dzieje się z sygnałem głosowym

Należy zauważyć, że sygnał o wymiarze wejściowym D można traktować jako sygnał o wymiarze D + 1 z jednym kanałem, ale wynikowa przestrzeń cech może być mniej reprezentatywna / przydatna :

 (44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)

Kod Keras obsługujący przykłady

from keras import Input, Conv1D, Conv2D, Conv3D
#1D
in_ = Input(shape=(44100,2))
layer = Conv1D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))

#2D
in_ = Input(shape=(32,32,3))
layer = Conv2D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))

#3D
in_ = Input(shape=(32,32,3,24))
layer = Conv3D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
Ignacy
źródło
8

Conv1D służy do sygnałów wejściowych podobnych do głosu. Stosując je, możesz znaleźć wzorce w całym sygnale. Na przykład masz sygnał głosowy i warstwę splotową. Każdy splot przemierza głos, aby znaleźć sensowne wzorce, wykorzystując funkcję kosztu.

Conv2D jest używany do obrazów. Ten przypadek użycia jest bardzo popularny. Metodą splotu stosowaną dla tej warstwy jest tzw. Splot nad objętością . Oznacza to, że masz dwuwymiarowy obraz, który zawiera wiele kanałów, na przykład RGB. W takim przypadku każdy filtr splotowy powinien być trójwymiarowym filtrem do splotu, faktycznie skorelowanym krzyżowo, z obrazem w celu znalezienia odpowiednich wzorów na obrazie.

Conv3D jest zwykle używany do filmów, w których masz ramkę dla każdego okresu. Warstwy te mają zwykle do nauczenia się więcej parametrów niż poprzednie warstwy. Powód, dla którego je nazywamy3Djest to, że oprócz obrazów dla każdej klatki, istnieje inna oś zwana czasem zawierająca wartości dyskretne, a każda z nich odpowiada określonej ramce.

Głoska bezdźwięczna
źródło