Implementace algoritmů DTW a DDTW na Cell BE.
Transkript
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 ]=mind 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 n1=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
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...
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...
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...
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...
10 3 0 10 3 1
a vlastnost doplňku, konkrétně P x320=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...
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...