Metody i algorytmy sztucznej inteligencji
Rozpoznawanie ruchów dłoni z sygnałów bioelektrycznych za pomocą sieci neuronowej
Prowadzący: dr inż. Witold Paluszyński
Kamil Surówka
Wrocław 2007
Celem projektu będzie zbudowanie odpowiedniej sieci neuronowej lub kilku sieci i wykorzystanie do rozpoznania ruchów dłoni z sygnałów bioelektrycznych. Sygnały elektryczne wytwarzane (EMG ) przez skurcze mięśni przedramienia będą zbierane przez 6 czujników. Każdy czujnik odczytuje sygnały z częstotliwością 1 kHz przez okres 7 s dla każdego z badanych położeń dłoni. Dokonano 77000 próbek tzn. że będziemy próbowali rozpoznać 11 rodzajów ruchu , gdzie każdy czujnik dostarcza 7000 próbek dla poszczególnych ruchów.
Table 1. Hand movements. |
|
Recognized classes |
Hand movement description |
0. Hand finger flexing, |
Closing the grasp to fist, (wrist in neutral position) |
1. Hand finger extending, |
Utterly finger extending, (wrist in neutral position) |
2. Forearm supination, |
Palm directing to the top, (fingers in neutral position) |
3. Forearm pronation, |
Palm directing to the bottom, (fingers in neutral position) |
4. Wrist flexing, |
Hand wrist flexing, (fingers in neutral position) |
5. Wrist extending, |
Hand wrist extending, (fingers in neutral position) |
6. Thumb flexing, |
Thumb goes to palm, (wrist in neutral position) |
7. Thumb extending, |
Thumb taking a way from palm, (wrist in neutral position) |
8. Fingers flexing II-V, |
Closing the grasp to fist, (thumb in rest position) |
9. Fingers extending II-V. |
Utterly finger extending, (thumb in rest position) |
|
Tabela 1 Opis oraz numeracja rozpoznawanych ruchów
Sztuczna sieć neuronowa to struktura implementująca w sposób uogólniony prace ludzkiego mózgu. Bardzo dobry wstęp i zobrazowanie całej idei sieci neuronowej jest przedstawiony na stronie.
Czym jest sztuczna sieć neuronowa – troszkę dokładniej ?
Cała idea wzięła się z obserwacji działania ludzkiego układu nerwowego. Proces uczenia się człowieka oraz rozwiązywania problemów polega na aktywacji milionów neuronów w ludzkim mózgu. Neuron w ludzkim mózgu jest czymś w rodzaju sumatora , który sumuje sygnały pochodzące z innych podłączonych do niego neuronów. Sygnał odbierany od innych neuronów jest odpowiednio wzmacniany. Tak wygląda ludzki neuron , plus kilka szczegółów o których można przeczytać na stronach z bibliografii.
Komputerowy neuron i sieć neuronów wygląda bardzo podobnie lecz z pewnymi uproszczeniami. Działa ona również podobnie. Sztuczna sieć neuronowa może się uczyć a co więcej może rozpoznawać(uogólniać przedstawione jej dane) cechy danych.
Sztuczny neuron odbiera dane od innych neuronów (o liczbie R) wzmacnia wszystkie sygnały wg poszczególnych wag (tablica W) sumuje (+) a następnie aktywuje się wg funkcji f czyli produkuje własną odpowiedź na sygnały(patrz rys.1 ). Tak opisany neuron może być łączony z innymi tworząc sieć (rys.2).
Można by powiedzieć od strony matematycznej , że nic w tym nadzwyczajnego….sumatory z wagami połączone w sieć. Jednak dzięki tym wagom a dokładnie ich odpowiedniej modyfikacji możemy sprawić aby sieć neuronowa odpowiadała na zadane przez nas wejście (np. [1 2 3]) tak jak my chcemy (np.[-1 1 -1] ).Aby to było możliwe musimy odpowiednio modyfikować wagi.
Tu właśnie leży magia uczenia sieci tzn. tak zmodyfikować wagi aby na zadane wejście sieć zareagowała w oczekiwany przez nas sposób. Najbardziej podstawowym algorytmem uczenia jest algorytm wstecznej propagacji. W uproszczeniu działa on na takie zasadzie iż wagi neuronów są modyfikowane warstwami zaczynając od warstwy ostatniej i propagując wstecz (czyli w kierunku warstwy pierwszej) wartości o ile należy zmodyfikować daną wagę aby uzyskać zadaną aktywacje dla poszczególnego neuronu.
Ze względu na możliwość uczenia oraz zdolność do klasyfikacji danych przez sieć neuronową możemy ją wykorzystać np. do rozpoznawania ruchów dłoni z sygnałów bioelektrycznych produkowanych przez skurcze mięsni dłoni.
Figure 1 Koncepcja sieci neuronowej
Matematyczny model neuronu oraz sieci 3 warstwowej.
Rys. 1 Budowa neuronu
.
Rys. 2 Budowa sieci neuronowej 3 warstwowej – model
Powyższa sieć neuronowa została zastosowana w przeprowadzonych badaniach. W warstwie wejściowej znajduje się 100 neuronów w warstwie ukrytej 20 a w warstwie wyjściowej 11 czyli dokładnie tyle ile będzie rozpoznawanych ruchów.
Do zbudowania sieci neuronowej użyty zostanie pakiet Matlaba Neural Network Toolbox. Jednak aby zbudowana sieć mogła cokolwiek rozpoznawać należy dokonać obróbki danych uczących sieć oraz danych , za pomocą których będziemy testować stworzoną sieć. Często w operacjach klasyfikacji sygnałów konieczna jest redukcja danych. Dla omawianego problemu , tych próbek jest aż 6*77000 = 462000. Dobrym narzędziem jakie daje nam teoria sygnałów jest transformata Fouriera a dokładniej , jeśli chodzi o sygnały spróbkowane dyskretna transformata Fouriera. Dzięki transformacie możemy badać widmo sygnału (mowa tu np. o amplitudzie sygnału dla danej składowej harmonicznej sygnału badanego) w dziedzinie częstotliwości. Co więcej korzystając z miłej własności transformaty zwanej symetrią transformaty możemy zmniejszyć liczbę danych uczących oraz testowych o połowę.
Do badań został użyty program nntool z pakietu Matlaba:
Rys. 3 Interfejs nntool
Aby stworzyć nową sieć klikamy New Network .
Opcje uczenia sieci
Rys. 4 Zakładka Train służąca do wyznaczenia danych uczących oraz danych do celowych
O to schemat blokowy systemu do rozpoznawania EMG:
Zadaniem było rozpoznanie ruchów opisanych w Tabeli 1 z poprawnościa ok. 60%. Poniżej przedstawione są przebiegi spadku błędu uczenia dla wymienionych algorytmów uczenia. Przetransformowane dane EMG transformatą FFT zostały podane na wejścia sieci. Sieć powinna zareagować (target) np. jeśli uczymy sieć ruch 1 to wyjścia sieci (11 tyle ile rozpoznajemy klas ruchu) powinny zareagować [-1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ] natomiast dla kolejnych ruchów wartość 1 przesuwa się odpowiednio w prawo tzn. dla ruchu 3 wartość 1 będzie na miejscu 4 (pamiętajmy że ruchy są numerowane od 0). W badaniach użyto tylko trzech algorytmów uczenia:
traingdx – algorytm zmiennego kroku uczenia za pomocą algorytmu wstecznej propagacji
trainrp – odporny algorytm wstecznej propagacji
trainscg – algorytm gradientów sprzężonych
Opis algorytmu trainrp oraz pozostałych.
Przebiegi uczenia sieci składającej się ze 100 neuronów w warstwie 1 , 20 w warstwie ukrytej (2) oraz jedenastu w warstwie wyjściowej:
Rys. 5 Błąd uczenia dla algorytmu TRAINRP
Rys. 6 Błąd uczenia dla algorytmu TRAINGDX
Rys. 7 Błąd uczenia dla algorytmu TRAINSCG
Wyniki rozpoznania każdego z ruchów siecią trenowaną algorytmem TRAINRP:
Rys. 8 Wizualizacja odpowiedzi nauczonej sieci na 11 testowych ruchów (widok a)
|
Rys. 9 Wizualizacja odpowiedzi nauczonej sieci na 11 testowych ruchów (widok b)
|
Algorytm TRAINRP |
|
||||||||||
Numer ruchu |
|
Poprawność rozpoznania [%] |
||||||||||
0 |
-0,08 |
-0,99 |
-0,99 |
-0,96 |
-0,98 |
-0,98 |
-0,97 |
-0,96 |
-0,99 |
-0,98 |
-0,96 |
48,06 |
1 |
-0,98 |
0,37 |
-0,99 |
-1,00 |
-0,92 |
-0,73 |
-0,99 |
-0,98 |
-1,00 |
-0,40 |
-0,98 |
59,365 |
2 |
-0,99 |
-1,00 |
0,13 |
-0,93 |
-0,98 |
-0,99 |
-0,89 |
-1,00 |
-0,89 |
-0,99 |
-0,27 |
53,3025 |
3 |
-0,68 |
-0,98 |
-0,84 |
-0,09 |
-0,95 |
-0,98 |
-0,88 |
-0,87 |
-0,40 |
-0,98 |
-0,96 |
47,7325 |
4 |
-0,92 |
-0,97 |
-0,98 |
-0,93 |
-0,02 |
-0,97 |
-0,99 |
-0,68 |
-0,96 |
-0,92 |
-0,95 |
49,585 |
5 |
-0,99 |
-0,68 |
-0,99 |
-0,99 |
-0,98 |
0,51 |
-1,00 |
-1,00 |
-0,98 |
-0,81 |
-0,97 |
62,625 |
6 |
-0,91 |
-0,99 |
-0,79 |
-0,94 |
-0,98 |
-1,00 |
0,71 |
-0,96 |
-0,99 |
-0,99 |
-0,91 |
67,675 |
7 |
-0,52 |
-0,99 |
-0,99 |
-0,85 |
-0,66 |
-0,99 |
-0,97 |
0,53 |
-0,94 |
-0,95 |
-0,99 |
63,345 |
8 |
-0,90 |
-0,99 |
-0,89 |
-0,49 |
-0,93 |
-0,96 |
-1,00 |
-0,97 |
0,14 |
-0,98 |
-0,95 |
53,5525 |
9 |
-0,94 |
-0,79 |
-0,98 |
-0,99 |
-0,91 |
-0,81 |
-0,99 |
-0,97 |
-0,98 |
-0,24 |
-0,95 |
44 |
10 |
-0,98 |
-0,97 |
-0,79 |
-0,95 |
-0,74 |
-0,94 |
-0,83 |
-0,93 |
-0,98 |
-0,98 |
-0,33 |
41,6325 |
|
|
|
|
|
|
Średnia poprawność rozpoznania [%] |
53,715909 |
Tabela 2 Tabela rozpoznania sygnałów EMG algorytmem TRAINRP
Prezentowaną powyżej tabele wyników uzyskano dzięki przeprowadzeniu rozpoznania 11 ruchów przez nauczoną już sieć. Zasymulowanie odpowiedzi sieci na dany ruch zawsze daje odpowiedź 11 wartości (dokładnie tyle ile znajduje się neuronów w ostatniej warstwie sieci) stąd tabela o rozmiarze 11x11. Na przekątnej tej tabeli znajdują się odpowiedzi sieci na badany ruch. I tak np. podając na sieć sygnały ruchu 6 widzimy , że sieć odpowiada wartością 0.71 (wyjście neuronu 6 w warstwie końcowej) natomiast wartości rozpoznania pozostałych ruchów są ujemne i większości przypadków bliskie -1(czyli odpowiedzi : „to nie ten ruch”).
Dzięki sieciom neuronowym udało się rozpoznać badane ruchy z poprawnością ok. 60%. Najlepszym z algorytmów okazał się algorytm TRAINRP ponieważ dał on najmniejszy błąd uczenia rzędu ok. 0.12 liczonego według wzoru na błąd średnio kwadratowy. Podczas badań okazało się , iż algorytm TRAINSCG działał najdłużej ale dawał największą liniowość uczenia , jednak jego czas działania był 2 razy większy od pozostałych. Wybór struktury sieci tzn. liczba warstw ,liczba neuronów w warstie pozostaje niestety sprawą owartą. Struktura przyjęta w tych badaniach została zaczerpnięta z artykułu [1] . Co prawda nie jest ona identyczna ale sugerowano się stosunkiem liczby neuronów w poszczególnych warstwach.
Istotnym elementem w budowaniu sieci , jest również funkcja aktywacji , ponieważ gdybyśmy chcieli nauczyć sieć aby na dane wejście odpowiadała wartościami większymi od (-1,1) np. (-3,3) a w ostaniej warstwie zastosowalibyśmy tengensoidalną funkcję aktywacji , która daje wartości z przedziału [-1,1] nie bylibyśmy wstanie obniżyć błędu uczenia do wartości poniżej ok. 2. Po prostu sieć nigdy nie odpowie nam wartości bliską 3 lub -3 co najwyżej -1,1.
Sieci neuronowe to narzędzie idealne do klasyfikowania danych i ich rozpoznawania np. do rozpoznawania ruchów dłoni z sygnałów EMG. Warunkiem jednak koniecznym do poprawnego działania sieci jest odpowiednie przygotowanie danych uczących oraz testowych .
Jeśli chodzi o strukturę sieci należy po prostu eksperymentować. Należy również pamiętać ,iż duża liczba warstw oraz neuronów nie koniecznie może wpływać pozytywnie na poprawność jej działania.
[1] RECOGNITION OF EMG SIGNAL PATTERNS
BY NEURAL NETWORKS Yuji Matsumura*,Yasue Mitsukura*,Minoru Fukumi*,Norio Akamatsu*, Yoshihiro Yamamoto** and Kazuhiro Nakaura**
[2] MATLAB Co. – Documantation
[4] Sieci neuronowe w zastosowaniach : praca zbiorowa
[5] http://wavelet.elektro.agh.edu.pl/wyklad/pdf/DFT.pdf
[6] http://www.ii.uni.wroc.pl/~aba/teach/NN/hebbPCA.pdf