深度學習《Photo Editing》

星海千尋發表於2020-12-10

一:問題提出
在GAN中的生成器Generator,輸入的是一個低維的向量Z,輸出則是一個圖片,而且呢,在Z空間內上每一維度的值,或者幾個維度的值都可能表示一張圖片的某個特徵,改變Z的值就可以調整影像的內容。

如果此時我們已經訓練得到一個Generator。

問題1. 對於一張已有的生成影像X,如何反推回去得到它對應的向量 ?
問題2. 又如何知道 中的每個維度對應著影像中哪個特徵呢?
問題3. 該維度是以怎樣的具體的數值控制著該特徵的表現呢?

二:問題解決
解答問題1:假設我們現在已經有了一個Generator,我們有一張圖片X,希望能反推出其對應的向量Z。

方法一:除此之外還有一個方法就是用梯度下降的辦法,直接找到一個Z*,使得Z經過構造器產生的圖片X和原始圖片X越接近越好,那麼此時Z*就是我們想要得到的
在這裡插入圖片描述

意思也是十分樸素的,這個式子怎麼解呢?把Z當做是引數,G是固定的,L是評價兩個圖片的相似程度,我們希望越接近越好,可以是L1/L2的畫素損失,或者是一個什麼其他的network來評判二者相似與否。這樣的話呢,就把Z當做引數,進行地圖下降,知道找到一個合適的Z來代表X。

方法二:就需要再設計增加一個encoder,Generator呢就是一個固定的解碼器decoder,它的引數不變,接下來我們訓練出一個encoder,讓其輸入X,得到Z,把Z輸入到decoder,得到X’,而且需要儘可能使得X接近於X’,也就是減少重建誤差。
需要注意的是Generator是固定的,只需要訓練出encoder。
在實際操作中呢,一般是拿判別器Discriminator來初始化encoder的引數,因為他們很類似,都是輸入X,不同的只是判別器輸出的是一個標量,encoder輸出的是一個向量。所以大部分引數是可以初始化的。
在這裡插入圖片描述

方法三:結合上述兩種方法,梯度下降最大的問題就是容易陷入區域性最優,那麼我們可以使用方法二訓練出一個encoder,得到一個比較優秀的解Z,再送入方法一進行fine-tune。

好,這樣我們能得到每一張圖片在一個低維空間的Z的表示。

解答問題2:怎麼求得某個人類可識別的特徵到底存在於Z空間上的哪些維度呢?拿長頭髮和短頭髮的特徵來說,儘量保持其他特徵是一致的,長頭髮圖片的特徵向量分佈和短頭髮的特徵向量分佈是可以計算出來的,通過問我們訓練的那個encoder就能輕鬆得到Z,接著我們求出這兩類向量的差值,觀測差值就能知道哪些維度具有重要的該特徵意義。如下圖,X是長頭髮的圖片,X’是短頭髮的圖片,encoder(X)求出長頭髮的Z值,encoder(X’)求出短頭髮的Z’值,這樣求出兩類圖片的平均差異,Z-Z’,根據差值的各個維度的大小,就能得到哪些維度是在長髮短髮的特徵上有明顯的作用。
在這裡插入圖片描述

平均特徵差異值很有作用,它也是一個和Z相同維度的向量,這樣的話就能看出來,哪個維度數值越大,哪個維度跟長髮短髮越相關,甚至是正相關還是負相關,還可以看出是哪幾個維度共同作用得到的。

其實這裡還有個辦法就是一個個去實驗,用一個bar調,不斷地去更改某個維度值,看看圖片有什麼變化,挑選一些人類能識別的特徵變化,這個維度就有相關性。但是這樣做的效率太低了,不一定準確,不一定能成功得到想要的,所以還是推薦這種特徵值相減的方法,能比較準確定位決定某些特徵的維度位置,而且還是精準匹配特徵和維度的對應關係,不用手動一個個去調節。

解答問題3:在問題二的解答基礎上,既然我們已經知道了某個特徵對應的那個Z空間維度的對應關係,其實就是將Z空間的那個或幾個維度值的數值進行變化,就嫩而過得到新的影像,那麼如果我們想將一個長髮圖片X變成一個短髮的圖片X’,我們先求出X的code Z,再加上上述我們求出的長髮短髮特徵差異值,再送入deoder就可以得到一張新的圖片X’。圖示如下:
在這裡插入圖片描述

三:應用
上面都是講一些基礎研究方法,現在我們來看看一些應用,比如Editing Photos。

假設有一組商品圖片,想要在一定的條件/限制下生成與某個商品圖類似的圖片。如下圖所示:在紅色的限制下,從黑色的衣服生成樣式基本不變的紅色衣服圖片。

你可以說我可以直接PS把黑色變為紅色啊,但是我們也許有時候需要的是更加具有創造性的衣服,甚至是衣服上的圖案也會稍有不同,袖子大小,領口大小也有不同的設計。
在這裡插入圖片描述

首先呢,我們需要能把圖片X對映到一個低維的編碼空間Z。每一個圖片都是該空間的取樣點,在Z空間,得到取樣點Z通過Generator能產生出一張圖片X,我們就在該空間內尋找想要的影像。

至於為什麼在編碼空間內操作,應該是因為低維空間內更好取樣吧,維度越低越好取樣(維度高了不好操控),更容易找到需要的點(否則空間中只有極少極少的點是我們需要的),且利用Generator的話更具有創造性。

將黑色衣服的圖片輸入生成器得到對應的編碼Z,以較小的半徑在該Z點周圍取樣(這個半徑和具體取樣的位置應該都和條件/限制有關),就應該得到符合限制的相近的紅色衣服影像。
之所以在附近取樣是為了儘量和原影像保持一致,衣服的附近大概率是衣服,不是鞋子。

我們也能同樣得到黑色和紅色的平均特徵差異,朝著這個差異方向進行取樣,但是又不能和原始影像差異太大,不能採著採著,衣服變成了鞋子啊。

來吧,我們來看看怎麼做到的。
第一步得先找到圖片X到編碼空間Z的對映,這一步我們已經知道了會有三個方法得到,這裡就多重複說了。

第二步在Z附近進行取樣,目標要優化如下式子,求得最優解的Z。
在這裡插入圖片描述

其中
式子第一部分:U是判別經過Z生成的影像是否是滿足約束限制條件的,差異越小越好。
式子第二部分:同時希望Z不要離原來的Z0太遠,需要和保證和原始影像具有一定的相似度
式子第三部分:同時希望Z能通過構造器得到圖片越真實越好。
因此合併起來就是得到了上述的式子,整個式子的求解呢,就利用梯度下降法求解即可。

相關文章