一、圖像的稀疏
首先理解圖像的稀疏,分解原始圖像爲若干個的塊,這些樣本就是圖像中的單個樣本塊,在固定的字典上係數分解y之後,便得到稀疏向量,從而組成稀疏矩陣,其中x爲y在D上的分解稀疏,成爲稀疏矩陣,可表示爲:
字典矩陣中的各個列向量被稱爲原子(Atom). 當字典矩陣中的行數小於甚至遠小於列數時,即m⩽n,字典D是冗餘的。所謂完備字典是指原子可以張成n緯歐式空間. 如果在某一樣本在一過完備字典上稀疏分解所得的稀疏矩陣含有大量的零元素,那麼該樣本就可以被稀疏表徵,即具有稀疏性。一般用L0範數作爲稀疏度量函數
二、匹配追蹤算法的大體思想總結
匹配追蹤的算法思想優點類似於貪婪算法的思想,簡單來說,由Y=D*x我們可知,每個原子的貢獻情況不同,比如假設D中有b1,b2,b3三個元素,我們假設稀疏矩陣使b1的貢獻最大,b2的貢獻次之,而匹配追蹤的算法做的事情則是,首先尋找貢獻最大的原子,然後再尋找貢獻次之的原子,最終接近所給出的稀疏度
三、k-svd算法理解
最近在看的論文也正是k-svd,有關它的詳解網上已經有很多了,簡單來說,因爲給出訓練數據後一次尋找到全局最優的字典時NP-hard 問題,因此k-svd 問題分兩步進行:稀疏表示和字典更新
以下理解摘自其他博客:
-
稀疏表示
首先設定一個初始化的字典,用該字典對給定數據迚行稀疏表示(即用盡量少的係數儘可能近似地表示數據),得到係數矩陣X。此時,應把DX看成D中每列X對應每行乘積的和,也就是把DX分“片”,即:(di 表示D的列 , xi表示X的行),然後逐片優化。 -
字典更新
初始字典往往不是最優的,滿足稀疏性的係數矩陣表示的數據和原數據會有較大誤差,我們需要在滿足稀疏度的條件下逐行逐列更新優化,減小整體誤差,逼近可用字典。剝離字典中第k(1-K)項dk的貢獻,計算當前表示誤差矩陣:
誤差值爲 :上式可以看做把第k個基分量剝離後,表達中產生空洞,如何找到一個新基,以更好的填補這個洞,就是SVD 方法的功能所在,當誤差值穩定的時候字典基本收斂。
關於字典更新的補充:
K-svd採用逐列更新的方法更新字典,就是當更新第k列原子的時候,其它的原子固定不變。假設我們當前要更新第k個原子αk,令編碼矩陣X對應的第k行爲xk,則目標函數爲:
上面的方程,我們需要注意的是xk不是把X一整行都拿出來更新(因爲xk中有的是零、有的是非零元素,如果全部抽取出來,那麼後面計算的時候xk就不再保持以前的稀疏性了),所以我們只能抽取出非零的元素形成新的非零向量,然後Ek只保留xk對應的非零元素項。
上面的方程,我們可能可以通過求解最小二乘的方法,求解αk,不過這樣有存在一個問題,我們求解的αk不是一個單位向量,因此我們需要採用svd分解,才能得到單位向量αk。進過svd分解後,我們以最大奇異值所對應的正交單位向量,作爲新的αk,同時我們還需要把係數編碼xk中的非零元素也給更新了(根據svd分解)。
然後算法就在1和2之間一直迭代更新,直到收斂。
----------------------------------------------------------------關於代碼的理解,之後再更新------------------------------------------------------------------