ResNet告訴我,我是不是世界上最美的人?
大數據文摘作品
編譯:大茜、Molly 、錢天培
什麼?!顏值「客觀化」要進行實質性推進了?
幾個月前,華南理工大學發布了一篇關於「顏值評估」的論文及其數據集。
這個數據集包括5500人,每人的長相被從1-5分進行打分。
數據的下載地址如下:
https://github.com/HCIILAB/SCUT-FBP5500-Database-Release
在公眾號後台對話框內回復「顏值」即可下載對應論文。
讓文摘菌來舉個栗子,你就知道這個數據是咋回事啦。
數據集中還包括一些明星。這張Julia Roberts的照片平均得分為3.78:
這張以色列著名模特Bar Refaeli的照片獲得了3.7分。
這些分數可能看起來有點低,但3.7分已經代表你的顏值比數據集中約80%的人高了。
在這個數據集上,作者訓練了多個模型,試圖根據人臉圖片評估顏值。
在這篇文章中,我要復現他們的結果,並測一下自己的顏值。
原始論文構造了一系列不同的模型,包括使用人工構造特徵的經典ML模型和3種深度學習模型:AlexNet、ResNet18和ResNext50,我希望儘可能簡化我的工作(我不想從頭開始訓練Resnet神經網路模型),我想對現有的模型進行調優。在keras中,有一個稱為application的模塊,它包含各種不同的預訓練過的模型。resnet50就是其中之一。 不幸的是,在keras.applications中沒有ResNet18或ResNext50,所以我不能完全復現研究人員之前的研究過程,不過利用resnet50也能足夠接近之前的工作。
from keras.applicationsimportResNet50
ResNet是一個由微軟開發的深度卷積網路,它贏得了2015 年的ImageNet圖像分類任務競賽。
在keras中,當我們初始化resnet50模型時,我們創建了一個ResNet50結構的模型,並且下載了在ImageNet數據集上訓練的權重。
論文的作者沒並有提到他們究竟是如何訓練模型的,不過我會儘力做到最好。
我想刪除最後一層(「softmax」層)並添加一個沒有激活函數的全連接層來做回歸。
resnet = ResNet50(include_top=False, pooling=』avg』)
model = Sequential()
model.add(resnet)
model.add(Dense(1))
model.layers[].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個可訓練的參數,而不是23589761個參數。
我的計劃是訓練最後的全連接層,然後以較小的學習率訓練整個網路。
model.compile(loss="mean_squared_error", optimizer=Adam())
model.fit(batch_size=32, x=train_X, y=train_Y, epochs=30)
之後,我將第一層改為可訓練的,編譯模型,並再把模型訓練30輪。
在這裡,train_X代表照片,也就是形狀為(350,350,3)的numpy矩陣,train_Y是圖像被標記的分數。
結論
論文使用2種方法訓練模型:5折交叉驗證和以6:4的比例將數據集分割為訓練集和測試集。他們使用皮爾遜相關係數(PC),平均絕對誤差(MAE)和均方根誤差(RMSE)來測評估模型的結果。以下是他們使用5折交叉驗證得到的結果:
這些是他們使用6:4分割數據集獲得的結果:
我以8:2的比例分割數據集,所以它類似於執行1折交叉驗證。
我得到的結果如下:
非常好的結果。另外,也可以看看散點圖和直方圖:
原始分數分布(標準化後的):
預測分數分布(標準化後的):
結果看起來不錯。現在在我身上試試這個這個神經網路。我首先使用這張照片:
我的分數是2.85,這意味著我的顏值比數據集中52%的人高。不得不說我有點失望,我以為我的分數會高一些,所以我試圖提高我的分數。
我拍了很多照片,最終我得到了3.15分,這意味著我比數據集中64%的人更具吸引力。
這比之前好很多了,不過我必須誠實地說,我希望還能更高:)
最後一點,我使用Google Colaboratory構建和調整了這個模型,簡而言之,Google Colaboratory能為你提供一個免費使用GPU的python notebook!
文摘菌文末按:希望這個數據集也可以診治一下北美吐槽君亂打分的惡劣現象,感恩!
https://towardsdatascience.com/how-attractive-are-you-in-the-eyes-of-deep-neural-network-3d71c0755ccc
【今日機器學習概念】
Have a Great Definition
志願者介紹
回復「志願者」加入我們
※李飛飛紐約時報最新博文:如何讓AI更好地關懷人類
※量子計算101:淺談其需求、前景和現實
TAG:大數據文摘 |