Jaka jest architektura stosowego autokodera splotowego?

23

Próbuję więc przeprowadzić wstępne szkolenie na obrazach ludzi za pomocą sieci splotowych. Czytam gazety ( papierowe1 i Paper2 ) i ten związek stackoverflow , ale nie jestem pewien, jestem zrozumieć strukturę sieci (nie jest dobrze zdefiniowane w dokumentach).

Pytania:

  • Mogę mieć moje dane wejściowe, a następnie warstwę szumu, a następnie warstwę konwekcyjną, a następnie warstwę puli - czy potem - czy wyłączam pulę, zanim podam mój wynik (który jest taki sam jak mój obraz wejściowy)?

    Powiedzmy, że mam kilka (135.240) zdjęć. Jeśli użyję jądra 32, (12,21), a następnie puli (2,2), skończę z 32 (62, 110) mapami funkcji. Czy teraz wyłączę pulę, aby uzyskać 32 (124, 220) mapy obiektów, a następnie spłaszczyć je? przed podaniem mojej (135,240) warstwy wyjściowej?

  • Jeśli mam wiele takich warstw puli konwekcyjnej, czy powinienem je trenować jeden po drugim - jak w przypadku zestawionych auto-koderów denoised? Lub - czy mogę mieć coś takiego jak input-conv-pool-conv-pool-conv-pool-output (wyjście jest takie samo jak wejście)? W takim przypadku, w jaki sposób należy zarządzać pulowaniem, usuwaniem buforów? Czy powinienem de-poolować tylko w ostatniej warstwie puli przed wyjściem? I znowu - jaki powinien być czynnik zmiany rozmiaru tego usuwania puli? Czy intencją jest przywrócenie map obiektów do kształtu danych wejściowych?

  • Czy powinienem wprowadzać warstwy szumu po każdej warstwie depool-depool-depool?

  • A potem przy dostrajaniu - mam po prostu usunąć warstwy z pulowania i pozostawić resztę bez zmian. A może powinienem usunąć zarówno warstwy szumu, jak i warstwy z puli

  • Czy ktokolwiek może wskazać mi adres URL, który szczegółowo opisuje architekturę takiego ustawionego enkodera splotowego, aby przeprowadzić wstępne szkolenie na obrazach?

Run2
źródło

Odpowiedzi:

12

Obecnie badam autoakodery zwojowe.

Postaram się odpowiedzieć na niektóre pytania zgodnie z moją najlepszą wiedzą. Pamiętaj, że mogę się mylić, więc weź to z odrobiną soli.

  1. Tak, musisz „odwrócić” pulę, a następnie splot z zestawem filtrów, aby odzyskać obraz wyjściowy. Standardowa sieć neuronowa (uwzględniając dane MNIST jako dane wejściowe, tj. Wymiary wejściowe 28 x 28) to:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. Rozumiem, że konwencjonalnie właśnie to należy robić, tj. Trenować każdą warstwę osobno. Następnie nakładasz warstwy i trenujesz całą sieć jeszcze raz, używając wstępnie wytrenowanych obciążników. Jednak Yohsua Bengio ma pewne badania (odniesienie ucieka mi z pamięci), które pokazują, że można zbudować w pełni ułożoną sieć i trenować od zera.

  3. Rozumiem, że „warstwa szumowa” ma na celu wprowadzenie odporności / zmienności danych wejściowych, tak aby trening się nie dopasował.

  4. Tak długo, jak nadal „trenujesz” wstępne szkolenie lub dostrajanie, myślę, że niezbędna jest część rekonstrukcyjna (tj. Buforowanie wsteczne, dekonwolucja itp.). W przeciwnym razie, w jaki sposób należy wykonać propagację błędów w celu dostrojenia wag?

  5. Próbowałem przeglądać liczne artykuły, ale architektura nigdy nie została w pełni wyjaśniona. Jeśli znajdziesz jakieś, daj mi znać.

