W pracy zbadane i porównane zostały metody rozpoznawania ruchów dłoni na podstawie miopotencjałów rejestrowanych na mięśniach przedramienia. Krótko omówiono wybrany sposób ekstrakcji cech sygnałów, a następnie przeanalizowano i porównano metody klasyfikacji tak wyekstrahowanych cech przy pomocy sztucznych sieci neuronowych, drzew decyzyjnych, naiwnych klasyfikatorów bayesowskich oraz leniwych klasyfikatorów korzystających z metody najbliższych sąsiadów. Ekstrakcji cech dokonano w środowisku MATLAB. Sztuczne sieci neuronowe zbudowano przy użyciu aplikacji JooneEditor, a pozostałe klasyfikatory – w środowisku RapidMiner. Liczba prawidłowo rozpoznanych ruchów wahała się od 60% dla sztucznych sieci neuronowych do 80% dla klasyfikatora leniwego. Otrzymane rezultaty pozwalają stwierdzić że klasyfikatory leniwe są lepszym narzędziem niż sieci neuronowe w rozwiązywaniu tego typu problemów.
This report discusses methods of hand movement recognition using myopotentials recorded at the forearm muscles. First, a method of extracting distinctive traits from signals was briefly introduced. Then, a comparison was made, between different methods of classifying these traits into appropriate categories. The aforementioned methods are: artificial neural networks, decision trees, naive Bayesian classifiers and lazy classifiers using the nearest neighbors method. Trait extraction was performed using MATLAB environment. Artificial neural network were developed using JooneEditor application, and the other classifiers – in RapidMiner environment. The percentage of correctly classified (recognized) hand movements was between 60% for artificial neural networks and 80% for lazy classifiers. The results obtained from this experiment imply that lazy classifiers are better suited for solving this sort of problems than artificial neural networks.
Miopotencjały to niewielkie potencjały pojawiające się na powierzchni skóry człowieka podczas pracy mięśni. Charakteryzują się niewielkimi amplitudami i małymi częstotliwościami, przez co ich rejestrowanie jest problematyczne. Niosą one dużą liczbę informacji o aktywności mięśni, dlatego ich analiza może prowadzić do rozpoznawania ruchów, tj aktywności danych grup mięśni. Celem projektu jest zbadanie i porównanie różnych metod rozpoznawania ruchów dłoni na podstawie miopotencjałów zarejestrowanych na przedramieniu. Postanowiono porównać rezultaty działania sieci neuronowych, drzew decyzyjnych, naiwnych klasyfikatorów bayesowskich, oraz leniwych klasyfikatorów działających w oparciu o metodę najbliższych sąsiadów.
Dane do eksperymentu zostały nagrane i udostępnione przez pana Majewskiego – dyplomanta dr Wołczowskiego. 10 różnych ruchów dłoni zarejestrowano przy pomocy 4 elektrod przy częstotliwości 1000Hz, czyli 1000 próbek na sekundę. Liczba powtórzeń pojedynczego ruchu wahała się od 18 do 30 na nagranie. Przeciętnie jeden ruch trwał 1,8 sekundy, co przy częstotliwości 1kHz owocowało liczbą 1800 próbek na ruch. Jest to bardzo duża ilość informacji do przetworzenia, dlatego też zdecydowano się dokonać ekstrakcji cech charakterystycznych poszczególnych ruchów. To właśnie te cechy stanowić będą składowe wektora uczącego/testującego.
Pierwszym krokiem prowadzącym do utworzenia wektora wejściowego jest wyodrębnienie pojedynczych ruchów z nagrania.
Metoda postępowania:
Kanały nr 1 i 2:
Kanały nr 3 i 4, wyrzucone:
Zaprojektowano i zbudowano jednokierunkową sieć z nauczycielem, uczoną algorytmem wstecznej propagacji błędów. Oto jej przykładowy schemat w aplikacji JooneEdit, dla okna czasowego = 225ms (wektor uczący ma rozmiar 32):
Jak widać, w tej konfiguracji sieć posiada jedną warstwę ukrytą o 16 neuronach, na wejściu znajdują się 32 neurony (odpowiadające poszczególnym wartościom wektora wejściowego) a na wyjściu 10 neuronów (odpowiadających poszczególnym klasom ruchów).
Należy nadmienić, że przetestowano sieci jedno- i dwuwarstwowe o różnych liczbach neuronów w warstwie ukrytej. Wyniki sieci w różnych konfiguracjach były do siebie zbliżone dla liczby neuronów ukrytych w zakresie od liczby neuronów wyjściowych do liczby neuronów wejściowych.
Dane wejściowe były normalizowane do zakresu [0, 1], wchodziły liniową warstwą wejściową, przechodziły do ukrytej warstwy lub warstw sigmoidalnych i na koniec do warstwy wyjściowej SoftMax (ma ona podobne parametry do warstwy sigmoidalnej, ale posiada tą własność, że suma jej węzłów zawsze równa się jeden – jej wyjście można więc traktować jako prawdopodobieństwo, że dany ciąg należy do danej klasy). Parametry uczenia były dynamicznie kontrolowane algorytmem symulowanego wyżarzania z autostrojeniem. Nauka kończyła się po upływie 10 tys. epok lub osiągnięciu RMSE = 0,2%. Do nauki sieci wykorzystywane było pierwsze dziesięć zarejestrowanych ruchów danej klasy. Pozostałe nagrane ruchy (w sumie 136) przeznaczono do testowania.
Klasa ruchu: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | średnia |
Skuteczność rozpoznania: | 75% | 40% | 63% | 58% | 75% | 30% | 69% | 100% | 93% | 39% | 64% |
Klasa ruchu: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | średnia |
Skuteczność rozpoznania: | 100% | 40% | 63% | 67% | 63% | 70% | 69% | 80% | 87% | 50% | 69% |
Klasa ruchu: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | średnia |
Skuteczność rozpoznania: | 88% | 50% | 37% | 67% | 81% | 30% | 54% | 93% | 100% | 50% | 65% |
Generalnie najlepsze rezultaty osiągnięto dla klasyfikatora leniwego, niezależnie od rozmiaru okna czasowego. Co ciekawe, najlepszy rezultat (ok. 81%) osiągnął on dla okna czasowego równego 60 ms, dla którego pozostałe klasyfikatory dały wyniki znacząco gorsze.
Okazało się, że rezultaty przetestowanych sztucznych sieci neuronowych nie zależą od okien czasowych (rozmiaru wektora wejściowego). Skuteczność rozpoznania we wszystkich przeanalizowanych przypadkach wynosiła ok. 65%.
Z kolei drzewa decyzyjne okazały się bardzo czułe na zmiany rozmiarów wektora wejściowego - nie radziły sobie z dużymi zbiorami danych. Dla wektora o rozmiarze 120 wykazały zaledwie 41% skuteczności, a dla wektra 12 - znacznie lepiej - 70%
Naiwny klasyfikator bayesowski dla dwóch okien czasowych dawał niewiele gorsze wyniki od leniwego, jednak dla okna 60 ms zaklasyfikował wszystkie ruchy do klasy nr 1. Można przypuszczać, że wystąpiła tu anomalia związana z implementacją klasyfikatora w środowisku RapidMiner.
Z przeprowadzonych badań wynika, że klasyfikator leniwy daje wyniki zawsze lepsze o ok. 15% niż sieci neuronowe. Drzewa decyzyjne dawały wyniki zbliżone lub gorsze niż sieci neuronowe. Trudno jest natomiast wypowiedzieć się na temat wyników naiwnego klasyfikatora bayesowskiego. Jeżeli wynik przez niego osiągnięty dla okna czasowego 60 ms jest spowodowany błędną implementacją to należy uznać, iż osiąga on lepsze rezultaty niż sieci.
Najlepsza uzyskana skuteczność rozpoznania (rzędu 80%) nie jest wystarczająca do zastosowań praktycznych. Najlepsze rezultaty uzyskiwane w dziedzinie rozpoznawania ruchów na podstawie miopotencjałów to skuteczności ok. 95%[1]. Jednym z powodów, dla których nie osiągnięto zbliżonych wyników jest zła jakość dostępnych danych, a także względne podobiństwo poszczególnych klas ruchów (np. ruch nr 9 jest bardzo podobny do ruchu nr 10).