基於圖像識別,圖像對比,離群分析等演算法的創造101選手的出道概率評估

基於圖像識別,圖像對比,離群分析等演算法的創造101選手的出道概率評估

130 人贊了文章

作為一個技術宅平時也喜歡看一些綜藝節目,然後最近迷上#創造101#,非常喜歡宣儀,但是從第四期看到比賽那麼激烈,那麼殘忍的淘汰太不忍心了,看的時候特揪心,所以自己就做了個程序來預判下,自己pick的選手出道率有多大,下面就簡單介紹下這套演算法邏輯,可能會有些疏漏偏差,歡迎大家討論,指正!

因為計算出道概率這是一個無監督的預測過程,所以我就自定了兩個特徵——顏值和特質。因為沒有每個選手詳細的數據,我就在網上搜羅了這101位選手的照片,利用圖像識別,圖像對比,離群演算法等手段來計算出每個選手出道的顏值指數和特質指數,並根據這兩個特徵算出選手出道的概率,下面會詳細介紹整個流程。

選手圖片鏈接:douban.com/group/topic/

一、顏值計算

1、人臉識別

在顏值計算時首先進行人臉識別,找出人臉的範圍和一些臉部關鍵點的位置。這裡我利用多任務級聯卷積神經網路(MTCNN, Multi-task Cascaded Convolutional Networks)來同時處理人臉範圍檢測和人臉關鍵點定位問題。這個演算法是2016年由Kaipeng Zhang所提出來的,以前大多數人臉識別模型方法都沒能將人臉範圍檢測和人臉關鍵點定位這兩個任務有效的結合起來,這個演算法能夠充分利用兩任務之間潛在的聯繫,構建了一種多任務級聯的人臉檢測框架,從而可以將人臉範圍檢測和人臉關鍵點檢測同時進行,所以用起來十分方便。

MTCNN包含三個級聯的多任務卷積神經網路,分別是Proposal Network (P-Net)、Refine Network (R-Net)、Output Network (O-Net),每個多任務卷積神經網路均有三個學習任務,分別是人臉分類、邊框回歸和關鍵點定位。每個網路的作用如下圖所示:

MTCNN實現人臉檢測和關鍵點定位主要分為三步:第一步由P-Net獲得了人臉區域的候選窗口和邊界框的回歸向量,並利用邊界框做回歸,然後選窗口進行校準,然後通過非極大值抑制方法(NMS)來合併高度重疊的候選框。第二步把P-Net得出的候選框作為R-Net的輸入,同樣通過邊界框回歸和NMS來去掉那些false-positive區域,得到更為準確的候選框;最後一步,利用O-Net識別並輸出關鍵點的位置。

MTCNN計算過程

在具體訓練過程中,模型對多任務學習的損失函數計算方式也進行了相應改進,在多任務學習中,不同類型的訓練圖像輸入到網路時,有些任務時是不進行學習的,因此相應的損失應為0。例如,當訓練圖像為背景時,邊界框和關鍵點的loss應為0。另外為了提升網路性能,需要挑選出困難樣本,傳統方法是通過研究訓練好的模型進行挑選,而這個模型使用一種能在訓練過程中進行挑選困難的在線挑選方法。方法為,在mini-batch中,對每個樣本的損失進行排序,挑選前70%較大的損失對應的樣本作為困難樣本,同時在反向傳播時,忽略那30%的樣本,因為那30%樣本對更新作用不大,這樣可以很大地簡化計算過程。

MTCNN在人臉檢測數據集FDDB 和WIDER FACE以及人臉關鍵點定位數據集LFPW均獲得當時最佳成績。在運行時間方面,採用2.60GHz的CPU可以達到16fps,採用Titan卡可達99fps,這個效率在人臉識別模型裡面算是比較快的了。 為了更好地進行開發集成,我們採用了python語言的模型代碼,數據集除了FDDB,WIDER FACE之外,還有以前參加天池大數據競賽的一些人臉關鍵點識別的數據集,模型訓練下來之後將參數保存到本地。

代碼實現:github.com/DuinoDu/mtcn

