選自GitHub

項目作者:Francesco Cardinale等

機器之心編譯

華爲剛剛發佈的 P30「望遠鏡」手機能在幾十米外拍到埃菲爾上的人名,確實令人佩服,但其售價也是令人望而生畏。那麼,不買華爲手機、高級單反就拍不到充滿細節的高清照片了嗎?

相機不夠算法湊,擁有超級拍照能力的手機也離不開算法的加持。本文介紹的

圖像超分辨率

項目可以幫你補齊相機鏡頭的短板。

華爲 P30 發佈會上展示的埃菲爾鐵塔高清遠距離照片。

今天,一位 Reddit 網友貼出了自己基於 Keras 的圖像超分辨率項目,可以讓照片放大後依然清晰。先來看一下效果。

放大數倍後,照片中的蝴蝶(蛾子?)依然沒有失真,背上的絨毛清晰可見。

作者表示,該項目旨在改善低分辨率圖像的質量,使其煥然一新。使用該工具可以對圖像進行超級放縮,還能很容易地在 RDN 和GAN上進行實驗。

該項目包含不同殘差密集網絡的 Keras 實現,它們可用於高效的單圖像超分辨率(ISR)。同時作者還提供了各種文檔資料以幫助訓練模型,包括如何使用對抗損失組件訓練這些網絡。

項目示例

這些示例使用的放大因子(upscaling factor)爲 2,即像素數擴大兩倍。大家可在 sample_weights 中查看生成示例圖像的權重,它們存儲在 git lfs 上。如要下載這些權重,你需要先複製該 repo,然後運行 git lfs pull。

左圖爲原始的低分辨率圖像,中間圖爲該網絡的輸出結果,右圖爲使用 GIMP bicubic scaling 得到的基線模型放大結果。

下面是不同方法作用於噪聲圖像的效果對比,這些方法分別是:使用 bicubic scaling 的基線模型、使用像素級內容損失函數訓練的 RDN 網絡,以及使用VGG19 內容壓縮數據集和損失函數進行重訓練的 RDN 網絡。該 repo 包含這些模型的權重。

Bicubic up-scaling(基線模型)的輸出結果示例。

使用像素級內容損失函數訓練的 RDN 網絡的輸出結果示例。

使用 VGG 內容和對抗損失組件訓練的 RDN 網絡的輸出結果示例。

超分辨率項目有什麼

前面展示的超分辨率效果都是根據該項目實現的不同模型做出來的。超分辨率希望根據已有的圖像信息重構出缺失的圖像細節,它通常藉助卷積神經網絡抽取圖像信息,再通過轉置卷積將這些信息擴展到希望獲得的圖像分辨率。

在這個項目中,作者新增了很多模塊與特徵,例如使用 VGG 與 GAN 實現真實的放大圖像。該項目主要實現的是 RDN 與 RRDN 網絡,且同時還提供了預訓練權重和 Colab 教程。不論是訓練還是推斷,根據這些資料我們都可以快速上手。

此外,該項目目前已經可以發佈到 PyPI 上了,因此安裝也只需鍵入 pip 命令即可。

總而言之,整個項目實現了三個超分辨率網絡,且採用了 Keras 版的 VGG-19 作爲特徵抽取模塊。如下所示爲三個超分辨率網絡的相關研究:

Residual Dense Network for Image Super-Resolution(Zhang et al. 2018, arXiv:1802.08797)

ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks(Wang et al. 2018, arXiv:1809.00219)

Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network(SRGANS, Ledig et al. 2017, arXiv:1609.04802)

如果我們想要生成上面那樣的高清圖,該項目還提供了一系列的資源:

文檔:https://idealo.github.io/image-super-resolution/

代碼:https://github.com/idealo/image-super-resolution/

Colab 推斷代碼:https://colab.research.google.com/github/idealo/image-super-resolution/blob/master/notebooks/ISR_Prediction_Tutorial.ipynb

Colab 訓練代碼:https://colab.research.google.com/github/idealo/image-super-resolution/blob/master/notebooks/ISR_Traininig_Tutorial.ipynb

超分辨率項目怎麼用

你可以選擇兩種方式安裝圖像超分辨率(ISR)包。

從 PyPI 中安裝 ISR(推薦):

從 GitHub 源安裝 ISR:

預測

如果我們需要擴展低像素圖像,簡單兩步就能借助 ISR 執行超分辨率。首先加載圖像並做一定的預處理:

加載模型並執行預測:

訓練

如果需要使用你的數據集重新訓練超分辨率模型,那我們也只需要改一改參數。如下首先創建模型:

創建 Trainer 對象,並將訓練的各種配置傳遞到該對象中:

開始訓練:

網絡架構與超參數

實際上,如果我們需要重新訓練,那麼還需要了解具體的參數都表示什麼。這一部分介紹了各超分辨率網絡的架構與對應超參數。

RDN 網絡架構

RDN 網絡架構的主要參數如下:

D:殘差密集塊(RDB)數量

C:RDB 內部堆疊的卷積層數量

G:RDB 內部每一卷積層的特徵圖數量

圖源:https://arxiv.org/abs/1802.08797

RRDN 網絡架構

RRDN 架構的主要參數如下:

T:殘差密集塊內的殘差數量(RRDB)

D:每一 RRDB 內部的殘差密集塊(RDB)的數量

C:RDB 內部堆疊的卷積層數量

G:RDB 內部每一卷積層的特徵圖數量

圖源:https://arxiv.org/abs/1809.00219

本文爲機器之心編譯,轉載請聯繫本公衆號獲得授權。

------------------------------------------------

相關文章