Korzystanie z RNN (LSTM) w systemie rozpoznawania gestów

10

Usiłuję zbudować system rozpoznawania gestów do klasyfikowania gestów ASL (amerykański język migowy) , więc moje dane wejściowe powinny być sekwencją klatek z kamery lub pliku wideo, a następnie wykrywa tę sekwencję i odwzorowuje ją na odpowiednią klasa (spać, pomagać, jeść, biegać itp.)

Chodzi o to, że zbudowałem już podobny system, ale dla obrazów statycznych (bez ruchu), było to przydatne do tłumaczenia alfabetów, w których zbudowanie CNN było prostym zadaniem, ponieważ ręka nie porusza się tak bardzo, a struktura zestawu danych była również zarządzalna, ponieważ korzystałem z keras i być może nadal zamierzam to zrobić (każdy folder zawierał zestaw obrazów dla określonego znaku, a nazwa folderu to nazwa klasy tego znaku, np .: A, B, C , ..)

Moje pytanie tutaj: w jaki sposób mogę uporządkować mój zestaw danych, aby móc wprowadzić go do RNN w kamerach i jakich określonych funkcji powinienem użyć, aby skutecznie trenować mój model i wszelkie niezbędne parametry, niektórzy sugerowali użycie klasy TimeDistribution, ale ja nie mam jasny pomysł, jak go wykorzystać na moją korzyść, i wziąć pod uwagę kształt wejściowy każdej warstwy w sieci.

także biorąc pod uwagę, że mój zestaw danych będzie składać się z obrazów, prawdopodobnie będę potrzebował splotowego warstwę, jak to będzie możliwe, aby połączyć Conv warstwę do LSTM jeden (mam na myśli w kategoriach kodu).

Na przykład wyobrażam sobie, że mój zestaw danych może być taki

struktura zbioru danych

Folder o nazwie „Uruchom” zawiera 3 foldery 1, 2 i 3, każdy folder odpowiada ramce w sekwencji

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Więc Run_1 będzie zawierał zestaw obrazów dla pierwszej klatki, Run_2 dla drugiej klatki i Run_3 dla trzeciej klatki, celem mojego modelu jest wytrenowanie w tej sekwencji, aby wypisać słowo Run .

Anasowicz
źródło
Jakiego zestawu danych używasz do ASL?
Sam Johnson,
Przepraszamy, ale zarejestrowaliśmy własny zestaw danych i nie udało nam się go opublikować publicznie, nie było to aż tak dużo i nie dało oczekiwanej dokładności.
Anasowicz
Jest to z pewnością wykonalne i nie wygląda na zbyt wiele dodatkowego kodowania z artykułu wymienionego poniżej, ale nie mówię z doświadczenia, ponieważ nie jest to architektura, z której wcześniej korzystałem. Mam nadzieję, że ten artykuł skieruje Cię we właściwym kierunku: machinelearningmastery.com/cnn-long-short-term-memory-networks
Ollie Graham

Odpowiedzi:

2

W oparciu o moje zrozumienie wydaje się, że sprowadza się to do problemu klasyfikacji wielu klas (każdy zestaw / sekwencja gestów ręki ostatecznie odpowiada słowu / symbolowi). Architektura RNN / LSTM / GRU to świetne miejsce na rozpoczęcie, ale będzie kosztowne obliczeniowo i raczej wolno trenować. Jednak to, czy potrzebujesz jednego lub więcej z nich, zależy od struktury danych i od tego, czy możesz potraktować swoje zdjęcia jako zestaw, a nie sekwencję.

Oto kilka potencjalnych pomysłów:

  1. Rozpocznij od skonfigurowania warstwy CNN dla każdego folderu „RUN_ *” wraz z każdą warstwą dropouti / lub flatteningmiędzy nimi.

  2. Zacznij od ustawienia pojedynczego długiego wektora reprezentującego wszystkie etapy sekwencji, a następnie dodaj kilka warstw CNN, również za pomocą dropouti / lub flattening.

To zajmie trochę eksploracji i dostrojenia po twojej stronie, aby zobaczyć, co działa najlepiej, i będziesz musiał wybrać za pomocą wskaźników oceny, które chcesz zoptymalizować (np. Precyzja / przywołanie)

Powodem, dla którego sugeruję CNN, jest to, że w niektórych przypadkach CNN mogą zapewniać wydajność podobną do modelu cyklicznego, ale za ułamek kosztów. Niestety, trudno jest powiedzieć bez żadnych informacji o twoich danych.

ngopal
źródło