Meta learning and related project

Darren Wang
Taiwan AI Academy
Published in
8 min readJan 28, 2020

動機:

近幾年來,人工智慧因為深度學習而蓬勃發展,alpha go在圍棋的領域甚至打敗世界棋王( *註 1),2019年圖靈獎三位得主都是做深度學習( *註 2),全球進入一個瘋AI的狀況。傳統的人工智慧都是基於大數據,讓模型透過大量資料的訓練來預測結果,在有許多資料的狀況下,訓練完的模型的確可以比人類預測或判斷還準,也比傳統的專家系統好上不少( *註 3)。大家開始收集大量的資料來解決問題,但是問題就迎刃而解了嗎?人臉辨識算是比較簡單的任務,收集上萬張人臉照片就可以去訓練模型,但若要收集不同人種的人臉照片,勢必要全世界的人都要投入這個工作,而且也願意提供照片。那如果是判斷有沒有癌症呢?那就要上萬張MRI的影像照片,看似很簡單,但每張MRI照片成本都要萬元,而且每個病人都不見得想要透露自己的病情,另外每家醫院也不一定會想要共享資料,導致如果要解決這類的問題,因為資料收集的成本太高而有所限制。

註1:

2016年在不放讓子的情況下以4:1擊敗職業圍棋九段的李世石,2017 年alpha go master 擊敗世界第一棋士柯潔。

註2:

三位得主分別是Geoffrey Hinton、Yann LeCun、Yoshua Bengio。

註3:

專家系統是程式開發者對問題的經驗透過一連串if 、else等邏輯所做出來的系統。

介紹:

近年來研究者就開始想,如果資料不足,是否可以透過深度學習有辦法『產生大量有效資料』,或是『只用少量資料就可以訓練模型』。之後就有兩批人馬開始朝兩條路研究。『只用少量資料就可以訓練模型』就是few-shot learning,那和這篇有什麼關係呢?讓我娓娓道來。這篇主要用的技術是meta leaning,白話一點就是『學習如何學習』。傳統的深度學習以分類貓狗為例,就是收集一堆貓和狗的照片並且標籤,讓機器透過大量的貓狗圖片進行學習,但若是某天突然又想讓機器多分辨另外一種分類:羊,勢必又要收集一堆羊的圖片。每多一個分類就要收集該分類一堆圖片是非常不符合人類智慧,舉例來說人類在學會分類貓狗後,若要學會分類羊,其實只要幾個影像就能分別其差異(few-shot learning)。人類會找到一個很棒的學習方法來學習分辨這件事,這就是meta learning,大家也察覺到meta learning技術其實就包含few-shot learning。

再舉個例子,若是model學習語音辨識、圖片辨識,若是又有新的文字分類,model也能快速學會。

比較:

傳統的機器學習:

meta learning:

論文實作:

這篇實作主要是這篇:

Few-Shot Adversarial Learning of Realistic Neural Talking Head Models

之前有發一篇是這篇論文的理論介紹,如果大家想要了解論文可以去看我前一篇『讓照片動起來』。

Embedder網路學習了很多受訪的影片,在fine-tune stage若是加入其他身份的圖片(沒有出現在training data),只要讓embedder在訓練幾個epoch,就能讓網路快速學起來,例如蒙娜麗莎自畫像、達文西自畫像,全世界都是只有一張。

因為這篇作者群沒有釋放程式碼,所以大家可以從github找一個民間版本來改。

這邊非常建議從這個作者(grey-eye)的github改:

雖然會有很多問題,但是基本上網路的架構已經算很完整,實作是用pytorch。

我們的data是用The VoxCeleb2 Dataset,其容量很大,約260G,而且不能分割一定要全部抓下來,在實作過程也只用1200多個影片去訓練(大概10G)效果就不錯了。

過程中我們遇到第一個問題就是W矩陣,這是我們百思不得其解為什麼論文硬要加這個矩陣,而且加了這個W矩陣會造成更多的麻煩,例如:訓練資料若是一開始是設定600筆,W預設的長度就是600,但若是訓練完後想要擴增到1000筆再繼續訓練就會出錯,因為W長度不能變動了。所以我們決定把W矩陣拿掉,match loss拿掉,結論就是這決定是正確的。

但一開始真的效果並不是很好,我們拿一張自畫像做範例:

圖片雖然會動,但像水中倒影、奇怪的亮點、嘴巴不會張開。於是我們慢慢從這些缺點慢慢改進。另外我們也發現一個問題,若是fine-tune的圖片的landmark和train data頭像差異慎大,也會造成奇怪的畫面。

於是我們決定在fine-tune stage時,將要fine-tune的圖片做augmentation,我們做了flip、scale、shift,效果大幅提升不少。下圖是達文西自畫像。

然後嘗試將受訪影片當作fine-tune input,其效果會更佳(因為更多的frame)。我們將AIA執行長受訪的影片當作範例。

所以得到一個結論,如果是用one-shot or few-shot learning,嘴巴都比較不會張開,但如果是用整個影片去train,嘴巴會張開。而且one-shot learning感覺還是有加強的空間。

於是我們把discriminator最後一層的sigmoid激勵函數拿掉,並讓GAN的discriminator和generator採『同步更新』。拿兩位總統候選人做測試,效果似乎不錯。

但這些都是base on一個影片,我們想要在fine-tune階段只用一張就可以達到很好的效果。於是我們工程師就用手機幫在辦公室的同仁錄了幾個受訪影片,把這些受訪影片加到fine-tune set裡,fine-tune set裡的圖片不用太多(10幾張就好),但每一張最好有包括張嘴閉眼等表情,這樣才能避免有嘴巴張不開的狀況。我們拿了新竹某一位同仁的大頭照(只有一張照片)當作示範。

效果非常的好,正面幾乎一模模一樣樣😂

demo:

我們南部分校做了一個demo網站,大家可以玩玩看!

連結

專題介紹 and 操作教學

輸出一張透過影片去動的結果

future work:

目前期望能做高解析且又清楚的動態圖片,但的確有幾點需要克服:

  • 細節需要更清楚,例如皺紋
  • driver image的land mark如果和target image的臉型差異太大,會變得不像
  • 錄製表情若是太過靠近邊緣,影像會像是被拉扯的感覺。
  • 解析度太低

但當我們完成這篇後,韓國又有新的一篇論文是改進過後的模型:marioNETte,2019年11月份的論文。人工智慧的進展實在很快😫

— —

— reference —

[1] Few-Shot Adversarial Learning of Realistic Neural Talking Head Models

[2] grey-eye/talking-heads

--

--