在今年六月份舉行的WWDC18大會上,蘋果介紹了全新的升級版“Animoji”——Memoji,用戶可以選擇不同的發(fā)型、五官和膚色來定制自己專屬的表情符號,例如選擇不同的膚色、發(fā)型甚至雀斑,并且有多種顏色。
但是,選擇畢竟是有限的,在多種樣式中對比查找也有一定難度,那么是否有一種算法可以根據(jù)照片生成Memoji呢?
在這篇博文中,我們將介紹一種用神經(jīng)網(wǎng)絡從真實照片中生成蘋果Memoji表情的方法。具體來說,我測試了用于人臉識別的網(wǎng)絡VGG16 Face,將真實照片與Memoji進行對比。之后我用它選擇各種特征,為新目標創(chuàng)造Memoji表情。本文原作者為Pat Niemeyer,以下是論智的編譯。
上圖是神經(jīng)網(wǎng)絡生成的兩個結(jié)果。在實際操作過程中,我們的工作會受到以下幾點因素的影響:
人像卡通化
第一個問題就是:某人的“卡通版本”是什么樣的??ㄍ嬐ǔ糯竽橙俗蠲黠@的特征,但是類似發(fā)型之類的其他特征區(qū)別不是很明顯,并且發(fā)型的類型非常多。經(jīng)過訓練辨認人臉的神經(jīng)網(wǎng)絡會以抽象方式捕捉到某人的發(fā)型信息,從而進行轉(zhuǎn)化。反過來說,這也意味著從抽象信息中生成發(fā)型并不是一個理想的好方法。
膚色和發(fā)色
在不同光線條件下推測照片中人物的膚色非常困難,在我的測試中,網(wǎng)絡通常會選擇膚色更淺的區(qū)域,并且不能區(qū)分現(xiàn)實和非現(xiàn)實情況。同樣,雖然測試設(shè)備在分辨暗色和亮色頭發(fā)的任務中表現(xiàn)不錯,但是當照片中的頭發(fā)顏色更鮮艷,這一方法或多或少地可能失敗。
這里推薦一篇文章,其中用到的對人臉特征和膚色進行規(guī)范化的工具非??幔篠ynthesizing Normalized Faces from Facial Identity Features。
No API
想用Memoji做實驗遇到的最大挑戰(zhàn)就是,目前沒有可用的API能夠程序化創(chuàng)造它們(沒有直接的方法可以讓我們在iOS中自動進行創(chuàng)造)。所以,當我們想搜索可能的Memoji作為生成過程的一部分時,這一過程變得極為低效。理想狀態(tài)下,我們想用一個通用算法徹底調(diào)整各特征的組合,而不是獨立處理,但這在簡單的實驗上是無法做到的。
照片選擇
選擇哪張照片作為參考材料對結(jié)果有很大的影響,在有些情況下,一些照片會比其他的生成更好的結(jié)果。理想的照片應該是裁剪合理、臉朝向前方、最具代表性的照片。對于每一特征,我都會根據(jù)至少四張人臉圖像進行打分。
網(wǎng)絡設(shè)置
VGG
VGG是圖像識別中常用的卷積神經(jīng)網(wǎng)絡架構(gòu),VGG Face是該架構(gòu)經(jīng)過人臉識別訓練后的工具。它的創(chuàng)作者已將完全訓練后的網(wǎng)絡開源,大大方便了我們的實驗,因為從零訓練一個這樣的網(wǎng)絡通常需要大量數(shù)據(jù)和計算時間。
VGG Face
Torch
另外在測試時,我用到了Torch科學計算框架。Torch提供了運行VGG模型所需要的環(huán)境,并且基于Lua提供了腳本環(huán)境,同時還有用于數(shù)學計算的庫和基礎(chǔ)搭建模塊,可用于神經(jīng)網(wǎng)絡的圖層。
Torch可以自動下載VGG Face模型,并且只需幾行代碼就能運行一張圖片?;A(chǔ)流程如下:
net = torch.load('./torch_model/VGG_FACE.t7')
net:evaluate()
-- Apply an image
img = load_image(my_file)
output = net:forward(img)
其中下載圖像和對圖像規(guī)范化的步驟代碼可以在源代碼中找到。
圖層
如上圖所示,VGG有很多不同類型的圖層,首先是一個能保存RGB圖像數(shù)據(jù)的Tensor,它應用了多種卷積、池化、權(quán)重和其他類型的變換,隨著每個圖層學習更多抽象特征,數(shù)據(jù)的“形狀”和維度都在變化。最終網(wǎng)絡會在最后一層生成一個一維的、有2622個元素的預測向量。該向量表示真人與網(wǎng)絡訓練結(jié)果匹配成功的概率。
在我們的案例中,我們不關(guān)心這些預測結(jié)果,而是想利用網(wǎng)絡比較自己數(shù)據(jù)集中的抽象人臉。為了做到這一點,我們可以利用預測圖層下的圖層的輸出,該圖層包括了4096個元素向量,對人臉特征進行組合定制。
output = net.modules[selectedLayer].output:clone()
雖然VGG16的標準是16層的框架,但實際上在Torch中實施后生成的是具有40個模塊的設(shè)置。
相似度
接下來,我們會向網(wǎng)絡中輸入成對的圖片,然后用一種簡單的相似度尺度比較它們的輸出。其中比較兩個大型數(shù)字向量的方法是利用點積:
torch.dot(output1, output2)
這就生成了一個表示向量在高維空間中“對齊”程度的標量值。
對于這一測試,我們想將生成的Memoji和多張參考圖像對比,生成最終結(jié)果。所以我只需將每一對圖像的值進行正則化,取平均分數(shù)。
sum = 0
for i = 1, #refs do
localref = refs[i]
local dotself = torch.dot(ref , ref)
sum = sum + torch.dot(ref, target) / dotself
end
...
return sum / #refs
正則化表示將一張圖像和它本身相比的分數(shù)為1,那么之后的分數(shù)越接近于1,說明相似度越大。
除此之外,我們還能用到很多其他類型的衡量尺度。常用的兩種可能是歐幾里得距離或計算兩輸入之間的平均方差。
首次測試——The Lineup
首先我想知道,這一人臉網(wǎng)絡能否在所有照片上生成對應的Memoji。首先,我隨機收集了63張Memoji圖像,大部分是蘋果的設(shè)計原型。
之后我選擇了一個Memoji,然后讓網(wǎng)絡選出前三名相似度最高的表情。
結(jié)果非常不錯!不僅僅它能找到完全一樣的Memoji(得分為1),第二第三名看起來也很相像。
真實照片
現(xiàn)在我們要進行“真實性”檢測:我們讓網(wǎng)絡根據(jù)真實相片找到相似的Memoji,結(jié)果如下:
由于只能在有限的數(shù)據(jù)集中選擇,所以結(jié)果并不如我們期待的那樣好,可以看到分數(shù)都很低。
生成過程
接下來,我嘗試讓網(wǎng)絡挑選特征創(chuàng)造全新的Memoji。正如上文提到的,在iOS中并沒有能自動創(chuàng)建Memoji的途徑,所以我決定編寫腳本促進Memoji的生成。
我將手機和電腦連接,用QuickTime Player的錄制功能將這一過程保留下來。
但這一方法并不理想。首先,操作起來很復雜,光發(fā)型就有93種,運行一遍需要大量時間。更重要的是,我們每次只能評估一個特征的不同。理論上,我們可以不斷地重復選擇樹,進行迭代,知道網(wǎng)絡認為沒有什么變化時才能停止。但是這種方法也不完美,很有可能只是一個“部分最小值”。
另外,照片中人物頭像細微的移動就會影響分數(shù)。最后,我發(fā)現(xiàn)了一個簡單的解決方法。
結(jié)果
在文章未完成前,我其實沒有采用網(wǎng)絡得出的川普中的發(fā)型,而是手動選擇了一個分數(shù)最高的,覺得那個更適合他。但是最后我還是堅持展示出所有網(wǎng)絡得出的結(jié)果。
所以,有的時候排名前三的將結(jié)果并不總是相似的。例如,以下就是川普發(fā)型的排名:
但是,奧巴馬耳朵的排名卻很靠譜,又大到小分數(shù)逐漸降低:
不過眼睛的選擇卻有些不同:
但是川普的眼睛就比較一致了:
發(fā)色
前面說到,頭發(fā)的顏色因為光線問題會難以確定。川普和奧巴馬的頭發(fā)還比較好確定,但是有些情況下,網(wǎng)絡總會把很亮的顏色看作灰色:
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4733瀏覽量
100410 -
人臉識別
+關(guān)注
關(guān)注
76文章
4002瀏覽量
81659
原文標題:用神經(jīng)網(wǎng)絡根據(jù)照片創(chuàng)建專屬Memoji表情
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論