神经网络告诉我,谁是世界上最「美」的人?
「魔鏡魔鏡告訴我,誰是世界上最美的女人?」這句伴隨童年的話也有現實版哦~神經網絡可以預測人臉顏值,這方面也出現了不少研究。今年年初華南理工大學的研究者發布論文,并公開了數據集 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 層,來執行回歸。
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.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。結果如下:
MAE: 0.2333630505619627
PC: 0.9012570266136678
相當不錯。此外,查看分數散點圖和直方圖很方便:
原始分數分布(正態):
預測分數分布(正態):
結果看起來不錯。現在我們來看下這個深度神經網絡給我打幾分吧。我一開始用了這張照片:
得分 2.85,我只比該數據集中 52% 的人好看……不得不說有點失望,我原本以為結果比這好,于是我決定再試試。
我拍了很多照片,最終有一張得了 3.15 分,這意味著我比該數據集中 64% 的人更好看~
好多了~老實講我還是想得更高分~ :)
最后說明一下,我使用 Google Colaboratory 構建和調整模型,它提供 Python notebook,可以免費使用 GPU!
論文:SCUT-FBP5500: A Diverse Benchmark Dataset for Multi-Paradigm Facial Beauty Prediction
論文鏈接:https://arxiv.org/abs/1801.06345
編譯:機器之心
參與:路、劉曉坤
總結
以上是生活随笔為你收集整理的神经网络告诉我,谁是世界上最「美」的人?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 熬夜族又一噩耗:“早死”风险更高!
- 下一篇: 一个人开始废掉的3种迹象