pix2pix算法筆記

論文:Image-to-Image Translation with Conditional Adversarial Networks
論文鏈接:https://arxiv.org/abs/1611.07004
代碼鏈接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

這篇論文發表在CVPR2017,簡稱pix2pix,是將GAN應用於有監督的圖像到圖像翻譯的經典論文,有監督表示訓練數據是成對的。圖像到圖像翻譯(image-to-image translation)是GAN很重要的一個應用方向,什麼叫圖像到圖像翻譯呢?其實就是基於一張輸入圖像得到想要的輸出圖像的過程,可以看做是圖像和圖像之間的一種映射(mapping),我們常見的圖像修復、超分辨率其實都是圖像到圖像翻譯的例子。這篇論文列舉了一些圖像到圖像翻譯的例子如圖Figure1所示,包括從標籤到圖像的生成、圖像邊緣到圖像的生成等過程。
在這裏插入圖片描述
pix2pix基於GAN實現圖像翻譯,更準確地講是基於cGAN(conditional GAN,也叫條件GAN),因爲cGAN可以通過添加條件信息來指導圖像生成,因此在圖像翻譯中就可以將輸入圖像作爲條件,學習從輸入圖像到輸出圖像之間的映射,從而得到指定的輸出圖像。而其他基於GAN來做圖像翻譯的,因爲GAN算法的生成器是基於一個隨機噪聲生成圖像,難以控制輸出,因此基本上都是通過其他約束條件來指導圖像生成,而不是利用cGAN,這是pix2pix和其他基於GAN做圖像翻譯的差異。

pix2pix算法的示意圖如圖Figure2所示,在圖中以基於圖像邊緣生成圖像爲例介紹pix2pix的工作流程。首先輸入圖像用y表示,輸入圖像的邊緣圖像用x表示,pix2pix在訓練時需要成對的圖像(x和y)。x作爲生成器G的輸入(隨機噪聲z在圖中並未畫出,去掉z不會對生成效果有太大影響,但假如將x和z合併在一起作爲G的輸入,可以得到更多樣的輸出)得到生成圖像G(x),然後將G(x)和x基於通道維度合併在一起,最後作爲判別器D的輸入得到預測概率值,該預測概率值表示輸入是否是一對真實圖像,概率值越接近1表示判別器D越肯定輸入是一對真實圖像。另外真實圖像y和x也基於通道維度合併在一起,作爲判別器D的輸入得到概率預測值。因此判別器D的訓練目標就是在輸入不是一對真實圖像(x和G(x))時輸出小的概率值(比如最小是0),在輸入是一對真實圖像(x和y)時輸出大的概率值(比如最大是1)。生成器G的訓練目標就是使得生成的G(x)和x作爲判別器D的輸入時,判別器D輸出的概率值儘可能大,這樣就相當於成功欺騙了判別器D。
在這裏插入圖片描述
pix2pix的優化目標包含2個部分,如公式4所示。一部分是cGAN的優化目標;另一部分是L1距離,用來約束生成圖像和真實圖像之間的差異,這部分借鑑了其他基於GAN做圖像翻譯的思想,只不過這裏用L1而不是L2,目的是減少生成圖像的模糊。
在這裏插入圖片描述
cGAN的優化目標如公式1所示,z表示隨機噪聲,判別器D的優化目標是使得公式1的值越大越好,而生成器G的優化目標是使得公式1的log(1-D(x,G(x,z))越小越好,這也就是公式4中min和max的含義。這裏需要注意的是正如GAN論文提到的,公式1有時候訓練容易出現飽和現象,也就是判別器D很強大,但是生成器G很弱小,導致G基本上訓練不起來,因此可以將生成器G的優化目標從最小化log(1-D(x,G(x,z))修改爲最大化log(D(x,G(x,z))),pix2pix算法採用修改後的優化目標。
在這裏插入圖片描述
L1距離如公式3所示,用來約束生成圖像G(x, z)和真實圖像y之間的差異。
在這裏插入圖片描述
接下來是關於生成器和判別器的網絡結構設計。
生成器採用U-Net,這是在圖像分割領域應用非常廣泛的網絡結構,能夠充分融合特徵;而原本GAN中常用的生成器結構是encoder-decoder類型,二者的對比如Figure3所示。
在這裏插入圖片描述
判別器採用PatchGAN,PatchGAN對輸入圖像的每個區域(patch)都輸出一個預測概率值,相當於從判斷輸入是真還是假演變成判斷輸入的N*N大小區域是真還是假。舉個例子,假設判別器的輸入是162562561*6*256*256,N設置爲8,判別器的輸出大小是1132321*1*32*32,其中323232*32大小的輸出中的每個值都表示輸入中對應888*8區域是真實的概率。

實驗結果:
Table1是關於不同損失函數的組成效果對比, 這裏採用的是基於分割標籤得到圖像的任務。評價時候採用語義分割算法FCN對生成器得到的合成圖像做語義分割得到分割圖,假如合成圖像足夠真實,那麼分割結果也會更接近真實圖像的分割結果,分割結果的評價主要採用語義分割中常用的基於像素點的準確率和IOU等。
在這裏插入圖片描述
Table2是關於不同生成器的效果,主要是encoder-decoder和U-Net的對比。
在這裏插入圖片描述
Table3是關於判別器PatchGAN採用不同大小N的實驗結果,其中111*1表示以像素點爲單位判斷真假,顯然這樣的判斷缺少足夠的信息,因此效果不好;286286286*286表示常規的以圖像爲單位判斷真假,這是比較常規的做法,從實驗來看效果也一般。中間2行是介於前兩者之間的PatchGAN的效果,可以看到基於區域來判斷真假效果較好。
在這裏插入圖片描述
最後放一下pix2pix的生成圖像,可以基於圖像邊緣得到圖像、基於語義分割的標籤得到圖像、背景去除、圖像修復等。更多結果可以參考原論文,效果還是很不錯的。
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章