有沒有夫妻相?刷一下臉就知道!

有沒有夫妻相?刷一下臉就知道!

來自專欄 Python中文社區

引言

煉丹的過程中一般是比較空閑的,刷手機的時候看到了這樣的信息。

只喜歡跟自己有「夫妻相」的人,怎麼辦??

www.zhihu.com圖標【健康】為啥會有「夫妻相」?科學的解釋來了?

mp.weixin.qq.com圖標

然後就想到,可否用Python來幫我們自動檢測「夫妻相」呢?於是花了大概10分鐘鼓搗了一下demo,就把過程記錄一下吧~

「夫妻相」指的是夫妻之間面容相似的現象。有研究認為:兩個人在一起生活得久了,表情動作彼此模仿,會越來越像。其實是因為大多數人都珍愛自己,看到跟自己相像的人格外順眼,從一開頭就是拿自己當範本選擇另一半。「夫妻相」的大抵意思是因為常常接觸,心靈相傾,習慣趨同,相同的作息、腸道菌落交換等相互影響,以致到了面容相像。

儘管上述描述在當今心理學、生物學方面有爭議,但是大多數人還是比較認同「夫妻相」這一說法的。

基於此,本文利用Python+深度學習+計算機視覺,幫你10分鐘打造一個「刷臉測試夫妻相」Demo出來。


相關術語

【非CS專業的童鞋可以略過該部分!】

【非CS專業的童鞋可以略過該部分!】

【非CS專業的童鞋可以略過該部分!】

本文主要涉及 Face Detection, Facial Feature Extraction, Deep Learning, Facial Landmarks Localization 相關的基礎知識。

因並非是做Research,而且我在文中也說了是「10分鐘打造」,對於 深度學習/計算機視覺 不熟悉的童鞋可以直接使用 pre-trained model(例如做人臉檢測就可以直接使用MTCNN,做人臉關鍵點定位就可以使用dlib),FaceNet抽取人臉深度特徵(當然,GPU不夠強的童鞋用傳統圖像特徵提取運算元如SIFT/LBP/HOG也是可以的,畢竟不是做Research,不需要那麼高的精度~)。想了解細節的童鞋請去閱讀MTCNN, FaceNet 的Paper,都是很棒的工作。在此就不詳細討論了。

當然,如果你有興趣去改造新的state-of-the-art演算法,還是去follow人臉識別相關的頂會Paper比較好~


夫妻相度量

  • 基於預訓練深度學習模型提取的特徵相似度表達 : Sim_{deep}=frac{f_a igodot f_b}{|f_a|*|f_b|}
  • 基於幾何特徵(Facial Landmarks)相似度表達:Sim_{geo}=sigma(frac{1}{n}sum_{i=1}^n||x_a^i-x_b^i||_2^2)
    • 其中, x_a^i 代表人臉a 在第i 維的特徵值。在這裡一共提取了10個特徵維度:臉部信息(寬度+高度)、兩眼之間距離、眉毛信息(寬度+高度)、眼睛信息(寬度+高度)、鼻子到眼睛中心垂直距離、嘴巴信息(寬度+高度)。
  • 人臉綜合信息特徵相似度表達: Similarity=lambda*Sim_{deep}+(1-lambda)*Sim_{geo}

數據採集

接下來就是採集正負樣本,從而來確定超參數 lambda 的過程。其中,對正負樣本的定義如下:

正樣本:為大眾所熟知的、模範夫妻代表(例如梁家輝和江嘉年,周杰倫和昆凌)。

負樣本:為大眾所熟知的、有出現「時常爭吵、家暴、出軌」等現象的夫妻代表(例如......例子太多,就不例如了)。

編寫Python爬蟲採集大量圖片,利用MTCNN框選人臉區域,dlib做68點的facial landmarks localization。

得到的例子如下:

Fig. 1 原始圖片

Fig. 2 檢測後圖片

藍色框框代表男性,紅色框框代表女性。(註:性別識別部分來源於正在水的一篇Multi-Task Learning的Paper,暫時先不作介紹,直接拿來用就行了~)

演算法檢測出杰倫和昆凌的夫妻相指數為0.77。

當然,你也可以測一下自己和 男(女)朋友 的夫妻相指數。

不過前提是,首先......

備註:夫妻相匹配演算法是拍腦袋想的,因不是專門做人臉識別方向的research,所以不清楚該領域是否已經有SOA的演算法存在。後期會不斷更新噠~


聲明

「夫妻相檢測」可以看作是一個 Facial Feature Representation Extraction + Metric Learning 問題,因此關鍵就是如何獲取對人臉更加 discriminative 的特徵表達,以及更好的相似度度量。

本文純屬娛樂,若要追求學術上的嚴謹,請閱讀CVPR/ICCV/ECCV/ICLR/NIPS上的Paper。

BTW, 有啥好的idea歡迎留言~


Reference

  1. King D E. Dlib-ml: A machine learning toolkit[J]. Journal of Machine Learning Research, 2009, 10(Jul): 1755-1758.
  2. Zhang K, Zhang Z, Li Z, et al. Joint face detection and alignment using multitask cascaded convolutional networks[J]. IEEE Signal Processing Letters, 2016, 23(10): 1499-1503.
  3. Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.
  4. Liu Y. Distance Metric Learning: A Comprehensive Survey[J]. Michigan State Universiy, 2006.
  5. Similarity learning
  6. 夫妻相(夫妻之間面容相似的現象)_百度百科

推薦閱讀:

TAG:人臉識別 | Python | 深度學習DeepLearning |