**Paper:** **[Image2StyleGAN++: How to Edit the Embedded Images](https://arxiv.org/pdf/1911.11544.pdf)** 文中從三個方面拓展了Image2StyleGAN: 1. 引入了noise optimization 2. 拓展全域的$W+$至局部的$W+$ 3. 結合embedding與激活張量(feature map, 文中稱為activation tensor)來對影像的局部特徵進行編輯 ![](https://hackmd.io/_uploads/BkLIb9bY3.png) ## Introduction 上述提到的第一點,文中發現影像的細節在引入noise空間優化後可以進一步地被改善,而noise空間優化需要在$W+$空間優化時逐步進行,而非同步進行,第二點是想加強算法對於局部特徵控制的能力,而文中透過在embedding算法中加入未定義內容的遮罩,而算法的目標則是在遮罩外部找到合理的embedding,同時在遮罩中填充合理的內容,第三點則是探討結合embedding算法及直接對特徵圖進行操縱的影響。 本篇論文的貢獻如下: * 提出了Noise space的優化方法 * 提出額外的embedding算法可對局部進行修改 * 探討結合embedding與操控特徵圖對於影像編緝的影響 * 將文中的架構應用在多張影像的編輯、操縱,並取得SOTA的成果 ## Related Work ### Latent Space Embedding 普遍來講,embedding方法主要有兩種: 1. 訓練一個Encoder,輸入影像後encode成latent code 2. 選擇一個初始的latent code,並藉由gradient descent的方式迭代優化latent code ### Activation Tensor Manipulation 在網路權重固定的情況下,利用特徵圖來操控生成器是可行的,其中[4](https://arxiv.org/abs/1811.10597), [5](https://arxiv.org/abs/1910.11626)兩篇提到一個影像語意編輯系統可以增加、刪除、修改影像中物件的特徵,而[11](https://arxiv.org/abs/1904.12795)也發現邊界附近的artifact可以利用對於淺層特徵圖進行cropping, combining來消除。 ## Overview 文章架構如下: 1. 提出Image2StyleGAN的擴充內容: * 整合多個spatial mask到優化流程中,這些mask可以使不完整的影像在embed後缺少這些區塊的值,而加入某些線條,會使重建影像產生像疤痕的作用。此外,文中對於StyleGAN不同層加入mask進行研究,並發現StyleGAN淺層會控制圖像的內容,而深層控制圖像的風格,因此可以透過對不同層的embedding加入限制,來控制圖像最後呈現的屬性、風格。 * 透過優化noise space來增加embedding的品質。 2. 探討操縱特徵圖的不同做法,如spatial copying, channel-wise copying與averaging 3. 概述Image2StyleGAN++在不同應用上的結果,其中包含:改善影像重建的品質、image crossover(兩張影像內插)、影像修復、局部編輯等等。 ## An Extended Embedding Algorithm ![](https://hackmd.io/_uploads/S11BOcZtn.png =x300) 與Image2StyleGAN相同,本篇也是利用梯度來求取最佳的latent code,不一樣的是本篇除了W+空間也引入了Noise的空間,並且求取這兩個空間最佳的向量,而Image2StyleGAN++的目標函數由三個loss所組成,即pixel-wise MSE loss, perceptual loss, style loss: ![](https://hackmd.io/_uploads/B1hT3YZK2.png =x240) 其中$x$, $y$為目標影像(可為相同影像); $Ms$, $Mm$, $Mp$為spatial mask; $⊙$為逐項乘積; $G$為StyleGAN; $w$,$n$分別為在$W+$和Noise空間的變數; $Lstyle$為預訓練的VGG-16的conv3_3的特徵圖; $L percept$與Image2StyleGAN中的一樣,不過改成conv1_1, conv1_2, conv2_2, conv3_3,另外此處的$Mp$需要因應特徵圖的大小做降維。 * Figure 1中應該就是用了兩張圖x=(a), y=(b)之類的,然後M各設一半。 ### Optimization Strategies ![](https://hackmd.io/_uploads/ByckNqWt3.png) 第一種可行的方式是同時優化$W+$與Noise空間,而其結果如圖2所示,其中(b)在noise優化時引入了perceptual loss所以導致重建的品質降低,而(c)中雖然結果很好但不適合用於影像編緝,而(e)的PSNR降低至33.3dB,其感知品質較差,因此文中不推薦同時優化這兩個空間。 ![](https://hackmd.io/_uploads/rktrwcbKn.png) 第二種方法為交替優化,即先優化$w$在優化$n$或是相反,圖(3)為交替優化的結果,而比較(c)和(d)發現在優化$n$後優化$w$(d的結果)會使PSNR從39.5dB降低到20dB,因此文中採取先優化$w$再優化$n$的交替優化方式。 ## Activation Tensor Manipulations 文中探討了三種對特徵圖操作的方法: 1. spatial copying: 以$B_l^I$直接取代某層的特徵圖$A_l^I$ 2. averaging: 以$λA_l^I+(1-λ)B_l^I$取代原本的特徵圖 3. channel-wise copying: 重新創建一個tensor,選則一些$A_l^I$的pixel剩下的用$B_l^I$補齊 文中發現spatial copying的結果是最好的。 ## Frequently Used Building Blocks 文中確認了4個加入遮罩的應用,並在下一章中會探討,而本節主要探討的是損失函數也可以以空間遮罩來控制。文中利用二元遮罩$w_m, n_m$來控制對k層的$w$或$n$的變數進行控制,其中若$w_m$或$n_m$的某個值為0則該變數就不會被更新,而若值為1則會被更新,以下會探討$w_m, n_m$對於損失函數控制的方式。 #### Masked $W+$ optimization($Wl$): 這個函數僅優化$w∈W+$,其損失函數如下: ![](https://hackmd.io/_uploads/r1diNVVYh.png =x150) 其中$λ_s=0$, $λ_{mse1}=10^{-5}$, $λ_{mse2}=0$, $λ_p=10^{-5}$, $w_m$為$W+$空間中的mask, $Optim=Adam or SGD$, $lr=0.01$ for Adam 0.8 for SGD。 #### Masked Noise Optimization($Mkn$): 此函數僅優化$n∈N_s$,其損失函數如下: ![](https://hackmd.io/_uploads/ryS0uNEt2.png) 其中$λ_s=0$, $λ_{mse1}=10^{-5}$, $λ_{mse2}=10^{-5}$, $λ_p=0$, $lr=5$ for Adam。 #### Masked Style Transfer($M_{st}$) 此函數優化$w$進而獲得影像$y$的風格,如下: ![](https://hackmd.io/_uploads/BJgxcEYFn.png) 其中$λ_s=5*10^{-7}$, $λ_{mse1}=0$, $λ_{mse2}=0$, $λ_p=0$, $lr=5$ for Adam。 #### Masked activation tensor operation($I_{att}$) 此函數說明對特徵圖的操作,如下: ![](https://hackmd.io/_uploads/SkxxsEtK3.png) 其中$G(w,n,t)$為生成器;$w$, $n$分別是$W+$和Noise空間中的變數;$t$為輸入的張量(特徵圖),$A_l^{I_1}$與$B_l^{I_2}$為第$l$層的$I_1$與$I_2$影像,$M_1$與$M_2$則為降維後的遮罩。 ## Application #### Improved image reconstruction ![](https://hackmd.io/_uploads/SkryUVpt2.png) Alogrithm 2中首先將算法應用於影像重建,其中$w_{ini}$為平均臉或由$U[-1,1]$採樣的隨機數,$n_{ini}$則由$N(0,I)$的常態分佈採樣而來,在影像重建的應用中,將不會使用到遮罩,然而此影用有採用masked noise optimization($Mk_n$),文中對於優化$W_l$迭代了5000次,而$Mk_n$迭代了3000次,而$I_m$為欲重建的影像。 Fig.4 結果顯示此算法重建的影像品質很好,PNSR可以達到39~45dB,主要是因為優化Noise 空間可以很好地重建高頻特徵(細節特徵)。 ![](https://hackmd.io/_uploads/B1bhw46Fn.png) #### Image crossover ![](https://hackmd.io/_uploads/BJ9sqNpYn.png) Image crossover的定義是將來源影像$y$的部分特徵複製到目標影像$x$中,並將邊界融合。Alg. 3為Image crossover的算法,首先將目標影像與來源影像embed到$W+$空間中得到各自的$w^*$,在使用遮罩$M_{blur}$,並以$W_l$操作得到$w_{out}$,而此應用中也有noise操作,而文中在$W_l$操作與noise操作都優化1000次。 ![](https://hackmd.io/_uploads/rkiwaVaF2.png) 圖5為此應用的結果。 #### Image inpainting ![](https://hackmd.io/_uploads/Hybha46Fn.png) 在此應用中,$I_{def}$為有遮擋的輸入影像,$M$即為遮擋的區塊,而$M_{blur+}$較$M$稍微大一點,目的在於融合遮擋的邊界,此應用中同樣優化了$W+$與noise空間,在$W+$優化的操作上使用了$w_m$,僅更新1到9層、17與18層($w$空間在10~16層是不會更新的),在初始化中,$w_{ini}$為平均人臉,此應用中的$λ_{mse2}$為$10^{-4}$,在優化上對$W_l$操作迭代了200次,而noise空間迭代了1000次。 ![](https://hackmd.io/_uploads/ry-rYrTth.png) 圖6為此應用的結果,與partial convolution等方法相比,此方法不會出現有規則的artifact。 ![](https://hackmd.io/_uploads/HkLTtB6Fn.png) 圖7中顯示的則是利用不同$w_{ini}$所修補後的影像,可以看到在$U[−0.4,0.4]$中採樣不同的初始化參數即會生成出不同的結果。 #### Local edits using scribbles ![](https://hackmd.io/_uploads/H1VkLWl5h.png) 此應用利用使用者對影像作出的一些擦痕、塗鴉等等,產製出相對應的影像。此應用只使用到第4,5,6層的$W+$空間,首先輸入的影像為有塗鴉的影像,$w_{ini}$為沒有塗鴉的原始影像,$w_m$僅對應4,5,6層,因此只有4~6層的$w$參數會更新,此應用中同樣會更新noise空間,$W+$空間與noise操作都會迭代1000次。 ![](https://hackmd.io/_uploads/H1trPWeqh.png) #### Local style transfer ![](https://hackmd.io/_uploads/Byt6v-e52.png) 此應用中的輸入影像為原始影像$I_1$及風格影像$I_2$,首先會將原始影像embed到$W+$空間作為初始向量$w^*$,在進行遮罩操作,最後同樣會加入noise操作,而此應用中$W+$空間與noise空間都是迭代優化1000次。 ![](https://hackmd.io/_uploads/ryATdWgch.png) #### Attribute level feature transfer 此應用操縱StyleGAN中的第4層。首先輸入兩張影像($I_1, I_2$)的latent code(含noise),之後儲存第4層的輸出特徵圖$A_l^{I1}$與$B_l^{I2}$,遮罩$M_s$指示將複製$A_l^{I1}$中何處的特徵以及複製$B_l^{I2}$中何處的特徵,並利用$I_{att}$的操作將$I_1$特徵與$I_2$特徵整合成一張影像。 ![](https://hackmd.io/_uploads/ryXiJzl9n.png) 圖10為此應用結果,首列的影像為提供風格的影像,第二列為提供局部特徵的影像,可以看到不管是人臉還是車等等,影像融合的結果都非常好。 ## Conclusion 文中提出的Image2StyleGAN++是由因為三個重要見解而受到啟發所提出的算法: 1. 高頻特徵是由StyleGAN中的noise map所控制,因此能夠知道影像在noise map的分布,就可以提升重建影像的品質。 2. 利用遮罩及相關算法是可以完成影像中局部特徵的編輯。 3. 對於特定層的特徵圖進行操作,也可以完成對影像的編輯。