Image:Wykorzystanie sieci neuronowych do

Transkrypt

Image:Wykorzystanie sieci neuronowych do
Państwowa Wyższa Szkoła Zawodowa
w Tarnowie
Instytut Politechniczny
Kierunek: Elektronika i Telekomunikacja
Piotr Nowak
PRACA INŻYNIERSKA
Wykorzystanie sieci neuronowych do
rozpoznawania sygnałów akustycznych
Opiekun pracy:
dr inż. Robert Wielgat
Tarnów, 2011
2
Oświadczam, że niniejszą pracę wykonałem
praca nie narusza praw autorskich innych osób.
samodzielnie oraz że
................................
podpis
Oświadczam, że wersja elektroniczna pracy znajdująca się na płycie
jest zgodna z niniejszym wydrukiem.
...................................
podpis
Składam serdeczne podziękowanie
promotorowi mojej pracy
dr inż. Robertowi Wielgatowi
za pomoc i cenne wskazówki
udzielane podczas pisania pracy.
3
SPIS TREŚCI
WSTĘP.................................................................................................................................................... 4
Rozdział 1. Cele pracy............................................................................................................................. 5
Rozdział 2. Użyte metody....................................................................................................................... 5
2.1. Ekstrakcja cech................................................................................................................5
2.1.1. Melowo-częstotliwościowe współczynniki cepstralne (MFCC - Mel Frequency Cepstral
Coefficients).................................................................................................................................... 6
2.1.2. Metoda TDSC...................................................................................................................... 14
2.1.3. Pozostałe metody............................................................................................................... 15
Rozdział 3. Sieci neuronowe................................................................................................................. 17
3.1. Perceptron wielowarstwowy......................................................................................... 17
3.1.1. Neurony.............................................................................................................................. 18
3.1.2. Funkcja aktywacji................................................................................................................ 19
3.1.3. Algorytm uczenia................................................................................................................ 21
3.2. Sieci typu SOM............................................................................................................. 23
Rozdział 4. Interfejs użytkownika ......................................................................................................... 27
Interfejs programu BBirdsmond. Aplikacja została napisana w języku C++ w środowisku QT przy
użyciu narzędzia QT Creator IDE w wersji 2.0.1 ................................................................................... 27
4.1. Opis funkcjonalny interfejsu użytkownika....................................................................27
4.2. Dodawanie wzorców..................................................................................................... 30
4.3. Nauczanie sieci..............................................................................................................31
4.4. Rozpoznawanie ............................................................................................................ 32
Rozdział 5. Opis wybranych fragmentów kodu..................................................................................... 34
5.1. Środowisko programistyczne QT..................................................................................34
5.2. Program i jego elementy ................................................................................................35
5.3. Funkcja obliczająca odciętą środka ciężkości kwadratu modułu FFT sygnału..............36
5.4. Klasyfikacja na podstawie wielowarstwowej sztucznej sieci neuronowej.....................45
Rozdział 6. Wykonane eksperymenty................................................................................................... 46
PODSUMOWANIE................................................................................................................................. 48
Literatura.............................................................................................................................................. 49
4
WSTĘP
Ważnym elementem ochrony przyrody jest przeciwdziałanie wymieraniu różnych
gatunków zwierząt. Do dużej grupy zagrożonych gatunków zwierząt należą ptaki. Aby je
chronić przed wyginięciem trzeba wiedzieć, jakie gatunki są zagrożone. Służą temu różne
badania terenowe pozwalające na wyznaczeniu populacji oraz siedlisk wielu gatunków
ptaków [1]. Niestety są one niekiedy bardzo kosztowne i czasochłonne oraz angażują dużą
liczbę osób. Częściowym rozwiązaniem powyższych
problemów może być nagrywanie
głosów ptaków w trakcie badań terenowych oraz późniejsze automatyczne lub
półautomatyczne ich rozpoznawanie. Informacje o automatycznie rozpoznanych gatunkach
ptaków mogłyby być następnie zapisywane do bazy danych, z której można by generować
raporty o stanie zagrożenia poszczególnych gatunków.
Metodą pozwalającą na automatyczne rozpoznawanie głosów ptaków są sztuczne sieci
neuronowe. Stanowią one efektywne narzędzie badawcze intensywnie rozwijającą się
dziedzinę wiedzy stosowane w wielu dziedzinach nauki. Sztuczne sieci neuronowe składają
się z połączonych ze sobą obiektów (umownie zwanych neuronami). Istotną cechą sieci takich
elementów jest umiejętność uczenia się, czyli modyfikowania parametrów charakteryzujących
poszczególne neurony w taki sposób, aby zwiększyć efektywność sieci np. efektywność
rozpoznawania gatunków ptaków.
Podczas tworzenia oprogramowania, stanowiącego integralną część pracy skupiono się
na implementacji dwóch typów sieci neuronowych:
 Perceptron
 Sieci Kohonena (ang. SOM- Self Organizing Map)
Perceptron to sieć neuronowa najprostszego typu. Jest to sieć składająca się z wielu
warstw neuronów, gdzie wyjścia poprzedniej warstwy łączą się z wejściami kolejnej. Taka sieć jest
nazywana perceptronem wielowarstwowym. Działanie perceptronu polega na klasyfikowaniu danych
pojawiających się na wejściu i ustawianiu stosownie do tego wartości wyjścia. Perceptron należy
wytrenować podając mu odpowiednie dane na wejście oraz modyfikując w odpowiedni sposób wagi
5
wejść i połączeń między warstwami neuronów, tak aby wartość na wyjściu dawała odpowiednie
wartości.
Sieci Kohonena są jednych z podstawowych typów sieci neuronowych uczonych bez nauczyciela. W
porównaniu do nadzorowanych strategii uczenia, wzorce wejściowe służą do samodzielnego
wyekstrahowania pewnej wiedzy w nich zawartej. Parametry sieci są dostrajane według
odpowiedniej procedury uczenia wykorzystując tylko wzorce wejściowe.
W obu rodzajach sieci wzorcami podawanymi na wejście są cechy wyekstrahowane z
sygnału akustycznego będącego głosem ptaka. W dalszej części pracy zostanie dokonana
charakterystyka tych cech oraz rozpoznawania sygnałów akustycznych za ich pomocą z
wykorzystaniem sieci neuronowych.
Rozdział 1. Cele pracy
1. Celem części teoretycznej pracy było przedstawienie dwóch typów sieci neuronowych
oraz cech, jakie można wyekstrahować z sygnału akustycznego będącego głosem
ptaka, jak również opis programu wykonanego w ramach części praktycznej pracy
oraz badań wykonanych za jego pomocą.
2. Celem części praktycznej pracy była implementacja procedur do rozpoznawania
sygnałów akustycznych za pomocą sieci neuronowych na przykładzie głosów ptaków.
W tym celu użyto perceptronów wielowarstwowych oraz sieci typu SOM. Procedury
rozpoznawania sygnałów zostały zaimplementowane w języku C++ w środowisku
QT. Ponadto część praktyczna obejmowała również wykonanie przykładowych badań
z użyciem sieci neuronowych.
Rozdział 2. Użyte metody
2.1. Ekstrakcja cech
Ekstrakcja cech odgrywa bardzo ważną rolę w rozpoznawaniu gatunków ptaków na
podstawie ich głosu.
6
W pracy badano następujące rodzaje cech:
 Parametry mel-cepstralne (ang. MFCC - Mel Frequency Cepstral Coefficients),
 Kodowanie sygnału w dziedzinie czasu (ang. TDSC - Time Domain Signal
Coding),
 Długość sygnału w próbkach,
 Odcięta środka ciężkości kwadratu sygnału w próbkach,
 Odcięta środka ciężkości kwadratu modułu średniego FFT.
