专栏名称: 数据与算法之美
用数据思维解决意想不到的问题!
目录
相关文章推荐
51好读  ›  专栏  ›  数据与算法之美

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

数据与算法之美  · 公众号  · 算法  · 2018-04-21 17:50

正文


「魔镜魔镜告诉我,谁是世界上最美的女人?」这句伴随童年的话也有现实版哦~神经网络可以预测人脸颜值,这方面也出现了不少研究。今年年初华南理工大学的研究者发布论文,并公开了数据集 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 复现程度应该很接近。


from keras.applications import ResNet50


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


我们在 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。








请到「今天看啥」查看全文