Implementace algoritmů DTW a DDTW na Cell BE.

Transkript

Implementace algoritmů DTW a DDTW na Cell BE.
Implementace algoritmů DTW a DDTW na Cell BE.
Pavel Bazika
[email protected]
Algoritmy DTW a DDTW
Algoritmy slouží k nalezení souvisejících bodů dvou podobných časových
průběhů, které se liší svým rozložením v čase. Jeden průběh může být oproti
druhému v různých místech zpomalen či naopak zrychlen. DTW (dynamic time
warping) je klasický algoritmus, který ovšem trpí určitými problémy, které se
snaží odstranit algoritmus DDTW (derivative DTW). Jedním z problémů DTW je
například to, že pokud se průběhy také částečně liší v ose Y, nemusí být výsledné přiřazení bodů průběhů správné. Více viz [1].
Oba algoritmy fungují na základě dynamického programování. Algoritmus
alokuje tabulku o rozměrech odpovídajících počtu bodů (vzorků) jednotlivých
průběhů. Dále vypočte vzdálenost každého bodu s každým. Zde je právě
odlišnost DTW od DDTW – vzdálenost se počítá různým způsobem. U DTW jde o
klasickou eukleidovskou vzdálenost:
d= x −y 2
Protože nás nezajímá skutečná vzdálenost, ale pouze vztah vzdáleností mezi
jednotlivými body, nemusíme se zde zabývat odmocňováním – odmocnina je
funkce monotónní a proto zachovává výsledek porovnání.
U algoritmu DDTW počítáme rovněž euklidovskou vzdálenost, ale ne z Y
hodnot bodů, ale z derivací v těchto bodech. Tím eliminujeme problém s
odlišnostmi v hodnotách Y, protože pracujeme přímo s průběhem funkce, což je
to, co nás doopravdy zajímá. Derivaci v bodě vypočteme odhadem dle [1]:
x −x −1
 x 0− x−1  1
