1. 程式人生 > >Pix2Pix(畫素對畫素)總結

Pix2Pix(畫素對畫素)總結

語言翻譯是大家都知道的應用。但影象作為一種交流媒介,也有很多種表達方式,比如灰度圖、彩色圖、梯度圖甚至人的各種標記等。在這些影象之間的轉換稱之為影象翻譯,是一個影象生成任務。

多年來,這些任務都需要用不同的模型去生成。在GAN出現之後,這些任務一下子都可以用同一種框架來解決。這個演算法的名稱叫做Pix2Pix,基於對抗神經網路實現。話不多說,先上一張圖。

雖然論文是去年11月份的,比較古老,但作為一篇很經典的論文,值得一讀。

引入

卷積神經網路, CNN 出現以來,各種影象任務都在飛速的發展。但CNN雖然能夠自動學習出一些東西,仍然需要人的指導。設計對的損失函式便是其中的一種方式,對於影象翻譯等影象生成任務來說,告訴CNN去學習什麼非常的重要。如果告訴CNN去學習一種錯誤的Loss,那麼也不會得到什麼好的結果。以歐式距離為例,CNN學習歐氏距離就會得到一張比較模糊的影象。而對於影象翻譯任務來說,我們需要讓CNN學習能夠輸出真實的清晰的影象。

對抗框架

Pix2Pix框架基於GAN,如果對GAN沒有了解,出門左轉到對抗神經網路去先了解一番。

既然是基於GAN框架,那麼首先先定義輸入輸出。普通的GAN接收的G部分的輸入是隨機向量,輸出是影象;D部分接收的輸入是影象(生成的或是真實的),輸出是對或者錯。這樣G和D聯手就能輸出真實的影象。

但對於影象翻譯任務來說,它的G輸入顯然應該是一張圖x,輸出當然也是一張圖y。但是D的輸入卻應該發生一些變化,因為除了要生成真實影象之外,還要保證生成的影象和輸入影象是匹配的。於是D的輸入就做了一些變動,變成了一個

損失函式

依上所述,Pix2Pix的損失函式為

為了做對比,同時再去訓練一個普通的GAN,即只讓D判斷是否為真實影象。

對於影象翻譯任務而言,G的輸入和輸出之間其實共享了很多資訊,比如影象上色任務,輸入和輸出之間就共享了邊資訊。因而為了保證輸入影象和輸出影象之間的相似度。還加入了L1 Loss

那麼,彙總的損失函式為

生成網路G

正如上所說,輸入和輸出之間會共享很多的資訊。如果使用普通的卷積神經網路,那麼會導致每一層都承載儲存著所有的資訊,這樣神經網路很容易出錯,因而,使用U-Net來進行減負。

上圖中,首先U-Net也是Encoder-Decoder模型,其次,Encoder和Decoder是對稱的。 
所謂的U-Net是將第i層拼接到第n-i層,這樣做是因為第i層和第n-i層的影象大小是一致的,可以認為他們承載著類似的資訊。

判別網路D

在損失函式中,L1被新增進來來保證輸入和輸出的共性。這就啟發出了一個觀點,那就是影象的變形分為兩種,區域性的和全域性的。既然L1可以防止全域性的變形。那麼只要讓D去保證區域性能夠精準即可。

於是,Pix2Pix中的D被實現為Patch-D,所謂Patch,是指無論生成的影象有多大,將其切分為多個固定大小的Patch輸入進D去判斷。

這樣有很多好處:

  • D的輸入變小,計算量小,訓練速度快。
  • 因為G本身是全卷積的,對影象尺度沒有限制。而D如果是按照Patch去處理影象,也對影象大小沒有限制。就會讓整個Pix2Pix框架對影象大小沒有限制。增大了框架的擴充套件性。

訓練細節

  • 梯度下降,G、D交替訓練
  • 使用Adam演算法訓練
  • 在inference的時候,與train的時候一樣,這和傳統CNN不一樣,因為傳統上inference時dropout的實現與train時不同。
  • 在inference的時候,使用test_batch的資料。這也和傳統CNN不一樣,因為傳統做法是使用train set的資料。
  • batch_size = 1 or 4,為1時batch normalization 變為instance normalization

實驗

評測

使用AMT和FCN-score兩種手段來做評測。

  • AMT,一種人工評測平臺,在amazon上。
  • FCN-8,使用預訓練好的語義分類器來判斷圖片的可區分度,這是一種不直接的衡量方式。

Loss function實驗

使用三種不同的損失函式,cGAN, L1和cGAN+L1,得到結果如下:

可以看到,只用L1得到模糊影象,只用cGAN得到的會多很多東西。而L1+cGAN會得到較好的結果。

當然普通的GAN損失函式也被嘗試。只不過這個損失函式只關注生成的影象是否真實,絲毫不管是否對應。所以訓練時間長了以後會導致只輸出一個影象。

色彩實驗

衡量了不同的損失函式下生成的影象色彩與ground truth的區別。

發現,L1有更窄的色彩區間,表明L1鼓勵生成的影象均值化、灰度化。而cGAN會鼓勵生成的影象有更多的色彩。

Patch對比

D是基於Patch的,Patch的大小也是一個可以調整的引數。

不同的size產生了不同的結果。1x1的patch就是基於Pixel的D,從結果上看,沒帶來清晰度的提升,但是卻帶來了更多的顏色。也證明了上一個實驗的結論。

16x16的Patch已經可以達到更好的效果,但是多很多東西(一些亂七八糟的點)。70x70可以消除這些。再變大到286x286,就沒有多大的效果提升了。

U-Net

U-Net中使用了skip-connection,而使用與不使用也做了對比實驗

可以看到,使用普通的Encoder-Decoder導致了很大的模糊。

效果圖

總結

本文將Pix2Pix論文中的所有要點都表述了出來,主要包括:

  • cGAN,輸入為影象而不是隨機向量
  • U-Net,使用skip-connection來共享更多的資訊
  • Pair輸入到D來保證對映
  • Patch-D來降低計算量提升效果
  • L1損失函式的加入來保證輸入和輸出之間的一致性。

Reference

  • [1]. Image-to-image translation with conditional adversarial networks