日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

时序分析:DTW算法(基于模板)

發布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 时序分析:DTW算法(基于模板) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????? 對時序對象進行分析,使用KMP算法可以分析速率不變的模式,參考時序分析:歐式空間軌跡模式識別。使用基于模板匹配的方法,對于速率發生變化的模式,需要用新的對速率要求松散的方法,DTW方法為一種廣泛使用的方法。

?????? 此外,基于模板的方法也有MEI方法(Measured Equation of invariance)、MHI方法(OpenCV使用了-Forward-Backward MHI (before and after the historical figure to the movement)即前向后向歷史運動圖。

????? 參考:行為分析算法綜述(圖像圖形學學報)-古老的DTW方法(Dynamic Time Wrapper)


一、 序列的對齊問題


??????? 援引兩張圖:http://blog.csdn.net/zouxy09/article/details/9140207

??????? 參考鏈接:http://blog.csdn.net/vanezuo/article/details/5586727

??????? 參考鏈接:DTW用于語音識別

情況一:

?????? 如圖A所示,實線和虛線分別是同一個詞“pen”的兩個語音波形(在y軸上拉開了,以便觀察)。可以看到他們整體上的波形形狀很相似,但在時間軸上卻是不對齊的。例如在第20個時間點的時候,實線波形的a點會對應于虛線波形的b’點,這樣傳統的通過比較距離來計算相似性很明顯不靠譜。因為很明顯,實線的a點對應虛線的b點才是正確的。而在圖B中,DTW就可以通過找到這兩個波形對齊的點,這樣計算它們的距離才是正確的。



???????


????


????? 也就是說,大部分情況下,兩個序列整體上具有非常相似的形狀,但是這些形狀在x軸上并不是對齊的。所以我們在比較他們的相似度之前,需要將其中一個(或者兩個)序列在時間軸下warping扭曲,以達到更好的對齊。而DTW就是實現這種warping扭曲的一種有效方法。DTW通過把時間序列進行延伸和縮短,來計算兩個時間序列性之間的相似性。

?????? 那如果才知道兩個波形是對齊了呢?也就是說怎么樣的warping才是正確的?直觀上理解,當然是warping一個序列后可以與另一個序列重合recover。這個時候兩個序列中所有對應點的距離之和是最小的。所以從直觀上理解,warping的正確性一般指“feature to feature”的對齊。


二、DTW算法


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

????? 假設我們有兩個時間序列Q和C,他們的長度分別是n和m:(實際語音匹配運用中,一個序列為參考模板,一個序列為測試模板,序列中的每個點的值為語音序列中每一幀的特征值。例如語音序列Q共有n幀,第i幀的特征值(一個數或者一個向量)是qi。至于取什么特征,在這里不影響DTW的討論。我們需要的是匹配這兩個語音序列的相似性,以達到識別我們的測試語音是哪個詞)

????? Q= q1, q2,…,qi,…, qn?;

?? ?? C= c1, c2,…, cj,…, cm?;

?????? 如果 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才是最好的。

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

???????

?????? 首先,這條路徑不是隨意選擇的,需要滿足以下幾個約束:

1)邊界條件:w1=(1, 1)和wK=(m, n)。任何一種語音的發音快慢都有可能變化,但是其各部分的先后次序不可能改變,因此所選的路徑必定是從左下角出發,在右上角結束。

2)連續性:如果wk-1= (a’, b’),那么對于路徑的下一個點wk=(a, b)需要滿足 (a-a’) <=1和 (b-b’) <=1。也就是不可能跨過某個點去匹配,只能和自己相鄰的點對齊。這樣可以保證Q和C中的每個坐標都在W中出現。

3)單調性:如果wk-1= (a’, b’),那么對于路徑的下一個點wk=(a, b)需要滿足0<=(a-a’)和0<= (b-b’)。這限制W上面的點必須是隨著時間單調進行的。以保證圖B中的虛線不會相交。

???????? 結合連續性和單調性約束,每一個格點的路徑就只有三個方向了。例如如果路徑已經通過了格點(i, j),那么下一個通過的格點只可能是下列三種情況之一:(i+1, j),(i, j+1)或者(i+1, j+1)。

????

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

????

?????? 分母中的K主要是用來對不同的長度的規整路徑做補償。我們的目的是什么?或者說DTW的思想是什么?是把兩個時間序列進行延伸和縮短,來得到兩個時間序列性距離最短也就是最相似的那一個warping,這個最短的距離也就是這兩個時間序列的最后的距離度量。在這里,我們要做的就是選擇一個路徑,使得最后得到的總的距離最小。

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

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

?????

????? 最佳路徑是使得沿路徑的積累距離達到最小值這條路徑。這條路徑可以通過動態規劃(dynamic programming)算法得到。

????? 具體搜索或者求解過程的直觀例子解釋可以參考:http://www.cnblogs.com/tornadomeet/archive/2012/03/23/2413363.html


三、DTW代碼:

代碼


四、一些問題


DTW的問題: ??????? 運算量大; ??????? 識別性能過分依賴于端點檢測 ??????? 太依賴于說話人的原來發音; ??????? 不能對樣本作動態訓練 ??????? 沒有充分利用語音信號的時序動態特性 ?????? DTW適合于特定人基元較小的場合,多用于孤立詞識別;

動態規劃算法總體思想: ?????? 動態規劃算法基本思想是將待求解問題分解成若干個子問題 ?????? 但是經分解得到的子問題往往不是互相獨立的。不同子問題的數目常常只有多項式量級。求解時,有些子問題被重復計算了許多次。 ?????? 如果能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,就可以避免大量重復計算,從而得到多項式時間算法。
動態規劃基本步驟: ?????? v找出最優解的性質,并刻劃其結構特征。 ?????? v遞歸地定義最優值。 ?????? v以自底向上的方式計算出最優值。 ?????? v根據計算最優值時得到的信息,構造最優解

總結

以上是生活随笔為你收集整理的时序分析:DTW算法(基于模板)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。