1. 程式人生 > >Generative Adversarial Nets[Theory&MSE]

Generative Adversarial Nets[Theory&MSE]


本文來自《deep multi-scale video prediction beyond mean square error》,時間線為2015年11月,LeCun等人的作品。
從一個視訊序列中預測未來的影象幀涉及到構建一個內部表徵,該表徵能夠對準確對圖片幀演化(如影象內容和動態)進行建模。這就是為什麼畫素空間的視訊預測主要是通過無監督特徵學習來完成。雖然光流在CV領域已經研究的很成熟了,卻很少用在未來影象幀預測中。許多視覺應用可以通過視訊的下一幀來獲取資訊,且不需要對每個畫素軌跡進行追蹤。本文中,作者訓練一個卷積網路基於輸入的序列去生成未來影象幀。為了解決MSE loss函式帶來的圖片幀模糊問題,作者提出了三個不同且完畢的特徵學習策略:

  • 一個多尺度結構;
  • 一個對抗訓練方法;
  • 一個影象梯度差loss函式。

0 引言

視訊表徵的無監督特徵學習是一個很有前景的研究方向,因為資料集基本是無限的,且目前進展仍不盡如人意。相比於經典的影象重構問題,預測未來影象幀甚至需要在缺失其他約束條件下(如稀疏性)構建準確,非平凡的內部表徵。因此,該系統預測的越好,那麼就需要越強的特徵表徵。《Unsupervised learning of video representations using LSTM》中通過構建預測影象序列下一個圖片幀的系統,學到的表徵能夠提升在兩個動作識別資料集上的分類結果。

本文主要關注直接在畫素空間中進行預測,主要處理預測影象中邊緣不夠清晰明顯的問題。通過評估不同的loss函式,發現生成對抗學習可以成功的預測下一幀,最終基於影象梯度生成一個新的loss,旨在保持邊緣的清晰度。

1 模型

本部分描述不同的模型結構(單一的,多尺度的,對抗的)和影象梯度差loss(image gradient difference loss)函式。

\(Y=\{Y_1,...,Y^n\}\)是需要預測的幀序列,輸入的視訊幀序列為\(X=\{X^1,...,X^m\}\)。構建一個卷積網路,其中卷積和ReLU交替出現。


如圖1所示,其是GAN中的G(生成)模組,通過最小化距離函式基於拼接的輸入幀 \(X\),預測一個或多個拼接的幀 \(Y\)。其中假設基於預測幀和真實幀之間的距離是 \(\ell_p\)(p=1或者2):
\[\mathcal{L}_p(X,Y)=\ell_p(G(X),Y)=||G(X)-Y||_p^p\]

然而,這樣的網路至少有兩個主要不足:

  • 問題1:受限於核的size,卷積操作只有短時依賴。池化的選擇也是一種策略,因為輸出解析度必須與輸入解析度一致。有許多保持長時依賴且需要避免池化/子取樣導致解析度減小的方法。最簡單也是最老的方法就是去掉池化/子取樣;或者通過使用“skip”連線跳過池化層,從而保留高頻資訊;還有在拉普拉斯金字塔重建過程中線性地組合多個尺度,本文就是採用該方法。
  • 問題2:相比於較小程度的\(\ell_1\),使用\(\ell_2\) loss會生成模糊的預測,當預測更遠的幀時效果會越來越壞。假設輸出畫素的概率分佈有2個相似的模型\(v_1\),\(v_2\),即使\(v_{avg}\)的概率值非常低,值\(v_{avg}=(v_1+v_2)/2\)也會最大限度減小\(\ell_2\) loss。而在\(\ell_1\)範數下,該影響就減小很多了,不過也不是消失,輸出值將會同樣可能值集合的中位數。

1.1 多尺度網路

