摘要: 人臉識別中,髮型遮擋是一種十分常見的遮擋型別,並且對人臉的正確識別具有極大的干擾。提出一種將頭髮的顏色模型和髮型特徵相結合的遮擋檢測方法。首先,採用機器學習的方法,對頭髮的顏色進行學習建模。然後,利用髮際線的特徵,將人臉劃分為若干扇形並分塊,採用逐步精細的方法對人臉的髮型遮擋區域進行檢測。實驗結果表明,該方法對人臉區域髮型遮擋檢測的準確率和召回率都達到88%以上,相比pca檢測方法提高了約20%,驗證了該方法的有效性。
0引言
人臉識別作為模式識別領域的熱點研究問題受到了廣泛的關注,人臉識別技術在眾多領域的身份驗證中有著廣闊的應用前景[1]。在實際人臉影象處理過程中,人臉影象的遮擋會經常出現,如頭髮、口罩、圍巾等,而遮擋對人臉識別有很大的影響。因此,如何準確、自動地檢測人臉遮擋區域成為遮擋人臉識別處理的關鍵問題之一。
主流的人臉遮擋區域檢測方法是基於pca分析檢測方法[23]。該方法包括兩個關鍵步驟:在分析階段,將遮擋人臉影象投影到人臉特徵空間,並利用投影係數重建人臉;在檢測階段,將遮擋人臉影象與重建人臉影象進行比較,差異越大,判定為遮擋的可能性越大。遮擋區域根據重建人臉與原始遮擋人臉的差異來估計。基於平均人臉的人臉遮擋區域檢測方法[4]與基於pca分析檢測方法類似,只是參考選取的是平均臉影象。
在遮擋人臉識別中,頭髮是極為常見的遮擋物體,給識別帶來較大的不利影響。目前,基於pca或平均臉的分析檢測方法在很大程度上依賴於參考樣本,對於人臉的位置、姿勢等十分敏感,而髮型遮擋往往伴隨著不同的人臉姿勢。本文在分析了各類遮擋檢測演算法後,通過建立髮色模型並結合髮型特徵,提出了一種針對髮型遮擋的人臉遮擋區域檢測方法。
1方法概述
(1)圖1給出了髮色模型學習的詳細步驟:對髮色和膚色rgb樣本資料,利用人工神經網路進行髮色和膚色訓練學習,得到乙個髮色模型。給定乙個畫素點的rgb值,可以通過該模型粗略評估其是頭髮的概率。
(2)圖2給出了髮型遮擋區域的檢測步驟:給定一幅影象,首先根據人臉進行歸一化;之後,以嘴部中心為圓心,將給定的人臉區域按照角度劃分為若干扇形;對於每個扇形,按照半徑長度平均劃分為相等數量的區塊;然後,對於每個扇形區塊,按照距離圓心的距離,由遠及近進行粗略檢測。對於乙個扇區,取髮色區塊的下乙個(離圓心更近的)區塊進行精細分割。
2結合髮色模型和髮型特徵的遮擋檢測
髮型特徵包括:長度、體積、髮色等。 對於解決髮型遮擋的檢測問題,可以利用髮色、髮際線等特徵。本文將髮色模型和髮型特徵進行有機結合,對人臉的面部髮型遮擋區域進行檢測。
2.1基於人工神經網路的髮色模型
2.1.1bp人工神經網路簡介
bp神經網路[5]是人工神經網路的一種,它是採用誤差反向傳播的多層前饋神經網路。其中,3層的bp 網路包括乙個輸入層、乙個隱含層、乙個輸出層,如圖3所示。
圖3三層bp神經網路bp神經網路的基本思想是採用訊號的正向傳播和誤差的反向傳播。在正向傳播中,從輸入層傳入的資料,依次在各隱含層進行處理,最終到達輸出層。如果輸出值與期望輸出不同,則將輸出層的誤差作為調整訊號進行反向傳播,根據誤差不斷調整權值和閾值,最終得到網路可以接受的精度並輸出。
2.1.2髮色模型
頭髮的顏色與**的顏色往往有比較明顯的區別,利用髮色能夠有效提高面部髮型遮擋區域檢測的正確率。
2.2基於髮型特徵的扇形分割
給定輸入影象和髮型區域,以嘴部位置的中心區域為圓心,將嘴部以上的區域以每10°劃分為乙個扇形,共18個徑長不等的扇形(以下簡稱為扇區),按照逆時針方向記為s1~s18。對任意的扇形區域si,按照徑長平均分為10個區塊(以下簡稱為區塊),按照離圓心的距離由遠及近依次標記為si,1~si,10。
2.2.1粗略檢測
形式地,將x=定義為區塊s的畫素點,用ix表示乙個畫素點的顏色向量,ix=(rx,gx,bx)t;lx=(l1,l2,…,lm)t表示標號向量,其中m表示區塊s中的畫素點數,並且lx=1表示x屬於頭髮,lx=0表示x屬於**。將乙個畫素是頭髮的概率表示為p(lx=1),簡單地,p(lx=1)=ax,其中,ax是ann髮色模型的輸出值。
對於人臉區域的每個扇形,首先對最外層區塊(s1,1,s2,1,…,s18,1)進行檢測。區塊si,1中的畫素點x,將其rgb值作為ann髮色模型的輸入,得到輸出值ax。當該點的**為頭髮概率大於給定閾值時,則認為該畫素點屬於頭髮區域。如果區塊si,1中的畫素大部分都判定為頭髮區域時,則認為該區塊si,1屬於頭髮區域,記為**遮擋塊。對所有的扇區,由遠及近地進行區塊的檢測,直到區塊不再是**遮擋塊為止。每個扇區中第乙個不是**遮擋塊的區塊稱為精細分割塊(以下簡稱精割塊),放到下一步進行圖割[6]處理。
2.2.2精細分割
經過2.2.1節中粗略檢測得到了若干個精割塊,下一步是在此範圍內進行精細的分割。採用221中相同的定義,將x=定義為精割塊s的畫素點,用ix表示畫素點的顏色向量,ix=(rx,gx,bx)t;lx=(l1,l2,…,lm)t表示標號向量,其中m表示精割塊s中的畫素點數,並且lx=1表示x屬於頭髮,lx=0表示x屬於**。將乙個畫素是頭髮的概率表示為p(lx=1)。定義如下能量函式:
e(l)=c(l)+αb(l)(1)
其中,α用以權衡兩項的重要性;c(l)表示畫素點的**概率;b(l)是平滑項,用以描述相鄰畫素標號互異時的懲罰代價。任意精割塊s中畫素的最終的標號向量l*x,通過使式(1)達到最小值來獲得。式(1)中的第一項c(l)定義為:
c(l)=1nx∑x∈xc(lx)(2)
其中,nx表示精割塊s中畫素點的數量, c(lx)表示髮色模型對畫素點x的**概率。
式(1)中第二項中的b(l)定義為:
其中,np表示畫素點p的相鄰點的個數,σ表示影象的平均平滑度。式(4)採用8鄰域系統,選擇畫素點的相鄰點。由於精割塊的形狀大小不同,進行了均值化處理。
2.2.3優化
直接對式(1)進行最小化計算,複雜度較高,計算量非常大。本文提出了一種求近似解的計算方法。首先,將精割塊s中的畫素按照ann**的髮色程度按照從小到大排列;然後,將區塊內所有畫素的區塊起始標號都置為1,按照髮色的概率從小到大排序依次將畫素標號置為0;最後,分別計算能量函式的值。選取使能量函式達到最小值時的標號向量作為最優解。
3實驗和結果分析
實驗資料採集28個人的人臉影象,分為正面、左側面和右側面三個姿勢,偏轉角度在10°~30°之間,髮型遮擋包括正面單側遮擋、正面兩側遮擋、左側面遮擋、右側面遮擋、發簾遮擋等型別。人臉影象庫包括28人269張髮型遮擋影象,每張影象歸一化為50×75畫素。
將樣本資料劃分為遮擋與未遮擋兩類,並且人工標註所有遮擋樣本的髮型遮擋區域。測試pca遮擋檢測及本文所提出遮擋檢測方法的準確率p、召回率r及fvalue。fvalue的定義為2prp+r。其中,p表示面部遮擋檢測的頭髮區域和人工標註的頭髮區域一致的畫素所佔的比例,r表示面部人工標註的頭髮區域和遮擋檢測的頭髮區域一致的畫素所佔的比例。對所有實驗分別調整引數以達到最優的fvalue值。下面通過兩個試驗對比本文方法與pca檢測方法的優劣。
實驗1該實驗採用資料集中的正面人臉,資料報含109張遮擋人臉影象,實驗結果如表1所示。
由表1可以看出,在正面人臉的條件下,pca檢測方法的fvalue為69%,相應的準確率和召回率分別為63%和76%。本文方法比pca檢測方法的fvalue提高了20%,準確率和召回率分別提高了27%和12%。實驗2該實驗採用全部的資料,包含269張不同姿勢的遮擋人臉影象,實驗結果如表2所示。
由表2可以看出,在不同姿勢的人臉條件下,pca檢測方法的fvalue為57%,相比正面人臉條件下降低了12%,相應的準確率和召回率降低10%左右。而本文方法與正面人臉條件下的fvalue相比變化不大,說明比pca檢測方法具有更強的魯棒性。
4結論
髮型遮擋對人臉識別具有極大的干擾,如何準確獲取遮擋區域是處理遮擋中需要解決的問題。由於各種形狀和不同紋理,使得髮型遮擋區域檢測非常困難 。實驗表明,本文提出的方法比pca遮擋檢測方法具有更高的準確率和召回率,驗證了該方法的有效性。
解決sqoop中出現的某些問題
我本人用導sqoop去匯入mysql資料並存到hdfs上,安裝過程中 使用這篇部落格來進行安裝,解決方法也很簡單 把sqoop bin configure sqoop裡面的如下兩段內容注釋掉就可以了。指令如下 sqoop import connect jdbc mysql username root...
CI 在nginx中出現404錯誤的解決方式
因為你的nginx配置的是擷取.php檔案字尾的訪問 到php cgi,而index.php和index.php 是不一樣的。你在nginx裡面寫一句 if e request filename 出現的問題 用這個解決了,nginx 預設不支援 path info 模式,需要修改nginx配置 讓n...
Django專案開發中出現的問題及解決
django.db.utils.operationalerror table certify already exists解決 檢視models模組是否有重複的表名。django.db.utils.operationalerror 1045,access denied for user dashbo...