動態時間規整算法DTW

動態時間規整算法(dynamic time warping,DTW),最早由日本學者Itakura提出,用於衡量兩個時間序列的相似度,也可用於將多個測試序列與標準序列對齊,從而實現序列長度的歸一化。

主要應用於語音識別、手勢識別、步態識別等領域。

在語言識別領域,同一個詞,由於不同個體發音習慣及語速的差異,採集得到的語音信號也呈現出相當大的隨機性。比如有的人會把“A”這個音拖得很長,或者把“i”發的很短。通常會表現爲整體波形形狀相似,但在時間軸上不對齊。在這些複雜情況下,使用傳統的歐幾里得距離無法有效地求的兩個時間序列之間的距離(或者相似性)。DTW通過將序列數據的時間軸扭曲(warping),從而實現時間序列間的對齊。

 

動態時間規整DTW是一個典型的優化問題,它用滿足一定條件的的時間規整函數W(n)描述測試模板和參考模板的時間對應關係,求解兩模板匹配時累計距離最小所對應的規整函數。

 

實現步驟:

假設我們有兩個時間序列Q和C,他們的長度分別是n和m:

若n=m,可直接計算兩個序列的距離;若n!=m,最簡單的對齊方式就是線性縮放了。把短的序列線性放大到和長序列一樣的長度再比較,或者把長的線性縮短到和短序列一樣的長度再比較。但是這樣的計算沒有考慮到語音中各個段在不同情況下的持續時間會產生或長或短的變化,因此識別效果不可能最佳。實踐中,更多的是採用動態規劃(dynamic programming)的方法,具體如下

爲了對齊這兩個序列,我們需要構造一個n x m的矩陣網格,矩陣元素(i, j)表示qi和cj兩個點的距離d(qi, cj)(也就是序列Q的每一個點和C的每一個點之間的相似度,距離越小則相似度越高。),一般採用歐式距離,d(qi,cj)=(qi−cj)2。每一個矩陣元素(i, j)表示點qi和cj的對齊。DP算法可以歸結爲尋找一條通過此網格中若干格點的路徑,路徑通過的格點即爲兩個序列進行計算的對齊的點。 

這條路徑成爲規整路徑(warping path),並用W來表示, W的第k個元素定義爲wk=(i,j)k,定義了序列Q和C的映射。這樣我們有:

滿足上面這些約束條件的路徑可以有指數個,然後我們感興趣的是使得下面的規整代價最小的路徑:

K用來對長度做補償。同時定義累積距離r(i,j)。

從(0, 0)點開始匹配這兩個序列Q和C,每到一個點,之前所有的點計算的距離都會累加。到達終點(n, m)後,這個累積距離就是我們上面說的最後的總的距離,也就是序列Q和C的相似度。

累積距離γ(i,j)可以按下面的方式表示,累積距離γ(i,j)爲當前格點距離d(i,j),也就是點qi和cj的歐式距離(相似性)與可以到達該點的最小的鄰近元素的累積距離之和: 

 

 

示例:

這個例子中假設標準模板R爲字母ABCDEF(6個),測試模板T爲1234(4個)。R和T中各元素之間的距離已經給出。如下:

 

既然是模板匹配,所以各分量的先後匹配順序已經確定了,雖然不是一一對應的。現在題目的目的是要計算出測試模板T和標準模板R之間的距離。因爲2個模板的長度不同,所以其對應匹配的關係有很多種,我們需要找出其中距離最短的那條匹配路徑。現假設題目滿足如下的約束:當從一個方格((i-1,j-1)或者(i-1,j)或者(i,j-1))中到下一個方格(i,j),如果是橫着或者豎着的話其距離爲d(i,j),如果是斜着對角線過來的則是2d(i,j).其約束條件如下圖像所示: 

其中g(i,j)表示2個模板都從起始分量逐次匹配,已經到了M中的i分量和T中的j分量,並且匹配到此步是2個模板之間的距離。並且都是在前一次匹配的結果上加d(i,j)或者2d(i,j),然後取最小值。

所以我們將所有的匹配步驟標註後如下:

即2個模板直接的距離爲26. 我們還可以通過回溯找到最短距離的路徑,通過箭頭方向反推回去。如下所示:



 

 

 

 

參考:

https://baike.baidu.com/item/動態時間規整/4732354?fr=aladdin

https://blog.csdn.net/qq_39516859/article/details/81705010

https://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html   (c++)

https://www.cnblogs.com/xingshansi/p/6924911.html   (python)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章