虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  神经网络告诉我,谁是世界上最「美」的人?

神经网络告诉我,谁是世界上最「美」的人?

时间:2024-01-24

魔镜魔镜告诉我,谁是世界上最美的女人?这句伴随童年的话也有现实版哦~神经网络可以预测人脸颜值,这方面也出现了不少研究。今年年初华南理工大学的研究者发布论文,并公开了数据集SCUT-FBP5500。本文作者Dima Shulga「复现」了该论文,并用自己的照片做了试验。

数月前,华南理工大学发布了关于「颜值预测」的论文和数据集,数据集包括5500人,每人按颜值魅力打分,分值在1到5分之间。

  • 论文地址:https://arxiv.org/abs/1801.06345

  • 数据集地址:https://github.com/HCIILAB/SCUT-FBP5500-Database-Release

数据集中还有很多名人。Julia Robert的这张照片得到了3.78的平均分:

以色列名模Bar Refaeli这张照片得分3.7:

似乎分也不高嘛,但是3.7的得分意味着比数据集中大约 80%的人要好看。

数据集作者利用该数据集训练多个模型,尝试根据人脸照片预测这个人的魅力。

本文我将复现他们的结果,还要看一下我的吸引力怎么样。

原始论文实现了很多不同模型,包括具备人工制作特征的经典ML模型和3个深度学习模型:AlexNet、ResNet18、ResNext50。

我想尽可能简单地呈现(不想从头实现和训练整个resnet网络),于是打算通过精调现有模型来执行该工作。keras中有一个模块叫做applications,包含不同预训练模型。其中一个是resnet50。不幸的是,keras.applications中没有ResNet18、ResNext50,因此我无法完全复现该研究,不过使用resnet50复现程度应该很接近。

fromkeras.applicationsimportResNet50ResNet是微软开发的深度卷积神经网络,曾赢得 2015ImageNet竞赛冠军。

我们在keras中初始化resnet50模型时,使用ResNet50架构创建了一个模型,同时下载了在ImageNet数据集上训练好的权重。

论文作者没有提到他们训练模型的具体细节,因此我尽力去做。我想移除最后一层(softmax 层),添加一个没有激活函数的Dense层,来执行回归。

resnet = ResNet50(include_top=False, pooling=’avg’)
model = Sequential()
model.add(resnet)
model.add(Dense(1))
model.layers[0].trainable = False
print model.summary()
# Output:
 Layer (type)                 Output Shape              Param #    ================================================================= resnet50 (Model)             (None, 2048)              23587712   _________________________________________________________________ dense_1 (Dense)              (None, 1)                 2049       ================================================================= Total params: 23,589,761
Trainable params: 23,536,641
Non-trainable params: 53,120

你可以看到,我先使第一层(resnet 模型)不可训练,这样我只需要训练2049个参数,而不是23,589,761个。

我计划训练最后的Dense层,然后使用较小的学习率训练整个网络。

model.compile(loss='mean_squared_error', optimizer=Adam())
model.fit(batch_size=32, x=train_X, y=train_Y, epochs=30)

之后,我改变第一层的状态使之可训练,编译并拟合模型,来进行另外30个epoch。

这里,train_X是照片,即 numpy 形态数组 (350, 350, 3),train_Y是标注图像的得分。

结果:

该论文使用2种技术训练模型:5-fold交叉验证、60%-40%的训练集-测试集分割。论文作者使用皮尔逊相关系数(PC)、平均绝对误差(MAE)和均方根差(RMSE)对结果进行衡量。5-fold 交叉验证的结果如下:

60%-40% 的训练集-测试集分割结果如下:

我将使用80%-20%的训练集-测试集分割,类似执行他们的交叉验证的1-fold。结果如下:

RMSE: 0.301799791952313
MAE: 0.2333630505619627
PC: 0.9012570266136678

相当不错。此外,查看分数散点图和直方图很方便:

原始分数分布(正态):

预测分数分布(正态):

结果看起来不错。现在我们来看下这个深度神经网络给我打几分吧。我一开始用了这张照片:

得分2.85,我只比该数据集中 52%的人好看……不得不说有点失望,我原本以为结果比这好,于是我决定再试试。

我拍了很多照片,最终有一张得了3.15分,这意味着我比该数据集中64%的人更好看。

好多了~老实讲我还是想得更高分~ :)

最后说明一下,我使用Google1Colaboratory构建和调整模型,它提供Python notebook,可以免费使用GPU!

论文:SCUT-FBP5500: A Diverse Benchmark Dataset for Multi-Paradigm Facial Beauty Prediction

论文链接:https://arxiv.org/abs/1801.06345

文章来源:数据与算法之美


IEEE Spectrum

《科技纵览》

官方微信公众平台



往期推荐

反思 | 神经网络的心灵

深度学习玩转模仿游戏:通过模仿人类,

循环神经网络获得了若干惊人的能力

重大突破!清华研发出可支持神经网络的芯片