栗子 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
從前你可能會覺得,英偉達的StyleGAN已經是效果最震撼的GAN了吧。
它既能生成逼真的人臉:
也能生成可愛的老婆:
還有逼真的貓咪、臥室、汽車……投喂哪種數據集,就吐出哪種圖像。
但英偉達并不過度驕傲,自StyleGAN發表以來,團隊就一直研究它的弱點,然后想辦法拯救。
現在,升級版 StyleGAN2誕生了,它彌補了第一代的各種缺陷。
先舉個例子。初代StyleGAN生成人像,周圍總是出現 水滴狀不明物體:
如今,StyleGAN2生成的圖像里,看不到奇怪的水滴了:
不要急著驚訝,這只是其中一處,StyleGAN2解鎖的新技能還有不少。
更美好的是,英偉達已經把算法 開源了。
所以,先來觀察一下它到底是怎樣進化的吧。
水滴是如何消除的?
初代StyleGAN的第一個缺陷,就是剛剛提到的“ 水滴”。嚴重的時候,甚至會破人臉的完整:
論文說,水滴有時候很明顯,有時候肉眼不易察覺,但如果從特征圖(Feature Map) 上看,其實問題一直都在:
△右邊是特征圖
想去除水滴,首先要知道它從哪里來,才好對癥下藥。
從生成 64×64的圖像開始就有了,分辨率越高,水滴現象就越嚴重。
團隊起初對這種缺陷的存在感到費解,因為按常理說 判別器應該能發現才對啊?
但很快,他們就把矛頭指向了 生成器的 實例歸一化 (Instance Normalization),上代StyleGAN用的方法是 AdaIN(自適應實例歸一化) 。
因為,是這個部分負責把每張 特征圖的均值 (Mean) 和方差 (Variance) 分開歸一化,很可能是這種做法破壞了特征信息。
于是一種假設誕生了:
水滴形成的原因是,生成器故意讓信號強度信息 (Signal Strength) 繞過實例歸一化,它會創建一個強大的局部化 (Localized) 的信號峰,來支配統計數據,有效縮放信號強度。 (欺上瞞下的騷套路啊。)
水滴形成的原因是,生成器故意讓信號強度信息 (Signal Strength) 繞過實例歸一化,它會創建一個強大的局部化 (Localized) 的信號峰,來支配統計數據,有效縮放信號強度。 (欺上瞞下的騷套路啊。)
假設輕松得到了驗證。只要把實例歸一化拿掉,水滴就完全消失了。
但真的拿掉之后,又會導致每一種風格的效果累積起來 (Cumulative) ,沒辦法保留在特定的尺度上,這樣就很難控制GAN的生成了。所以, 團隊重新設計了實例歸一化的過程。
說到重新設計,就簡單介紹一下初代StyleGAN。它的生成器是從風格遷移算法上借鑒而來,能在 粗糙到 精細的不同尺度上操控GAN的生成,再把各種尺度的風格 (Style) 結合起來:
△尺度越細調整越小:最精細尺度只調配色,不改姿勢 發型五官
初代StyleGAN的生成器,是在風格塊里加了偏置 (Bias) 和噪聲 (Noise) 。就如下圖,(a)是整體架構,(b) 是細節:
△灰色框是風格塊
團隊發現,如果把偏置和噪音挪到風格塊之外,直接加在已經歸一化的數據上,就能得到更加可預測的結果。
(除此之外,這樣改動過后,只要對標準差做歸一化和調制就足夠,不用再處理均值了。)
這也是重新設計的 第一步,邁出這一步之后架構長這樣:
在此基礎之上,團隊又走了第二步:
原本每個風格塊由三部分組成,一是調制,二是卷積,三是歸一化。
團隊把歸一化這個部分,用一個新的“ 解調(Demodulation) ”代替了。
此處隱去數學過程,只說中心思想:與原本的歸一化相比,“解調”不是基于特征圖的 實際內容 ,而是基于 假設(Assumptions/Expected Statistics) 。也就是說,比從前的操作更溫和了。
修改完畢,變成了下圖的樣子。是調制后直接解調,把解調結果交給卷積:
實驗也證明,新的實例歸一化方法可以有效去除水滴現象。不論是在生成的圖像上,還是在特征圖上,都沒有奇怪的斑點了:
從一張圖到另一張圖的變化過程中,也沒有出現水滴:
與此同時,“解調”也讓各個尺度的風格,保留在原本的尺度上。團隊說,StyleGAN2在不同尺度風格的混合方面,比上一代更自如了:
(來源A和來源B,就是不同尺度的風格。)
這樣,一個缺陷就補好了。
但還有下一個。
五官姿勢不同步怎么破?
初代StyleGAN,用的是 漸進式增大(Progressive Growing) 的訓練方法。
就是從4×4的圖像開始生成,到8×8,到16×16,一步一步增大生成的分辨率,最終煉成1024×1024的高清圖像生成技能。
這種方法能把GAN的訓練過程變得更加穩定,是從大前輩PG-GAN那里沿用下來的。 英偉達第一次以生成逼真人臉聞名于世,靠的就是PG-GAN。
只不過,這種方法有一個明顯的弱點,就是對牙齒、眼睛等等細節,有很強的位置偏好。也就是說,這些細節特征每移動到一個位置,都會在那里停留很久,才移去下一個位置:
這樣一來,臉上各個部位的姿勢很容易不匹配。
如果你沒看出破綻,觀察下面這張圖吧。 臉轉了方向之后,牙齒沒有及時跟著走,門牙一直朝著正前方:
這不科學。
團隊用一種新的方法取代了漸進式增大。療效顯著,人臉轉動的時候,牙齒的朝向也隨著改變了:
原本StyleGAN的生成器和判別器都只用了簡單的前饋設計,所以團隊探索了更科學的結構。
他們借鑒了 MSG-GAN的架構 (圖a) ,這位前輩是把生成器和判別器的分辨率,用多個 跳層連接(Skip Connections) 匹配起來:
研究人員在這基礎上做了簡化,生成器用了上采樣 (Upsampling) 與求和 (Summing) 來處理每一種分辨率下RGB輸出的貢獻 (圖b上方) 。
判別器 (圖b下方) 也是同理,利用了降采樣 (Downsampling) 。
然后,就是用 殘差連接(Residual Connections) 進一步改造網絡。不過,ResNet里面兩條路徑相加會讓信號的方差加倍,所以這里乘以1/√2來解決這個問題。
這一步很重要,因為在分類用的ResNet上,這個問題通常會被批量歸一化隱藏起來。
實驗表明,跳層連接可以大大提升PPL,殘差連接又對FID有利。
最終,團隊最終選擇了跳層生成器,以及殘差判別器。
結果,得到了五官姿勢同步變化的人臉:
還能這樣玩
論文提到,把生成器的工作“顛倒過來 (Inverting) ”,也是個很有趣且很重要的課題。
也就是說,輸入一張圖,如果能夠復現,就可以判斷它是這只GAN生成的。
這就需要把圖片投射進 潛在空間里,找到它對應的 潛在向量,來復現這張圖。
迭代1000次之后,得到圖片和原圖幾乎無差的話,原圖就是StyleGAN2生成的 (下圖左) ;得到的圖片和原圖有明顯差別的話,原圖就不是StyleGAN2生成的 (下圖右) :
雖然類似的操作從前也出現過,但團隊提出了與前輩不同的方法,來找到復現需要的 潛碼(Latent Code) :
不去擴展潛在空間,只在原本的潛在空間里找潛碼,這樣不會匹配到無關的圖像,而是會對應到生成過的圖像上;
給潛碼加上了緩步下降的噪音,這樣能更充分地挖掘潛在空間;
另外,還優化了StyleGAN2生成器的隨機噪音,就是把它們正則化,避免攜帶相關信號。
不去擴展潛在空間,只在原本的潛在空間里找潛碼,這樣不會匹配到無關的圖像,而是會對應到生成過的圖像上;
給潛碼加上了緩步下降的噪音,這樣能更充分地挖掘潛在空間;
另外,還優化了StyleGAN2生成器的隨機噪音,就是把它們正則化,避免攜帶相關信號。
科學家說,隨著GAN生成的圖像越來越逼真,也就更需要檢測一張圖是不是GAN生成的。
這當然是正經用途。但在算法開源之后,已經被小伙伴們玩壞了,比如推特網友@quasimondo:
得到這些鬼畜的表情包,就是說史萊克和阿凡達,果然不是StyleGAN的作品啊。
開源了
既然代碼已經放出來,你也要試著玩壞一下StyleGAN2吧。
不然就先看看論文,那里講到的進化之處比本文要全面,看完之后你就會有更大膽的想法了。
論文傳送門:
https://arxiv.org/abs/1912.04958
代碼傳送門:
https://github/NVlabs/stylegan2
— 完—
大咖齊聚!量子位MEET2020智能未來大會
量子位 MEET 2020 智能未來大會回放來啦!李開復、倪光南、景鯤、周伯文、吳明輝、曹旭東、葉杰平、唐文斌、王硯峰、黃剛、馬原等AI大咖與你一起讀懂人工智能。掃碼觀看回放吧~ ~
量子位 QbitAI · 頭條號簽約作者
?'?' ? 追蹤AI技術和產品新動態
喜歡就點「在看」吧 !


