範例 #1 — 舊站:以 24 位元高清檢視比較,原始照片 CC-BY-SA @siv-athens。
就像電視上看到的那樣!如果您可以使用 CSI 實驗室的技術來提高照片的解析度會怎麼樣?由於深度學習和#NeuralEnhance
,現在可以訓練神經網路將影像放大 2 倍甚至 4 倍。透過增加神經元數量或使用類似於低解析度影像的資料集進行訓練,您將獲得更好的結果。
收穫是什麼?神經網路根據範例影像的訓練產生幻覺細節。它不會像高清照片那樣完全重建您的照片。這只有在好萊塢才有可能——但使用深度學習作為「創意人工智慧」是可行的,而且也同樣酷!您可以透過以下方式開始...
主腳本稱為enhance.py
,一旦設定如下,您就可以使用Python 3.4+來執行它。 --device
參數可讓您指定要使用的 GPU 或 CPU。對於上面的範例,以下是效能結果:
預設是使用--device=cpu
,如果您已經使用 CUDA 設定了 NVIDIA 卡,請嘗試--device=gpu0
。在 CPU 上,您也可以將環境變數設定為OMP_NUM_THREADS=4
,這在並行運行腳本多次時最有用。
可與 GitHub 版本中提供的預訓練模型一起使用的範例命令列清單:
# Run the super-resolution script to repair JPEG artefacts, zoom factor 1:1.
python3 enhance.py --type=photo --model=repair --zoom=1 broken.jpg
# Process multiple good quality images with a single run, zoom factor 2:1.
python3 enhance.py --type=photo --zoom=2 file1.jpg file2.jpg
# Display output images that were given `_ne?x.png` suffix.
open * _ne ? x.png
以下是目前支援的模型、影像類型和縮放等級的清單。
特徵 | --model=default | --model=repair | --model=denoise | --model=deblur |
---|---|---|---|---|
--type=photo | 2x | 1x | …… | …… |
GitHub 版本中提供了預訓練模型。訓練自己的過程是一個微妙的過程,可能需要您根據圖像資料集選擇參數。
# Remove the model file as don't want to reload the data to fine-tune it.
rm -f ne ? x * .pkl.bz2
# Pre-train the model using perceptual loss from paper [1] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=50
--perceptual-layer=conv2_2 --smoothness-weight=1e7 --adversary-weight=0.0
--generator-blocks=4 --generator-filters=64
# Train the model using an adversarial setup based on [4] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=250
--perceptual-layer=conv5_2 --smoothness-weight=2e4 --adversary-weight=1e3
--generator-start=5 --discriminator-start=0 --adversarial-start=5
--discriminator-size=64
# The newly trained model is output into this file...
ls ne ? x-custom- * .pkl.bz2
範例 #2 — 銀行大廳:以 24 位元高清查看比較,原始照片 CC-BY-SA @benarent。
最簡單的啟動和運行方法是安裝 Docker。然後,您應該能夠使用docker
命令列工具下載並執行預先建置的映像。在其 Docker Hub 頁面上了解有關alexjc/neural-enhance
映像的更多資訊。
這是使用docker
呼叫腳本最簡單的方法,假設您熟悉使用-v
參數來掛載資料夾,則可以直接使用它來指定要增強的檔案:
# Download the Docker image and show the help text to make sure it works.
docker run --rm -v ` pwd ` :/ne/input -it alexjc/neural-enhance --help
單一圖像- 實際上,我們建議您設定一個名為enhance
的別名,以自動公開包含指定圖像的資料夾,以便腳本可以讀取它並將結果儲存在您可以訪問的位置。您可以在 OSX 或 Linux 上的終端機控制台中執行此操作:
# Setup the alias. Put this in your .bashrc or .zshrc file so it's available at startup.
alias enhance= ' function ne() { docker run --rm -v "$(pwd)/`dirname ${@:$#}`":/ne/input -it alexjc/neural-enhance ${@:1:$#-1} "input/`basename ${@:$#}`"; }; ne '
# Now run any of the examples above using this alias, without the `.py` extension.
enhance --zoom=1 --model=repair images/broken.jpg
多個圖像- 若要從資料夾或通配符規範增強一行中的多個圖像(更快),請確保引用別名命令的參數:
# Process multiple images, make sure to quote the argument!
enhance --zoom=2 " images/*.jpg "
如果您想在 NVIDIA GPU 上運行,您可以更改別名以使用預先安裝 CUDA 和 CUDNN 的映像alexjc/neural-enhance:gpu
。然後在 nvidia-docker 中運行它,它應該使用您的實體硬體!
這個專案需要 Python 3.4+,您還需要numpy
和scipy
(數值計算函式庫)以及系統範圍內安裝的python3-dev
。如果您需要更詳細的說明,請按照以下步驟操作:
取得儲存庫後,您可以從終端機執行以下命令來設定本機環境:
# Create a local environment for Python 3.x to install dependencies here.
python3 -m venv pyvenv --system-site-packages
# If you're using bash, make this the active version of Python.
source pyvenv/bin/activate
# Setup the required dependencies simply using the PIP module.
python3 -m pip install --ignore-installed -r requirements.txt
之後,你應該在你的虛擬環境中安裝pillow
、 theano
和lasagne
。您還需要下載這個預先訓練的神經網路(VGG19,80Mb)並將其放在與要執行的腳本相同的資料夾中。要卸載所有內容,您只需刪除#/pyvenv/
資料夾即可。
範例 #3 - 專門針對臉部的超分辨率,僅針對名人臉部的高清範例進行訓練。一般來說,當縮小「照片」範圍時,品質會顯著提高。
該程式碼結合了以下論文中的技術,以及一些尚未記錄的細微改進(請觀看此存儲庫以獲取更新):
特別感謝他們以各種方式提供的幫助和支持:
有一個名為 Cython 的 Python 擴充編譯器,但它遺失或安裝不正確。嘗試直接從系統套件管理器而不是 PIP 取得它。
修復: sudo apt-get install cython3
當您在沒有 GPU 的情況下運行並且找不到 CPU 庫(例如libblas
)時,就會發生這種情況。 Theano 無法評估神經網路表達式,並且引發異常。
修復: sudo apt-get install libblas-dev libopenblas-dev
您需要直接從requirements.txt
中指定的版本安裝Lasagne和Theano,而不是從PIP版本安裝。這些替代方案較舊且不具備所需的功能。
修復: python3 -m pip install -r requirements.txt
您的終端機似乎配置錯誤並且與 Python 處理語言環境的方式不相容。您可能需要在.bashrc
或其他啟動腳本中更改此設定。或者,此命令將為此 shell 實例修復一次。
修復: export LC_ALL=en_US.UTF-8
範例 #4 — 街景視圖:以 24 位元高清查看比較,原始照片 CC-BY-SA @cyalex。