2
D  x 0 =
2
Tuto derivaci odhadneme pro každý bod obou časových průběhů. V krajních
bodech použijeme odhadu bodu sousedního, pro který je již tento vzorec
použitelný.
Po výpočtu vzdáleností vyplňujeme tabulku podle optimalizačního kritéria:
T [ x , y ]=mind T [ x −1][ y ] , d T [ x −1][ y−1] , d T [ x ][ y−1]T [ x , y ]
V bodě [0,0] předpokládáme hodnotu 0, v ostatních krajních bodech hodnotu
nekonečna.
Implementační detaily
Program načítá data v binárním formátu. Tento formát obsahuje nejprve 4
bytové celé bezznaménkové číslo udávající počet položek, který následuje
uložený jako float.
Implementace obsahuje celkem 9 projektů pro prostředí Eclipse. Některé
jsou implementacemi DTW, jiné jsou podpůrnými programy. Zde je stručný
přehled:
Projekt
Účel
dtw3_ppu
Finální verze DTW a DDTW pro PPU
dtw3_spu
SPU část finální verze
dtw_ppu
Implementace SIMD i ne-SIMD verze DTW na PPU
dtw_x86
Implementace DTW na x86
pattern_writer
Utilita pro zápis vstupních datových souborů na
x86
pattern_writer_ppu Utilita pro zápis vstupních datových souborů na
PPU
raw2dtw
Zapíše zadaný počet čísel v souboru do datového
souboru dtw
raw2dtw_ppu
Jako raw2dtw, ale pro PPU
wav2raw
Převede daný WAV soubor do RAW formátu
SIMD paralelizace výpočtů
Paralelizace výpočtu vzdálenosti u DTW
Vzhledem ke zvolenému formátu čísel float je možné provést operaci se
čtyřmi čísly najednou. Jednu časovou řadu tedy zpracováváme po čtyřech
číslech. Abychom ušetřili opakované načítání této datové řady z paměti pro
jednotlivé položky druhé řady, vytvoříme pole vektorů, kde každý vektor bude
mít všechny položky rovné jedné z hodnot druhé řady.
Paralelizace výpočtu vzdálenosti u DDTW
Zde potřebujeme nejprve získat odhady derivací. Okrajovou podmínku
splníme tím, že datovou řadu umístíme do pole, které je poněkud delší, než
samotná datová řada. Konkrétně je delší o 4 položky před datovou řadou a 4
položky za datovou řadou. Do položek, které těsně souvisí s řadou umístíme
takové číslo, aby odhad derivace v krajním bodě řady byl ekvivalentní s
odhadem v bodě, který s ním sousedí. Požadovanou hodnotu lze snadno
vypočítat z rovnice požadované rovnosti odhadu ve dvou bodech za použití
vzorce pro odhad derivace. Pro souseda počátku řady dostáváme:
5x −x 1−x 2
x −1 = 0
3
a pro konec řady:
x n1=5xn−1 −3x n−2−x n
Po výpočtu odhadů již můžeme počítat eukleidovskou vzdálenost stejně jako
u DTW. Výpočet opět provádíme tak, že si nejprve vypočteme odhady a
vzdálenosti pro určitou oblast druhé řady a pak postupujeme po vektorech o
čtyřech položkách řady první.
Paralelizace vyhodnocování optimalizačního kritéria
Vzhledem k datovým závislostem není možné postupovat ve výpočtu po
řádcích. Hodnoty, které je možno vypočítat současně leží na úhlopříčce.
Následující tabulka ilustruje jeden krok výpočtu:
1a
2a
1b
2b
3b
1c
2c
3c
4c
1d
2d
3d
4d
2e
3e
4e
Naším cílem je vypočítat položky s číslem 3. Abychom spočetli např. 3b,
potřebujeme znát 1a, 2a a 2b. Z tabulky je vidět, že pro výpočet těchto 4
hodnot budeme potřebovat 4 hodnoty označené číslem 1 a dokonce 5 hodnot
označených číslem 2. Naštěstí nepotřebujeme všech 5 hodnot najednou. Při
vyhodnocování minima 3 čísel vyhodnotíme nejprve minimum dvou z nich,
získané číslo ještě porovnáme s třetím číslem. V prvním kroku tedy budeme
porovnávat čísla 1? a 2? označená stejnými písmeny (např. min(1a,2a)), v
dalším kroku toto minimum se zbývajícím číslem (v našem příkladu 2b).
Představíme-li si, jak bude probíhat výpočet čísel označených číslem 4?, je
zřejmé že k výpočtu budeme potřebovat čísla 2a až 2d a 3a až 3e. Číslo 3a již
známe, buď jde o nekonečno, nebo jsme jej již vypočetli. Výpočet čtyř řádků
totiž opakujeme postupně pro celou tabulku, dokud ji neprojdeme. Ostatní již
také byla použita, není je tedy třeba načítat znovu z paměti, což nám zajistí, že
z paměti každé číslo čteme jen jednou. To je důležité hlavně kvůli diagonálnímu
uspořádání, protože vektory se musí plnit položku po položce. Kdybychom
tabulku uložili jiným způsobem, aby to více vyhovovalo diagonálnímu načítání,
vznikl by problém s výpočtem vzdáleností, který se provádí nad toutéž tabulkou,
přičemž se ale využívá obdélníkového uspořádání.
Problémy s výpočtem na okrajích tabulky lze vyřešit různě – buď nejprve
vypočítáme rohový trojúhelník, pak spustíme výše zmíněný algoritmus a poté
dopočteme koncový rohový trojúhelník, nebo provedeme výpočet pouze pomocí
výše zmíněného algoritmu s tím, že tabulka bude na okrajích rozšířená, aby
nedošlo k neoprávněnému přístupu do paměti. Buňky v tomto rozšíření
inicializujeme na hodnotu nekonečna, tím máme zajištěno, že se díky minimu
neuplatní ve výsledku.
Uspořádání výpočtu pomocí SPE
V poslední verzi programu implementující DTW slouží PPE k rozdělování
úkolů a finálnímu nalezení zobrazení mezi dvěma průběhy po vyplnění tabulky.
Nalezení řešení v tabulce není nijak paralelizováno a provádí se až po
kompletním naplnění tabulky. Tabulku vyplňují jednotlivé SPE.
SPE vždy počítá podoblast tabulky o rozměrech 4 x X, kde X je délka delší
řady. Každé SPE nejprve vypočítá vzdálenosti v oblasti, která mu byla přidělena.
Toto může udělat zcela nezávisle na ostatních SPE, protože obě řady jsou již od
počátku výpočtu známy a nic jiného k výpočtu vzdáleností není potřeba. Při
vyhodnocování optimalizačního kritéria již však je nutná určitá synchronizace
mezi jednotlivými SPE. K výpočtu prvního řádku oblasti totiž SPE potřebuje znát
řádek nadřazený – ten je pro první SPE vyplněn nekonečny, což si SPE snadno
samo vygeneruje. Druhé SPE (to, které má přiděleny řádky 5 – 8) potřebuje
znát řádek 4, který počítá první SPE. Vypočtené hodnoty posledního řádku první
SPE ukládá zpět do hlavní paměti po určitých blocích. Velikost bloku je možno
definovat konstantou SEGMENT_SIZE. Vždy po odeslání daného bloku pošle
následujícímu SPE signál, který obsahuje adresu do hlavní paměti, kde končí
platná data. Druhé SPE signál obdrží a data si načte do lokálního úložiště. Když
data zpracuje, opět čeká, až přijde signál (pokud ještě nepřišel) od prvního SPE.
Po dokončení výpočtu SPE nejprve uloží dosud neuloženou část posledního
řádku, poté začne ukládat i ostatní vypočtená data.
Následně je zaslán mail PPU, že dané SPE dokončilo zadaný výpočet. PPU
mu buď přidělí další část tabulky, nebo pošle signál k ukončení.
Provedené testy
Algoritmus byl testován a měřen na dvou časových průbězích odvozených
ze souboru WAV, který byl nahrán v programu Audacity a převeden do RAW
formátu pomocí přiložených utilit. Ověření správnosti výsledků bylo prováděno
„lidskými silami“, automatický nástroj nebyl vytvořen. jednoduchý test lze
spustit z domovského adresáře bazikp1, podadresáře test příkazem runtest.
Výsledky měření výkonu jsou shrnuty v následujícím grafu:
9000
8000
Instance size
7000
6000
SPE
5000
PPU SIMD
4000
Pentium 4
PPU simple
3000
2000
1000
0
0
1000
2000
3000
Time
4000
5000
6000
7000
Další vývoj
Program i samotný algoritmus výpočtu je možno dále vylepšovat, například
v těchto ohledech:
● Vyladit velikost bloku přenášeného mezi SPE
● Čekání na mail u PPU udělat přes přerušení
● Umožnit měnit pořadí jednotlivých SPE při zadávání dalších částí tabulky
● Některá blokující DMA volání změnit na neblokující
● Umožnit výpočet většího množství dat – takového, kdy se tabulka nevejde
do hlavní paměti – vyvstává ovšem problém se závěrečným hledáním
řešení
● Přizpůsobit algoritmus běhu v 64 bitovém prostředí
Použitá literatura
[1] Eamonn J. Keogh, Michael J. Pazzani, Derivative dynamic time warping
http://www.cs.rutgers.edu/~mlittman/courses/lightai03/DDTW-2001.pdf
[2] Dynamic time warping, http://en.wikipedia.org/wiki/Dynamic_time_warping
[3] http://www.cse.unsw.edu.au/~waleed/phd/html/node38.html

