神經網路告訴我,誰是世界上最「美」的人?

選自TowardsDataScience,作者:Dima Shulga,機器之心編譯。

「魔鏡魔鏡告訴我,誰是世界上最美的女人?」這句伴隨童年的話也有現實版哦~神經網路可以預測人臉顏值,這方面也出現了不少研究。今年年初華南理工大學的研究者發布論文,並公開了數據集 SCUT-FBP5500。本文作者 Dima Shulga「復現」了該論文,並用自己的照片做了試驗。

數月前,華南理工大學發布了關於「顏值預測」的論文和數據集,數據集包括 5500 人,每人按顏值魅力打分,分值在 1 到 5 分之間。

  • 論文地址:arxiv.org/abs/1801.0634
  • 數據集地址:github.com/HCIILAB/SCUT

數據集中還有很多名人。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 = Falseprint 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% 的人更好看~

好多了~老實講我還是想得更高分~ :)

最後說明一下,我使用 Google Colaboratory 構建和調整模型,它提供 Python notebook,可以免費使用 GPU!

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

論文鏈接:arxiv.org/abs/1801.0634

摘要:顏值預測(facial beauty prediction,FBP)是使人臉魅力評估達到人類感知程度的重要視覺識別問題。為了解決該問題,不同的數據驅動模型,尤其是當前最優的深度學習技術被引入,基準數據集成為實現 FBP 的必要因素。之前的研究將顏值識別作為一個特定的分類、回歸或排序的監督學習問題,表明 FBP 本質上是一個具備多個範式的計算問題。但是,大部分 FBP 基準數據集是在特定的計算約束下構建的,這限制了在該數據集上訓練的模型的性能和靈活性。本論文中,我們認為 FBP 是一個多範式的計算問題,並提出一種新的多元化基準數據集 SCUT-FBP5500,來實現多範式顏值預測。該數據集共有 5500 個人臉正面照片,這些照片具備不同屬性(男性/女性,年齡等)和不同標籤(面部地標、顏值得分(1~5)、顏值得分分布),允許具備不同 FBP 範式的不同計算模型,如基於外表/身材的亞洲人/高加索人的男性/女性的顏值的分類/回歸模型。我們使用不同的特徵和預測器組合、不同的深度學習方法評估 SCUT-FBP5500 數據集,結果表明在該數據集上 FBP 有所改進,且具備潛在應用。

原文鏈接:towardsdatascience.com/

推薦閱讀:

想像力驚人!只憑一句話,AI就能腦補出動漫小片
GAN之父:讓機器擁有天賦 我還在對付利用AI作惡的人
Batch Normalization閱讀筆記
深度神經網路(DNN)

TAG:人工智慧 | 神經網路 |