图像去模糊代码 python_用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數據 ,你可以下載 精簡版數據集 (9GB),也可以下載 完整版數據集 (35GB)。其中 包含了來自不同街道視角的人造模糊圖像 ,根據不同的場景將數據集分在各個子文件夾中。
我們先把圖像分到 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 輸出結果
生成對抗網絡資源
更多文章,關注雷鋒網 雷鋒網雷鋒網
添加雷鋒字幕組微信號(leiphonefansub)為好友
備注「我要加入」,To be an? AI? Volunteer !
雷鋒網原創文章,未經授權禁止轉載。詳情見 轉載須知 。
總結
以上是生活随笔為你收集整理的图像去模糊代码 python_用Keras搭建GAN:图像去模糊中的应用(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue项目android,Android
- 下一篇: python文本分词_【Python】使