你好,游客 登录
背景:
阅读新闻

基于深度学习的颜值打分器:来测下你的颜值有多少分

[日期:2018-04-24] 来源:公众账号  作者: [字体: ]

——丹尼尔·哈默迈什;《颜值和劳动力市场研究》

在这个『颜即正义』的年代里,长得好看是多么的重要!

还记得中学时学过的《邹忌讽齐王纳谏》么:

邹忌身高八尺多,而且身材容貌光艳美丽。有一天早晨他穿戴好衣帽,照着镜子,对他的妻子说:「我与城北的徐公相比,谁更美丽呢?」他的妻子说:「您美极了,徐公怎么能比得上您呢!」城北的徐公,是齐国的美男子。邹忌不相信自己会比徐公美丽,于是又问他的小妾说:「我和徐公相比,谁更美丽?」妾说:「徐公怎么能比得上您呢?」第二天,有客人从外面来拜访,邹忌和他坐着谈话。邹忌问客人道:「我和徐公相比,谁更美丽?」客人说:「徐公不如您美丽啊。」又过了一天,徐公前来拜访,邹忌仔细地端详他,自己觉得不如他美丽;再照着镜子看看自己,更觉得远远比不上人家。晚上,他躺在床上想这件事,说:「我的妻子认为我美,是偏爱我;我的小妾认为我美,是惧怕我;客人认为我美,是想要有求于我。」 然后邹忌就用深度学习制造了一台『颜值打分器』用来对颜值进行公正地打分。

当然最后那句话是我胡扯的。不过假设计算机真的有审美能力的话,你觉得自己的颜值能有多少分呢?

华南理工大学在今年二月份发布了 SCUT-FBP5500-Database 数据集以及论文 (链接: https://arxiv.org/abs/1801.06345),该数据集被用于 Facial (颜) Beauty (值) Prediction (预测)。

数据集中包含了一共 5500 张亚洲人种和高加索人种的脸部正面照片,以及 60 个人对这些照片的打分 (从 1 到 5)

我们将在这个数据集上训练一个回归模型,对新的人脸照片实现颜值预测的功能。

其实网上已经有篇文章实现了,不过并没有发布出具体的代码和步骤:

https://towardsdatascience.com/how-attractive-are-you-in-the-eyes-of-deep-neural-network-3d71c0755ccc

我将根据这篇博客实现完整的数据预处理、分析、训练模型、以及一个简单的应用模型的 Web demo 应用的全过程,代码在文章最后给出:

数据预处理

从 https://github.com/HCIILAB/SCUT-FBP5500-Database-Release 所提供的链接下载数据集压缩包,解压后可以看到,5500 张图片在 Images 目录里,而打分结果在 All_Ratings.xlsx 这份表格里,这里记录的是 60 个人对每一张照片的评分,就是说每张图片有 60 个评分,我们需要得到一个平均分作为照片的最终得分:

 

接下来看下得分分布情况:

 

可以看到有超过一半的评分都在 2~3 分这个「路人」阶段,「 盛世美颜」(>4) 或者「此颜差矣」 (<2) 都只是少数。

接下来我们将所有照片都转成 numpy.ndarray 格式,而 target 则是这张照片的评分,这里要注意下机器的内存使用状况,x_total 需要用将近 12G 的内存 (大概),如果机器内存没有 20G 以上,可以先对所有照片进行 resize 成比较小的尺寸。

 

然后对数据进行分隔,训练集 3520 个,训练中的验证集 880 个,测试集 1100 个。

 

应用 ResNet50 预训练模型

博客中使用了 ResNet50 来进行 fine tune,我们照着做:

先加载 Keras 的 ResNet50 预训练模型,去掉最后的 softmax 层,然后再加上一层 dense 全连接层,将 ResNet50 模型的其余参数设为不可训练,也就是先直接训练最后的 dense 层的参数;因为是做回归,所以损失函数我们使用 mse:

 

30 个 epochs 之后,loss 下降到 0.13 左右:

但是查看数据分布,还是一团乱麻:

然后根据文章里面的做法,将 ResNet50 的参数设置为可训练,然后再训练 30 个 epochs,奇迹发生了:

 

需要说明的是,我设置了 checkpoint callback,将验证集的 loss 设为监控项,保存该值最低的模型,因为其实几轮之后 val_loss开始逐渐变大,可能是过拟合了;另外可以根据显卡内存的大小,调整下 batch_size 参数,比如我就从 32 改成了 8,才没有耗尽内存。

可以看到,在测试集上效果还算不错。

以下是部分测试集的结果:

新照片预测

有了模型,我们就可以用来预测新的照片了:

Web Demo

简单用 Flask 搭建一个 Demo 应用,用户上传照片,然后后台对这张照片执行预测操作,并返回相应的评分:

杨天宝两张照片的对比,看来模型还是有一定的审美能力的。

数据偏见

监督学习中的任何数据集,都或多或少地存在『数据偏见』的情况。比如 FBP5500 数据集,数据中只包含了亚洲和欧洲人的评分数据,如果用来预测黑人兄弟的颜值,可能不太准确;另外该数据集也只代表了参与评分的 60 个人 (很有可能是华南理工的学生) 的审美观,有些妇孺皆知的明星的照片,可能拍得不大好看,但是有先入为主的主观判断给了高分,这种情况也是存在的。

代码地址

https://github.com/jackhuntcn/facial_beauty_prediction

收藏 推荐 打印 | 录入:Cstor | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款