pix2pix
論文: ofollow,noindex">pix2pix
程式碼: GitHub
本文最大的貢獻在於提出了一個統一的框架解決了影象翻譯問題。所謂影象翻譯,指從一副影象到另一副影象的轉換。可以類比機器翻譯,一種語言轉換為另一種語言。常見的影象翻譯任務有:
- 影象去噪
- 影象超分辨
- 影象補全
- 風格遷移
-
...
在這篇paper裡面,作者提出的框架十分簡潔優雅(好用的演算法總是簡潔優雅的)。相比以往演算法的大量專家知識,手工複雜的loss。這篇paper非常粗暴,使用CGAN處理了一系列的轉換問題。下面是一些轉換示例:
pix2pix結果示例
上面展示了許多有趣的結果,比如分割圖 街景圖,邊緣圖
真實圖。對於第一次看到的時候還是很驚豔的,那麼這個是怎麼做到的呢?我們可以設想一下,如果是我們,我們自己會如何設計這個網路。
直觀的想法
最直接的想法就是,設計一個CNN網路,直接建立輸入-輸出的對映,就像影象去噪問題一樣。可是對於上面的問題,這樣做會帶來一個問題。 生成影象質量不清晰。
拿左上角的分割圖 街景圖為例,語義分割圖的每個標籤比如“汽車”可能對應不同樣式,顏色的汽車。那麼模型學習到的會是所有不同汽車的評均,這樣會造成模糊。

pix2pix語義地圖L1loss結果
如何解決模糊呢?
這裡作者想了一個辦法,即加入GAN的Loss去懲罰模型。GAN相比於傳統生成式模型可以較好的生成高解析度圖片。思路也很簡單,在上述直觀想法的基礎上加入一個判別器,判斷輸入圖片是否是真實樣本。模型示意圖如下:

pix2pix模型示意圖
上圖模型和CGAN有所不同,但它是一個CGAN,只不過輸入只有一個,這個輸入就是條件資訊。原始的CGAN需要輸入隨機噪聲,以及條件。這裡之所有沒有輸入噪聲資訊,是因為在實際實驗中,如果輸入噪聲和條件,噪聲往往被淹沒在條件C當中,所以這裡直接省去了。
其他tricks
從上面兩點可以得到最終的Loss由兩部分構成:
- 輸出和標籤資訊的L1 Loss。
- GAN Loss
-
測試也使用Dropout,以使輸出多樣化
pix2pix Loss
採用L1 Loss而不是L2 Loss的理由很簡單,L1 Loss相比於L2 Loss保邊緣(L2 Loss基於高斯先驗,L1 Loss基於拉普拉斯先驗)。
GAN Loss為LSGAN的最小二乘Loss,並使用PatchGAN(進一步保證生成影象的清晰度)。PatchGAN將影象換分成很多個Patch,並對每一個Patch使用判別器進行判別(實際程式碼實現有更取巧的辦法),將所有Patch的Loss求平均作為最終的Loss。