Podobné dokumenty

Referenční příručka High-Speed USB programátor

Referenční příručka High-Speed USB programátor např. mikrokontroléry, sériové paměti EEPROM a Flash, CPLD, FPGA a další. Programátor má nadproudovou ochranu na zdrojích VDD a VPP a přepěťovou ochranu na pinu VDD. Programátor je napájený z USB a...

Více

Referenční příručka pro PRESTO

Referenční příručka pro PRESTO Třetí kapitola je o programu UP. Tento software se používá pro ovládání všech programátorů firmy ASIX. Naleznete zde postup, jak nastavit programátor před programováním, jak součástku naprogramovat...

Více

Project 2 - Midterm presentation

Project 2 - Midterm presentation Gesture-based Dicom Image Viewer Control

Více

Třístranný sklápěč typ 9 pro podvozky MAN TGM

Třístranný sklápěč typ 9 pro podvozky MAN TGM se dvěma podélnými nosníky, předním a zadním nosníkem sklápěče, s výztužnými prvky vzadu, s opěrným příčníkem pro válec zvedáku, se zabudovanou hydraulikou, teleskopickým válcem s blokováním, olejo...

Více

Programátory

Programátory Uživatel pak může omezit napětí odporovým děličem nebo Zenerovou diodou a rezistorem. Při mazání mikrokontroléru v HVP módu může být smazána i pojistka LVP. Aby bylo možné opět programovat procesor...

Více

10 3 0 10 3 1

10 3 0 10 3 1 a vlastnost doplňku, konkrétně P  x320=1−F N 320 , tedy P (X>320) = 1 – FN  X−n/σ  = 1 – FN ((320 – 300) / 35) = 1 – FN (0,57) = 1 – 0,71566 = 0,28434. Graficky je vše dokumentováno na obr...

Více

MetaCentrum a náročné (nejen matematické) výpočty

MetaCentrum a náročné (nejen matematické) výpočty ‒ diametrálně odlišný problém – extrémní množství bodů, které jsou však mnohem řidší • nastíněné algoritmy pro přesné rekonstrukce jednotlivých stromů nelze aplikovat • nutno revidovat i metody pro...

Více