支付寶刷臉——我們進入了一個怎樣的刷臉時代

轉自http://blog.csdn.net/u013088062/article/details/52254713

權聲明:本文爲博主原創文章,轉載時麻煩註明源文章鏈接,謝謝合作
  隨着2016年6月份左右支付寶的一次更新,其中的刷臉功能終於從幕後走到前臺,這次我就借支付寶上的刷臉系統,來聊聊人臉識別的那些事兒。事先聲明,這是一篇科普小文章,言語輕鬆。

  一、簡單界面蘊含不簡單道理

  下面是支付寶刷臉過程中的一個界面(截圖來自網絡):

  這個刷臉界面主要元素有三個:臉部框、“眨眨眼”、一張臉。接下來我們逐一介紹。

  1、臉部框——人臉監測與人臉識別不可兼得

  支付寶刷臉的一個基本要求就是需要用戶賞個臉,並且要把臉賞在界面的指定框線內,這樣做實際上是節省了一個非常大的算法開銷:人臉檢測。

  首先說明一個問題,就是人臉檢測和人臉識別是完全不同的兩個領域,這也是人臉識別檢測初學者容易混淆的兩個概念。人臉檢測重在檢測,目標是在複雜場景中把人臉區域框出來,至於能不能正確識別,那人家不管;人臉識別重在識別,目標是確定眼前這張臉是誰(人臉識別)或者不是誰(人臉認證),至於怎麼分割得到這張臉,這就是人臉檢測的事兒了。研究人臉檢測的學者不會關心怎麼識別人臉的問題,同樣人臉識別的研究者也不會關心怎麼分割檢測人臉的問題。搞人臉識別,默認就是人臉檢測已經完成了,直接拿已經截好的人臉圖像做訓練做測試就成。想當初我剛剛接觸人臉識別方面的研究生課題,曾花了好長時間去研究怎麼製作訓練樣本,怎麼把人臉分割的完美,後來發現實在是一大彎路。

  但話說回來,人臉檢測和人臉識別雖然在理論研究上分屬於不同領域,但在實際應用中去不能分家。肯定是先人臉檢測分割出人臉,在人臉識別確定臉是誰的,但有一個問題,要想準確快速的進行人臉檢測與人臉識別,算法運算的開銷兩個簡直不相上下,相對於手機平臺都非常大。於是無外乎以下兩種解決方式:

  方案一:人臉檢測和人臉識別同時運行,打造全智能平臺。

  這種方案聽起來很酷炫,什麼都讓機器來做,先檢測分割人臉再識別人臉,但是這樣做出的系統性能卻不理想,假如人臉檢測的成功率爲0.9,人臉識別的成功率也是0.9,那麼整個系統正確檢測人臉再加上正確識別人臉的成功率只有0.81;性能大打折扣,運算開銷卻翻了一番,目前來說不可取。

  這種方案另外一個致命的問題就是算法性能。對於手機端人臉識別程序來說,真正的人臉識別算法可以放到服務器端來做,在手機端只需簡單的評估一下圖像質量,然後就把採集的圖像放到服務器上,費時的事兒讓服務器做就行,最後只需把人臉識別的記結果(一個標籤而已)再傳給手機端就行,網絡流量什麼的都不是問題。而人臉檢測則不行,人臉檢測的整個階段必須都在手機端進行,就算我們能夠找到檢測率達99.99%的人臉檢測算法,但卻不一定能移植到手機上。

  方案二:外加限制條件,簡化人臉檢測流程

  這種做法在目前的應用環境中明顯值得一試,支付寶就是這樣做的。提前預定義一個人臉框,很友好的要求人們把要刷的臉賞在裏面,可以說當我們把臉放在人臉框裏的時候,就已經幫助手機系統完成了人臉檢測,因爲我們已經提前告訴了程序“框框裏面的圖像就是人臉,你專心做識別就好”,程序接下來要做的就是對圖像的質量(光照是否均勻等等)把把關,做一些人臉檢測的輔助工作,然後就把人臉圖像傳給服務器就完事兒了,坐等服務器返回的識別匹配結果即可。

  這裏有一點我想多說兩句,就是在圖像檢測、圖像識別過程中我們並不反對人爲的添加外界輔助條件、人爲的創造適宜的檢測環境,並且鼓勵使用好的、合適的輔助方法。一個典型的例子就是在基於圖像的工業異常檢測中,往往需要在傳送帶、生產線等地方外加一個穩定的光源,爲異常檢測創造好的環境。有時候稍稍進行一點人爲干預,就能大幅降低算法研究以及硬件運算上的成本,並且能夠得到更加穩定的檢測識別結果,何樂而不爲呢?沒有萬能的算法,但也沒有解決不了的問題。對於支付寶刷臉來說,人臉檢測可能就是一個技術上的難點,因爲人們可能會在任意時間、任意地點就拿出手機刷個臉,圖像的光照、背景環境十分惡劣,想要在這種極度不可控條件下精準的完成人臉檢測確實難度很大,於是我們迂迴了一下,添加了一個人臉框,讓用戶協助我們解決了這個難題,並且也沒降低多少體驗度。

  2、眨眨眼——活體檢測

  “活體檢測”這句話聽起來蠻嚇人的,說白了就是確認攝像頭前面賞臉的是否是一個真正的活人,而非一張照片、設置一段視頻什麼的。在刷臉過程中,系統會提示用戶進行一些指定動作,例如“眨眨眼”、“向某個方向轉頭”等等。這可並不是一般人眼中的無稽之談,而是人臉識別在實際應用中防僞造非常重要的一步。假如有人拿一張當事人的照片來刷臉,那照片是不會眨眼的,所以能防僞;更極端的假設,有人拿了一段包含當時人頭像的視頻來僞造,視頻中的人臉雖然能動,但卻不能做出指定動作(如事先錄好的眨眼視頻,無法應對轉頭命令等等),而且由於顯示屏的反光問題,目前想針對顯示屏顯示的圖像進行人臉識別還是很難做到的,也沒人去研究。

  二、人們對刷臉過程中存在的疑慮

  畢竟人臉識別在實際應用中算是一項比較新的技術,相對於已有的指紋識別、虹膜識別等已經廣泛應用的識別技術來說,還沒有被廣大人民所接受。相應的在實際使用中人們也會對人臉識別的安全性、可行性產生各種各樣的疑慮,接下來我們就一一解釋一下人臉識別在實際應用過程中可能會遇到的常見問題和挑戰。

  1、人臉識別和人臉認證

  這是一個人臉識別研究領域的科班問題,也是目前人臉識別算法研究的兩個不同方向。簡單來說,人臉識別是判斷當前這張人臉圖像是誰的,人臉認證是判斷當前這張人臉圖像是不是誰的。之所以在這裏提這兩個概念,是因爲在實際的刷臉系統中,往往都是使用的人臉認證,即用來判斷當前人臉是不是屬於某個用戶,而無需識別出當前人臉具體屬於哪個用戶的。人臉認證屬於二分類問題(“是”與“不是”),而人臉識別則屬於多分類問題(有多少種待識別人臉就需要識別多少類)。就目前的算法可靠性來說,人臉認證要一定程度上優於人臉識別,所以在實際應用中人臉認證要走的更遠。用一句話來總結一下人臉認證,那就是“把對的識別錯了沒關係,再多刷兩次就行了,但把錯的識別成對的,後果就很嚴重”。

  2、刷臉過程中存在的挑戰和干擾因素

  俗話說:沒有萬能的算法。當今人臉識別技術雖然發展迅速,但也不是沒有軟肋。在刷臉過程中,最怕圖像的質量太差,導致有過多的噪聲干擾。這裏直接說噪聲干擾什麼的顯得太籠統,人臉識別過程中的干擾主要有光照、表情、人臉朝向等干擾因素,如下圖所示:

  以上這幾種情況的干擾會嚴重影響刷臉過程中的準確率,這也是爲什麼支付寶在刷臉時提示我們要“正對攝像頭,保證光線充足”。說實話,人臉識別算法是很矯情的,光照不均了效果會差,腦袋方向不正了效果也會差,臉上有表情了效果還會差。如果能夠儘可能高的提高算法對於這些干擾的適應性(也就是平常所說的算法魯棒性),那就可以把它拿出來賣錢了,face++就是一個典型的例子。

  三、目前刷臉過程中那些問題還需解決

  還是那句話,沒有萬能的算法。刷臉技術雖然相對於以前已經取得了突破性的進展,但在算法研究和實際應用階段依然還存在一些沒有解決但又十分棘手的難題,這裏就簡單例舉幾個。

  1、證件照與當前實際人臉圖像間的差異

  在刷臉過程中,本質上就是拿當前這張人臉圖像與數據庫中預存的人臉圖像進行比對(只是比對的過程十分複雜,目前主流的都是用DeepLearning來做),來確定當前的刷臉者是誰。這也就意味着需要事先採集用戶的權威人臉照片作爲存根,放在數據庫中以備刷臉比對之用。那麼如何獲取能夠代表用戶本人的具有權威甚至法律效率的人臉照片呢?對於一些小的刷臉系統,如各個公司的門禁考勤、小區的門禁系統等等,其用戶人數也就幾百到一千人之間,這種數量級的應用在採集比對樣本的過程中完全可以讓每個刷臉用戶提交一張自己近期的免冠照片,畢竟人少好管理。相比之下像各大銀行、支付寶等電商等機構要採集用戶的權威人臉圖像比對樣本可就不是特別容易了。首先是用戶羣體龐大,一般都是幾十萬至上百萬人,讓大家每人提交照片工作量非常大;再者就是這些機構的業務都和金錢相關,對安全性要求極強,對應的要求用戶提供的比對樣本也要一定程度上具有法律效率,不易僞造。那麼話說回來,什麼樣的人臉圖像樣本既容易採集,又能夠作爲金錢交易的憑證呢?那就是身份證。

  的確,用身份證上的人臉圖像作爲預留比對樣本既容易採集(甚至說可以不用採集,因爲這些電商、銀行機構在用戶註冊過程中基本上已經拿到用戶的身份證圖片了),又具有權威性。但問題是每個人的身份證都會用十幾年,這將直接導致用戶當前的相貌與當年身份證上留存的證件照避免不了的會有較大差異,如何在存在這種差異的情況下仍然能夠將用戶現在的人臉照片與若干年前的身份證圖片進行準確匹配,這是理論上的一個難點,不過值得慶幸的是支付寶所用的刷臉系統貌似已經把這個問題解決的差不多了。

  2、相似臉問題

  有一個問題值得思考,那就是對於真正意義上相似的兩張臉,例如同卵雙胞胎,人眼都很難分辨,那刷臉系統會怎麼解決呢?答案是:目前沒法解決。刷臉刷臉,我們看的只是臉,臉一樣了(或者說是高度相似),刷臉系統就會認爲人也是一樣的,因此刷臉認證大多數是一種輔助識別手段。當然我們如果真要在這個問題上較真的話,那麼世界上有沒有兩個人的臉是百分之百相同的呢?答案肯定是沒有,至於人臉識別算法能夠識別到什麼樣的精度,區分出什麼樣相似程度的相似臉,這就要靠學者們的努力了。

  3、準確率問題

  這個問題無需多說,坦白的講,現階段人臉識別的準確率還趕不上指紋識別。這也就是爲什麼支付寶涉及現金相關的支付操作仍然是以密碼和指紋爲主,沒有放權給刷臉系統。具體將來怎麼發展,還需要看人臉識別領域的算法研究進展如何。

  四、漫談人臉識別

  說了這麼多刷臉的東西,其實最本質的還是歸功於人臉識別算法的突飛猛進。從90年代的子空間方法(直接算歐氏距離廣義上也算一種子空間),到如今研究得如火如荼的深度學習方法,人臉識別的算法一直在發展,準確率、魯棒性一直在提升,這也促使刷臉系統從科幻電影裏真正走到了我們的生活之中,在這篇文章的最後,簡單聊聊人臉識別發展歷程中那些具有里程碑意義的東西。

  1、子空間中的人臉識別——空間映射的變換魔法

  子空間人臉識別可以說是最早的、理論相對系統的人臉識別算法,最具代表性的是當時提出的PCA(Eigenface)和Fisher(Fisherface)。子空間的精髓就是映射,原始圖像可以看成存在於基本的高維歐氏空間(有多少像素就是多少維)。在基本歐氏空間直接度量距離效果不佳,那就通過某種映射方式將圖像映射到別的子空間去,不同的映射方式會構建出不同的映射子空間,在映射過程中維數可升可降。PCA是一種映射方式,Fisher是一種映射方式,核函數也算一種映射方式,流形呢?也算,還有一種終極的映射方式,那就是支持向量機。在這個子空間不同類樣本間不易區分,在別的子空間就有可能更容易區別,找到一個易於區分不同類樣本的維度空間,便是子空間方法的目的所在。

  2、幾何形態特徵的人臉識別——可見特徵的構造大賽

  在人臉識別研究過程中,人們從單純的像素映射,開始向人爲構造特徵的方向轉變。在這個階段,人們更加註重人臉圖像中的相對宏觀的幾何特徵,更傾向於利用像素之前存在的特殊關係來描述人臉。人們對原始人臉圖像中的像素進行重組,計算它們、抽象它們,在它們的基礎上再構造出更具體、特性更顯而易見的特徵,然後再拿這些構造出的特徵去計算相似度。在子空間階段,特徵提取的概念還很模糊,子空間既算是特徵(如PCA算是主成分特徵),又可以看成一種度量方法;而在幾何形態特徵研究階段,人們越來越意識到特徵提取相對於圖像識別的重要性,“特徵提取+模式分類”的模式識別框架正式形成。在這個階段,人們熱衷於去構建特徵,去構建出好的、描述能力強、特性突出的特徵對圖像進行重組、進行再表示,這也衍生出了當時極具代表性的諸如LBP、Shift、Gabor等特徵描述子,極大的提高了圖像識別算法的性能。不過在這個時期分類器方面的研究進展則相對緩慢,基本上是支持向量機一統天下。

  3、稀疏表示人臉識別——面向數據學習的里程碑

  在LBP、Shift、Gabor這些高效特徵描述子橫行天下的時候,很多學者都認爲,圖像像素本身包含的信息雖然最全面(任何特徵提取都會丟失一定的數據信息),但像素數目龐大、信息過於冗餘、無規律可循,因此當時很少有算法會直接在圖像像素數據層面上做操作。然而隨着稀疏表示理論的提出,指明瞭圖像的原始像素數據在人臉識別中所起的重大作用。在稀疏表示領域研究中一個里程碑意義的文章:《Robust Face Recognition via Sparse Representation》,這篇文章裏對稀疏表示介紹得十分詳細,是稀疏表示方面論文中必定引言的一篇文獻。稀疏表示作爲一種面向數據學習的分類識別方法,其核心是最優化問題的求解,算法相對較爲複雜,效果卻出奇的好。畢竟在不提取任何特徵的情況下,就能把人臉識別的正確率提高到95%以上,在當時看來確實有點難以相信。

  4、深度學習人臉識別——現階段的最大贏家

  目前最火的人臉識別算法是基於DeepLearning的。由於它實在太火了,一兩句話說不清楚,所以我之前專門寫了一篇博文進行介紹:深度學習卷積神經網絡大事件一覽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章