Porównanie metod rozpoznawania ruchów dłoni na podstawie miopotencjałów rejestrowanych na przedramieniu.

Autorzy: Rafał Adamczyk i Konrad Zieliński
Data: 16 czerwca 2008
Raport z projektu: Metody i algorytmy sztucznej inteligencji

Streszczenie:

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.

The comparison of hand movement recognition methods based on myopotentials recorded from a forearm.

Authors: Rafał Adamczyk and Konrad Zieliński
Date: June 16, 2008
This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence

Abstract:

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.


Wstęp

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.


Akwizycja i ekstrakcja danych:

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:

  1. Wyznaczono wartość bezwzględną amplitudy całego nagrania. Tu okazało się, że kanały nr 3 i 4 są kompletnie zaszumione, co musiało być efektem jakiegoś zwarcia, czy też błędnego podłączenia elektrod na etapie nagrywania sygnałów. W obliczu tego zdecydowano się przeprowadzić eksperyment dla danych zebranych z elektrod nr 1 i 2.

    Kanały nr 1 i 2:

    kanal4.png kanal5.png

    Kanały nr 3 i 4, wyrzucone:

    kanal1.png kanal2.png
  2. Zsumowano poziomy energii (wartości bezwzględne amplitudy) z kanałów 1 i 2, po czym podzielono nagranie na x okien o długości 60ms. Dla każdego z tych okien obliczono wartość średnią poziomu energii. Efekt tego działania obrazuje poniższa ilustracja, pozioma kreska oznacza wyznaczony empirycznie poziom szumów.

    podzial na ruchy.png


    Na podstawie tak przetworzonych danych wyznaczono początki i końce pojedynczych ruchów z dokładnością do 60ms. Początek ruchu jest tam, gdzie wykres przechodzi przez poziomą kreskę i jest rosnący – koniec tam, gdzie malejący.
  3. Na postawie wyznaczonych wartości początków i końców ruchów wyodrębniano pojedyncze ruchy z nagrania, a następnie dokonywano ich interpolacji w taki sposób, aby wynikowy ruch składał się z 1800 próbek. Przykładowy ruch (2 kanały, wartość bezwzględna):

    ruch kanal1.png ruch kanal2.png

  4. Mając wyodrębniony pojedynczy ruch składający się z dokładnie 1800 próbek przystępowano do przygotowania wektora wejściowego. Poniższe operacje wykonywano osobno dla każdego z dwóch kanałów. Ilustracja graficzna wektora wejsciowego:

    wektor wejsciowy.png

    Rozmiar wektora wejściowego zależy od rozmiaru okna czasowego tak, że rozmiar wektora = 4 * 1800 / rozmiar okna (ms)

Sztuczne sieci neuronowe

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):

siec joone.png

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.


Klasyfikatory

Przebadano następujące rodzaje klasyfikatorów ze środowiska RapidMiner: W badaniach klasyfikatorów zastosowano mechanizm walidacji krzyżowej. Polega ona na podziale zbioru wektorów wejściowych na dwie części. Nauki dokonuje się przy pomocy pierwszej połowy dostępnych danych, a oceny skuteczności - przy pomocy drugiej. Następnie procedure powtarza się, tym razem - nauka przy pomocy drugiej, a ocena - pierwszej. Ostateczna skuteczność jest średnią z obu operacji.

Rezultaty eksperymentów

Okno czasowe 60 ms, wektor 120-elementowy

Sieci neuronowe:
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%

Drzewo decyzyjne:

tree60.png

Naiwny klasyfikator bayesowski:

naive60.png

Klasyfikator leniwy:

lazy60.png


Okno czasowe 225 ms, wektor 32-elementowy

Sieci neuronowe:
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%

Drzewo decyzyjne:

tree225.png

Naiwny klasyfikator bayesowski:

naive225.png

Klasyfikator leniwy:

lazy225.png


Okno czasowe 600 ms, wektor 12-elementowy

Sieci neuronowe:
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%

Drzewo decyzyjne:

tree600.png

Naiwny klasyfikator bayesowski:

naive600.png

Klasyfikator leniwy:

lazy600.png


Wnioski

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).

Bibliografia

  1. Krysztoforski K., Będziński R., Wołczowski A.: Klasyfikacja sygnałów mięśniowych EMG w celu sterowania biomanipulatorem, XIV Krajowa Konferencja Naukowa Biocybernetyka I Inżyniera Biomedyczna, Częstochowa 2005, Tom I, s. 107-113
  2. Jeff Heaton, Introduction to Neural Networks with Java
  3. The Joone Complete Guide
  4. RapidMiner Interactive Tour

Valid XHTML 1.0 Transitional