基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
FROM:http://blog.csdn.net/loadstar_kun/article/details/39453839
1. ?問(wèn)題背景
? ? ? ? 信號(hào)的稀疏表示并不是新的東西。我們很早就一直在利用這一特性。例如,最簡(jiǎn)單的JPEG圖像壓縮算法。原始的圖像信號(hào)經(jīng)過(guò)DCT變換之后,只有極少數(shù)元素是非零的,而大部分元素都等于零或者說(shuō)接近于零。這就是信號(hào)的稀疏性。
? ? ? ? 任何模型都有建模的假設(shè)條件。壓縮感知,正是利用的信號(hào)的稀疏性這個(gè)假設(shè)。對(duì)于我們處理的信號(hào),時(shí)域上本身就具有稀疏性的信號(hào)是很少的。但是,我們總能找到某種變換,使得在某個(gè)變換域之后信號(hào)具有稀疏性。這種變換是很多的,最常見(jiàn)的就是DCT變換,小波變換,gabor變換等。
? ? ? ? 然而,這種正交變換是傳統(tǒng)視頻圖像處理采用的方法。目前所采用的一般不是正交變換。它是基于樣本采樣的。或者說(shuō)是通過(guò)大量圖像數(shù)據(jù)學(xué)習(xí)得到的,其結(jié)果稱(chēng)作字典,字典中的每一個(gè)元素稱(chēng)作原子。相關(guān)的學(xué)習(xí)算法稱(chēng)作字典學(xué)習(xí)。常見(jiàn)的算法例如K-SVD算法。學(xué)習(xí)的目標(biāo)函數(shù)是找到所有樣本在這些原子的線(xiàn)性組合表示下是稀疏的,即同時(shí)估計(jì)字典和稀疏表示的系數(shù)這兩個(gè)目標(biāo)。
? ? ? ?壓縮感知和稀疏表示其實(shí)是有些不同的。壓縮感知的字典是固定的,在壓縮感知的術(shù)語(yǔ)里面其字典叫做測(cè)量矩陣。但壓縮感知的恢復(fù)算法和稀疏表示是同一個(gè)問(wèn)題。他們都可以歸結(jié)為帶約束條件的L1范數(shù)最小化問(wèn)題。求解這類(lèi)泛函的優(yōu)化有很多種方法。早在80年代,統(tǒng)計(jì)學(xué)中Lasso問(wèn)題,其實(shí)和稀疏分解的優(yōu)化目標(biāo)泛函是等價(jià)的。而求解統(tǒng)計(jì)學(xué)中l(wèi)asso 問(wèn)題的LARS算法很早就被提出了,故我們還可以通過(guò)統(tǒng)計(jì)學(xué)的LARS算法求解稀疏表示問(wèn)題。目前很多統(tǒng)計(jì)學(xué)軟件包都自帶LARS算法的求解器。
2. 基于稀疏表示的分類(lèi) SRC
? ? ? 人臉的稀疏表示是基于光照模型。即一張人臉圖像,可以用數(shù)據(jù)庫(kù)中同一個(gè)人所有的人臉圖像的線(xiàn)性組合表示。而對(duì)于數(shù)據(jù)庫(kù)中其它人的臉,其線(xiàn)性組合的系數(shù)理論上為零。由于數(shù)據(jù)庫(kù)中一般有很多個(gè)不同的人臉的多張圖像,如果把數(shù)據(jù)庫(kù)中所有的圖像的線(xiàn)性組合來(lái)表示這張給定的測(cè)試人臉,其系數(shù)向量是稀疏的。因?yàn)槌诉@張和同一個(gè)人的人臉的圖像組合系數(shù)不為零外,其它的系數(shù)都為零。
? ? ? ?上述模型導(dǎo)出了基于稀疏表示的另外一個(gè)很強(qiáng)的假設(shè)條件:所有的人臉圖像必須是事先嚴(yán)格對(duì)齊的。否則,稀疏性很難滿(mǎn)足。換言之,對(duì)于表情變化,姿態(tài)角度變化的人臉都不滿(mǎn)足稀疏性這個(gè)假設(shè)。所以,經(jīng)典的稀疏臉?lè)椒ê茈y用于真實(shí)的應(yīng)用場(chǎng)景。
? ? ? ?稀疏臉很強(qiáng)的地方在于對(duì)噪聲相當(dāng)魯棒,相關(guān)文獻(xiàn)表明,即使人臉圖像被80%的隨機(jī)噪聲干擾,仍然能夠得到很高的識(shí)別率。稀疏臉另外一個(gè)很強(qiáng)的地方在于對(duì)于部分遮擋的情況,例如戴圍巾,戴眼鏡等,仍然能夠保持較高的識(shí)別性能。上述兩點(diǎn),是其它任何傳統(tǒng)的人臉識(shí)別方法所不具有的。
3. 稀疏人臉識(shí)別的實(shí)現(xiàn)問(wèn)題
? ? ? ? 一談到識(shí)別問(wèn)題,大家都會(huì)想到要用機(jī)器學(xué)習(xí)的方法。先進(jìn)行訓(xùn)練,把訓(xùn)練的結(jié)果以模板的形式存儲(chǔ)到數(shù)據(jù)庫(kù)上;真實(shí)應(yīng)用環(huán)境的時(shí)候,把測(cè)試樣本經(jīng)過(guò)特征提取之后,和數(shù)據(jù)庫(kù)中的模板進(jìn)行比對(duì),查詢(xún)得到一個(gè)最相似的類(lèi)別作為識(shí)別結(jié)果。往往,機(jī)器訓(xùn)練的時(shí)間都超級(jí)長(zhǎng),幾天,幾個(gè)禮拜乃至幾個(gè)月,那是常見(jiàn)的事情;識(shí)別的時(shí)間一般是很小的。典型的例如人臉檢測(cè)問(wèn)題。這是可以接受的,因?yàn)橛?xùn)練一般都是離線(xiàn)的。
? ? ? ? 然而,基于稀疏分解的人臉識(shí)別是不需要訓(xùn)練的,或者說(shuō)訓(xùn)練及其簡(jiǎn)單。基于稀疏表示的人臉識(shí)別,其稀疏表示用的字典直接由訓(xùn)練所用的全部圖像構(gòu)成,而不需要經(jīng)過(guò)字典學(xué)習(xí)【也有一些改進(jìn)算法,針對(duì)字典進(jìn)行學(xué)習(xí)的】。當(dāng)然,一般是經(jīng)過(guò)簡(jiǎn)單的特征提取。由于稀疏表示的方法對(duì)使用什么特征并不敏感。故而,其訓(xùn)練過(guò)程只需要把原始圖像數(shù)據(jù)經(jīng)過(guò)簡(jiǎn)單的處理之后排列成一個(gè)很大的三維矩陣存儲(chǔ)到數(shù)據(jù)庫(kù)里面就可以了。
? ? ? ? 關(guān)鍵的問(wèn)題在于,當(dāng)實(shí)際環(huán)境中來(lái)了一張人臉圖像之后,去求解這張人臉圖像在數(shù)據(jù)庫(kù)所有圖像上的稀疏表示,這個(gè)求解算法,一般比較耗時(shí)。盡管有很多的方法被提出,但是對(duì)于實(shí)時(shí)應(yīng)用問(wèn)題,依然沒(méi)法滿(mǎn)足。所以,問(wèn)題的關(guān)鍵還是歸結(jié)于L1范數(shù)最小化問(wèn)題上來(lái)。
? ? ? ?L1范數(shù)最小化問(wèn)題已經(jīng)有很多種快速求解方法,這里主要包括有梯度投影?l1magic,l1homotopy,?gpsr,?增廣拉格朗日方法,這幾種方法都比正交匹配追蹤算法OMP要高效的多。上述幾種快速算法中,采用增廣拉格朗日的對(duì)偶實(shí)現(xiàn)相比其它的快速算法要更好。最近流行的Spit Bregman算法也是不錯(cuò)的選擇。
? ? ??
? ? ??SRC算法
? ? ??
4. 稀疏表示人臉識(shí)別的改進(jìn)算法
稀疏人臉識(shí)別算法要用于實(shí)際的系統(tǒng),需要在兩方面加以改進(jìn)。首先,要突破人臉圖像的對(duì)齊這一很強(qiáng)的假設(shè)。實(shí)際環(huán)境中的人臉往往是不對(duì)齊的,如何處理不對(duì)其的人臉是額待解決的問(wèn)題。其實(shí),是快速高效的優(yōu)化算法。最后,也是最重要,實(shí)際環(huán)境中的應(yīng)用往往訓(xùn)練樣本很少。目前,研究人員已經(jīng)取得了很多可喜的成果,下面分別予以介紹。
? ??4.1 LASRC算法?
?CVIU 2013?Face recognition for web-scale datasets?這篇論文的貢獻(xiàn)在于它不是用所有訓(xùn)練圖像的矩陣去求解L1范數(shù)最小化問(wèn)題,而是先用L2范數(shù)最小化方法近似求解,然后選取前K個(gè)最大系數(shù)所對(duì)應(yīng)的Ai組成新的矩陣,然后用去求解L1最小范數(shù),從而將SRC的運(yùn)算速度提高了100–250倍,但運(yùn)算結(jié)果并沒(méi)有下降很多。LASRC算法流程:
4.2 CRC-RLS算法?
CVPR2011 LeiZhang ?Sparse Representatiion or Callaborative Representation: Which helps Face Recognition? 稀疏表示和協(xié)同表示,哪一個(gè)有助于人臉識(shí)別。該文作 者提出了用L2范數(shù)代替L1范數(shù)求解原問(wèn)題。這樣,能夠非常快速的求解問(wèn)題,實(shí)時(shí)性沒(méi)有任何問(wèn)題。但稀疏性不像原來(lái)的L1范數(shù)那樣強(qiáng)。但作者對(duì)分類(lèi)準(zhǔn)則進(jìn)行了改進(jìn),使得其分類(lèi)性能幾乎接近于原始L1范數(shù)最小化問(wèn)題分類(lèi)性能。為了對(duì)比,我把關(guān)鍵性算法列表如下:?
SRC算法求解的是方程1的解,而CRC-RLS算法則直接給出了表示系數(shù)的最小二乘解。二者另外一個(gè)主要的不同點(diǎn)在于計(jì)算殘差的方式不一樣,具體請(qǐng)注意上述方程2和方程10的不同點(diǎn)。后者的計(jì)算時(shí)間較前者最多情況下加速了1600倍。更多的實(shí)現(xiàn)細(xì)節(jié)可以參考原文。
? ? ? ?
? ?4.3 ?RSC算法?
? ? ? ? ? ? ??CVPR2011 Meng Yang,Robost ?Sparse Coding for Face Recognition.?魯棒的稀疏編碼算法。該文作者沒(méi)有直接求解稀疏編碼問(wèn)題,而是求解Lasso問(wèn)題,因?yàn)長(zhǎng)asso問(wèn)題的解和稀疏編碼的解是等價(jià)的。在傳統(tǒng)的SRC框架下,編碼誤差使用L2范數(shù)來(lái)度量的,這也就意味著編碼誤差滿(mǎn)足高斯分布,然而,當(dāng)人臉圖像出現(xiàn)遮擋和噪聲污染的情況下,并非如此。在字典學(xué)習(xí)框架下,這樣的字典是有噪聲的。該文作者對(duì)原始Lasso問(wèn)題進(jìn)行改進(jìn),求解加權(quán)L1范數(shù)約束的線(xiàn)性回歸問(wèn)題。Lasso問(wèn)題描述如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ?加權(quán)Lasso問(wèn)題的目標(biāo)函數(shù)描述如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? 此算法的關(guān)鍵還在于權(quán)重系數(shù)的確定,文中采用的是logistic函數(shù),而具體的實(shí)現(xiàn)則是通過(guò)迭代估計(jì)學(xué)習(xí)得到。該方法基于這樣一個(gè)事實(shí):被遮擋或噪聲干擾的像素點(diǎn)賦予較小的權(quán)重,而其它像素點(diǎn)的權(quán)重相對(duì)較大。具體迭代算法采用經(jīng)典的迭代重加權(quán)算法框架,當(dāng)然內(nèi)部嵌入的稀疏編碼的求解過(guò)程。此算法在50%遮擋面積的情況下取得的更好更滿(mǎn)意的結(jié)果。但是文中沒(méi)有比較計(jì)算時(shí)間上的優(yōu)略而直說(shuō)和SRC框架差不多。
4.4 ?RASL算法
CVPR2010. Yigang Peng. ?Robust batch Alignment of Images by Sparse and Low-Rank Decomposition. 這篇文章的作者在這篇文章中討論的是用矩陣的低秩分解和稀疏表示來(lái)對(duì)齊人臉的問(wèn)題。
4.5 ?RASR算法
? ? ? ?PAMI2011 Wagner.?Towards a Practical Face Recognition System:Robust Alignment and Illumination by Sparse Representation.該文的目的和RASL類(lèi)似,此算法通過(guò)模型學(xué)習(xí)的方法,讓訓(xùn)練圖像和測(cè)試圖像自動(dòng)對(duì)齊。 如果訓(xùn)練圖像和測(cè)試圖像已經(jīng)嚴(yán)格對(duì)齊,那么對(duì)于測(cè)試圖像y0和訓(xùn)練集A: 但一般的測(cè)試圖像 y 沒(méi)有經(jīng)過(guò)嚴(yán)格對(duì)齊,我們可以認(rèn)為它經(jīng)過(guò)了的形變,因此,從而得到:
在求解上式的過(guò)程中,我們發(fā)現(xiàn)它存在對(duì)應(yīng)于不同subjects的局部最小值。因此在求解時(shí),我們分別對(duì)每一個(gè)subject ?i 求解: ? 算法整體流程如下:
4.6 ?MRR算法
ECCV2012,Meng Yang. Efficient Misalignment-Robust Representation for Real Time Face Recognition.這篇文章在充分分析RASR算法的基礎(chǔ)上提出了一個(gè)高效的快速算法。RASR需要將整個(gè)數(shù)據(jù)集進(jìn)行對(duì)齊操作,時(shí)間復(fù)雜度比較高;MRR在RASR的基礎(chǔ)上,用Coarse-to- fine search 的兩次搜索策略,大大簡(jiǎn)化了RASR的求解過(guò)程,將運(yùn)算速度提高了c/2倍(c為subjects的個(gè)數(shù))。下面是自己實(shí)現(xiàn)的LASRC算法: clc;clear;close all;
path(path, './Optimization');
path(path, './Data');
path(path, './GPSR');
load pf83lfw_hog_gabor_lbp;
A = fbgTrainImgs;
for i = 1:size(A,2)
? ? A(:,i) = A(:,i)/norm(A(:,i),2); ?% 歸一化
end
pseudoInvA = pinv(A);
% pseudoInvA = A'*A\A';
% pseudoInvA = inv(A'*A)*A';
% load pseudoInvA;
numPerson = 83;
fraction =O.5; %用多少比例的測(cè)試樣本進(jìn)行測(cè)試
testNum = round(size(fbgTestImgs,2)*fraction);
resultIds=zeros(testNum,1);
K = 100; % 選取前K大的系數(shù)對(duì)應(yīng)的Ai組成新的矩陣求解L1范數(shù)
tau =0.01;
startInd = zeros(numPerson,1);
endInd = zeros(numPerson,1);
for j=1:numPerson
? ? ?if j==1
? ? ? ?startInd(j) =1;
? ? ? ?endInd(j) = train_img_person(1);
? ? else
? ? ? ?startInd(j) = sum(train_img_person(1:j-1))+1;
? ? ? ?endInd(j) = sum(train_img_person(1:j));
? ? end
end
rightNum = 0;
maxDef = 10;
for i =1:testNum
% ? ? close all;
? ? y = fbgTestImgs(:,i);
? ? label = fbgTestIds(i);
? ? xNorm2 = pseudoInvA * y; %對(duì)應(yīng)LASRC算法 step 3
? ? [val,ind] = sort(xNorm2,'descend');
? ? subA = A(:,ind(1:K)); ? %對(duì)應(yīng)LASRC算法 step 4
? ??
? ? class =[];
? ? for j=1:K
? ? ? ? index = ind(j);
? ? ? ? for k=1:numPerson
? ? ? ? ? ? if index>=startInd(k)&index<=endInd(k)
? ? ? ? ? ? ? ? class = [class,k];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? end
? ? ? ? end
? ? end
? ??
? ? uniqueClass = unique(class);
? ? numClass = length(uniqueClass);
? ? subSubA = cell(numClass,1);
? ??
? ?for j=1:length(class)?
? ? ? ? for k=1:numClass ? ? ? ??
? ? ? ? ? ? if class(j)==k
? ? ? ? ? ? ? ? subSubA{k}=[subSubA{k},j];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? end
? ? ? ? end
? ? end
? ? xp = GPSR_BB(y,subA,tau); ?%對(duì)應(yīng)LASRC算法 step 5
r = zeros(numClass,1);
for j = 1:numClass
if isempty(subSubA{j})
r(j)=maxDef;
continue;
end;
delta = xp(subSubA{j});
deltaA = subA(:,subSubA{j});
r(j) = norm(y-deltaA*delta);
end
% figure;bar(r);
[~,pre] = min(r);
% if (pre == label) rightNum = rightNum+1; end
resultIds(i) = pre;
fprintf('processing:%d/%d\n',i,testNum);
end
% accuracy = rightNum/testNum;
accuracy = sum(resultIds == fbgTestIds(1:testNum))/testNum;
fprintf('accuracy = %f',accuracy);
? ??
代碼中用到了GPSR優(yōu)化包,可以到?http://download.csdn.net/detail/chlele0105/7522681下載
大牛主頁(yè): Yi Ma:http://yima.csl.illinois.edu/
轉(zhuǎn):http://blog.csdn.net/chlele0105/article/details/32336299#comments
總結(jié)
以上是生活随笔為你收集整理的基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Kmeans、Kmeans++和KNN算
- 下一篇: URL 收藏