1. 程式人生 > >視頻編碼技術---壓縮感知編碼---匹配跟蹤算法

視頻編碼技術---壓縮感知編碼---匹配跟蹤算法

tro 三維空間 編碼 步驟 時間 理解 最大 理論 一個

轉自https://blog.csdn.net/rainbow0210/article/details/53386695

壓縮感知近些年在學術界非常火熱,在信號處理領域取得了很多非常不錯的成果。

博主最近的項目涉及到K-SVD算法,所以也就順帶著學習其重要的組成部分——匹配跟蹤算法。

本文只介紹最基本的匹配跟蹤算法和正交匹配跟蹤算法,即MP和OMP。

這個算法的優化和變形非常之多,近些年學術界很多人都在研究這個,有興趣的讀者可以自行查閱相關論文,本文不多做闡述。

廢話少說,直接上幹貨。

所謂壓縮感知,從名字就可以理解,壓縮,即為數據壓縮,例如將特征維度從很高降到很低;感知,即為壓縮之後依然能夠感知其特征的主體含義。

說白了,就是讓一個10000維的特征降到10維,但是分類效果不變,當然,這個例子有點誇張。

這裏需要一個叫做詞典的東西,這個東西和生活中的詞典是一樣的。既然是詞典自然要有索引(壓縮感知裏稱之為‘原子’),在這裏即為一個詞典矩陣D的每一個列向量,我們希望能將原信號盡可能表示成詞典中盡可能少的原子的線性組合。

那麽這裏就有兩個關鍵點:

原子的數目盡可能少

該線性組合要最大限度地恢復原信號的內容

這裏理解不了的朋友可以想象一下三維空間中的向量,是不是都可以分解成x,y,z上的向量的矢量和?對,差不多就是這個意思,當然,其中還是差很多的,有個直觀的感覺就好,繼續看下文就明白了。

表達成數學形式就是這個樣子:

其中,x是原信號,一個列向量,大小為N*1;D是詞典,一個矩陣,大小為N*M; γγ 則是待求的稀疏表達,大小為M*1,我們希望 γγ 中的非零項的個數不大於K,同時其與原信號的誤差不大於 ??。

通常K是遠遠小於M的,即 γγ 裏的元素基本全為0,這既是‘稀疏表達’的由來,也是能夠給特征降維的原因。

這裏不討論字典是怎麽得到的,因為這是下篇文章,即K-SVD的內容。不過字典不一定是通過機器學習得到的,小波什麽的也可以作為字典來使用。

MP算法

匹配跟蹤算法,即MP算法,是一種基於叠代的貪婪算法。其大致思想為:

每次找到字典中與當前信號最為相關的原子,將其作為稀疏表達的一項,計算其誤差,將誤差視為新的信號重復以上步驟,直至滿足終止條件。最終,信號就被表示成了若幹個原子的線性組合和一個誤差項,在壓縮感知中,我們稱這個誤差項為‘殘差’。

那麽這裏有兩個關鍵點需要註意:

什麽是與當前信號最為相關的原子?

如何構建稀疏表達並計算殘差?

對於第一個問題,我們定義與當前信號的內積最大的原子(這裏的原子需要進行歸一化處理,即模長為1)即為最相關的原子。
說的直觀點,例如二維空間,就是將當前信號和原子分別視為空間中的向量,其與當前信號夾角最小的原子即為最相關的原子。

對於第二個問題,由於我們通過上一步找到了這樣的一個原子,並將原信號通過該原子進行表達,但原信號中還有一部分是這個原子不能夠表達的(想一下N維空間中的矢量分解就明白了),那麽這部分作為殘差依然可以繼續分解下去,於是便得到了原信號的系數表達和最終的殘差。

MP算法的偽代碼表述如下:

輸入:字典矩陣ΦΦ,原信號yy
輸出:重建目標信號xx
初始化:x=0,r=y,k=0x=0,r=y,k=0
當沒有滿足終止條件時,則循環執行步驟(1)~(4)
(1) k=k+1k=k+1
(2) λ=argmaxλ{<rk?1,?λ>?λ||?λ||2}λ=argmaxλ{<rk?1,?λ>?λ||?λ||2}
(3)x=x+<rk?1,?λk>?λk||?λk||2x=x+<rk?1,?λk>?λk||?λk||2
(4)r=r?Φxr=r?Φx
其中<x,y><x,y>表示向量x與向量y的內積。
這裏有幾點需要註意,每次循環產生的殘差都與當前所選擇的原子是正交的,從(2)不難推出。殘差的值是越來越小的,所以算法必然收斂,這個大家知道就好,至於怎麽證就無關緊要了。

匹配跟蹤算法在重建原始信號的應用中是很實用的,但是它有兩個缺點:
(1)這個方法不能保證重建誤差足夠小
(2)這個算法往往需要大量的循環次數才能逼近原始信號,如果殘差在已選擇的原子進行垂直投影是非正交性的,則會使得每次循環的結果並不是最優的,而是次優的,收斂需要很多次循環。說通俗點,就是我在地N次循環中選擇的是原子a,第N+M次循環中可能選擇的也是原子a,但實際上,這兩次循環我們更期望合成為一次,即每次循環中都選擇不同的原子,從而大大減少循環的次數。

通過改進上述缺點,便有了如下的OMP算法。

OMP算法

正交匹配跟蹤算法,即OMP算法。該算法中,殘差總是和已選取的原子正交,這樣就能夠保證相同的原子在OMP中不會被選中兩次,進而減少算法的循環次數。

理論上來講,可以通過施密特正交化來生成一個正交的詞典,但其復雜度之高是我們所不能接受的。

OMP算法偽代碼:

輸入:字典矩陣ΦΦ,原始信號yy,稀疏度KK,標識待重建信號中非零元素位置的索引集ΛΛ
輸出:重建信號xx
初始化:x=0,r=yx=0,r=y,循環標識k=0k=0,索引集Λ0Λ0為空集

當沒有滿足結束條件時,循環執行步驟(1)~(6)
(1)k=k+1k=k+1
(2)找出殘余分類r與采樣舉證中最匹配原子的索引λkλk,即
λk=argmax{|<rk,?k>|}
λk=argmax{|<rk,?k>|}

(3)更新索引集Λk=Λk?1∪{λk}Λk=Λk?1∪{λk},並更新相應擦愛養矩陣中的列集合Φk=[Φk?1,?λk]Φk=[Φk?1,?λk]
(4)重建目標信號,x=Φ+yx=Φ+y,其中,Φ+Φ+表示矩陣ΦΦ的偽逆
(5)更新殘差r=y?Φkxr=y?Φkx
(6)判斷是夠滿足k>Kk>K,若滿足則停止循環;若不滿足,則執行步驟(1)
OMP保證了每次算法叠代的最有型,減少了叠代的次數。但是,它在每次叠代中僅選取一個元素來更新已選元素的集合,叠代的次數與稀疏度K或采樣個數M密切相關,並且其中還有一個正交化的過程,隨著K和M的增加,運算時間也會大幅增加。

由於存在上述缺點,大量的科研工作者針對此算法做出了各種各樣不同的優化,有興趣的讀者可以自行查閱相關論文。

視頻編碼技術---壓縮感知編碼---匹配跟蹤算法