GAN網路圖像翻譯機:圖像復原、模糊變清晰、素描變彩圖
1新智元專欄
作者:劉世強
【新智元導讀】本文介紹深度學習方法在圖像翻譯領域的應用,通過實現一個編碼解碼「圖像翻譯機」進行圖像的清晰化處理,展示深度學習應用在圖像翻譯領域的效果。
近年來深度學習在圖像處理、音頻處理以及NLP領域取得了令人矚目的成績,特別在圖像處理領域,深度學習已然成為主流方法。本文介紹深度學習方法在圖像翻譯領域的應用,通過實現一個編碼解碼「圖像翻譯機」進行圖像的清晰化處理,展示深度學習應用在圖像翻譯領域的效果。此外,由於神經網路能夠自動進行特徵工程,同一個模型,如果我們使用不同場景下的數據進行訓練,便可適應不同的場景,真正實現了以不變應萬變。在存在對偶關係的圖像處理場景,不妨嘗試一下「圖像翻譯機」方法,效果應該不會太差。最後我們介紹一下最近大熱的生成對抗神經網路(GAN)在圖像翻譯的最新進展。
圖像翻譯,類似於語言翻譯,是把一種圖像轉換為另一種圖像,例如圖像復原、把二維地圖轉換為三維地圖、把模糊圖像轉換為清晰圖像、把素描轉化為彩圖等等。在深度學習流行之前,進行圖像翻譯是一種state of art的工作,以圖像復原為例,原來常使用濾波的方法,針對不同種類的退化圖像,需要使用不同的濾波方案。而現在使用深度學習方法,只要訓練數據足夠多,方法簡單粗暴但效果很好。下面這些圖例都可以歸為圖像翻譯的範圍:
這裡讓我們構造一個簡單的編碼解碼「圖像翻譯機」進行模糊圖像的清晰化處理,項目地址:https://github.com/lsqpku/img2img。note: 本項目中的一部分代碼來自於DCGAN項目(https://github.com/Newmu/dcgan_code)。
搭建「圖像翻譯機」
本文構造的「圖像翻譯機」參考了自編碼神經網路的思想,自編碼神經網路是一種無監督學習演算法,通過編碼-解碼過程,使得輸出盡量和輸入相等,因此可以把自編碼神經網路看作是一個恆等函數,關於自編碼神經網路可參考斯坦福大學的教學資料http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity。我們把GAN中discriminator網路結構和generator網路結構重新組合起來,把discriminator改造為encoder,把generator改造為decoder,這樣就建一個簡單的圖像翻譯網路,網路結構如下:
(作為示例項目,為減少計算量和過擬合,在網路結構中心並沒有增加全連接的bottleneck層)其中encoder網路結構的tensorflow代碼是:
其中卷積層後面掛著batch norm層進行正則化,卷積層激活函數是leaky relu。
generator網路結構tensorflow代碼是:
其中卷積層後面掛著batch norm層進行正則化,激活函數是relu,最後進行了tanh激活。
這一結構類似於自編碼神經網路,不同的是,在訓練這個翻譯網路的時候,輸入和輸出圖像屬於不同的域。例如在訓練一個模糊圖像清晰化的神經網路時,輸入的訓練樣本是模糊圖像,輸出是清晰化後的圖像,輸出圖像要盡量和對應的清晰圖像接近,因此訓練樣本是模糊圖像加對應的清晰圖像。
示意圖,輸入模糊圖像,輸出清晰圖像:
對於損失函數,我們簡單地使用了輸出圖像和原圖像的L2 loss作為損失函數。
self.loss = tf.nn.l2_loss(self.G - inputs)
準備訓練和測試數據
我們使用了wiki 人臉數據(https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/)進行訓練,刪除原始數據集中的黑白圖片,並把人臉按照性別分開,本項目使用男性人臉數據進行訓練。此外,為了得到模糊圖像,我們分別對原始圖像進行了高斯模糊、隨機高斯模糊以及先縮小再放大到原尺寸的resize模糊,模糊圖像和原始圖像一一對應,這樣就得到一大批對偶的模糊-清晰圖像訓練集(超過2萬張圖片)。理論上我們可以使用任何圖片數據集進行訓練和測試,但是需要注意訓練數據的樣本量,對於上述的模型,當圖片數量不超過1000時,會導致明顯的過擬合,建議訓練樣本在上萬張以上。對於測試數據,我們使用了男性人臉、女性人臉、甚至建築物進行測試。
測試效果
前面第一副圖像以及下圖都是使用該神經網路對男性測試樣本進行的清晰化處理,從處理效果看,雖然並不完美,但清晰化程度已大大提高(從左到右:原圖像、模糊化後的圖像和通過模型清晰化的圖像)。
那麼使用男性人臉訓練的模型對女性測試樣本進行清晰化處理效果如何呢?下圖是女性測試樣本的處理效果(同樣對女性樣本進行高斯模糊),和男性處理效果差不多(從左到右:原圖像、模糊化後的圖像和通過模型清晰化的圖像)。
開一下腦洞,對非人臉樣本的處理效果如何?下圖是對一些非人臉圖片的測試效果(同樣是先進行了高斯模糊),發現效果也是比較好的,但是色系發生了變化,從冷色調轉變為人臉色調(從左到右:原圖像、模糊化後的圖像和通過模型清晰化的圖像)。
把上圖轉為灰度圖像,清晰化效果看起來更明顯一些(從左到右:原圖像、模糊化後的圖像和通過模型清晰化的圖像):
然而,高斯模糊只是模糊方法的一種,使用高斯模糊圖像進行訓練的模型是否適用於其他模糊方案(例如先resize原圖像的1/16,再resize回原尺寸)?下圖是對resize模糊方案處理過的測試樣本的測試效果(左圖為對高斯模糊圖像進行清晰化後的效果,右圖為對resize模糊圖像進行清晰化後的效果)。
可以看出使用高斯模糊圖像訓練的模型在處理resize模糊圖像效果變差,但這是可以解釋的,深度學習本質上還是一種模式識別,使用高斯模糊的訓練樣本,模型會找到高斯模糊的模式。為了使得模型也能夠處理resize模糊圖像,我們可以把兩種樣本都作為訓練樣本進行訓練,試驗表明對兩種情況的清晰化都會比較好,這就是深度神經網路的強大之處,模型的capacity可以很大,通過增加測試樣本和模型規模,一個模型可以處理更複雜的情況。
圖像翻譯的最新進展
上面的模型只是一種神經網路簡單的應用,由於模型的損失函數是簡單的L2-loss,因此會造成圖像模糊化的效果。為了使圖像變得更加真實並減少對訓練樣本量的依賴,有人使用GAN進行圖像翻譯,這裡介紹幾個比較不錯的案例:
1. pix2pix
article: https://arxiv.org/abs/1611.07004
repo:torch版本https://github.com/phillipi/pix2pix;
tensorflow版本:https://github.com/affinelayer/pix2pix-tensorflow)
這篇文章的創新之處在於兩點:一是generator的損失函數除了判別真偽以外,加入了L1損失;另一個技巧是在判別真偽時,不是在整個圖像範圍內判別,而是把圖片按patch進行判別,作者稱之為patchGAN。經過對比測試發現,在人臉數據上這個模型的效果和上面的基礎模型差別不大,但是在facades和citycapes等數據集上,效果看起來要更真實(由於facades和citycapes數據集很小,我們的模型出現了過擬合現像)。
2. CycleGAN
article: https://arxiv.org/pdf/1703.10593.pdf repo:https://github.com/hardikbansal/CycleGAN
基礎模型以及pix2pix模型要求配對的訓練樣本,但是實際上常常很難找到大量的此類樣本,CycleGAN的作者提出了另一種GAN變種, 主要貢獻在於發揮無監督學習的作用,只要提供兩類數據集即可,不要求嚴格配對(比如普通馬轉斑馬)。模型較複雜(需要用到2個判別器和兩個生成器),感興趣的可參閱https://hardikbansal.github.io/CycleGANBlog/
3. DualGAN
Article:https://arxiv.org/abs/1704.02510
把對偶學習思想和GAN結合起來,思路和上面的CycleGAN有點類似,也用於解決訓練樣本不足的問題,用到兩套GAN,一套GAN生成的圖像作為另一套GAN的輸入網路結構如下。
總結
總的來說,使用神經網路進行圖像翻譯,簡單高效,結合GAN網路,只要較少的訓練樣本就可以讓生成圖像非常逼真,大家可以嘗試在更多圖像對偶場景下應用圖像翻譯的思路,發揮深度學習的威力。
(本文作者是泰康保險集團數據信息中心劉世強)
【號外】新智元正在進行新一輪招聘,飛往智能宇宙的最美飛船,還有N個座位


※普京:領導AI者將統領世界,未來戰爭派無人機上場即可
※麥肯錫3000高管調查:要想利用AI取得成功,你需要知道這10個秘訣
※「深度學習Github 10萬+源代碼分析」Python是第三受歡迎語言
※「57行代碼搞定8600萬美元項目」用開源工具DIY車牌識別系統
※「業界」基於騰訊Angel的LDA*入選VLDB,超越微軟LightLDA
TAG:新智元 |