有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

zhaobig 2018-10-27

“夫妻相”指的是夫妻之间面容相似的现象。有研究认为:两个人在一起生活得久了,表情动作彼此模仿,会越来越像。其实是因为大多数人都珍爱自己,看到跟自己相像的人格外顺眼,从一开头就是拿自己当范本选择另一半。“夫妻相”的大抵意思是因为常常接触,心灵相倾,习惯趋同,相同的作息、肠道菌落交换等相互影响,以致到了面容相像。

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

尽管上述描述在当今心理学、生物学方面有争议,但是大多数人还是比较认同“夫妻相”这一说法的。

基于此,本文利用Python+深度学习+计算机视觉,帮你10分钟打造一个“刷脸测试夫妻相”Demo出来。

夫妻相度量

基于预训练深度学习模型提取的特征相似度表达 :

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

基于几何特征(Facial Landmarks)相似度表达:

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

其中x a i 代表人脸a 在第i 维的特征值。在这里一共提取了10个特征维度:脸部信息(宽度+高度)、两眼之间距离、眉毛信息(宽度+高度)、眼睛信息(宽度+高度)、鼻子到眼睛中心垂直距离、嘴巴信息(宽度+高度)。

人脸综合信息特征相似度表达:

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

数据采集

接下来就是采集正负样本,从而来确定超参数

的过程。其中,对正负样本的定义如下:

正样本:为大众所熟知的、模范夫妻代表(例如梁家辉和江嘉年,周杰伦和昆凌)。

负样本:为大众所熟知的、有出现“时常争吵、家暴、出轨”等现象的夫妻代表(例如......例子太多,就不例如了)。

编写Python爬虫采集大量图片,利用MTCNN框选人脸区域,dlib做68点的facial landmarks localization。

得到的例子如下:

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

有没有夫妻相?刷脸就知道!Python来帮我们自动检测“夫妻相”

Fig. 2 检测后图片

蓝色框框代表男性,红色框框代表女性。(注:性别识别部分来源于正在水的一篇Multi-Task Learning的Paper,暂时先不作介绍,直接拿来用就行了~)

算法检测出杰伦和昆凌的夫妻相指数为0.77。

当然,你也可以测一下自己和 男(女)朋友 的夫妻相指数。

声明

“夫妻相检测”可以看作是一个 Facial Feature Representation Extraction + Metric Learning 问题,因此关键就是如何获取对人脸更加 discriminative 的特征表达,以及更好的相似度度量。

本文纯属娱乐,若要追求学术上的严谨,请阅读CVPR/ICCV/ECCV/ICLR/NIPS上的Paper。

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

想要学习Python。关注小编头条号,私信【学习资料】,即可免费领取一整套系统的板Python学习教程!