Etap ekstrakcji poprzedza się często wstępnym przetwarzaniem sygnału jak np.
redukcja szumów czy filtracja pasmowo-przepustowa, jednakże te metody nie są opisywane
w niniejszej pracy.
2.1.1. Melowo-częstotliwościowe współczynniki cepstralne (MFCC - Mel
Frequency Cepstral Coefficients)
Melowo - częstotliwościowe współczynniki cepstralne są współczynnikami, dzięki
którym można uzyskać stosunkowo wysoką skuteczność rozpoznawania sygnałów
akustycznych. MFCC wyprowadza się w następujących etapach:
1. Blokowanie sygnału w ramki, okienkowanie oknem Hamminga
7
Rys. 2.1. Dzielenie sygnału na ramki
gdzie:
- ilość próbek ramki, - rozmiar ramki w milisekundach [ms],
- częstotliwość próbkowania sygnału w [Hz].
Okienkowanie sygnału polega na przemnożeniu próbek w ramce sygnału przez funkcję
okna.
8
Funkcja okna (np. okno Hamminga)
Sygnał w ramce
przemnożony
przez funkcję okna
Sygnał w ramce
Często wykorzystywanym oknem jest okono Hamminga, którego wartości oblicza się
ze wzoru:
(2.2)
gdzie:
– funkcja okna Hamminga,
- liczba próbek w ramce.
- numer próbki,
9
2. Przeprowadzenie FFT na zokienkowanych ramkach sygnału
3. Obliczenie mocy FFT w określonych pasmach częstotliwościowych
W skali melowej jednostką częstotliwości jest mel. Częstotliwości środkowe w tych
pasmach są równomiernie rozmieszczone. Szerokość pasma w skali melowej jest powiązana z
rozmieszczeniem częstotliwości środkowych. Pasma zachodzą na siebie na połowie swej
długości.
Rys. 2.2. Bank filtrów MFCC w skali melowej
Zależność między mel i Hz ma charakter nieliniowy i określana jest poniższymi
wzorami:
10
(2.3)
(2.4)
Związek między liniową skalą częstotliwości w Hz, a skalą melową przedstawia
poniższy rysunek:
Na podstawie skali mel tworzony jest bank filtrów w skali hercowej [Hz]. Filtry mają
trójkątne charakterystyki amplitudowe.
11
Rys. 2.3. Bank filtrów MFCC w skali hercowej
Aby wyprowadzić wzór na moc FFT w określonym paśmie częstotliwości należy
wykorzystać poniższą funkcję:
(2.5)
gdzie:
– waga zbocza,
- częstotliwość próbek.
Współczynniki a i b można wyprowadzić na podstawie Rys. 2.3. Można również
obliczyć dowolną wagę
dla zbocza narastającego:
(2.6)
12
)
(2.7)
(2.8)
(2.9)
gdzie:
- waga zbocza narastającego,
- częstotliwość pierwszej próbki w paśmie,
- częstotliwość środkowej próbki.
Analogicznie można obliczyć dowolną wagę
zbocza opadającego:
(2.10)
(2.11)
(2.12)
gdzie:
- waga zbocza opadającego,
- częstotliwość środkowej próbki,
- częstotliwość ostatniej próbki w paśmie.
13
Za pomocą poniższego wzoru można obliczyć moc FFT w określonym paśmie
częstotliwościowym:
(2.13)
gdzie:
(n) – energia w n-tym paśmie, trzeba dokonać zmiany we wzorze.
- pierwsza próbka w n-tym paśmie,
- środkowa próbka w n-tym paśmie,
- ostatnia próbka w n-tym paśmie.
Trzeba jeszcze wyjaśnić co to jest „i” oraz co oznacza „η”.
4. Obliczenie logarytmu zakumulowanych współczynników widmowych
5. Przeprowadzenie DCT na zlogarytmowanych współczynnikach widmowych
(2.14)
gdzie:
- funkcja bazowa,
- numer funkcji bazowej,
14
- numer próbki w funkcji.
6. Opcjonalne obliczenie pierwszej i drugiej pochodnej po czasie ze współczynników
DCT czyli tzw. współczynników delta oraz delta-delta.
2.1.2. Metoda TDSC
Pierwszy system do odróżniania dźwięków (odgłosów) różnych gatunków zwierząt przy
użyciu metody TDSC (ang. Time Domain Signal Coding) i sztucznej sieci neuronowej (SSN)
zaproponował Chesmore [2]. W TDSC w pierwszej kolejności wyznaczane są miejsca przejść
między wartościami dodatnimi a negatywnymi, gdzie występuje przejście przez zero
Rys. 2.4. Przykład kształtu fali epoki opisanej parametrem D i S
Każdy z punktów przejścia kończy i rozpoczyna każdą epokę. Epoka jest określana jako
dodatnia, jeśli wszystkie próbki w epoce mają wartości dodatnie. Oraz odwrotnie, o epoce
mówi się, że jest ujemna, jeżeli wszystkie próbki danej epoki mają wartość ujemną. Następnie
jak pokazano na Rys. 2.4. jest wyznaczany czas trwania (D), który określa liczbę próbek na
epokę (dla epoki dodatniej i ujemnej), i kształt (S), który jest definiowany jako liczba
15
minimów dla dodatniej epoki oraz liczba maksimów dla ujemnej epoki. Te cztery parametry
metody TDSC są wykorzystywane jako dane wejściowe sztucznych sieci neuronowych.
2.1.3. Pozostałe metody
Z sygnału akustycznego będącego głosem ptaka można również wyekstrahować
następujące cechy:
1. Długość sygnału w próbkach
Długość sygnału w próbkach jest parametrem, który można odczytać bezpośrednio z
nagłówka plików w formacie WAV.
2. Odcięta środka ciężkości kwadratu sygnału w próbkach
Parametr ten jest obliczany dla każdej ramki sygnału według wzoru [3]:
(2.15)
gdzie:
- odcięta środka ciężkości kwadratu sygnału,
- n-ta próbka sygnału,
- liczba próbek sygnału.
3. Odcięta środka ciężkości kwadratu modułu średniego FFT
Dla każdej ramki przemnożonej przez funkcję okna Hamminga obliczany jest moduł
FFT. Następnie jest obliczany średni moduł FFT. Na podstawie modułu FFT jest obliczana
16
odcięta środka ciężkości kwadratu modułu średniego FFT według wzoru z poprzedniego
punktu, przy czym zamiast n-tej próbki sygnału s(n) jest podstawiona n-ta wartość kwadratu
modułu FFT, a N jest długością FFT.
4. Stosunek sygnału do szumu (SNR-Signal-to-noise-ratio)
SNR wyznacza się zgodnie z poniższym wzorem:
(2.16)
gdzie:
- maksymalna moc sygnału,
- minimalna moc szumów.
Moc sygnału, jak i moc szumu jest obliczana na podstawie próbek dla każdej ramki
według wzoru:
(2.17)
gdzie:
- k-ta próbka sygnału,
- liczba próbek w ramce.
17
Rozdział 3. Sieci neuronowe
3.1. Perceptron wielowarstwowy
Sieci neuronowe składają się z pojedynczych obiektów, zwanych neuronami ułożonych
w warstwy. W sieciach jednokierunkowych oprócz węzłów wejściowych oraz warstwy
wejściowej, występuje również oddzielna warstwa wyjściowa.
Mogą również występować warstwy pośrednie (tzw. warstwy ukryte neuronów), czyli
takie do których nie ma bezpośredniego dostępu z zewnątrz (nie można bezpośrednio
podawać ani czytać sygnałów z neuronów tej warstwy), ale spełniają one ważną rolę w
przetwarzaniu sygnału wejściowego w ostateczny wynik.
Rys.3.1. Sieć jednokierunkowa wielowarstwowa
18
gdzie:
- sygnały wejściowe,
- sygnały wyjściowe.
Sygnały wejściowe x1, x2, x3, x4 ... xN są podawane na pierwszą warstwę neuronów
(warstwę wejściową), a te z kolei stanowią sygnały źródłowe dla kolejnej warstwy. W
sieciach wielowarstwowych najczęściej występują połączenia pełne między warstwami,
gdzie każdy węzeł jest połączony z każdym neuronem, czasami jednak w niektórych
zastosowaniach połączenia takie nie występują i mówi się wtedy o połączeniu częściowym
(lokalnym). Uczenie sieci zwykle odbywa się pod nadzorem (z nauczycielem). Sieci
jednokierunkowe wielowarstwowe często wykorzystują nieliniową funkcję aktywacji typu
sigmoidalnego lub tangens hiperboliczny. Dokładny opis znajduje się w [6].
3.1.1. Neurony
Podstawowym elementem naszych układów nerwowych jest neuron, czyli pojedyncza
komórka nerwowa. Składa się ona z kilku wejść (dendrytów) oraz z jednego wyjścia (akson).
Sygnały wejściowe dochodzą przez dendryty, następnie są przetwarzane w ciele komórki i
wyprowadzane do następnych neuronów aksonem. Na tej bazie w 1943 r. McCulloch i Pitts
[5] opracowali model komórki nerwowej. Jest on do dzisiaj stosowany w większości
rozwiązań z zakresu sieci neuronowych.
Neuron jest najmniejszym elementem z jakiego składa się sieć. Jest obiektem
posiadającym wejścia i jedno wyjście, gdzie wejścia każdego neuronu z warstwy n+1 łączą
się z wszystkimi wyjściami neuronów warstwy n. Sygnał przechodzi po kolei przez wszystkie
warstwy, zaczynając od warstwy 0 (warstwy wejściowej), a kończąc na warstwie n
(wyjściowej). Każdy z neuronów kolejnych warstw przetwarza sygnał w następujący sposób:
(3.1)
gdzie:
19
Co to jest x we wzorze (3.1)?
- jest sygnałem wyjściowym neuronu,
- wagi na wejściu i,
- wartości sygnałów wejściowych na poszczególnych wejściach i,
- liczba wejść neuronu (czyli w tym przypadku liczba neuronów w warstwie
poprzedniej),
- funkcja aktywacji neuronu.
3.1.2. Funkcja aktywacji
Najprostszą funkcją aktywacji jest funkcja liniowa, określana jako y(x)=x, jednak
stosowanie takiej funkcji nie przynosi dobrych rezultatów. Rozwiązaniem bliższym działaniu
biologicznego neuronu jest tzw. funkcja skokowa, która w najprostszej postaci wygląda
następująco:
(3.2)
a - zadana wartość progowa
Z reguły a=0
Neurony, w których funkcja aktywacji jest funkcją skokową, nazywamy perceptronami.
Niestety często taka funkcja aktywacji nie jest wystarczająca. Proces uczenia sieci polega na
dobraniu takich wag poszczególnych neuronów, aby sieć odpowiadała prawidłowo na dany
zbiór danych wejściowych. W tym celu podaje się kolejne zbiory danych wejściowych, dla
których znana jest odpowiedź oczekiwania sieci, przy każdym takim cyklu należy
odpowiednio zmodyfikować wagi neuronów, aby odpowiedź sieci coraz bardziej zbliżała się
do odpowiedniej. Obecnie stosuje się funkcję sigmoidalną unipolarną lub funkcję tangens
hiperboliczny.
20
Funkcja sigmoidalna unipolarna, określana jest następującym wzorem:
Co to jest x we wzorze (3.3) oraz (3.4)?
(3.3)
Funkcja przyjmuje wartości z przedziału (0,1).
Równie często stosowaną funkcją jest tangens hiperboliczny. Wzór funkcji jest
następujący:
(3.4)
Funkcja przyjmuje wartości z przedziału (-1,1)
21
W obu funkcjach współczynnik
jest parametrem mającym wpływ na kształt funkcji
aktywacji. W przypadku gdy parametr przyjmuje małe wartości funkcja ma przebieg niezbyt
stromy, jednak gdy wartości parametru wzrastają stromość funkcji wzrasta.
3.1.3. Algorytm uczenia
W procesie uczenia sieci na zbiorach danych wejściowych i wyjściowych trzeba dążyć
do takich wartości wag neuronów, aby dla danego zbioru danych wejściowych uzyskać takie
same dane wyjściowe z zestawu treningowego. Proces uczenia powinien dążyć do
minimalizacji średniego błędu kwadratowego dla całego zbioru danych treningowych. Błąd
kwadratowy jest liczony następująco: jeśli d jest żądanym wyjściem, a y jest aktualnym
wyjściem neuronu, to błąd kwadratowy dla tego przypadku wynosi (d - y) 2.
Dla większej ilości neuronów liczona jest następnie średnia z ich błędów
kwadratowych. Najpopularniejszym algorytmem uczenia sieci jest algorytm propagacji
wstecznej (backpropagation algorithm).
W dużym skrócie można powiedzieć, że algorytm propagacji wstecznej po podaniu
zbioru treningowych, w której nie wykształcono jeszcze wartości wag dla neuronów (o
losowych wagach) sprawdza wyjście sieci a następnie oblicza błąd wyniku, który jest
propagowany z powrotem (od warstwy wyjściowej do wejściowej) poprzez wszystkie
warstwy sieci. Podczas tego procesu wagi poszczególnych neuronów są regulowane w
zależności od wielkości błędu. Ten proces odbywa się tak długo, aż dla danego zestawu
treningowego zostanie osiągnięty średni błąd kwadratowy mniejszy od zakładanego, przy
czym najlepiej podawać dane wejściowe losowo, aby sieć nie nauczyła się rozpoznawać ich
po kolejności występowania.
22
Jeden proces iteracji poprzez wszystkie dane ze zbioru treningowego w nomenklaturze
biblioteki jest nazywany epoka (epoch). W procesie propagacji dla każdego wejścia neuronu
jest obliczana (na podstawie aktualnej wartości błędu kwadratowego wyjścia) przyrost wagi
∆W, o który należy zmienić wartość wagi danego wejścia. Zatem w k+1 kroku iteracji
dostaniemy następującą wartość wagi neuronu:
(3.5)
Jednak, że sama wartość
nie jest obliczana na podstawie wartości błędu, ale jest
mnożona jeszcze przez tzw. współczynnik uczenia, który przyjmuje wartość w zakresie 0..1.
Im mniejszą wartość posiada, tym mniejsza będzie korekta wartości wag w każdej
iteracji, a co za tym idzie, proces nauki będzie wolniejszy, ale za to sieć nie będzie „popadała
w skrajności”. Im większy współczynnik, tym szybciej będą następowały korekty wag, ale
tym łatwiej sieć może „zapomnieć” o długo nie podawanych danych wejściowych.
Ostatecznie zatem stopień zmian wag ∆W oblicza się następująco:
(3.6)
Gdzie η jest wartością współczynnika uczenia, a p(W) to dopuszczalny współczynnik
wzrostu błędu. Współczynnik η powinien być dobierany eksperymentalnie w zależności od
specyfiki problemu, który ma być rozwiązywany przez sieć.
23
Rys.3.3. Schemat przebiegu algorytmu wstecznej propagacji błędu.
3.2. Sieci typu SOM
Sieć Kohonena została nazwana przez jego twórcę [4] samoorganizującym
odwzorowaniem (Self Organizing Map - SOM) lub też samoorganizującym odwzorowaniem
cech (Self-Organizing Feature Map - SOFM) i jest najbardziej popularnym typem sieci
samoorganizującej się.
W tego typu sieci mamy do czynienia z uczeniem konkurencyjnym. Oznacza to, że
użytkownik ma do dyspozycji wzorce wejściowe, nie posiada żadnych wzorców
wyjściowych. Zadaniem sieci podczas procesu uczenia jest wytworzenie takich wzorców.
Sieć ma za zadanie utworzyć taką strukturę, która w najlepszy sposób będzie
odwzorowywała zależności w przestrzeni wektorów wejściowych.
Sieć jest zazwyczaj jednokierunkowa kiedy każdy neuron jest połączony ze wszystkimi
składowymi N-wymiarowego wektora wejściowego X. Wagi połączeń neuronów tworzą
wektor wi=[wi1, wi2, ..., wiN]T.
24
Rys. 3.4. Schemat sieci jednokierunkowej jednowarstwowej
gdzie:
- sygnały wejściowe,
- sygnały wyjściowe.
Wektor sygnałów wejściowych x jest normalizowany przed procesem uczenia
,
co można zapisać jako:
(3.7)
gdzie:
- wektor sygnałów wejściowych, co to jest xk ?
25
Po pobudzeniu sieci wektorem wejściowym X podczas współzawodnictwa wygrywa
neuron, którego wagi najmniej różnią się od odpowiednich składowych tego wektora.
Zwycięski w-ty neuron spełnia relację:
(3.8)
gdzie:
- oznacza odległość między wektorem n, a wektorem w.
Wokół zwycięskiego neuronu przyjmuje się topologiczne sąsiedztwo Sw(n), którego
promień maleje w czasie. Następnie neuron zwycięzca i neurony sąsiadujące podlegają
adaptacji według reguły Kohonena [4]:
(3.9)
gdzie:
- jest współczynnikiem i-tego neuronu sąsiedztwa Sw(n) w k-tej chwili. Wartość
maleje wraz z odległością od zwycięzcy. Wagi neuronów spoza sąsiedztwa nie podlegają
zmianom.
Podstawowy algorytm uczenia ma postać:
(3.10)
W powyższym wzorze oddzielono współczynnik uczenia i każdego neuronu od jego
odległości względem wektora x, uwzględnionej przez funkcję sąsiedztwa G(i,x).
W mapach odwzorowań topologicznych Kohonena [4] najpierw określany jest
zwycięzca stosując euklidesową miarę odległości, a następnie wartość współczynnika
adaptacji neuronów należących do sąsiedztwa zwycięzcy.
26
W klasycznym algorytmie Kohonena funkcja G(i,x) jest definiowana poniższym
wzorem:
(3.11)
gdzie:
- oznacza odległość euklidesową między neuronem zwycięskim w i i-tym neuronem.
Współczynnik jest promieniem sąsiedztwa o wartościach malejących z czasem. Ten typ
to sąsiedztwo prostokątne. Drugim typem sąsiedztwa, z jakim można się spotkać w mapach
Kohonena jest sąsiedztwo gaussowskie:
(3.12)
gdzie:
- promień sąsiedztwa malejący w czasie.
O stopniu adaptacji neuronów z sąsiedztwa zwycięzcy decyduje odległość euklidesowa
oraz promień sąsiedztwa. Sąsiedztwo gaussowskie jest lepsze i prowadzi do lepszych
rezultatów uczenia i lepszej organizacji sieci niż sąsiedztwo prostokątne.
27
Rozdział 4. Interfejs użytkownika
Interfejs programu BBirdsmond. Aplikacja została napisana w języku C++ w
środowisku QT przy użyciu narzędzia QT Creator IDE w wersji 2.0.1 .
Rys. 4.1. Okno programu. Wygląd programu po uruchomieniu . Źródło: opracowanie własne.
4.1. Opis funkcjonalny interfejsu użytkownika
Interfejs użytkownika jest pokazany na Rys. 4.2. . Okno programu posiada dwie
zakładki: „Dodawanie wzorców i nauczanie sieci” oraz „Rozpoznawanie”.
Zakładka „Dodawanie wzorców i nauczanie sieci” (Rys. 4.2.) posiada po lewej stronie
pole z listą nazw dodanych gatunków. Są tam wyświetlane nazwy po wczytaniu zbioru
uczącego. Kliknięcie na daną nazwę gatunku powoduje wyświetlenie liczby próbek tego
gatunku na wyświetlaczu umieszczonym w prawym, górnym rogu okna programu.
Poniżej miejsca, w którym wyświetlana jest liczba próbek znajdują się pola wyboru
sieci neuronowej użytej do rozpoznawania. Do wyboru jest sieć oparta na warstwach
perceptronów (pole Perceptron) oraz sieć oparta o samoorganizującą sieć Kohonena (opcja
SOM).
28
Niżej znajdują się pola wyboru parametrów do rozpoznawania. Na podstawie
wybranych parametrów sieć będzie rozpoznawać gatunki. Można wybrać dowolną
kombinację cech spośród następujących: MFCC - melowo-częstotliwościowe współczynniki
cepstralne, TDSC - kodowanie sygnału w dziedzinie czasu, długość pliku, odcięta środka
ciężkości kwadratu sygnału, odcięta środka ciężkości kwadratu modułu FFT sygnału.
Poniżej znajdują się informacje o tworzonej sieci. Dane te zmieniają się w zależności
od ilości dodanych gatunków, wybranych parametrów do rozpoznania oraz rodzaju sieci
neuronowej.
W prawym dolnym rogu znajduje się informacje dla użytkownika o stanie aplikacji
(np. przeprowadzanym procesie nauki sieci, rozpoczęciu lub zakończeniu wczytywania
zbioru, procesie tworzenia sieci) oraz pasek postępu wykonania danej czynności.
Rys. 4.2. Okno programu. Zakładka "Dodawanie wzorców i nauczanie sieci". Źródło: opracowanie własne.
W zakładce „Rozpoznawanie” (Rys. 4.3.) w lewej części ekranu znajduje się pole, w
którym są wyświetlane wyniki rozpoznawania poszczególnych gatunków oraz jest podawana
rozpoznana przez aplikację nazwa gatunku.
29
Po wybraniu kursorem jednego z wyników w polu po prawej stronie zostaną
wyświetlone parametry pliku, którego dotyczy zaznaczony rezultat rozpoznawania.
Wyświetlane parametry to: nazwa pliku, długość pliku, odcięta środka ciężkości kwadratu
sygnału, odcięta środka ciężkości kwadratu modułu FFT sygnału, stosunek sygnału do szumu,
MFCC (melowo-częstotliwościowe współczynniki cepstralne) oraz parametry TDSC
(kodowanie sygnału w dziedzinie czasu).
W prawej, dolnej części okna jest wyświetlana informacja o skuteczności
rozpoznawania. Dane te są podawane w procentach. Jest to ilość poprawnych rozpoznań w
stosunku do wszystkich rozpoznań gatunków ptaków.
Na górze okna program posiada pasek narzędziowy. Mamy w nim dostęp do
wczytywania zbioru uczącego (przycisk: Wczytaj zbiór uczący), otwierania zbioru testowego
(przycisk: Otwórz zbiór testowy), rozpoczęcia nauki sieci neuronowej (przycisk: Nauczaj
sieć) oraz wykonania rozpoznawania na zbiorze testowym (przycisk: Rozpoznaj). Dostęp do
poszczególnych przycisków jest możliwy po wykonaniu niezbędnych czynności (np. do
nauczania sieci potrzebne jest wczytaniu zbioru uczącego, a do rozpoznawania nauczenie
sieci).
Rys. 4.3. Okno programu. Zakładka "Rozpoznawanie". Źródło: opracowanie własne.
30
4.2. Dodawanie wzorców
Rys. 4.4. Okno programu. Zakładka Dodawanie wzorców i nauczanie sieci. Wygląd programu po wczytaniu
zestawu uczącego. Źródło: opracowanie własne.
Przed nauczeniem sieci należy przygotować pliki audio, które posłużą jako wzorce
uczące i testowe. Do programu wczytujemy plik tekstowy, który zawiera listę plików. W
jednej linijce znajduje się nazwa jednego pliku według formatu:
XYZ$AB$DATE$FileName$LatinName$C$NNN$.wav
gdzie: XYZ - kod transektu – określa położenie geograficzne obszaru nagrania, AB - kod
punktu obserwacyjnego – określa położenie geograficzne punktu na transekcie, DATE - data i
godzina początku nagrywania, FileName - plik z którego zostało wycięte nagranie,
LatinName – łacińska nazwa zarejestrowanego gatunku, C - typ sygnału wydawany przez
dany gatunek ptaka, NNN – położenie początku nagrania względem początku nagrania z pliku
którego zostało wycięte nagranie.
31
Przykład:
BOS$01$2010-05-17 11.25$1087.WAV$CarpodacusErythrinus$A$13530251$.wav
BGU$02$2010-05-17 07.30$1083.WAV$HirundoRustica$A$3970323$.wav
PNP$01$2010-03-24 21.20$1044.WAV$StrixAluco$A$10984912$.wav
PNP$01$2010-03-24 21.20$1044.WAV$StrixAluco$A$24412730$.wav
Po wczytaniu zbioru uczącego zostaną przygotowane dane dla sieci neuronowej.
Odpowiednie opcje wybiera się po prawej stronie okna programu (Rys. 4.4.). Można wybrać
wielowarstwową sieć neuronową opartą o perceptrony z algorytmem wstecznej propagacji
błędów (opcja Perceptron). Dostępna jest także samoorganizująca sieć Kohonena (opcja
SOM). Parametry jakie mają zostać obliczone i przekazane do sieci wybiera się z dostępnej
listy. Można wybrać dowolną kombinację opcji.
Informacje o aktualnie przygotowanej sieci neuronowej wyświetlane są w miejscu
„Informacje o sieci”. Dostępne są także informacje o ilości przygotowanych próbek danego
wektora.
4.3. Nauczanie sieci
Po wczytaniu zbiorów: uczącego i testowego można przystąpić do nauczania sieci.
32
Rys. 4.5. Okno programu. Zakładka Dodawanie wzorców i nauczanie sieci. Okno programu podczas nauczania
sieci. Źródło: opracowanie własne.
O przebiegu nauczania sieci informuje pasek postępu oraz informacje wyświetlane na
ekranie (Rys 4.5.). Po procesie nauki sieć jest gotowa do rozpoznawania. Gdy nauczanie
zostanie ukończone, program pokaże na ekranie zakładkę „Rozpoznawanie”.
4.4. Rozpoznawanie
Rozpoznawanie odbywa się na plikach z wczytanego zbioru testowego. Format takiego
pliku jest identyczny z zestawem uczącym.
33
Rys. 4.6. Okno programu. Zakładka Rozpoznawanie. Okno programu po procesie rozpoznawania. Źródło:
opracowanie własne.
Po ukończeniu procesu rozpoznawania na ekranie są prezentowane wyniki. Po lewej
stronie okna wyświetlana jest nazwa gatunku do rozpoznania oraz wynik rozpoznawania sieci
neuronowej. Jeśli obie nazwy są identyczne, zliczana jest poprawna odpowiedź. Wyświetlany
jest procent poprawnie rozpoznanych przykładów. Dla każdego pliku obliczane są parametry i
wyświetlane po wybraniu przykładu z listy.
Wyniki rozpoznawania sieci są zapisywane wraz z parametrami do pliku. Znajduje się
on w tym samym katalogu co plik zbioru testowego. Jego nazwa składa się z nazwy pliku
zbioru testowego oraz słowa Results.
Po zapoznaniu się z wynikami można wczytać i rozpoznać kolejny zbiór testowy lub
wczytać zbiór uczący i nauczyć nową sieć.
34
Rozdział 5. Opis wybranych fragmentów kodu
5.1. Środowisko programistyczne QT
Qt to
wieloplatformowa
biblioteka
wraz
z
narzędziami
programistycznymi,
dedykowana dla języka C++. Biblioteka Qt charakteryzuje się w pełni obiektową architekturą
- została napisana w całości w języku C++. Zawiera wiele nowoczesnych technologii
programowania graficznego interfejsu użytkownika: mechanizm sygnałów i slotów,
automatyczne rozmieszczanie widgetów oraz zhierarchizowany system obsługi zdarzeń.
Poza obsługą interfejsu użytkownika biblioteka Qt zawierają także niezależne od
platformy systemowej moduły obsługi procesów, plików, sieci, grafiki trójwymiarowej
(OpenGL), baz danych (SQL), języka XML, lokalizacji, wielowątkowości, zaawansowanej
obsługi napisów oraz wtyczek.
Jeśli chodzi o specjalistyczne narzędzia, Qt zawiera między innymi:
•
UIC (User Interface Compiler) - kompilator plików *.ui zwykle generowanych za
pośrednictwem programu Qt Designer,
•
MOC (Meta Object Compiler) - specjalny preprocesor, który na podstawie plików
nagłówkowych (*.h) generuje dodatkowe pliki źródłowe (*.cpp),
•
qmake - program do zarządzania procesem kompilacji; jego głównym zadaniem jest
utworzenie, a później aktualizacja pliku Makefile na podstawie prostego opisu
zawartego w definicji projektu (*.pro),
•
Qt Designer - aplikacja graficzna do definiowania graficznego interfejsu użytkownika
(okien dialogowych itp.),
•
Qt Assistant - aplikacja zawierająca rozbudowany system pomocy dla programistów,
•
Qt Linguist - aplikacja wspomagająca tłumaczenie programu na różne języki,
•
Qt Creator - zintegrowane środowisko programistyczne.
35
Środowisko Qt jest dostępne dla platform: X11 (m.in. GNU/Linux, *BSD, Solaris),
Windows, Mac OS X oraz dla urządzeń wbudowanych opartych na Linuksie (Qt Extended)
lub Windows CE. Obecnie jest rozwijana także wersja dla urządzeń opartych o system
Symbian. Qt jest podstawą m.in. dla uniksowego środowiska graficznego KDE, przeglądarki
internetowej Opera oraz programów Google Earth i Skype.
Od wersji 4.5 biblioteki Qt, dostępne są 3 rodzaje licencjonowania (na wszystkie
platformy):
•
LGPL 2.1,
•
GPL 3.0,
•
komercyjna.
5.2. Program i jego elementy
Program zawiera następujące elementy:
bbirdsmond.cpp – funkcje implementujące obsługę zdarzeń elementów interfejsu.
Obsługiwane są m.in. otwarcia plików z zestawami, obsługa klas do ekstrakcji parametrów,
nauki sieci neuronowych oraz rozpoznawania gatunków ptaków.
core/classifiers/ann/bannclassifier.cpp – klasa implementująca wielowarstwową, sztuczną
sieć neuronową z algorytmem wstecznej propagacji błędów.
core/classifiers/ann/bsomclassifier.cpp – klasa implementująca samoorganizującą sieć
Kohonena.
core/extractors/bsignalfeatures.cpp – klasa obsługująca ekstrakcję cech.
core/extractors/bmfccfeatures.cpp – klasa implementująca ekstrakcję parametrów MFCC
(mel-frequency cepstral coefficients).
core/extractors/btdscfeatures.cpp – klasa implementująca ekstrakcję parametrów TDSC
(time domain signal coding).
36
core/signal_processing/bsignalpreselection.cpp
–
klasa
implementująca
obliczanie
parametrów takich jak: długość sygnału w próbkach, odciętą środka ciężkości kwadratu
sygnału,
odciętą środka ciężkości kwadratu modułu FFT sygnału, stosunek sygnału do
szumu.
core/signal_processing/bwave.cpp – klasa implementująca obsługę plików dźwiękowych w
formacie WAVE.
core/signal_processing/bwindowing.cpp – klasa implementująca mnożenie sygnału przez
funkcję okna Hamminga.
5.3. Funkcja obliczająca odciętą środka ciężkości kwadratu
modułu FFT sygnału
Do funkcji przekazywana jest referencja wave na klasę przechowującą dane pliku
nagrania
dźwiękowego.
bsignalpreselection.cpp.
Fragment
pochodzi
z
pliku:
core/signal_processing/
37
38
39
40
41
42
/*
* Funkcja obliczająca odciętą środka ciężkości kwadratu modułu FFT sygnału
*/
void BSignalPreselection::computeCenterOfMassOfFft(QVector<double>& wave)
{
// typ funkcji okna, 1 to funkcja Hamminga (patrz: bwindowing.h)
unsigned windowType = 1;
// rozmiar ramki fft
int fftSize = 1024;
// przesuniecie ramki
// czyli będziemy przetwarzać 1024 próbki, potem przeskoczymy o 512 próbek
i znów będziemy przetwarzać 1024 próbki
int fftShift = 512;
// w wektorze real umieścimy dane sygnału przemnożone przez funkcję okna,
a w img umieścimy zera
QVector<double> real, img;
// zmień rozmiar wektora
img.resize(fftSize);
// wektor modułu FFT
// potrzeba tylko polowe długości, wyższe częstotliwości są niepoprawne
(patrz: teoria Nyquista)
QVector<double> fftModSqr(fftSize / 2);
// wypełnij zerami
fftModSqr.fill(0);
// deklaracja klasy funkcji okna
BWindowing window;
// deklaracja klasy z miejscem początku i końca ramki
BFrameLimits limits;
// deklaracja klasy do obliczeń FFT
BFFT bfft;
// długość danej ramki
int frameLength;
// ilosc wykonan petli
int count = wave.size()/fftShift + 1;
for (int i = 0; i < wave.size(); i += fftShift) {
// inicjuj wektory przed każdym użyciem
real.clear();
// wypełnij zerami
img.fill(0);
// ustaw początek ramki
limits.setFrameBeg(i);
// ustaw koniec ramki uważając, żeby nie przekroczyć długości sygnału
limits.setFrameEnd( (i + fftSize < wave.size()) ? i + fftSize :
wave.size() );
// oblicz rozmiar ramki
frameLength = limits.getFrameEnd() - limits.getFrameBeg();
// przemnóż przez funkcję okna
real = window.window(wave, limits, windowType);
43
// jeśli długość ramki jest mniejsza niż rozmiar wektora FFT, to
dopełnij zerami
if(frameLength < fftSize) {
real.insert(real.end(), fftSize - frameLength, 0.0);
}
// oblicz FFT
bfft.fft(real.size(), real, img);
// policz średni wektor modułu FFT
{
// moduł wektora do kwadratu
// żeby za każdym razem nie pierwiastkować, na końcu i tak
potrzebujemy jego kwadratu
for (unsigned j = 1, half = fftSize / 2; j < half; j++)
fftModSqr[j] += (real[j] * real[j] + img[j] * img[j]) / count;
}
}
// liczymy środek masy średniego modułu wektora FFT
{
// licznik wyrażenia
double numerator = 0;
// mianownik
double denominator = 0;
// zacznij od zera, żeby ominąć stałą składową
for (unsigned i = 1, half = fftSize / 2; i < half; i++) {
// średni moduł wektora FFT jest już podniesiony do kwadratu
numerator += i * fftModSqr[i];
denominator += fftModSqr[i];
}
}
// zapisz obliczony parametr
this->_centerOfMassOfFft = numerator / denominator;
}
5.4. Funkcja ucząca sieć SOM algorytmem Kohonena
Do funkcji przekazywany jest wektor inputs, w którym znajdują się dane uczące, oraz
wskaźnik progress na kontrolkę paska postępu, żeby na bieżąco wyświetlać informacje
opostępie nauczania. Fragment kodu pochodzi z pliku:core/classifiers/ann/bsomclassifier.cpp.
44
/*
* Funkcja ucząca sieć SOM algorytmem Kohonena
*/
void BSomClassifier::learnNetwork(QVector<QVector<double> > inputs,
QProgressBar *progress)
{
// pomocnicza zmienna
double temp;
// ustaw maksymalną wartość kontrolki paska postępu
progress->setMaximum(99);
// ustaw aktualną wartość kontrolki paska postępu
progress->setValue(0);
// powtórz krok 100 razy
for (int q = 0; q < 100; q++) {
// dla każdego wejścia
for (int i = 0; i < inputs.size(); i++) {
// znajdź minimalną odległość
// inicjuj minimalną wartość
double min = 1<<16;
// inicjuj indeks minimalnej wartości
int min_index = 0;
// dla każdego neuronu
for (int j = 0; j < neurons.size(); j++) {
// oblicz odległość wag od wartości wejściowej
temp = neurons[j]->distance(inputs[i]);
// jeśli jest minimalna
if (temp < min) {
// to ją zapamiętaj
min = temp;
min_index = j;
}
}
neuronu
// dla sąsiedztwa neuronu z najlepszą wagą
for (int n = min_index - 1; n < min_index + 2; n++) {
// popraw wagi, skaluj uzywając funkcji Gaussa
if (n >= 0 && n < neurons.size())
for (int j = 0; j < neurons[n]->weights.size(); j++) {
// najbardziej zmienione zostaną wagi najlepszego
neurons[n]->weights[j] += 0.25 * exp(-(min_index - n)
* (min_index - n) / 2.0) * (inputs[i][j] - neurons[n]->weights[j]);
}
}
}
// ustaw kontrolkę paska postępu na kolejną wartość
progress->setValue(q);
// przetwórz zdarzenia aplikacji
qApp->processEvents();
45
5.4. Klasyfikacja na podstawie wielowarstwowej sztucznej
sieci neuronowej
Fragment funkcji obsługującej klasyfikacje gatunku na podstawie wyników sieci
neuronowej. Klasa annClassifier zawiera nauczoną sieć. W wektorze features znajdują się
parametry
aktualnie
badanego
pliku
dźwiękowego.
Fragment
pochodzi
z
pliku:
bbirdsmond.cpp.
// wyjście sieci
QVector<double> output = annClassifier.propagate(features[0]);
// wektor, który będzie użyty do klasyfikacji gatunku
QVector<int> winner(output.size());
// wypełnij wektor zerami
winner.fill(0);
// najwyższa wartość
double max;
// indeks najwyższej wartości
int max_index;
// dla każdego parametru
for (int i = 0; i < features.size(); i++) {
// propaguj wejście do sieci
output = annClassifier.propagate(features[i]);
// szukaj najlepszego wyjścia
max = 0;
for (int j = 0; j < output.size(); j++) {
// jeśli odpowiedź jest większa od dotychczasowej
najlepszej, to zapisz nową najlepszą
if (output[j] > max) {
max = output[j];
max_index = j;
}
}
// zlicz najlepsze wyjście jeśli odpowiedz była znacząca
if (max > 0.6)
winner[max_index]++;
}
// sprawdź który wzorzec został najlepszy największą ilość razy
max = 0;
for (int i = 0; i < winner.size(); i++) {
// jeśli aktualnie sprawdzany wzorzec wygrał większą ilość
razy, to zapisz go jako zwycięzcę
if (winner[i] > max) {
max = winner[i];
max_index = i;
}
}
46
Rozdział 6. Wykonane eksperymenty
Wykonane zostały eksperymenty. Przygotowano zbiór uczący składający się z 12
nagrań głosów ptaków.
W zbiorze testowym znalazło się 25 plików. Szczegółowe
zestawienie liczby ilość plików dla poszczególnych gatunków przedstawia Tabela 1.
Gatunek
Liczba nagrań w
zbiorze uczącym
Liczba nagrań w
zbiorze testowym
Carpodacus
Erythrinus
4
9
Hirundo
Rustica
4
10
Strix Aluco
4
6
Tabela 1. Liczba Ilość nagrań poszczególnych gatunków w zestawach uczącym i testowym.
Ustalając parametry MFCC ustalono długość ramki na 15ms, przesunięcie ramki na
5ms. Wykorzystano funkcję okna Hamminga. Obliczano 20 współczynników MFCC przy
użyciu 100 filtrów.
Wykorzystano sieć neuronową w dwóch wersjach: z jedną i dwoma warstwami
ukrytymi. Dla każdej wykonano jednakowe testy. Stałą uczenia ustalono na 0,25.
Maksymalny błąd nauczania w przypadku parametrów z MFCC wynosił 0,08 oraz 0,15 z
TDSC.
Numer
eksperymentu
Liczba warstw
ukrytych
1
1
2
1
Rodzaj cech
Liczba
powtórzeń
Skuteczność
MFCC
5
57,60%
MFCC, długość
5
59,20%
pliku, odcięta
środka ciężkości
kwadratu sygnału,
odcięta środka
ciężkości
kwadratu modułu
47
Numer
eksperymentu
Liczba warstw
ukrytych
Rodzaj cech
Liczba
powtórzeń
Skuteczność
FFT sygnału
3
1
TDSC
5
70,40%
4
1
TDSC, długość
5
89,60%
5
60,00%
pliku, odcięta
środka ciężkości
kwadratu sygnału,
odcięta środka
ciężkości
kwadratu modułu
FFT sygnału
5
2
MFCC
6
2
MFCC, długość
60,00%
pliku, odcięta
środka ciężkości
kwadratu sygnału,
odcięta środka
ciężkości
kwadratu modułu
FFT sygnału
7
2
TDSC
5
56,00%
8
2
TDSC, długość
5
69,60%
pliku, odcięta
środka ciężkości
kwadratu sygnału,
odcięta środka
ciężkości
kwadratu modułu
FFT sygnału
Tabela 2. Wyniki eksperymentów. W ostatniej kolumnie podana jest średnia skuteczność z 5 powtórzeń. Źródło:
opracowanie własne.
48
Podczas każdego testu sieć neuronowa została poprawnie nauczona i uzyskała
zakładany, akceptowalny błąd. Podczas eksperymentów zmieniano rodzaj cech oraz liczbę
warstw ukrytych sieci neuronowej. Każdy test został powtórzony pięciokrotnie. Wyniki
przedstawiono w Tabeli 2.
PODSUMOWANIE
W ramach pracy została zaimplementowana wielowarstwowa sztuczna sieć neuronowa
z algorytmem wstecznej propagacji błędów oraz samoorganizująca się sieć Kohonen. Zostało
także zaimplementowane obliczanie parametrów sygnału akustycznego, m. in. MFCC, TDSC,
odcięta środka ciężkości kwadratu sygnału, odcięta środka ciężkości kwadratu modułu FFT
sygnału.
Został stworzony przyjazny interfejs użytkownika, dzięki któremu w łatwy sposób
można wybrać sieć, wczytać przygotowane zestawy uczące i testowe, nauczyć odpowiednimi
parametrami oraz interpretować wyniki rozpoznawania.
Zostały wykonane eksperymenty. Najwyższą skuteczność rozpoznawania uzyskano
podczas pracy z parametrami TDSC, długość pliku, odcięta środka ciężkości kwadratu
sygnału, odcięta środka ciężkości kwadratu modułu FFT sygnału, odpowiednio 89,6% dla
sieci z jedną warstwą ukrytą oraz 69,6% dla sieci z dwoma warstwami ukrytymi. Bardzo
zbliżone wyniki uzyskano dla jednej oraz dwóch warstw ukrytych dla cech z parametrami
MFCC (odpowiednio: 57,6% oraz 60%), a także parametrami MFCC z dodatkowymi cechami
(odpowiednio: 59,2% oraz 60%). W tym przypadku dodanie dodatkowych cech nie
zwiększyło skuteczności rozpoznawania. W przypadku parametrów TDSC dodanie innych
parametrów zwiększa skuteczność rozpoznawania: z 70,4% dla samego TDSC do 89,6%
z dodatkowymi parametrami w przypadku sieci z jedną warstwą ukrytą oraz odpowiednio
z 56% do 69,6% dla sieci z dwoma warstwami ukrytymi.
Kolejnym krokiem pracy z aplikacją może być rozbudowanie aplikacji o bazę nagrań
gatunków i wykorzystanie do automatycznego rozpoznawania.
Projekt ten jest ciekawym połączeniem, wydawać by się mogło odległych dziedzin,
informatyki oraz nauk przyrodniczych. Dzięki stworzonemu oprogramowaniu możliwe jest
zautomatyzowanie pracy nad rozpoznawaniem gatunków ptaków.
49
Literatura
[1] Bibby C.J., Burgess N.D., Hill D.A., Mustoe S.H.: Bird census techniques. Academic
Press, London, 2000.
[2] Chesmore ED. 2000. Methodologies for automating the identification of spieces.
Proceedings of 1st BioNet-International Working Group on Automated Taxonomy, July 1997:
3-12.
50
[3] Chou Ch. H., Lee Ch. H., Ni H. W.: Bird Spieces Recognition by Comparing the HMMs
of the Syllables, Second International Conference on Innovative Computing, Information and
Control (ICICIC 2007), 2007, s.143.
[4] Kohonen T.: The self organising map, Proc. Of IEEE, 1990, Vol. 78, s. 1464-1479
[5] McCulloch W.S., Pitts W.H.: A logical calculus of ideas immanent in nervous activity,
Bull. Math. Biophysics, 1943, Vol. 5, s. 115-119.
[6] Osowski S.: Sieci neuronowe w ujęciu algorytmicznym, WNT, 1996.