關於上述問題1,首先將模型變成多尺度的:讓\(s_1,...,s_{N_{scales}}\,\)表示網路輸入的size。在本文中,\(s_1=4\times 4,s_2=8\times 8,s_3=16\times 16,s_4=32\times 32\)\(u_k\)表示朝著size \(s_k\)方向的上縮放因子。令\(X_k^i,Y_k^i\)表示關於size \(s_k\)\(X^i,Y^i\)的下縮放,且\(G_k^{'}\)是一個網路,給定輸入\(X_k\)和粗粒度預測值\(Y_k\)基礎上,預測\(Y_k-u_k(Y_{k-1})\)。通過迴圈定義\(G_k\),關於\(s_k\)的預測\(\hat Y_k\)為:
\[\hat Y_k=G_k(X)=u_k(\hat Y_{k-1})+G_k^{'}\left( X_k,u_k(\hat Y_{k-1}) \right)\]
因此,網路就預測了一系列結果,從最低的解析度開始,使用\(s_k\)的預測結果作為起始點,讓預測結果的size變成\(s_{k+1}\)。在最低尺度\(s_1\),網路直需要\(X_1\)作為輸入。結構如圖2。


圖2 具體細節下面介紹。令可訓練的引數為 \(W_G\),通過SGD進行訓練。且不論多尺度結構,這裡基於 \(X\)進行 \(Y\)的搜尋並沒有關於任何可能的假設,當然也會導致模糊預測。因為問題2還沒解決。即影象梯度差loss。

1.2 對抗訓練

GAN的原理這裡就不介紹了。本文作者採用了這種對抗的方式開完成無監督訓練的幀預測目的。這裡先介紹判別器D,後續再介紹生成器G。判別器D接收影象幀序列,然後預測最後一幀是生成器G生成的概率。注意到這裡只判別最後一幀是否是G生成的,而其他幀總是來自資料集的,這讓判別器D能夠使用時序資訊,所以G也要生成關於輸入圖片幀序列時序相關的圖片幀。因為G是一輸入幀\(X\)為條件,即使沒有噪音的情況下,生成器的輸入也會存在變化,所以噪音在這裡就不是必須項了。作者在有和沒有噪音兩個情況下做的實驗也證實了基本沒差別。所以後續實驗就採用沒有隨機噪音的方式。

為什麼使用對抗loss的直觀想法是:理論上,為了解決問題2。假設幀序列\(X=(X^1,...X^m)\),後續幀可以是\(Y=(Y^1,...,Y^n)\)或者\(Y^{'}=(Y^{'1},...,Y^{'n})\),且兩個序列概率相同。如之前所述,基於\(\ell_2\) loss訓練的網路可以預測生成平均幀\(Y_{avg}=(Y+Y^{'})/2\)。然而,序列\((X,Y_{avg})\)是基於幀\(X\)並後續跟著\(Y_{avg}\)組成的,其並不是一個可能的序列,所以判別器D可以很容易的進行判別,即模型D並不需要去判別其是屬於序列\((X,Y)\)還是序列\((X,Y^{'})\)

判別器模型D是一個只有單一標量輸出的多尺度卷積網路。訓練\((G,D)\)包含2個交替的過程。為了簡潔,假設使用純粹的SGD(batchsize=1)進行訓練(batchsize=M的情況就是將這M個樣本的loss相加)。

訓練D
\((X,Y)\)表示資料集中樣本,其中\(X\)是一個包含m幀的影象序列,而\(Y\)是包含n幀的影象序列。需要訓練一個判別器D去準確區分\((X,Y)\)是正類,而\((X,G(X))\)是負類。詳細點說,對每個尺度\(k\),先將生成器G固定,對\(D_k\)進行一次SGD迭代。此時有監督樣本是類1的\((X_k,Y_k)\)和類0的\((X_k,G_k(X_k))\)。因此,訓練D的loss函式為:
\[\mathcal{L}_{adv}^D(X,Y)=\sum_{k=1}^{N_{scales}}\, L_{bce}(D_k(X_k,Y_k),1)+L_{bce}(D_k(X_k,G_k(X_k)),0)\]
其中\(L_{bce}\)是二值交叉熵(binary cross-entropy,bce)loss,定義如下:
\[L_{bce}(Y,\hat Y)=-\sum_i\hat Y_i \log(Y_i)+(1-\hat Y_i)\log (1-Y_i)\]
這裡\(Y_i\)取值為\(\{0,1\}\),而\(\hat Y_i\)取值為\([0,1]\)

訓練G
\((X,Y)\)表示不同的資料樣本,此時保持判別器D固定,對生成器G執行一次SGD迭代,以最小化對抗loss:
\[\mathcal{L}_{adv}^G(X,Y)=\sum_{k=1}^{N_{scales}}L_{bce}(D_k(X_k,G_k(X_k)),1)\]
最小化這個loss意味著讓生成器G生成的資料能讓判別器D變得混亂,即D不能正確的進行判別G生成的結果。然而實際上,只最小化該loss會導致不穩定。G總是生成能夠混亂D的樣本,可是卻並不足夠靠近\(Y\)(即,生成的樣本是足夠讓D以假亂真,可是生成的樣本對人類沒多大意義)。然後,D會學著判別這些樣本,導致G生成其他混亂的樣本,然後一直迴圈。為了解決這個問題,需要在生成器上增加一個loss,即成為一個組合loss。此時生成器G的loss為\(\lambda_{adv}\mathcal{L}_{adv}^G+\lambda_{\ell_p}\mathcal{L}_p\)。這自然引入了一個均衡超引數,即介於是邊緣銳化還是GAN的對抗原則,該過程在下面演算法1詳細介紹。

1.3 影象梯度差loss(Image Gradient Difference Loss,GDL)

另一個銳化影象邊緣的策略是直接在生成的loss函式中對預測的影象梯度差進行懲罰。這裡定義一個新的loss,梯度差loss(gradient difference loss,GDL),且其與對抗loss結合起來。GDL函式是介於ground-truth影象\(Y\)和預測影象\(G(X)=\hat Y\)之間的:
\[\mathcal{L}_{gdl}(X,Y)=L_{gdl}(\hat Y,Y)=\sum_{i,j}\left ||Y_{i,j}-Y_{i-1,j}|-|\hat Y_{i,j}-\hat Y_{i-1,j}|\right|^\alpha+\left ||Y_{i,j-1}-Y_{i,j}|-|\hat Y_{i,j-1}-\hat Y_{i,j}|\right |^\alpha\]


這裡 \(\alpha\)是一個整數或者等於1, \(|\cdot|\)表示絕對值。
本文相對同類論文優勢:

  • 相對於其他人總的變化只考慮輸入的重構幀,本文基於預測和真實值之間梯度差進行loss懲罰;
  • 選擇最簡單可能的影象梯度,只涉及到近鄰的畫素強度差異,並不考慮更廣的鄰居,讓訓練時間降低。

1.4 結合後的loss

在本文中,結合後的loss如下:
\[\mathcal{L}(X,Y)=\lambda_{adv}\mathcal{L}_{adv}^G(X,Y)+\lambda_{\ell_p}\mathcal{L}_p(X,Y)+\lambda_{gdl}\mathcal{L}_{gdl}(X,Y)\]

2 實驗

本文基於UCF101和Sports 1m資料集,基於2個引數配置:

  • 使用4個輸入幀預測一幀未來幀,並將預測幀作為下一個真實資料來迴圈生成後續未來幀;
  • 使用8幀輸入幀同時預測8幀未來幀。該方法明顯是個更困難的問題。

使用Sports1m作為訓練集,因為UCF101只有圖片上部分位置才有變化,剩下的就和固定的背景一樣。通過隨機選擇一個範圍內時序影象幀,基於32x32的塊,並確定有足夠的變化(基於幀之間進行L2計算來判斷)。資料塊首先進行歸一化,保證值範圍在-1和1之間。

2.1 網路結構

基於好幾個模型進行實驗,不過只有在最開始的時候是這樣,後續都是基於多尺度結構。本文的baseline模型使用L1和L2的loss,GDL-L1(或者GDL-L2)模型是在GDL上\(\alpha=1\)(對應\(\alpha=2\))和\(p=1\)(對應\(p=2\))的loss,相對的超引數\(\lambda_{gdl}=\lambda_{\ell_p}=1\)。對抗模型(Adv)採用的對抗loss,其\(p=2\),且\(\lambda_{adv}=0.05,\lambda_{\ell_p}=1\)。最後Adv+GDL模型是二者結合,基於同樣的引數下\(\alpha=1,\lambda_{gdl}=1\)

生成模型的訓練
生成模型G結構如表1


其包含padded卷積和ReLU啟用函式。在模型最後增加Tanh保證輸出結果在-1和1之間。學習率$\rho_G $開始是0.04,然後隨著時間降到0.005。為了發揮GPU硬體視訊記憶體,在對抗學習中minibatch為4或者8。基於小影象塊進行訓練,不過因為是全卷積的,所以可以預測的時候無縫應用在更大圖片上。

對抗訓練
判別器D也在表1中,使用標準的非padded卷積,然後跟著全連線層和ReLU啟用函式。對於最大的尺度\(s_4\),在卷積後面加了一個2x2的池化。網路訓練的時候學習率\(\rho_D=0.02\)

2.2 質量評估