użytkownik2979010
źródło
Jeśli skończysz z treningiem wstępnym, nie potrzebujesz już części dekodera, a precyzyjne dostrojenie nadal dostosowuje enkoder, tym razem dla lepszej klasyfikacji.
jwalker
2
Jak jest możliwe „reverse-maxPool”? Nigdy nie możesz zrekonstruować zestawu liczb, biorąc pod uwagę tylko maksimum ...?
Fequish,
1
@Fequish, to przybliżone odwrotne maksimum np .: jeśli pula = 2x2, zachowuję pozycję maksimum i wstawiam maksimum do tej konkretnej pozycji w 2x2, reszta to 0
2979010
1
@jwalker, moim celem końcowym nie była klasyfikacja, a więc dostrajanie w rozwiniętej sieci
user2979010
@Fequish, w celu zdekodowania rewersu, jest po prostu skalowanie do najbliższego sąsiada.
jwalker
2

Szukałem także w pełni wyjaśnionego modelu Stacked Convolutional Autoencoders.

Natknąłem się na trzy różne architektury. Nadal je badam i pomyślałem, że mogą one pomóc innym, którzy również zaczynają badać CAE. Wszelkie dalsze odniesienia do dokumentów lub wdrożeń byłyby bardzo pomocne.

  1. Ten, o którym wspominałeś, że korzystasz z puli - unpooling.
  2. Warstwy (splot) __ x_times -> (deconvolve) __ x_times,

    i uzyskaj taki sam rozmiar jak wejście.

  3. (splot -> pula) __ x_times -> (krocząca dekonwolucja) __ y_times
    • wypełnienie i kroki są wybierane w taki sposób, że końcowy rozmiar obrazu jest taki sam jak obraz oryginalny.
    • Odniesienie
Ankitp
źródło
2
Witamy na stronie. Czy miało to być odpowiedzią na pytanie PO, komentarzem wymagającym wyjaśnień od PO lub jednego z respondentów, czy też własnym pytaniem? Użyj tylko pola „Twoja odpowiedź”, aby podać odpowiedzi na pierwotne pytanie. Będziesz mógł komentować w dowolnym miejscu, gdy Twoja reputacja będzie> 50. Jeśli masz nowe pytanie, kliknij szary kolor ASK QUESTION u góry strony i zadaj je tam, a my pomożemy Ci właściwie. Ponieważ jesteś tutaj nowy, możesz wybrać się na naszą wycieczkę , która zawiera informacje dla nowych użytkowników.
Gung - Przywróć Monikę
1
Został pomyślany jako odpowiedź na pytanie PO, choć może nie kwalifikować się jako pełna odpowiedź. Odpowiedziałem na ostatnią część: „Próbowałem przeglądać liczne artykuły, ale architektura nigdy nie została w pełni wyjaśniona. Jeśli znajdziesz jakieś, daj mi znać.
Ankitp
Ok dzięki. Sposób, w jaki to wychodzi, jest niejednoznaczny. Np. „Ja również szukałem ...” i „Wszelkie dalsze odniesienia do dokumentów lub implementacji bardzo by pomogły”. Pamiętaj, że CV to czysta strona pytań i odpowiedzi, a nie forum dyskusyjne. Dlaczego nie skorzystać z naszej wycieczki i dowiedzieć się więcej o stronie?
Gung - Przywróć Monikę
-1

Nie sądzę, aby metoda treningu oparta na warstwach była poprawna. Na przykład architektura autokodera splotowego jest następująca:

input-> conv-> max_poo-> de_max_pool-> de_conv-> wyjście.

Jest to automatyczny koder, który należy przeszkolić w całej architekturze. Ponadto nie ma ścisłego kryterium, czy jeden autokoder splotowy potrzebuje puli i un_pool. zwykle jedna pula, ale bez un_pool. Oto eksperymentalne porównania z brakiem puli i un_pool.

https://arxiv.org/pdf/1701.04949.pdf

Kevin Sun
źródło