論文地址:pdfs.semanticscholar.org

這裡我們拿吳宣儀的照片作為例子,首先輸入一張照片,模型會對照片進行預處理,把照片縮放到固定的大小,分成RGB三個通道,然後卷積層對圖像進行卷積,最終同時得到兩個結果,一個是人臉區域,是一個長方形區域,表示人臉在整個圖像中的範圍,另外還有一系列關鍵點坐標,表示眼睛、眉毛、鼻子、嘴巴還有臉的輪廓範圍, 這裡關鍵點的數目我們選擇為72個。

原始圖像

人臉範圍檢測

人臉關鍵點定位

2、顏值打分

得到關鍵點之後,就可以對眼睛大小臉部輪廓來進行計算,從而得到臉型,眼睛大小等指標。除此之外,還可以調用微軟how old.net的年齡計算介面,來計算出圖像中人物大概的年齡。年齡計算的方法是一個監督學習的過程,輸入圖像信息,來訓練一個SVM分類器,通過大量的數據來照出來最可能的年齡,具體的方法可以參考how-old.net/,這裡我們直接調用微軟的介面,當然也可以調用百度的介面,不過百度的介面有調用次數的限制。

接下來就是面部顏值的計算了,有科學家研究過人臉的美麗程度,並試圖以此為依據開發「顏值演算法」。這裡就簡單介紹一下,就是「平均臉」效應。科學家曾做過這樣的實驗,找來志願者看大量的人臉照片,給照片打分。實驗結果表明,人們更喜歡對稱的臉,並且眼睛鼻子和嘴巴的比例符合黃金分割比的更符合大眾的審美。另外研究表明,將大量人臉取平均得到「標準臉」,臉的指標和這種「標準臉」越接近,越是讓人覺得好看。俗話說 「醜人多作怪,美人一個胚」,而正是這種「美人一個胚」的現象讓顏值演算法有了可行性。

而上面說的標準臉是由很多張圖片,找出他們各個關鍵點之間的標準分布,即各個關鍵點在臉部的什麼位置,以什麼樣的對稱性和比例出現最好看。接下來給定一張新的照片,找出人臉的範圍和關鍵點,之後根據這些關鍵點來定位五官,輪廓,文理和顏色等指標,提取出來人臉的 各項數據,然後根據這些人臉的各項指標來計算與「標準臉」的差距,從而得到顏值打分。這裡因為沒有大規模的圖像數據,做不出標準臉,所以這裡我直接調用百度顏值計算的API,因為以前參加過百度之星開發者大賽,對百度的API比較熟悉,還能使用一些隱藏功能,但是百度的API限制比較多,比如每秒最大請求數,最大連續請求數等等,如果想突破這個限制就要花點錢了。

具體方式可以參考百度AI技術文檔 ai.baidu.com/docs#

二、特質計算

僅僅有了顏值,還不足以判斷選手出道的可能性,因為創造101這類選秀節目看得主要還是才華,看選手是不是與眾不同,所以還需要依靠圖片找出來選手的特質指數。這裡的特質指數計算我們採用人臉對比技術。原理其實很簡單,如果一個人和其他人的相似性越高,那麼這個人就越普通,他的的特質指數就越低,反之一個人與其他人的差異性越大,那麼他的特質指數就越大。

因為我們主要分析《創造101》的101位選手的特質指數,為了使對比更加鮮明我只將每個選手和其他的100位選手分別做相似度計算,不再與除選手之外的圖片進行相似度比較,這樣可以減少其他領域和大眾形象對特質指數預測的干擾。在計算相似度時,我將選手與選手自己的相似度設置為100%,那麼計算完所有的選手之間的相似度之後,我們就可以得到一個101*101的相似度矩陣,矩陣的第i行第j列就是選手i與選手j的相似度。計算圖片相似度的技術目前已經是很成熟的方法了,並且模型的準確率都遠超人類,所以我這裡採用百度AI的圖像相似度計算方法。

