幹,請吳伯毅買雞排結果算錯時間,要等一小時。乾脆用這個時間跟大家講解一下換臉軟體的背後原理。
準備材料:
1. 一台電腦
2. 一部謎片
3. 一套新主角的圖片(或影片),臉要清楚的
4. 一些衛生紙
文章小長,但很白話。不想看但有興趣知道可以用聽的:
ep53 想成為AV星探嗎?十五分鐘白話解鎖換臉軟體背後的DeepFake算法
https://reurl.cc/95DZxV
算法步驟一 臉部置換
怎麼做呢,首先要先找到影片中和圖片中主角的臉部位置,之後取出臉部特徵。臉部特徵是由好幾個點組成的定位系統,例如定位眉頭,眉心,眼角,鼻頭等68個點。有了這些點,我們就可以知道新主角的眼角要對應到影片中舊主角的眼角位置在哪。
之後用剛剛的68個點把臉部分割成多個區塊,兩點連成一條線,三點連成一個面。例如眉毛中間的T字部位可以由左右眉頭的兩個點和鼻子上部的點定義出範圍。接著我們就可以把新主角的T字部位移花接木到舊主角的T字部位上。臉部所有的區塊都用一樣的方式套用之後換臉就成功一半。
這些算法OpenCV都內建好了,複製貼上小改一下搞定。比架五倍券官網還簡單。
然而以上的做法會讓影片看起來假假的。畢竟是硬肛上去的。比較偏激一點的角度,就會看起來怪怪的,斜鼻歪嘴都有可能。
這時候就要靠AI來修圖了。現在PS也有相同的技術,你把不要的地方塗掉,PS會字動生成合乎附近場景的圖像來填補被塗掉的地方。
算法步驟二 自動生成模型
2014年 Ian Goodefellow這個神哥提出了Generative Adversarial Model,中文譯作生成對抗模型。
簡單來說,就是讓兩個AI模型互相對抗。A模型(生成器)的任務是無中生有出一張圖片,B模型(分類器)的任務是辨識一張圖片是不是『有意義的圖片』。例如A模型的任務是要做出一張幾可亂真的貓貓圖,那B模型的任務就是要辨識一張圖是不是貓貓圖。拿這張貓貓圖給人類看,人類會覺得這是一張真的貓貓。
一開始的時候生成器等級很低,產出的圖片都是狗屎,完全看不出個毛。所以分類器很簡單就能辨識出哪些是生成器胡幹出來的假圖。生成器可以透過JS Divergence(比較真圖和假圖的差別)來優化參數,目標是讓真圖和假圖的差異變小。
一開始先訓練分類器。分類器拿了垃圾生成器製作出的假貓貓圖跟收集到的真貓貓圖作比較,生成器的參數調整目標是要讓真圖和假圖的差異變大。也就是說生成器可以更輕易的辨識出不是貓貓的假圖。
分類器訓練好之後,再回頭訓練生成器,升級完生成器之後讓他製作一些假的貓貓圖去訓練分類器,以次類推。讓他們修幹好幾輪之後,生成器逐漸可以做出很像真的貓貓的圖。這就是生成對抗模型。
放到DeepFake上怎麼應用呢?
DeepFake的生成器的目標是做出一張看起來跟真的一樣的人臉。而分類器的目標自然就是去辨別一張人臉圖有沒有破綻,有沒有那些斜眼歪嘴的不專業移花接木痕跡。
但怎麼訓練呢?一般深度模型需要很大量的標示數據。但AV訓練大師要去哪裡生一堆新主角(一堆是好幾十萬以上)的圖片?
事實上我們只需要很多「有破綻的移花接木圖片」和 「這些圖片在完美情況下該有的樣子」。DeepFake的作者從唐伯虎點秋香中悟出了一個道理,那這還不簡單,從新主角的圖片中取出他自己的臉,然後對他隨機使用「面目全非腳」之後,再貼回原本那張圖或者其他新主角圖片的臉上。這樣就可以刷出一堆
1. 被面目全非腳打過的新主角臉(有P圖破綻的假圖)
2. 新主角原本的臉應該要有的樣子(有破綻的假圖看起來應該是怎樣的真圖)
使用剛剛對抗生成模型,生成器就學會了
中國古拳法中的還我漂漂拳
使用這個生成器去把已經替換好臉蛋的迷片主角打一頓。我們就可以得到幾可亂真的新AV(男)女優。
通常新主角跟舊主角臉型五官越接近效果會越好。所以拿暗黑版的XXX作為製作XXX的謎片會有比較好的效果。另外臉部動作不要太大也會有比較好的效果。
不過,主角要慎選,才不會被黨追殺。
最後今天是我的狗狗的三歲生日,放上真的狗狗照。
https://imgur.com/uMAXysK
https://imgur.com/Q24fVSm
https://imgur.com/OpXhazW
但是雞排是給我吃的。