程序猿是如何算出你的「顏值」的?
某日偶遇同窗好友在用某款測顏值的APP。問他得了幾分,他微微一笑,「必須是9分男神。」詫異間我又隨手搜了張鳳姐的照片一試,竟然得了9.4分。這次輪到我大笑了。「哈哈,男神女神果真般配啊。」
後來筆者聽聞好友玩的那款測顏值APP竟然也風靡一時。我一時好奇間就先拿兩款APP做了測試。第一組測試對象是高圓圓和鳳姐。結果嘛,呵呵。鳳姐以9.4的高分力壓女神高圓圓呢!第二組測試對象是我家沙發。這些APP再次顯示了自己的無能為力。同一個沙發得分基本上均勻的分布在1-10分之間。沒錯,一張沙發的照片有時候都能得到9分以上。這種簡單的顏值APP甚至都不太能進行面孔識別。還要它們來進行標準化打分,實在是為難了。
話說回來,即使人工來打分,大家也口味各異,御姐蘿莉各有所愛。一款APP又豈能判斷美醜呢?所以用APP測了顏值的大家,高分玩家勿要得意,低分玩家也不用暗自神傷,當成飯後娛樂笑笑便好了。
雖說這些APP性能還不夠強大,但是實際上的確有科學家研究過人臉的美麗程度,並試圖以此為依據開發「顏值演算法」。這裡就簡單介紹一下吧。那就是廣為流傳的「平均臉」效應了。科學家曾做過這樣的實驗,找來志願者看大量的人臉照片,給照片打分。實驗結果表明,人們更喜歡對稱的臉。另外研究表明,將大量人臉取平均得到「標準臉」,臉的指標和這種「標準臉」越接近,越是讓人覺得好看。
韓國仁濟大學整形外科教授李承哲在2010於國際美容整形外科學會(ISAPS)下屬刊物《美容整形外科》中發表一篇論文,發布了使用全球多名最漂亮女藝人的照片合成的五張平均臉。即使是跨人種,我們也依然能發現美貌的一致性。其中中國人的面孔是不是很像某位明星?
大概就是「醜人多作怪,美人一個胚」的感覺吧。而正是這種「美人一個胚」的現象讓顏值演算法有了可行性。至於為什麼APP表現不太好,請吐槽不靠譜的碼農吧。
從進化角度來看,「美人都似一個模子里出來的」也並不讓人意外。進化是經過漫長自然選擇的結果,擁有平均性狀的個體也更容易倖存。
最後再Geek地介紹一下「顏值演算法」。
剛才我們說了,長得對稱又標準,是基因正常、健康狀態良好的體現和保證,從進化的角度來看是很合理的。因此,如果得到了這些人臉的數據,我們可以通過計算人臉的對稱性和與「標準臉」的差距,定性計算「顏值」。
接下來的問題是,怎麼用軟體得到這些測量指標呢?或者說,怎麼讓軟體「認出」人的臉呢?其實,人臉檢測是計算機科學領域一個重要方向,已經有了諸多發展。在人臉檢測演算法中, 按發展順序有基於知識的模板匹配,紋理特徵,顏色特徵,基於統計的PCA特徵臉,支持向量機,AdaBoost方法等等。
想想看我們自己是怎麼識別出人臉的呢?很多時候我們看到一些石頭或雲,也會覺得像人的臉,不論總體上有多麼大差距,那往往是因為恰好有什麼東西構成了眼睛、鼻子和嘴。再想一想我們怎麼堆雪人的?最後是不是往往要弄個眼睛鼻子嘴什麼的才有「人」的感覺?沒錯了!其實眼睛、鼻子和嘴對我們識別人臉有非常重要的作用。我們對人的臉有一些先驗知識,知道眼睛鼻子嘴等等的形狀、特徵,知道它們之間相互位置,和這些先驗知識符合程度高的,我們的大腦就會判斷為是人臉。
這也是計算機人臉檢測的兩大類方法其中之一,基於知識的方法。這類方法檢測人臉的過程和我們的大腦類似,都是根據輪廓、顏色、紋理等等,判斷是否是人臉。例如,我們簡單推理一下就能得到一種思路:先找眼睛鼻子或者嘴巴的輪廓。當然這對計算機還是有點難,但計算機有方法可以找到邊界線,或者橢圓直線等幾何圖形。用這些方法可以找到圖像中的線條和形狀,再從中提取臉的明顯輪廓,比如鼻子眼睛和下巴的輪廓來定位人臉。即先用對圖像進行邊緣提取,再判斷哪些邊緣是臉的輪廓哪些邊緣是眼睛鼻子等等。
但和人腦不同,這樣靈活的分析對計算機來說仍然有點吃力。人的五官各種各樣,很難制定出一套規則教會計算機正確識別;現實生活是3D的,而照片是2D的,這些增加了人臉檢測的難度。所以科學家們找到了另外一類方法來檢測人臉——基於統計的方法。這就屬於近些年非常火熱的機器學習了。
這類「人臉人工智慧」方法放棄了具體分析人的眉眼,而是把人臉看作一個整體,不用區分是五官還是臉頰,「鼻子眉毛一把抓」,整張照片的所有像素點都交給計算機分析。通過大量的人臉圖片,構建出計算機能理解的人臉模式空間,再根據相似度來判斷人臉。這裡的「通過大量的人臉圖片」就是一個人臉識別機進行學習的過程。
1991年MIT科學家發表了基於主成份分析(PCA)的特徵臉方法,通過一個變換矩陣進行投影,將高維圖像信息變到低維子空間,提高了計算效率與準確率。2001年P. Viola和M.J. Jones發表了經典的《Rapid Object Detection using a Boosted Cascade of Simple Features》和《Robust Real-Time Face Detection》提出了基於哈爾特徵積分圖方法 和AdaBoost級聯的著名方法,從此計算機真正做到了可以實時監測人臉。
哈爾特徵是挺有意思的特徵,從這個特徵就我們很容易就能看出人類思維和計算機演算法有多麼大的差別。
哈爾特徵在圖像中取大大小小很多矩形,將矩形分成兩份或三份,用黑白兩種顏色標記,將黑白兩色矩形里的像素值和相減得到差值。然後用這些差值來對圖像的子區域進行分類。通過不同的黑白矩形組合,就能提取邊緣特徵、線性特徵、中心特徵和對角線特徵,共同構成特徵模板。除了平行的矩形框,還可以取45度的矩形框。通過改變特徵模板的大小和位置,可在圖像子窗口中提取出大量的特徵。哈爾特徵值反映了圖像的顏色灰度變化情況,由於通常眼睛、嘴要比臉顏色深,鼻樑兩邊比鼻樑顏色要深,所以一部分面部特徵能由哈爾特徵描述。這種方法更好得利用了五官之間的相互位置信息,所以能得到很好的檢測準確度。
好啦,看不懂也沒關係。這正是因為計算機思維和人類思維存在巨大差異。這樣的方法看上去傻瓜又繁瑣,算那麼多矩形似乎即費時間又漫無目的,我們判斷人臉的時候是不會這麼做的,但計算機就適合這樣簡單繁瑣的工作。
再簡單總結一下演算法過程,理論上可以實現對「顏值」的打分:1)通過計算機演算法在照片中檢測到人臉;2)定位五官,提取人臉的各項數據、指標;3)根據指標計算臉的對稱性、與「標準臉」的差距,計算「顏值」。
希望下一代顏值APP們可以用上更好的演算法。至少要能告訴我們高圓圓比沙發美多了吧。




※傳統算命是騙人的嗎?是靠什麼算出來的?
※你的命是怎麼算出來的?請看如何斷命——八字行通,通則坦途!
※這樣算出軌嗎?
※如何計算出找到外星文明的可能性?
※人的命真能算出來嗎?答案是:能!
※薛之謙算出軌了嗎?為什麼男星出軌之後都混不好?
※不被別人知道的「出軌」,這算不算出軌?
※人的命真能算出來??答案是:能!
※算命可以算出自己的劫數!你來看看嗎?
※准爆了!你覺得哪一對是夫妻?算出你的桃花運、
※准爆了!你覺得哪一對是夫妻?算出你的桃花運
※不用計算器也能速算出答案,就是這麼神
※精神出軌而已,這也算出軌?
※胎兒體重是怎樣估算出來的?
※精神出軌算出軌嗎?這樣出軌要不要離婚?
※古代的這四個神算,都能準確算出自己的死期,難道只是巧合?
※算算出生日期,看你的正緣何時能到?
※一個小公式算出你是窮人還是富人?這還需要計算嗎?肯定拖後腿……
※可以算出命運是不是意味著一切都是安排好的?