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