專 欄
❈LucasX,Python中文社区专栏作者,Applied Machine Learning。
❈
前言
机器学习是当今最性感的技术,平常做Research、写Paper时应当严谨;但是在平常的生活中,我一直在想,机器学习可以用来做哪些有意思的事情?
上一篇:Python人工智能鉴黄师的自我修养,就是这样一种场景。本文写作的初衷也是一样,即“利用机器学习做一些好玩的事情”。 本篇主要介绍 “机器学习带你从人群中一眼找到颜值最高的小姐姐”。
声明:若要追求学术上的严谨,请阅读《Pattern Recognition and Machine Learning》、《The Elements of Statistical Learning》、《Deep Learning》;以及CVPR、ICCV、ECCV、NIPS、ICML、KDD等等顶会上的Paper!!!
正文
设想一下这样的场景,我们拍摄了一张包含许多人脸的照片,那么我们如何从这些照片中找到颜值最高的那位呢?就像这样:
如果你对计算机视觉或机器学习有一定的了解,那么你肯定知道刚刚描述的场景一共包括人脸检测 和 回归分析 这两个问题了。
即:首先框选出一张照片中的所有人脸;然后返回这些人脸对应的颜值得分。
下面切入正题吧,要训练机器学习模型,首先需要收集大量标注数据。前段时间我发现 华南理工大学-人机交互智能实验室 做过 Face Beauty Prediction 之类的工作,并且公布了他们实验室标注的数据,在此表示感谢!该数据集的颜值得分为1~5分, 1分表示颜值最低,5分表示颜值最高!
注:该数据集仅包含亚洲人,若你将训练好的模型用来预测欧美或者非洲人的颜值,可能会产生偏差!
因为样本量总数比较小,去train一个深度模型似乎没有必要。因此我用了HOG来提取人脸图像特征,然后训练回归模型。目前尝试了 Linear Regression、Lasso、Ridge Regression、Elastic Net、Support Vector Regressor 以及 Bayesian Ridge Regression 等回归模型。根据在测试集上的结果,我发现 Ridge Regressor 表现最佳,Pearson Correlation达到了0.7246!
对于人脸检测部分,Faster-RCNN, YOLO, SSD 等等这些都是非常成熟的检测模型了;尤其对于人脸检测,也有很多论文单独做了 face detector,在此不赘述了,以后有机会专门再写 object detection 相关的吧~在这里为了方便,我直接用的dlib做人脸检测。
我们保留训练后的模型二进制文件,在以后的测试中加载该文件,进行预测:
算法检测出了每一张脸,并给出了其对应的颜值评分。可以看到,机器学习认为右侧第二位美女的颜值是最高的,为 4.11118049 分!
注意!!前方开启高能预警!!! 注意!!前方开启高能预警!!! 注意!!前方开启高能预警!!!
我们在电视或海报上,看到的明星,往往都是 妆后+顶级修图师 处理过的照骗。而 素颜 才是评判颜值的真正标准。因此编写网络爬虫抓取百度图片的明星证件照,对部分明星素颜照进行颜值打分。结果如下:
可以看到,算法对刘诗诗的素颜照打出了1.52分。
可以看到,算法对唐嫣的素颜照打出了1.64分。
可以看到,算法对杨幂的素颜照打出了1.63分。
看来,三姐妹还是糖糖的颜值略胜一筹啊~
算法对黄圣依的素颜照打出了2.26分。根据我爬取的所有明星素颜照得分来看,超过2.2的素颜已经是很高了~
范爷以2.7分暂时位列榜首!给冰冰打call!!
算法给出李小璐的得分为2.51分!
算法给出赵丽颖的得分为1.98分!
注:目前训练集样本不够多,我用最新的深度学习算法测试的结果Pearson Correlation达到了0.78。如果你能够喂给算法更多的标记样本,效果肯定是会大幅度提高的!
声明:本文所有图片均来作者发表Paper的benchmark以及互联网。若有侵权,请告知予以删除!