在浪潮和英偉達(dá)聯(lián)合舉行的AI訓(xùn)練營中,演講嘉賓從人臉識別算法和評價指標(biāo)、人臉識別系統(tǒng)的構(gòu)成等方面為大家?guī)砹擞嘘P(guān)人臉識別的分享。
人臉識別的目標(biāo)
總結(jié)兩點(diǎn),第一,認(rèn)出同一個人,不管你的狀態(tài)怎么變,都能知道你就是你。第二、區(qū)分不同的人,可能這兩個人長得很像,或者兩個人都化妝了,但不管狀態(tài)怎么變化,人臉識別都能知道這是兩個不同的人。
人臉識別本身是作為生物識別技術(shù)的一種,主要是提供身份認(rèn)證的手段,從精度上來講,人臉識別并不是最高的。人臉識別受到很多其他條件的影響,比如說光照。人臉識別的好處在于一般不需要用戶做太多的配合,現(xiàn)在各個地方的監(jiān)控攝像頭,包括電腦的攝像頭、手機(jī)各種視頻輸入設(shè)備,照相設(shè)備已經(jīng)非常非常的普及,用這種可見光的設(shè)備就可以做人臉識別。所以在引入人臉識別的時候可能新增加的投資是非常少的,這是它的優(yōu)勢。
人臉識別的流程
人臉識別的核心流程,所謂核心流程就是不管在什么樣的人臉識別系統(tǒng)里面基本上都有這個流程。首先人臉檢測,第二步做人臉對齊,第三步做特征提取,這是對每一張照片都要做的這三步,當(dāng)要去做比對的時候就把提取的特征做比對,然后確定這兩個臉是不是屬于同一個人。
人臉檢測
人臉檢測即判斷一個大的場景中是否有人臉,并且要找到這個人臉的位置把它切出來。它是屬于物體檢測技術(shù)的一種,是整個人臉感知任務(wù)的基礎(chǔ)。人臉檢測的基本方法就是在圖象金字塔上滑動窗口,用分類器選擇候選窗口,用回歸模型進(jìn)行位置修正。
上面畫的三個窗口,一個是0.3倍、0.6倍、1.0倍,當(dāng)人臉位置不定,大小無法識別時可采用此技術(shù),讓這個圖本身變得大小不同,而滑動窗口的大小相同。深度網(wǎng)絡(luò)一般輸入的圖象大小是固定的,那么前面的滑動窗口基本上也是固定的。為了讓固定的滑動窗口能夠覆蓋不同的范圍的話,就對整個圖的大小進(jìn)行縮放,取不同的比例。這邊畫0.3、0.6、1.0只是舉例,實(shí)際用的時候還可以有很多其他不同的倍數(shù)。
分類器是指看滑動窗口每一個滑到的位置去判斷是否是人臉,因?yàn)榛瑒哟翱诨瑒拥降奈恢糜锌赡懿话麄€人臉,或者說它比整個人臉大一點(diǎn)。為了找到的人臉能夠更加精確,把滑動窗口放到回歸模型里,即可幫助修正人臉檢測的精確度。
輸入的是滑動窗口,輸出時如果里面有人臉,應(yīng)該向哪邊修正,以及它需要修正多少,所以Δx, Δy, Δw, Δh,就是它的坐標(biāo)以及它的寬和高大概修正多少。有了修正的量和用分類器確定它是人臉的窗口以后,把這兩個結(jié)合在一起,就能得到一個比較精確的人臉位置。
以上是人臉檢測的流程,同時也可適用于其他的物體檢測
人臉檢測的評價指標(biāo)
不管什么樣的模型都是分速度和精度兩個方面
一、速度
(1)速度是指定分辨率下的檢測速度
之所以指定分辨率,是因?yàn)榛瑒哟翱诿炕揭粋€位置都要做一次分類和回歸的判斷,所以當(dāng)圖越大,需要做檢測判斷的窗口數(shù)可能就越多,整個人臉檢測花的時間就越長。
因此評價一個算法或者模型的好壞,就得在固定的分辨率下面去看它的檢測速度到底是多少。一般來說這個檢測速度會是什么樣的值,可能就是做一張圖的人臉檢測所花費(fèi)的時間,比如說100毫秒、200毫秒還是50毫秒、30毫秒之類的。
另外一種表示速度的方法就是多少fps,現(xiàn)在一般的網(wǎng)絡(luò)攝像頭往往是25fps或者30fps,意思是每秒鐘能處理多少張圖,用fps的好處可以判斷人臉檢測是否可以做到實(shí)時檢測,只要人臉檢測的fps數(shù)大于攝像頭的fps數(shù)就能夠做到實(shí)時,否則就做不到。
(2)速度是否受統(tǒng)一個畫面中的人臉個數(shù)影響
從我們實(shí)際操作來說,大部分來說是不受影響的,因?yàn)橹饕鞘芑瑒哟翱诘拇螖?shù)影響,命中的次數(shù)倒不是特別重,但是稍微有那么一點(diǎn)影響。
二、精度
精度,基本上用召回率、誤檢率、ROC曲線這些來判定。召回率即指這張照片是人臉,真正的模型判斷出來是人臉這個比例,誤檢率、負(fù)樣本錯誤率即指這張照片不是人臉,但是誤判斷成人臉的比例。
ACC精度
ACC計算方法是正確的樣本數(shù)除以總的樣本數(shù),比如說拿一萬張照片去做人臉檢測,這一萬張照片里面有的是有人臉的,有的是沒有人臉的。然后判斷對的比例是多少。
但是這個精度存在一個問題,如果用它去判斷,它對于正負(fù)樣本的比例是完全無關(guān)的,即他不關(guān)心在正樣本里面正確率是多少,在負(fù)樣本里面正確率是多少,只關(guān)心總的。當(dāng)此模型精確度是90%時,別人不知道在正負(fù)樣本上面區(qū)別是多少。包括分類,包括回歸,一般來說分類模型,會先用一個回歸得到一個所謂置信度,置信度大于多少數(shù)值時認(rèn)為他是,然后置信度小于同一個數(shù)值時認(rèn)為他不是。
ACC統(tǒng)計模型是可調(diào)節(jié)的,即調(diào)整置信度,精度就會變化。
所以ACC值本身受樣本的比例影響很大,所以用它來表征一個模型的好壞的話有點(diǎn)問題,當(dāng)測試指標(biāo)說達(dá)到了百分之九十九點(diǎn)幾,單看這個值,是比較容易受騙或者說這個統(tǒng)計是有偏的。為了解決這個問題,一般現(xiàn)在會用一個叫做ROC的曲線來表征這個模型的精度
ROC受試者工作特征曲線
橫坐標(biāo):FPR(False Positive Rate)即負(fù)樣本錯誤率
縱坐標(biāo):TPR(True Positive Rate)即正樣本正確率
可以區(qū)分算法在正樣本和負(fù)樣本上的性能,并且曲線形狀與正負(fù)樣本比例無關(guān)。
ROC(Receiver Operating Characteristic)曲線就是把橫坐標(biāo)、縱坐標(biāo)用這個負(fù)樣本錯誤率和正樣本正確率兩個標(biāo)出來,這樣的話同一個模型在這個圖上面看到的不是一個點(diǎn),或者說不是一個單一的數(shù)據(jù),而是一條線。這條線即置信度的閾值,你調(diào)的越高就越嚴(yán)格,越低就越不嚴(yán)格。在這個上面的話就能反應(yīng)出這個置信度的閾值的變化對它的影響。
以后大家最好不要直接問說你的精度是多少,而是看ROC曲線,這樣更容易判斷模型的能力到底怎么樣。
人臉對齊
人臉對齊的目的使人臉紋理盡可能調(diào)整到標(biāo)準(zhǔn)位置,降低人臉識別器的難度。
為了用人為的方式降低它的難度,就可以先把它做對齊,就是讓檢測到這個人的眼睛、鼻子、嘴巴全部歸到同一個位置去,這樣的話模型在比對的時候,就只要找同樣位置附近,互相是不是相同還是相近,還是有很大不同。所以就是會做對齊的這么一步,這一步的話,我們現(xiàn)在常用的做法就是二維的做法,就是到這個圖里面去找到關(guān)鍵特征點(diǎn),一般現(xiàn)在就是五點(diǎn)的、十九點(diǎn)的,六十幾個點(diǎn),八十幾個點(diǎn)的各種都有。但人臉識別的話五個基本上就夠了。
這五個點(diǎn)之外的其他點(diǎn)的圖象,可以認(rèn)為它是做一個類似于插值的運(yùn)算,然后把它貼到那個位置去,做完了以后,就可以送到后面的人臉識別器里面去做識別了。這個是一般的做法,還有更前沿的做法,有的研究機(jī)構(gòu)在使用所謂的3D人臉對齊,就是我告訴你說一張正臉是什么樣子的,比如旋轉(zhuǎn)45度的時候長什么樣子,那么用這種圖給他訓(xùn)練過了以后,他就知道我看到一張向左右旋轉(zhuǎn)了45度這張圖,大概轉(zhuǎn)正了以后有很大可能性是什么樣子的,這個模型能去猜。
人臉特征提取算法
以前的傳統(tǒng)方法是所謂的局部紋理模型,全局紋理模型,形狀回歸模型之類的這些都有?,F(xiàn)在比較流行的就是用深度的卷積神經(jīng)網(wǎng)絡(luò)或者循環(huán)神經(jīng)網(wǎng)絡(luò),或者3DMM參數(shù)的卷積神經(jīng)網(wǎng)絡(luò)。所謂3DMM參數(shù)的話就是有三維的信息在里面,然后有級聯(lián)的深度神經(jīng)網(wǎng)絡(luò)。
級聯(lián)的深度神經(jīng)網(wǎng)絡(luò),即拿到人臉,首先要推測五個點(diǎn)的位置,如果用一個單一的模型一次就要做到這一點(diǎn)的話,這個模型會需要很復(fù)雜。
但是怎么能夠降低這個模型的復(fù)雜程度呢?
即做多次輸入,第一次輸入這個網(wǎng)絡(luò)以后先做一次推測,這個推測是一個可接受的不那么精確的推測,大概知道人臉的五個點(diǎn)在哪。然后把這五個點(diǎn)和那張原圖放到第二個網(wǎng)絡(luò)里面去,得到大概的修正量,有了一個基礎(chǔ)五個點(diǎn)以后再求修正量的話會比直接從原圖上面找精確的五個點(diǎn)要稍微容易一些。所以用這種逐步求精的方式用多個網(wǎng)絡(luò)級聯(lián)在一起就能夠做到一個速度跟精度的比較好的平衡,實(shí)際現(xiàn)在做的時候基本上用兩層就大概差不多了。
人臉特征點(diǎn)提取的評價指標(biāo)
NRMSE(Normalized Root Mean Square Error)即歸一化均方根誤差
用于衡量各個特征點(diǎn)坐標(biāo)與標(biāo)注坐標(biāo)的差距。
精度
為了能夠讓不同大小的人臉也能夠放在一起互相比較,采用統(tǒng)計學(xué)上叫做歸一化均方根誤差。舉個栗子:我們在紙上畫五個點(diǎn),然后讓機(jī)器來說這五個點(diǎn)的相互距離,所給出的數(shù)值越接近真實(shí)距離,則說明預(yù)測越精準(zhǔn)。一般來說預(yù)測的數(shù)值一定會有些偏差,那么怎么表述這個精度值呢?我們通常就用距離的平均值或者均方根值來表達(dá)。然而問題來了,相同的機(jī)器預(yù)測不同大小的圖像,精度值會顯得不同,因?yàn)樵酱蟮膱D誤差的絕對值會越高。換到不同大小的人臉道理也是一樣。因此,我們的解決辦法是把人臉本來的尺寸數(shù)值考慮進(jìn)去,一般分母是人的雙眼距離或者人臉的對角線距離,再用距離差值除以雙眼之間的距離,或者是除以人臉的對角線,這樣的話就可以得到一個基本上不隨著人臉大小而變化的一個值,用它來評測。
人臉比對
(1)目的:即判斷已經(jīng)對齊好的兩張人臉,是否屬于同一個人
(2)難點(diǎn):同一張人臉在不同狀況下會呈現(xiàn)不同的狀態(tài),比如說特別受光照、煙霧、化妝等等的影響。第二個就是映射到二維照片上的不同參數(shù)造成的,所謂映射到二維參數(shù)上就是說本來人臉長這樣,拍攝設(shè)備去拍的時候,跟他呈現(xiàn)的角度,離他的距離,對焦是否準(zhǔn)確,拍攝視角等等光線積淀這個都有影響,會讓同一個人臉產(chǎn)生出不同的狀態(tài)。第三就是年齡和整容的影響。
人臉比對的方法
(1)傳統(tǒng)方法
1、由人工去抽取一些特征HOG、SIFT、小波變換等,抽取的這種特征一般來說可能是要固定參數(shù),即不需要訓(xùn)練,不需要學(xué)習(xí),使用一套固定的算法,再對這個特征進(jìn)行比較。
(2)深度方法
主流的方法就是深度的方法,即深度卷積神經(jīng)網(wǎng)絡(luò),這個網(wǎng)絡(luò)一般來說是用DCNN去代替前面的那些特征抽取方法,即把一張圖上面,一個人臉上面的一些各個不同的特征弄出來,DCNN里面有很多參數(shù),這個參數(shù)是學(xué)出來的,不是人告訴他的,學(xué)出來的話相當(dāng)于能比人總結(jié)出來的這些會更好。
然后得到的一組特征一般現(xiàn)在的維度可能是128維、256維或者512維、1024維,然后做對比. 判斷特征向量之間的距離,一般使用歐氏距離或余弦相似度。
人臉比對的評價指標(biāo)同樣分為速度與精度,速度包括單張人臉特征向量計算時間和比對速度。精度包括ACC和ROC。由于前面已介紹過,這里著重介紹一下比對速度。
普通比對是一個簡單的運(yùn)算,是做兩個點(diǎn)的距離,可能只需要去做一次內(nèi)積,就是兩個向量的內(nèi)積,但當(dāng)人臉識別遇到1:N對比時,當(dāng)那個N庫很大的時候,拿到一張照片要去N庫里面做搜索的時候,搜索的次數(shù)會非常多,比如N庫一百萬,可能要搜索一百萬次,一百萬次的話就相當(dāng)于要做一百萬次的比對,這個時候的話對于總時間還是有要求的,所以就會有各種各樣的技術(shù)對這種比對進(jìn)行加速。
人臉識別相關(guān)的其他的算法
主要有人臉追蹤、質(zhì)量評估、活體識別。
●人臉追蹤
在監(jiān)控等視頻人臉識別的場景下,如果對走過的同一個人的每一幀都執(zhí)行整套人臉識別流程,不僅浪費(fèi)計算資源,而且有可能因?yàn)橐恍┑唾|(zhì)量的幀造成誤識別,所以有必要判斷哪些人臉是屬于同一個人的。并挑選出合適的照片做識別,大大提升模型的整體性能。
現(xiàn)在不止人臉追蹤,還有各種各樣不同的物體追蹤或者是車輛追蹤等等,都會使用到追蹤算法,此類算法不依賴于或不會一直依賴于檢測。例如在最開始檢測到一個物體后,接下來就完全不檢測了,只通過追蹤算法去做。同時為了做到非常高精度,為了做到不丟失,每一次的追蹤花的時間是比較多的。
為防止追蹤到的人臉和人臉識別器范圍不吻合,一般來說還是會拿人臉檢測器做一次檢測,這種檢測方法是依賴于人臉檢測做的比較輕量化的追蹤,在某些場景下,可以做到一個速度和質(zhì)量上面的一個平衡。
這種檢測方法叫做Tracking by Detection,即每一幀仍然去做人臉檢測,檢測到人臉以后,根據(jù)每一個人臉的四個值,即他的坐標(biāo)位置,他的寬、高,去比較前后兩幀的人臉的位置和大小,大概可以推測出這兩個人臉到底是不是屬于同一個移動物體。
●可選的間隔全畫面檢測
是指當(dāng)去做Tracking by Detection的時候,前后兩幀,一種做法是都做全畫面的檢測,所謂全畫面檢測即把全畫面全部掃一遍,但是此方法耗時嚴(yán)重,因此有時會采用另一種方法,間隔幾幀做一次全畫面,一般預(yù)測一個下一幀,位置變化不會太多,只要把前一幀的位置上下左右稍微擴(kuò)大一點(diǎn),再去檢測一次,往往大概率機(jī)會是可以檢測到,大多數(shù)的幀可以跳。
為什么一定要間隔幾幀再做一次全畫面檢測呢?
是為防止有新的物體進(jìn)來,如果只根據(jù)前一個物體的位置來找的話,可能有新的物體進(jìn)來的時候就沒檢測到,防止這種情況的話可以隔個五幀、十幀再去做一次全畫面檢測。
●人臉質(zhì)量評估
由于人臉識別器訓(xùn)練數(shù)據(jù)等的限制,不可能對所有狀態(tài)下的人臉性能都很好,質(zhì)量評估會判斷檢測出來的人臉與識別器特性的吻合程度,只選取吻合程度高的人臉?biāo)腿プ鲎R別,提高系統(tǒng)的整體性能。
人臉質(zhì)量評估包含以下4要素
①人臉的大小,選用太小的臉做識別效果會大打折扣。
②人臉姿態(tài),就是指三個軸方向的旋轉(zhuǎn)角度,一般來說跟識別器訓(xùn)練用的數(shù)據(jù)有關(guān)。如果訓(xùn)練的時候大部分用的是姿態(tài)不太大的人臉的話,在真正做識別的時候也最好不要挑那種偏轉(zhuǎn)很大的,否則會不適用。
③模糊程度,此要素很重要,如果照片已經(jīng)丟失掉信息了,再做識別會存在問題。
④遮擋,如果眼睛、鼻子等被蓋住了,這塊的特征就無法拿到,或者說拿到的是錯的,是一個遮擋物的特征,對后面的識別有影響。如果能判斷出來是被遮擋的,然后棄用,或者做一些特殊處理,例如不把它放到識別模型里面去。
● 活體識別
這是所有的人臉識別系統(tǒng)都會遇到的問題,只識別人臉的話,照片也可以蒙混過關(guān)。為了讓系統(tǒng)不被攻擊就會去做一些判斷,這個到底是一個真臉還是假臉。
基本上目前的方法大概有三種:
① 傳統(tǒng)的動態(tài)識別,很多銀行的取款機(jī)會有這種要求用戶做一些配合,例如讓用戶眨眼、轉(zhuǎn)頭,以此來判斷用戶是不是根據(jù)眨眼、轉(zhuǎn)頭做了同樣的配合。因此動態(tài)識別存在一個問題,即需要用戶的配合較多,這樣用戶使用體驗(yàn)會有點(diǎn)不好。
② 靜態(tài)識別,即不根據(jù)動作來判斷,只是根據(jù)這個照片本身來判斷是否是真實(shí)人臉,還是一個假臉。它的根據(jù)是一般現(xiàn)在用的攻擊的手段,是比較方便的,例如拿手機(jī),或者是拿一個顯示屏,就用屏幕做攻擊。
這種屏幕的發(fā)光能力跟實(shí)際的光照條件下面人臉的發(fā)光能力是不一樣的,例如顯示器有1600萬發(fā)色數(shù),是無法做到可見光的發(fā)光能力,即全部是連續(xù)的所有的波段都能發(fā)出來。因此當(dāng)再對這種屏幕做拍攝時,和真正自然環(huán)境下面的一次成像對比,人眼也能看出來會有一些變化,會有一些不自然。通過這種不自然放到一個模型里面訓(xùn)練過以后,還是可以根據(jù)這種細(xì)微的差別判斷出來到底是不是真臉。
③ 立體識別,如果用兩個攝像機(jī)或者一個帶深度信息的攝像機(jī),就能知道拍到的各個點(diǎn)離攝像機(jī)的距離是多少,相當(dāng)于對人物做3D成像,這樣用一個屏幕去拍攝,屏幕肯定是個平面,意識到是一個平面的,平面的肯定不是一個真的人。這個就是用立體的識別方式去排除平面人臉。
人臉識別的系統(tǒng)構(gòu)成
首先做一個分類,從對比形式來看,有1:1的識別系統(tǒng),1:N的識別系統(tǒng);從對比的對象來看,有照片的比對系統(tǒng)以及視頻的比對系統(tǒng);按部署形式的話,有私有部署,有云部署或者移動設(shè)備部署。
照片1:1的識別系統(tǒng)
1:1的識別系統(tǒng)最簡單,拿兩張照片,每一張照片去生成一個特征向量,然后去比一下這兩個特征向量是不是同一個人,就可以識別了。
照片1:N的識別系統(tǒng)
1:N的識別系統(tǒng),即判斷照片素材在不在一個樣本庫里。此樣本庫是預(yù)先準(zhǔn)備好的,可能會有白名單或者黑名單,里面有每個人的一張照片,拿這張照片生成了一系列的特征向量。這個作為一個樣本庫,用上傳的照片跟樣本庫里面的所有的特征去比,看跟哪個最像,就認(rèn)為他是這個人,這個是1:N的識別系統(tǒng)。
視頻1:1的識別系統(tǒng)
視頻1:1識別系統(tǒng),和照片的1:1系統(tǒng)類似,但是比對的對象不是照片,而是視頻流。拿到視頻流以后會做檢測,做追蹤,做質(zhì)量評估,等拿到合適的照片以后才去做比對。
視頻1:N的識別系統(tǒng)
視頻1:N適配系統(tǒng)和1:N照片的系統(tǒng)類似,只不過拿來做識別的是視頻流,同樣也是要做檢測、追蹤、質(zhì)量評估。
一般所謂系統(tǒng)構(gòu)成不一定是人臉識別系統(tǒng),各種AI系統(tǒng)大概都會如此。首先是計算資源層,在CPU或GPU上運(yùn)行,在GPU上運(yùn)行可能還有CUDA,CUDN等的支持。
其次是運(yùn)算工具層,包括深度學(xué)習(xí)前向網(wǎng)絡(luò)運(yùn)算庫、矩陣運(yùn)算庫和圖象處理工具庫。由于不可能每一個做算法的人都自己去寫數(shù)據(jù)運(yùn)算,因此都會用一些已有的數(shù)據(jù)運(yùn)算庫,例如TensorFlow或者M(jìn)XNET或者Caffe等都會提供,或者自己寫一套也是可以。
最后是應(yīng)用算法層,包括人臉檢測、特征點(diǎn)定位、質(zhì)量評估等等算法實(shí)現(xiàn),以上是大概的系統(tǒng)構(gòu)成。
審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4588瀏覽量
92505 -
檢測技術(shù)
+關(guān)注
關(guān)注
2文章
351瀏覽量
29048 -
人臉識別
+關(guān)注
關(guān)注
76文章
4002瀏覽量
81678
原文標(biāo)題:速收藏!萬字長文,科普人臉識別算法及系統(tǒng)
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論