1. 程式人生 > 實用技巧 >當專業動畫師用GAN幫自己“偷懶”,幾分鐘就完成了幾周的工作-1

當專業動畫師用GAN幫自己“偷懶”,幾分鐘就完成了幾周的工作-1

當視覺特效師與GAN強強聯手,做出來的動畫會不會更好看?

答案是YES。

這是一位視覺特效師,用海外版抖音上超火的小姐姐Bella Poarch的視訊,生成的奧巴馬TikTok版動畫:

不僅動畫效果逼真,表情生動,GAN生成的人物也不會出現意外“脫模”的情況。

當時,這位專業動畫師一接觸到AI,就看中了AI搞藝術的“本事”——用GAN將一個視訊中的人物動畫化,只需要幾分鐘

相比之下,如果用正常的軟體進行動畫製作,可能需要耗費一個動畫師幾周的時間

不過,他很快發現,現有的這些AI人臉動畫化的模型,做出來的卡通形象實在太醜。

如下圖,此前用AI將安倍晉三動畫化後,卡通人物的臉色看起來不太好……

於是,他乾脆自己上手,結合現有的GAN模型進行優化調整。

效果好極了!

不僅像是給正常的人臉加了美顏特效,卡通形象簡直堪比迪士尼動畫中的主角:

連奧巴馬都“返老還童”,比開了美顏看起來還年輕。

而且,任何人都能控制這些卡通人物的表情,即使是提前錄製好的視訊也可以。

那麼,這樣的動畫效果,到底是怎麼做出來的?

遷移學習的妙用

這位視覺特效師,選擇了用一種特殊的方式製作好看的卡通人物形象。

他利用遷移學習生成了一個7×6的表格,根據遷移學習的強度來生成不同風格的人臉。

也就是說,如果遷移學習強度越大,人物就會越接近卡通化,而遷移學習強度越小,人物就越接近真實形象。

可以看見,影象越靠近左下角,人像就越真實;而越靠近右上角,人物就更接近卡通化。

這樣,既能最大程度上保留人物的特點,又能使卡通臉看起來更逼真。

而且AI還能根據“客戶需求”,判斷出更適合的人像,並進行資料訓練。

連尤金老爺子看起來都年輕了不少,甚至有點《飛屋環遊記》里老爺爺的慈祥意味了。

在這其中,視覺特效師利用了GAN來生成卡通人物的形象。

既能“性別轉換”,也能變化年齡

這位視覺特效師採用的基礎模型是Justin Pinkney和Doron Adler的作品StyleGAN2 FFHQ(Nvidia的模型),主要根據DeepAI做成。

StyleGAN的原理在於,它摒棄了輸入層,添加了一個非線性對映網路。

此外,它創新了一種名為style-based generator的生成器,能夠控制所生成影象的高層級屬性(high-level attributes),如 髮型、雀斑等。

而且,這個StyleGAN自帶一個開源資料集FFHQ,裡面包含著各種各樣的人臉資料集。

而這位視覺特效師,則是將這個StyleGAN2 FFHQ進行了微調。

利用GAN生成的人物形象,不僅可以卡通化,還可以讓影象模式化(Stylized),生成風格相似的人物表情和特徵。

不僅可愛的小朋友能被卡通化,而且還能根據眉毛和臉部特徵構建一個女孩子的面部:

如果人物“長大”了,那麼模式化出來的女孩子的面部,也會變得更成熟:

這份軟體目前還沒開源,因為看起來,這位視覺特效師對自己做出來的動畫還不是太滿意,認為仍然有更多可以改進的空間。

不過,網友似乎已經有點急不可耐。

有熱愛二次元的網友表示,希望這樣的工具能將所有的漫畫改成動漫。

也有網友表示,這樣的工具看起來已經很棒了,不知道作者是否有意願在對作品滿意後,進行開源。

期待這位視覺特效師能夠達成目標,將這份模型程式碼開源。

作者介紹

Nathan Shipley,視覺特效師,動態圖形藝術家,創意技術人員,目前感興趣的研究方向是AI生成藝術。

此外,這位特效師還曾經在2019年,為佛羅里達州聖彼得堡的達利博物館“復活”了超現實主義畫家Salvador Dali本人。

那些對畫家Dali的著作有興趣的觀展者,只要按下按鈕,就能看見螢幕中的Dali正對你“打招呼”,神態非常惟妙惟肖。

如果對他的藝術作品感興趣的話,可以戳下方地址主頁檢視。

道翰天瓊CiGril機器人API

道翰天瓊CiGril認知智慧機器人API使用者需要按步驟獲取基本資訊:

  1. 在平臺註冊賬號
  2. 登入平臺,進入後臺管理頁面,建立應用,然後檢視應用,檢視應用相關資訊。
  3. 在應用資訊頁面,找到appid,appkey祕鑰等資訊,然後寫介面程式碼接入機器人應用。

開始接入

請求地址:http://www.weilaitec.com/cigirlrobot.cgr

請求方式:post

請求引數:

引數

型別

預設值

描述

userid

String

平臺註冊賬號

appid

String

平臺建立的應用id

key

String

平臺應用生成的祕鑰

msg

String

""

使用者端訊息內容

介面連線示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552

注意事項:引數名稱都要小寫,五個引數不能遺漏,引數名稱都要寫對,且各個引數的值不能為空字串。否則無法請求成功。userid,appid,key三個引數要到平臺註冊登入建立應用之後,然後檢視應用詳情就可以看到。userid就是平臺註冊賬號。

示例程式碼JAVA:


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class apitest {

/**
* Get請求,獲得返回資料
* @param urlStr
* @return
*/
private static String opUrl(String urlStr)
{
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try
{
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 10000);
conn.setConnectTimeout(5 * 10000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200)
{
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128];

while ((len = is.read(buf)) != -1)
{
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
return result;
} else
{
throw new Exception("伺服器連線錯誤!");
}

} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (is != null)
is.close();
} catch (IOException e)
{
e.printStackTrace();
}

try
{
if (baos != null)
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
conn.disconnect();
}
return "";
}


public static void main(String args []){
//msg引數就是傳輸過去的對話內容。
System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552"));

}
}