如何根據這些選手的相似度數據找出來最有特質的選手呢?這裡我在這裡使用了基於距離的異常點檢測演算法——局部異常因子LOF演算法(Local Outlier Factor)。先直觀的介紹一下LOF演算法,如下圖,對於C1集合的點,整體間距,密度,分散情況較為均勻一致,可以認為是同一個簇;對於C2集合的點,同樣可認為是一簇簇。o1、o2點相對孤立,可以認為是異常點或離散點,那麼這些異常點就是這些點中最有特質的選手,離散度越大,選手就越與眾不同,那麼選手的特質指數就越高。

其實LOF演算法的思想就是通過比較每個點p和其鄰域點的密度來判斷該點是否為異常點,如果點p的密度越低,越可能被認定是異常點。至於密度,是通過點之間的距離來計算的,點之間距離越遠,密度越低,距離越近,密度越高。而且,因為LOF演算法對密度的是通過點的第k鄰域來計算,而不是全局計算,因此得名為「局部」異常因子,這樣,對於上圖的兩種數據集C1和C2,LOF演算法就完全可以正確處理,而不會因為數據密度分散情況不同而錯誤的將正常點判定為異常點。

上圖中的數據點是二維的點,即每個點只有(x,y)兩個屬性,我們輸入的點是101維的,即每個點有101個屬性,每個屬性是該選手和其他選手的相似度。這樣我們就可以找出來每個選手的異常因子數,從而判斷出選手的特質指數。

三、出道概率

現在有了顏值指數和特質指數怎麼判斷選手的出道可能性呢?這裡我使用信息檢索領域裡面常用的判斷結果好壞的衡量指標,平衡F分數F1值。

因為預測哪個選手會出道屬於無監督學習的過程,我們無法去監督地訓練顏值和特質對出道可能性的影響權重,所以把這兩個指標作在計算的時候作為相同的權重來看待。因為顏值指數的範圍是0-100,特質指數的範圍也是0-100,所以就可以直接替換公式中的準確率和召回率,這樣當顏值和特質都達到100時,F1值達到最該也就是100,當顏值或者特質有一個特別低,比如顏值為100,特質為1是,F1≈1,特別低。所以F1值評價指標能夠充分考慮顏值和特質兩個因素,作為最終選手出道可能性的打分標準。經過以上的步驟之後,最終計算出來各個選手的出道可能性如下(為了避免被噴就把選手打碼了):

但是由於看到結果我宣儀在結果中排第二而不是第一名,所以就在程序中我就給吳宣儀加了個buff,使得她可以在各方面都碾壓所有選手。我們組的另一個同學特別喜歡孟美岐,而且美岐的《靠近你的心》這首歌在以前也給我留下了很深的印象,同樣是我比較看好的一個選手,所以在他的強烈要求下我也給孟美岐加了個buff,使得她可以碾壓除了我宣儀之外的所有選手。

吳宣儀結果對比圖1

吳宣儀結果對比圖2

孟美岐結果對比圖1

孟美岐結果對比圖12

最終結果可謂perfect,希望我宣儀繼續加油!

四、在線工具

我在對《創造101》的101選手進行分析之後,閑暇之餘我的程序做成了一個可以在線訪問的工具,這個工具利用python的django框架,整合所有演算法模塊,並將演算法模型的參數使用內存緩存機制redis存儲,使得參數在一次導入之後可以常駐內存,這樣就可以免去每次請求都載入模型所耗費的時間。在前端用戶可以通過批量上傳自己喜歡的選手圖像,從而找出其中最有可能出道的選手。

工具地址:180.76.141.149:8002/fin

二維碼:

180.76.141.149:8002/fin (二維碼自動識別)

參考文獻:

MTCNN blog.csdn.net/qq_148451

顏值打分 zhihu.com/question/2771

LOF演算法 blog.csdn.net/wangyibo0


推薦閱讀:

VGG學習筆記
關係抽取對抗訓練——《Adversarial Training for Relation Extraction》閱讀筆記
讀論文系列:Object Detection SPP-net
從VGG到NASNet,一文概覽圖像分類網路
[CVPR2018筆記]Unsupervised Person Image Synthesis in Arbitrary Poses

TAG:機器學習 | 計算機視覺 | 創造101綜藝 |