1. 程式人生 > >《Randomized Low-Rank Dynamic Mode Decomposition for Motion Detection》讀書筆記(中)

《Randomized Low-Rank Dynamic Mode Decomposition for Motion Detection》讀書筆記(中)

謝絕任何不標註出處的轉載

如有問題請聯絡作者

原文連結:https://arxiv.org/abs/1512.03526

上一篇讀書筆記大致介紹了svd和rsvd,這一篇來學習一下dmd和rdmd。

DMD是一個合併了PCA和時間序列(傅立葉模式)的資料驅動型方法。

DMD起源於流體力學,它的使用幾乎不需要潛在假設,但是它對資料有一定的要求。資料需要是用於描述動態系統且有序並且均勻分佈的(ordered and evenly spaced data sequence describing a dynamic system)。我們將影象資料變為(維度,維度)的灰度影象,然後將陣列重新排列,變成(維度*維度,1)的向量,將其稱為框架frame,那麼對於任意影象ft(t>=1),我們有:


即,該影象構成的frame的下一影象的frame能夠由該影象和一個m*m維度的矩陣M表示。M被稱作庫普曼運算元(Koopman Operator)。庫普曼運算元的特徵值分解能夠描述整個視訊序列的演變。綜上,其實DMD的核心就是在找一個合適的M來描述這個時間序列關係。這裡有一個地方很神奇——即使M是現行的,它依然能用來描述非線性的流體系統。

具體操作起來,先看DMD:

首先,將整個資料轉化為一個m*n的矩陣D,n是影象的數量,m是frame的維度。然後,將D分為兩個m*(n-1)的矩陣X和Y。X從第一個frame開始,到倒數第二個frame結束;Y從第二個frame開始,到最後一個frame結束。那麼根據上面的公式,我們有:


要求解一個M,其實問題就轉化為了:


這裡有一點神經網路前饋傳播和反向傳播的意思,首先我們計算出來一個M,然後進行優化。

對於M,根據第一個公式,我們有:


使用svd,則有:


其中,M是一個m*m的矩陣,Y為m*(n-1),V((n-1)*(n-1))和U((m*(n-1)))分別是X的右奇異和左奇異向量,大寫的σ((n-1)*m)是由X的奇異值構成的對角線向量。通過了解M的m是如何構成的,我們可以知道對於越高清的影象,m越大,所以直接計算一個(m,m)的矩陣是很耗費資源的,甚至不可行,這裡我們就要構成一個小一點的M:


通過這種方法構建出的小M,很神奇的和M擁有一樣的奇異值【這一點真的是超關鍵了】。這樣,通過這個U,其實我們是將PCA的思想融入了DMD之中。綜合上面的兩個公式,我們重新計算小M:


公式第二個等號後的兩個左奇異向量U的合併在DMD中是核心數學問題,結合了pca和svd。

同樣地,用svd會變得非常expensive,所以可以用一些低秩分解技巧代替,例如rsvd。使用rsvd產生的dmd則為rdmd(randomized DMD)。此刻我們構造的小M就是一個k*k的小矩陣,k遠小於m和n,非常可愛。對於一個小M,我們有:


其中,W是一個k*k的奇異向量矩陣,大寫的lambda是一個k*k的包含奇異值λ的對角線矩陣。

接下來計算動態模式φ(dynamic modes)。φ是一個m*k的矩陣,通過下式得到:


還有一種方法(因為我是在沒看出來這個公式是咋得出來的,姑且算做第二種方法吧),如下圖所示,文章作者採用的是該方法:


如此一來,對於每一個frame, 我們有:


λ是矩陣的第i個奇異值,φ是第i個動態模式,b是相應的振幅。這個地方不是很好理解,我想的是既然我們的目的是通過M來尋找一個能較好闡述這個時間序列關係的特性,那麼計算出的M和小M又擁有同樣的奇異值,所以得到的λ和φ是能夠闡述這個時間序列的關係的,此外還加了一個k*1的b,用於控制noise?注意此處b是時間獨立的,b可以用線性最小二乘法求得,那麼我們的f1有:


對於整個DMD,可以寫作:


B是一個由bi組成的對角線矩陣,Vand是被稱作the Vandermonde matrix of the eigenvalues(範德蒙矩陣)的矩陣。範德蒙矩陣常應用於糾錯編碼,各行為幾何級數的矩陣,形式如下:


下圖表示了該演算法如何進行動態模式分解和重構,嗯我沒太看懂,大概意思應該是通過時間和frame將視訊拆分,然後矩陣由後三個相乘重新組建,嗯。。待我問過老師了再來解釋這一部分吧。先放這兒吧。摘自論文《Randomized Low-Rank Dynamic Mode Decomposition for Motion Detection》。