如果沒有StyleGAN2,真以為初代就是巔峰了:英偉達人臉生成器高能進化,彌補重大缺陷
栗子 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
今天之前,你大概會覺得,英偉達的StyleGAN已經(jīng)是效果最震撼的GAN吧。
它既能生成逼真的人臉:
也能生成可愛的老婆:
還有逼真的貓咪、臥室、汽車……投喂哪種數(shù)據(jù)集,就吐出哪種圖像。
但英偉達并不過度驕傲,自StyleGAN發(fā)表以來,團隊就一直研究它的弱點,然后想辦法拯救。
現(xiàn)在,升級版StyleGAN2誕生了,它彌補了第一代的各種缺陷。
先舉個例子。初代StyleGAN生成人像,周圍總是出現(xiàn)水滴狀不明物體:
如今,StyleGAN2生成的圖像里,看不到奇怪的水滴了:
不要急著驚訝,這只是其中一處,StyleGAN2解鎖的新技能還有不少。
更美好的是,英偉達已經(jīng)把算法開源了。
所以,先來觀察一下它到底是怎樣進化的吧。
水滴是如何消除的?
初代StyleGAN的第一個缺陷,就是剛剛提到的“水滴”。嚴重的時候,甚至?xí)迫四樀耐暾?/p>
論文說,水滴有時候很明顯,有時候肉眼不易察覺,但如果從特征圖?(Feature Map) 上看,其實問題一直都在:
△ 右邊是特征圖
想去除水滴,首先要知道它從哪里來,才好對癥下藥。
從生成64×64的圖像開始就有了,分辨率越高,水滴現(xiàn)象就越嚴重。
團隊起初對這種缺陷的存在感到費解,因為按常理說判別器應(yīng)該能發(fā)現(xiàn)才對???
但很快,他們就把矛頭指向了生成器的實例歸一化?(Instance Normalization),上代StyleGAN用的方法是AdaIN?(自適應(yīng)實例歸一化) 。
因為,是這個部分負責(zé)把每張特征圖的均值 (Mean) 和方差 (Variance) 分開歸一化,很可能是這種做法破壞了特征信息。
于是一種假設(shè)誕生了:
水滴形成的原因是,生成器故意讓信號強度信息 (Signal Strength) 繞過實例歸一化,它會創(chuàng)建一個強大的局部化 (Localized) 的信號峰,來支配統(tǒng)計數(shù)據(jù),有效縮放信號強度。(欺上瞞下的騷套路啊。)
假設(shè)輕松得到了驗證。只要把實例歸一化拿掉,水滴就完全消失了。
但真的拿掉之后,又會導(dǎo)致每一種風(fēng)格的效果累積起來 (Cumulative) ,沒辦法保留在特定的尺度上,這樣就很難控制GAN的生成了。所以,團隊重新設(shè)計了實例歸一化的過程。
說到重新設(shè)計,就簡單介紹一下初代StyleGAN。它的生成器是從風(fēng)格遷移算法上借鑒而來,能在粗糙到精細的不同尺度上操控GAN的生成,再把各種尺度的風(fēng)格 (Style) 結(jié)合起來:
△ 尺度越細調(diào)整越?。鹤罹毘叨戎徽{(diào)配色,不改姿勢發(fā)型五官
初代StyleGAN的生成器,是在風(fēng)格塊里加了偏置 (Bias) 和噪聲 (Noise) 。就如下圖,(a)是整體架構(gòu),(b) 是細節(jié):
△ 灰色框是風(fēng)格塊
團隊發(fā)現(xiàn),如果把偏置和噪音挪到風(fēng)格塊之外,直接加在已經(jīng)歸一化的數(shù)據(jù)上,就能得到更加可預(yù)測的結(jié)果。
(除此之外,這樣改動過后,只要對標(biāo)準差做歸一化和調(diào)制就足夠,不用再處理均值了。)
這也是重新設(shè)計的第一步,邁出這一步之后架構(gòu)長這樣:
在此基礎(chǔ)之上,團隊又走了第二步:
原本每個風(fēng)格塊由三部分組成,一是調(diào)制,二是卷積,三是歸一化。
團隊把歸一化這個部分,用一個新的“解調(diào)?(Demodulation) ”代替了。
此處隱去數(shù)學(xué)過程,只說中心思想:與原本的歸一化相比,“解調(diào)”不是基于特征圖的實際內(nèi)容 ,而是基于假設(shè)?(Assumptions/Expected Statistics) 。也就是說,比從前的操作更溫和了。
修改完畢,變成了下圖的樣子。是調(diào)制后直接解調(diào),把解調(diào)結(jié)果交給卷積:
實驗也證明,新的實例歸一化方法可以有效去除水滴現(xiàn)象。不論是在生成的圖像上,還是在特征圖上,都沒有奇怪的斑點了:
從一張圖到另一張圖的變化過程中,也沒有出現(xiàn)水滴:
與此同時,“解調(diào)”也讓各個尺度的風(fēng)格,保留在原本的尺度上。團隊說,StyleGAN2在不同尺度風(fēng)格的混合方面,比上一代更自如了:
(來源A和來源B,就是不同尺度的風(fēng)格。)
這樣,一個缺陷就補好了。
但還有下一個。
五官姿勢不同步怎么破?
初代StyleGAN,用的是漸進式增大?(Progressive Growing) 的訓(xùn)練方法。
就是從4×4的圖像開始生成,到8×8,到16×16,一步一步增大生成的分辨率,最終煉成1024×1024的高清圖像生成技能。
這種方法能把GAN的訓(xùn)練過程變得更加穩(wěn)定,是從大前輩PG-GAN那里沿用下來的。英偉達第一次以生成逼真人臉聞名于世,靠的就是PG-GAN。
只不過,這種方法有一個明顯的弱點,就是對牙齒、眼睛等等細節(jié),有很強的位置偏好。也就是說,這些細節(jié)特征每移動到一個位置,都會在那里停留很久,才移去下一個位置:
這樣一來,臉上各個部位的姿勢很容易不匹配。
如果你沒看出破綻,觀察下面這張圖吧。臉轉(zhuǎn)了方向之后,牙齒沒有及時跟著走,門牙一直朝著正前方:
這不科學(xué)。
團隊用一種新的方法取代了漸進式增大。療效顯著,人臉轉(zhuǎn)動的時候,牙齒的朝向也隨著改變了:
原本StyleGAN的生成器和判別器都只用了簡單的前饋設(shè)計,所以團隊探索了更科學(xué)的結(jié)構(gòu)。
他們借鑒了MSG-GAN的架構(gòu) (圖a) ,這位前輩是把生成器和判別器的分辨率,用多個跳層連接?(Skip Connections) 匹配起來:
研究人員在這基礎(chǔ)上做了簡化,生成器用了上采樣 (Upsampling) 與求和 (Summing) 來處理每一種分辨率下RGB輸出的貢獻 (圖b上方) 。
判別器 (圖b下方) 也是同理,利用了降采樣 (Downsampling) 。
然后,就是用殘差連接?(Residual Connections) 進一步改造網(wǎng)絡(luò)。不過,ResNet里面兩條路徑相加會讓信號的方差加倍,所以這里乘以1/√2來解決這個問題。
這一步很重要,因為在分類用的ResNet上,這個問題通常會被批量歸一化隱藏起來。
實驗表明,跳層連接可以大大提升PPL,殘差連接又對FID有利。
最終,團隊最終選擇了跳層生成器,以及殘差判別器。
結(jié)果,得到了五官姿勢同步變化的人臉:
還能這樣玩
論文提到,把生成器的工作“顛倒過來 (Inverting) ”,也是個很有趣且很重要的課題。
也就是說,輸入一張圖,如果能夠復(fù)現(xiàn),就可以判斷它是這只GAN生成的。
這就需要把圖片投射進潛在空間里,找到它對應(yīng)的潛在向量,來復(fù)現(xiàn)這張圖。
迭代1000次之后,得到圖片和原圖幾乎無差的話,原圖就是StyleGAN2生成的 (下圖左) ;得到的圖片和原圖有明顯差別的話,原圖就不是StyleGAN2生成的 (下圖右) :
雖然類似的操作從前也出現(xiàn)過,但團隊提出了與前輩不同的方法,來找到復(fù)現(xiàn)需要的潛碼 (Latent Code) :
不去擴展?jié)撛诳臻g,只在原本的潛在空間里找潛碼,這樣不會匹配到無關(guān)的圖像,而是會對應(yīng)到生成過的圖像上;
給潛碼加上了緩步下降的噪音,這樣能更充分地挖掘潛在空間;
另外,還優(yōu)化了StyleGAN2生成器的隨機噪音,就是把它們正則化,避免攜帶相關(guān)信號。
科學(xué)家說,隨著GAN生成的圖像越來越逼真,也就更需要檢測一張圖是不是GAN生成的。
這當(dāng)然是正經(jīng)用途。但在算法開源之后,已經(jīng)被小伙伴們玩壞了:
得到這些鬼畜的表情包,就是說史萊克和阿凡達,果然不是StyleGAN的作品啊。
開源了
既然代碼已經(jīng)放出來,你也要試著玩壞一下StyleGAN2吧。
不然就先看看論文,那里講到的進化之處比本文要全面,看完之后你就會有更大膽的想法了。
論文傳送門:
https://arxiv.org/abs/1912.04958
代碼傳送門:
https://github.com/NVlabs/stylegan2
- 馬云正式卸任后,阿里巴巴開盤跌0.87%2019-09-10
- 亞馬遜在華拓展云計算團隊,挑戰(zhàn)阿里巴巴和騰訊2019-10-16
- AI獨角獸云知聲,已完成一期科創(chuàng)板IPO輔導(dǎo)2019-10-17
- IDC:今年上半年中國公有云服務(wù)市場規(guī)模達54.2億美元2019-11-07