不同的神經(jīng)網(wǎng)絡(luò)可以實現(xiàn)給圖像去噪、去水印、消除馬賽克等等功能,但我們能否讓一個模型完成上述所有事?事實證明 AI 確實有這樣的能力。來自 Skoltech、Yandex 和牛津大學(xué)的學(xué)者們提出了一種可以滿足所有大膽想法的神經(jīng)網(wǎng)絡(luò)。
事情是這樣的:研究人員們讓一個深度卷積網(wǎng)絡(luò)去學(xué)習(xí)復(fù)制被破壞的圖像(例如加入噪點的圖像),隨后竟發(fā)現(xiàn)這個網(wǎng)絡(luò)可以自行先學(xué)會如何重建圖像。該研究的論文《Deep Image Prior》已被收錄在 CVPR 2018 大會,而 GitHub 則已有 3800 個 star。
Deep Image Prior 的重要特點是,網(wǎng)絡(luò)由始至終僅使用了輸入的,被破壞過的圖像做為訓(xùn)練,沒有經(jīng)歷過大多數(shù)神經(jīng)網(wǎng)絡(luò)所需要的學(xué)習(xí)過程即可完成任務(wù)。它沒有「看過」任何其它圖像,也沒有看過未受破壞的正常圖像,但最終恢復(fù)的效果依然很好。這說明自然圖像的局部規(guī)律和自相似性確實很強(qiáng)。
在 GitHub 項目中,作者如下展示了 5 種常見圖像重構(gòu)的效果。他們表示單個卷積網(wǎng)絡(luò)可以完成缺失圖像的修復(fù)、痕跡的移除、圖像去噪、超分辨率和去除水印等,可以說該模型在理解圖像先驗信息下顯得無所不能。當(dāng)然作者表示這個項目的超參數(shù)和架構(gòu)都是可以調(diào)整的,它們遠(yuǎn)沒有達(dá)到最優(yōu),所以感興趣的讀者快試試吧。
項目地址:https://github.com/DmitryUlyanov/deep-image-prior
其實上圖中的每一項任務(wù)都有很多研究,它們假設(shè)模型能從大型真實圖像數(shù)據(jù)集中學(xué)習(xí)到圖像的先驗信息,即像素怎樣才能組合成一張「正?!沟膱D像,這樣學(xué)習(xí)到通用圖像信息的模型就能用來修補(bǔ)圖像或生成高分辨率圖像了。但是這種觀點正確嗎?該項目的研究論文表示否定,它們只在損壞的「非正?!箞D像上訓(xùn)練同樣能學(xué)習(xí)到圖像的「先驗」,注意這種「訓(xùn)練」僅表示模型在單張損壞圖像上反復(fù)迭代。
網(wǎng)友使用 AKB-48 照片進(jìn)行超分辨率的嘗試。
與傳統(tǒng)觀點相反,該項目的研究論文表示未經(jīng)任何「學(xué)習(xí)過程」的卷積圖像生成器架構(gòu)可以捕捉到大量圖像數(shù)據(jù),尤其是解決不同圖像修復(fù)問題的圖像數(shù)據(jù)。在卷積網(wǎng)絡(luò)對損壞圖像反復(fù)迭代時,它能自動利用圖像的全局統(tǒng)計信息重構(gòu)丟失的部分。
研究者使用未經(jīng)訓(xùn)練的卷積網(wǎng)絡(luò)來解決幾種此類問題。研究者未在大量示例圖像數(shù)據(jù)上訓(xùn)練卷積網(wǎng)絡(luò),而是直接將生成器網(wǎng)絡(luò)應(yīng)用于單個退化圖像,即有損壞的自然圖像。在此方法中,網(wǎng)絡(luò)權(quán)重作為修復(fù)圖像的參數(shù)。權(quán)重經(jīng)過隨機(jī)初始化和擬合,以在提供特定退化圖像和任務(wù)相關(guān)模型時能夠最大化似然度。
本研究展示了,這個非常簡單的方法在標(biāo)準(zhǔn)圖像處理問題(如去噪、圖像修復(fù)和超分辨率)中極具競爭力。除了標(biāo)準(zhǔn)圖像修復(fù)任務(wù)外,該技術(shù)還可用于理解深度神經(jīng)網(wǎng)絡(luò)激活函數(shù)中的信息。
論文:Deep Image Prior
論文地址:https://sites.skoltech.ru/app/data/uploads/sites/25/2018/04/deep_image_prior.pdf
摘要:深度卷積網(wǎng)絡(luò)已經(jīng)成為圖像生成和修復(fù)的常用工具。通常,其優(yōu)秀性能要歸功于從大量示例圖像中學(xué)習(xí)逼真圖像先驗的能力。而這篇論文反其道而行之,展示了一種生成器網(wǎng)絡(luò)架構(gòu),它可以在學(xué)習(xí)之前先捕捉大量低級圖像數(shù)據(jù)。本論文展示了隨機(jī)初始化神經(jīng)網(wǎng)絡(luò)可在標(biāo)準(zhǔn)逆問題(如去噪、超分辨率和圖像修復(fù))中作為手工先驗知識(handcrafted prior)使用,且性能優(yōu)越。此外,同樣的先驗知識還可用于反轉(zhuǎn)深度神經(jīng)表征以作出判斷,并基于 flash-no flash 輸入對來修復(fù)圖像。
該方法應(yīng)用廣泛,且強(qiáng)調(diào)了標(biāo)準(zhǔn)生成器網(wǎng)絡(luò)架構(gòu)捕捉的歸納偏置(inductive bias)。它還彌補(bǔ)了圖像修復(fù)兩大流行方法之間的距離:使用深度卷積網(wǎng)絡(luò)的基于學(xué)習(xí)的方法、基于手工圖像先驗知識(如自相似性)的無學(xué)習(xí)方法。
項目使用
該項目為不同的任務(wù)提供了對應(yīng)的實現(xiàn)文檔,例如 inpainting.ipynb 展示了如何做圖像修復(fù)與去水印、super-resolution.ipynb 展示了如何做圖像超分辨率。如下展示了項目的環(huán)境配置與安裝,注意其主要使用了 PyTorch 0.4,所以已經(jīng)更新到 1.0 的讀者可以借助 conda 或其它工具配置一個新環(huán)境。
安裝
在執(zhí)行代碼之前,你需要安裝下列庫:
python = 3.6
pytorch = 0.4
numpy
scipy
matplotlib
scikit-image
jupyter
以上庫均可通過 conda (anaconda) 安裝,如:
conda install jupyter
Docker 鏡像
你也可以使用具備全部依賴項的 Docker 鏡像完成環(huán)境的配置,并連接到 Jupyter Notebook。你需要確保安裝了 docker 和 nvidia-docker,然后運行以下命令:
nvidia-docker build -t deep-image-prior .
然后,啟動容器,如下所示:
nvidia-docker run --rm -it --ipc=host -p 8888:8888 deep-image-prior
你會得到一個 URL,使用它可連接至 Jupyter notebook。