當前位置:
首頁 > 知識 > 用 Keras 搭建 GAN:圖像去模糊中的應用

用 Keras 搭建 GAN:圖像去模糊中的應用

本文為雷鋒字幕組編譯的技術博客,原標題GAN with Keras: Application to Image Deblurring,作者為Rapha?l Meudec。

翻譯 | 廖穎 陳俊雅 整理 | 凡江

2014年 Ian Goodfellow 提出了生成對抗網路(GAN)。這篇文章主要介紹在Keras中搭建GAN實現圖像去模糊。所有的Keras代碼可點擊這裡。

快速回憶生成對抗網路

GAN中兩個網路的訓練相互競爭。生成器( generator)合成具有說服力的假輸入來誤導判別器(discriminator ),而判別器則是來識別這個輸入是真的還是假的

生成對抗網路訓練過程—?來源

訓練過程主要有三步

根據雜訊,生成器合成假的輸入

用真的輸入和假的輸入共同訓練判別器

訓練整個模型:整個模型中判別器與生成器連接

注意:在第三步中,判別器的權重是固定的

將這兩個網路連接起來是由於生成器的輸出沒有可用的反饋。我們唯一的準則就是看判別器是否接受生成器的合成的例子。

這些只是對生成對抗網路的一個簡單回顧,如果還是不夠明白的話,可以參考完整介紹。

數據

Ian Goodfellow首次使用GAN模型是生成MNIST數據。 而本篇文章是使用生成對抗網路進行圖像去模糊。因此生成器的輸入不是雜訊,而是模糊圖像。

數據集來自GOPRO數據,你可以下載精簡版數據集(https://drive.google.com/file/d/1H0PIXvJH4c40pk7ou6nAwoxuR4Qh_Sa2/view?usp=sharing),也可以下載完整版數據集(https://drive.google.com/file/d/1SlURvdQsokgsoyTosAaELc4zRjQz9T2U/view?usp=sharing)。其中包含了來自不同街道視角的人造模糊圖像,根據不同的場景將數據集分在各個子文件夾中。

我們先把圖像分到 A(模糊)和 B(清晰)兩個文件夾。這個 A&B 結構對應於原始文章pix2pix 。我創建了一個 自定義腳本來執行這個任務。 看看 README 後嘗試一下吧。


模型

訓練過程還是一樣,首先來看一下神經網路結構。

生成器

生成器要生成清晰圖像,網路是基於ResNet blocks的,它可以記錄對原始模糊圖像操作的過程。原文還使用了基於UNet的版本,但我目前還沒有實現。這兩種結構都可以很好地進行圖像去模糊。

DeblurGAN 生成器網路?結構 —? 來源

核心是採用9個ResNet blocks對原始圖像進行上採樣。來看一下Keras上的實現!

ResNet 層就是一個基本的卷積層,其中,輸入和輸出相加,形成最終輸出。

生成器結構的 Keras 實現

按照計劃,用9個ResNet blocks對輸入進行上採樣。我們在輸入到輸出增加一個連接,然後除以2 來對輸出進行歸一化。

這就是生成器了! 我們再來看看判別器的結構吧。

判別器

判別器的目標就是要確定一張輸入圖片是否為合成的。因此判別器的結構採用卷積結構,而且是一個單值輸出

判別器結構的 Keras 實現

最後一步就是建立完整的模型。這個GAN的一個特點就是輸入的是真實圖片而不是雜訊 。因此我們就有了一個對生成器輸出的直接反饋

接下來看看採用兩個損失如何充分利用這個特殊性。


訓練

損失

我們提取生成器最後和整個模型最後的損失。

第一個是感知損失,根據生成器輸出直接可以計算得到。第一個損失保證 GAN 模型針對的是去模糊任務。它比較了VGG第一次卷積的輸出

第二個損失是對整個模型輸出計算的Wasserstein loss,計算了兩張圖像的平均差值。眾所周知,這種損失可以提高生成對抗網路的收斂性。

訓練流程

第一步是載入數據並初始化模型。我們使用自定義函數載入數據集,然後對模型使用 Adam 優化器。我們設置 Keras 可訓練選項來防止判別器進行訓練。

然後我們進行epochs(一個完整的數據集通過了神經網路一次並且返回了一次的過程,稱為一個epoch),並將整個數據集分批次(batches)。

最後根據兩者的損失,可以相繼訓練判別器和生成器。用生成器生成假的輸入,訓練判別器區別真假輸入,並對整個模型進行訓練。

你可以參考Github來查看完整的循環。


實驗

我使用的是在AWS 實例(p2.xlarge)上配置深度學習 AMI (version 3.0)進行的 。對GOPRO 精簡版數據集的訓練時間大約有 5 個小時(50個epochs)。

圖像去模糊結果

從左到右:原始圖像,模糊圖像,GAN 輸出

上面的輸出結果都是我們用 Keras 進行 Deblur GAN 的結果。即使是對高度模糊,網路也可以減小模糊,產生一張具有更多信息的圖片,使得車燈更加匯聚,樹枝更加清晰。

左圖: GOPRO 測試圖像,右圖:GAN 輸出結果

因為引入了 VGG 來計算損失,所以會產生圖像頂部出現感應特徵的局限。

左圖: GOPRO 測試圖像,右圖:GAN 輸出結果

希望你們可以喜歡這篇關於生成對抗網路用於圖像去模糊的文章。 你可以評論,關注我或者聯繫我。

如果你對機器視覺感興趣,我們還寫過一篇用Keras實現基於內容的圖像復原 。下面是生成對抗網路資源的列表。

左圖: GOPRO 測試圖像,右圖:GAN 輸出結果

生成對抗網路資源

NIPS 2016: Generative Adversarial Networks by Ian Goodfellow

ICCV 2017: Tutorials on GAN

GAN Implementations with Keras by Eric Linder-Noren

A List of Generative Adversarial Networks Resources by deeplearning4j

Really-awesome-gan by Holger Caesar

博客原址 https://blog.sicara.com/keras-generative-adversarial-networks-image-deblurring-45e3ab6977b5

更多文章,關注雷鋒網

添加雷鋒字幕組微信號(leiphonefansub)為好友

備註「我要加入」,To be an AI Volunteer !

4 月 AI 求職季

8 大明星企業

10 場分享盛宴

20 小時獨門秘籍

4.10-4.19,我們準時相約!

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

喜大普奔,Keras 官方中文版文檔發布啦!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

用 CNN分100,000 類圖像
加速 AI 2.0,ARC 推理挑戰賽等你來戰!

TAG:AI研習社 |