多樣化紋理合成
更多內容見:
//github.com/jiauzhang/dlcv
CVPR 2017
基於判別器和生成器建模方法的紋理合成具有很大的潛力,但是現有方法為了效率而採用的前向網絡在泛化能力上並不行,即一個網絡只能合成一種紋理,缺少多樣性。本文着重解決該問題。訓練一個多紋理合成網絡存在的一些困難:不同類型紋理的統計特是完全不同,使用基於 Gram 矩陣的紋理損失[1, 2]只能部分的衡量其中的差異;紋理之間內在的不同導致收斂速率也不一樣。所以訓練一個多紋理合成網絡的難度取決於紋理之間的差異和各個紋理本身的複雜性。另外,多紋理合成網絡還會出現輸入的噪聲向量被邊緣化的問題,這就導致一個給定的紋理無法生成多個不同樣本,這通常意味着對特定紋理的過擬合。
本文設計的網絡結構有兩個輸入,一個噪聲向量、一個 one-hot vector 表示不同紋理,網絡分為 Generator 和 Selector 兩路,Selector 的每層的特徵圖除了自用之外,還會和 Generator 的對應層特徵拼接在一起作為 Generator 下一層的輸入,最後一層的輸出即為生成的紋理,再使用 VGG 提取特徵。
基於 Gram 矩陣的紋理損失函數對於單一紋理合成很有用,但是用於多紋理時並不夠理想,作者認為這是因為不同紋理的 Gram 矩陣在尺度上有較大的差異導致的,所以本文首先是改進了 Texture loss,由公式(1)變成公式(2):
改進前後的效果對比:
第一行是原始紋理,第二行是公式(1)的效果,第三行是改進後的效果。
另一個需要解決的是缺乏多樣性的問題,因為網絡有把噪聲向量邊緣化的問題,所以作者提出了顯式衡量同一紋理不同噪聲下生成樣本之間的損失函數,即多樣性損失,強行把輸入噪聲和輸出耦合在一起:
其效果如下:
第一列是原始紋理,第三~四列是沒使用多樣性損失的結果,很明顯三個樣本差不多,最後三個是使用了多樣性損失的結果,樣本之間有明顯的差異。
具體訓練時,作者發現每次都隨機的選擇一種紋理和有規律的增量訓練效果差別挺大,增量訓練的過程如下:
隨機訓練和增量訓練的結果對比:
第一行為原始紋理,第二行是隨機訓練的結果,第三行是增量訓練的結果,顯然是增量訓練的結果更接近原始紋理。
作者還將其擴展到了 multi-style transfer 上,這裡就不具體介紹了,關鍵點都是以上的內容,展示點效果:
第一行為 style,第二行為風格遷移效果。風格插值效果如下:
最左邊和最右邊是兩種不同的 style,中間為圖片為插值效果。
參考文獻
[1] L. A. Gatys, A. S. Ecker, and M. Bethge. Texture synthesis using convolutional neural networks. In NIPS, 2015.
[2] L. A. Gatys, A. S. Ecker, and M. Bethge. Image style transfer using convolutional neural networks. In CVPR, 2016.
[3] Li, Yijun, et al. Diversified texture synthesis with feed-forward networks. In CVPR, 2017.