程欣宇++龍慧云++李智++王麗會
摘 要:針對人工智能和大數(shù)據(jù)處理學(xué)習(xí)中存在的誤區(qū),提出一組有關(guān)SVD方法的圖像處理教學(xué)實驗,具體闡述實驗步驟并詳細(xì)說明如何引導(dǎo)學(xué)生自行設(shè)計該類實驗。
關(guān)鍵詞:機(jī)器學(xué)習(xí);SVD算法;實驗設(shè)計;矩陣分解;去噪
0 引 言
隨著大數(shù)據(jù)和人工智能的興起,計算機(jī)教學(xué)及大學(xué)生科技創(chuàng)新活動越來越需要學(xué)生掌握好線性代數(shù)、微積分、概率論等數(shù)學(xué)工具。傳統(tǒng)線性代數(shù)一課高度抽象,教學(xué)過程中幾乎不聯(lián)系信息學(xué)科進(jìn)行舉例和實驗。這導(dǎo)致計算機(jī)專業(yè)的學(xué)生即使理論課程考核分?jǐn)?shù)高、程序設(shè)計動手能力強,也仍然容易誤用理論。在本文中,我們設(shè)計了幾例SVD用于圖像處理的實驗,既能夠幫助學(xué)生直觀地理解SVD的作用,又能夠避免對矩陣分解性質(zhì)錯誤套用。
1 SVD算法在應(yīng)用中的誤區(qū)
1.1 SVD算法簡介
SVD也叫奇異值分解,是將一個矩陣A分解為正交陣V、U和對角陣S,使得
A = Vn×n Sn×m Um×m* (1)
其中V和U的列向量分別是左右奇異向量,對角陣的對角元素是奇異值。SVD具有很多很好的性質(zhì),如可以對非方陣進(jìn)行分解,大的奇異值和對應(yīng)的奇異向量可以近似表達(dá)原矩陣。這些性質(zhì)也給SVD帶來了數(shù)據(jù)壓縮、去噪、主成分分析等功能。
為了便于理解SVD在圖像處理中的物理意義,我們將式(1)展開,可以得到
A=Vn×n Sn×m Um×m*=v1s1u1*+ v2s2u2*+…+ vkskuk* (2)
其中vi是V中的第i列,ui*是U*中的第i行,si是第i個奇異值,k是原始圖像矩陣的秩。一個長度為n的列向量乘以一個長度為m的行向量,將會得到一個n×m矩陣,和原始圖像尺寸一樣。原圖A可以看成是k個圖像的疊加,隨著k的增加,sk逐漸變小,對A的影響也越來越小。
疊加的反向操作也就是分解,因此一副圖像可以分解為若干個圖像的疊加,也就是說,SVD圖像分解考查的是圖像的線性無關(guān)組,并且把線性無關(guān)組規(guī)范化為正交矩陣,然后用對角陣中的元素表示每幅子圖像占原始圖像量化數(shù)值的比重。這和DCT、FFT以及DWT做信號分解和重構(gòu)處理,有一定的相似之處,不同之處在于DCT等用標(biāo)準(zhǔn)的正交基去分解圖像,SVD更看重圖像自身隱含的正交基,以解釋/表達(dá)/重構(gòu)圖像。
1.2 誤區(qū)1:只看效果卻不深刻理解原理,任意用SVD“去噪”
噪聲的概念比較主觀,最早是指聲音中起干擾作用的部分,然后逐步泛化到信號、圖像乃至任意類型的信息中起干擾作用的成分。SVD將數(shù)據(jù)轉(zhuǎn)換成若干主要成分(大的奇異值對應(yīng)的奇異向量)來線性組合進(jìn)行表達(dá);對于主要成分不能線性表達(dá)的微弱部分,在應(yīng)用中經(jīng)常忽略。圖1是文獻(xiàn)[1]舉例對圖像去噪的實驗截圖。
文獻(xiàn)[1]用k=3去噪,效果非常理想:噪點得到很好的平滑,邊緣得到很好的保留。這符合人類認(rèn)識字符圖案的先驗知識,因為無論從行或者列來看,該圖的清晰圖像,僅存在3個線性無關(guān)向量,所以這樣去噪具有兩個前提條件:一個是該圖像行列的線性相關(guān)性,恰好是圖像內(nèi)在的規(guī)律;另一個是該圖像行列的線性無關(guān)性,恰好集中了圖像的噪聲。這也是很多機(jī)器學(xué)習(xí)算法的教學(xué)中只展示算法神奇的一面,而對算法局限性未作分析的問題所在。
1.3 誤區(qū)2:SVD的“旋轉(zhuǎn)不變性”被誤解為圖像塊發(fā)生旋轉(zhuǎn)前后,進(jìn)行SVD分解具有穩(wěn)定的成分
在很多圖像處理算法和圖像特征提取算法如SIFT[2]、ORB[3]中,我們希望算法對圖像發(fā)生了旋轉(zhuǎn)后的處理效果是魯棒的。碰巧的是,很多圖像處理算法的資料如文獻(xiàn)[4]中,在圖像特征提取這節(jié)介紹了SVD具有旋轉(zhuǎn)不變性,并未指出兩種旋轉(zhuǎn)的本質(zhì)區(qū)別,導(dǎo)致缺少實驗驗證的學(xué)生會將兩種旋轉(zhuǎn)不變性混淆為一個概念。我們將通過實驗和理論分析對此概念給予澄清。
2 演示實驗步驟
2.1 展示SVD的顯著效果
根據(jù)SVD能將圖像在行/列向量上的主成分提取出來抽象表達(dá)的特點,教師可設(shè)計一張行列重復(fù)度比較高同時加上隨機(jī)噪聲的圖像,如圖2(a),再使用SVD進(jìn)行去噪實驗,可以得到圖2(b)和2(c)。實驗的matlab關(guān)鍵代碼如下:
[V S U] =svd(A);%作SVD分解
k=1;v=V(:,1:k);s=S(1:k,1:k);u=U(:,1:k);%提取主要成分
B=v*s*u';%重構(gòu)
圖2(a)中的白點可以看成對計算機(jī)視覺中標(biāo)定棋盤角點的檢測結(jié)果,我們模擬了角點的缺失和外部的干擾有缺失。從中可以看到,簡單幾行代碼就能夠?qū)⒃瓐D缺失的白點補上,多余的白點消除。這個實驗數(shù)據(jù)不是憑空構(gòu)想的,而是在相機(jī)棋盤標(biāo)定中實際可能碰到的數(shù)據(jù)處理問題。通過實驗,我們也看到k=2時效果并不那么好。這時候可以將問題留給學(xué)生分析,最多提示從線性相關(guān)的角度進(jìn)行考慮,并且可以讓學(xué)生將上圖改成淺灰的底色,結(jié)果k=2才能夠效果完美,繼續(xù)讓學(xué)生分析原因。
學(xué)生可能從SVD分解得到的對角陣包含的奇異值大小中找到原因,也可能提出用一個固定閾值如95%篩選出前面比較重要的k個特征值,以給予算法更好的適用性。
2.2 分析背后存在的缺陷
將以上SVD接近完美去噪的用例稍作改變,如圖3所示,可用于驗證SVD對去噪和圖像旋轉(zhuǎn)的局限性。
對比圖像旋轉(zhuǎn)前后的奇異值,發(fā)現(xiàn)奇異值不像之前那樣集中,去噪?yún)?shù)也很難調(diào)節(jié),最好的效果介于k=35和k=36之間;然后再啟發(fā)學(xué)生分析為什么圖像僅僅旋轉(zhuǎn)了2度,SVD的去噪效果就變得如此之差。
實驗之后的理論分析:對一個矩陣A進(jìn)行“旋轉(zhuǎn)”,是對其所有行向量或者列向量施以相同的旋轉(zhuǎn)變換。以對矩陣A的列向量旋轉(zhuǎn)為例,就是對矩陣A左乘一個旋轉(zhuǎn)陣P。因為A=VSU*,所以PA= PVSU*,其中PV是兩個正交陣的乘積,仍然是一個正交陣,因而PV、S、U是PA的SVD,也就是說,A矩陣經(jīng)過P旋轉(zhuǎn),再分解后的S和U是不變的,這才是SVD的旋轉(zhuǎn)不變性。通過上述分析加深學(xué)生對矩陣變換的理解以后,還可以簡單地澄清:圖像旋轉(zhuǎn)是2維/3維空間的旋轉(zhuǎn),矩陣旋轉(zhuǎn)是n維空間的旋轉(zhuǎn),是兩個不同的概念。這也是本次輕微的圖像旋轉(zhuǎn)實驗中去噪效果驟降的原因。endprint
3 引導(dǎo)學(xué)生自行設(shè)計實驗
3.1 補充理論和讓學(xué)生提出假設(shè)
通過上述實驗對比,學(xué)生已經(jīng)認(rèn)識到無論用SVD做圖像去噪,還是用SVD做其他應(yīng)用,都不能夠隨意地套用,需要注意其應(yīng)用條件的限制。教師可讓學(xué)生重新思考這個問題:將圖像視為矩陣,進(jìn)行矩陣分解,其本質(zhì)是什么?效果是什么?通過啟發(fā)學(xué)生進(jìn)行假設(shè)和實驗驗證,學(xué)生會慢慢認(rèn)識到圖像矩陣的分解和重構(gòu),其運算的基本單位是行列向量。SVD去噪是利用行列向量之間存在的相關(guān)性,用奇異向量對應(yīng)的行列線性組合后得到其他的行列,從線性相關(guān)的角度消除一定的數(shù)據(jù)冗余和噪聲。
3.2 引導(dǎo)學(xué)生做驗證實驗的兩種方向
為了進(jìn)一步讓學(xué)生加深理解,教師可以讓學(xué)生自行設(shè)計實驗,引導(dǎo)學(xué)生朝兩個方向進(jìn)行實驗:①數(shù)據(jù)可以看成矩陣,并且數(shù)據(jù)的行列之間本身有較高的線性相關(guān)性,如推薦算法中,行坐標(biāo)是用戶,列坐標(biāo)是商品,矩陣元素是用戶對商品的評價值,則相同模式的用戶對相同的商品評價和夠買欲望,可以呈線性相關(guān)關(guān)系;②數(shù)據(jù)可以看成矩陣,但是數(shù)據(jù)的模式(規(guī)律)并不集中在行列的線性相關(guān)性上。強行用SVD分解會導(dǎo)致去噪、預(yù)測產(chǎn)生明顯的錯誤。
4 結(jié) 語
學(xué)生從教師講授中獲取知識也好,從文獻(xiàn)資料中自學(xué)也罷,由于知識表達(dá)不精準(zhǔn),使得知識本身也有“噪聲”,特別是在抽象概念的教學(xué)上,這種誤差極易被放大表達(dá)。在計算科學(xué)的教學(xué)中,我們既應(yīng)該重視表達(dá)的準(zhǔn)確性,又應(yīng)該讓學(xué)生注意到知識傳遞中可能存在的誤差,利用好計算機(jī)方便構(gòu)造實驗進(jìn)行驗證的特點,培養(yǎng)學(xué)生質(zhì)疑的精神和驗證的能力。
參考文獻(xiàn):
[1] AMS. We recommend a singular value decomposition[EB/OL]. [2017-04-25]. http://www.ams.org/samplings/feature-column/fcarc-svd.
[2] Lowe D G. Distinctive image features from scale-invariant keypoints[J]. International Journal of Computer Vision, 2004(2): 91-110.
[3] Rublee E, Rabaud V, Konolige K, et al. ORB: An efficient alternative to SIFT or SURF[C]//ICCV. Barcelona: IEEE, 2011: 2564-2571.
[4] 劉海波, 沈晶, 岳振勛, 等. Visual C++ 數(shù)字圖像處理[M]. 2版. 北京: 機(jī)械工業(yè)出版社, 2014: 392-423.
(編輯:宋文婷)endprint