1. 程式人生 > >怎麼讓你的照片帶上藝術大師風格?李飛飛團隊開源快速神經網路風格遷移程式碼

怎麼讓你的照片帶上藝術大師風格?李飛飛團隊開源快速神經網路風格遷移程式碼

這是來自 Justin Johnson、Alexandre Alahi 和李飛飛的論文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》的程式碼,該論文已被 ECCV 2016 接收。本論文和文中提到的其它論文可點選文末「閱讀原文」下載。

該論文基於 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 的論文《A Neural Algorithm of Artistic Style》,即訓練將藝術風格應用於影象的前饋網路。在訓練之後,我們的前饋網路能以比 Gatys 等人提出的基於優化的方法(optimization-based method)快數百倍的速度為影象改變風格。

這個 repository 還包含一個例項歸一化(instance normalization)的實現,其在 Dmitry Ulyanov、Andrea Vedaldi 和 Victor Lempitsky 的論文《Instance Normalization: The Missing Ingredient for Fast Stylization》中得到了描述。這種簡單的技巧能極大地提升前饋風格遷移模型(feedforward style transfer models)的質量。

專案地址:https://github.com/jcjohnson/fast-neural-style

在一個 Pascal Titan X 上只用 50 毫秒就能實現這張解析度為 1200x630 的斯坦福校園照片的風格遷移:


在這個 repository 中,我們提供了:

  • 我們的論文中所使用的風格遷移模型

  • 額外的使用了例項歸一化的模型

  • 用於在新影象上執行模型的程式碼

  • 在一個網路攝像機上實時執行模型的演示

  • 一種 Gatys 等人描述的基於優化的風格遷移方法的實現

如果你覺得這些程式碼有用,請加上引用資訊:

@inproceedings{Johnson2016Perceptual,

 title={Perceptual losses for real-time style transfer and super-resolution},

 author={Johnson, Justin and Alahi, Alexandre and Fei-Fei, Li},

 booktitle={European Conference on Computer Vision},

 year={2016}

}

設定

所有的程式碼都在 Torch 中實現。

首先安裝 Torch,然後更新或安裝以下軟體包:

luarocks install torch

luarocks install nn

luarocks install image

luarocks install lua-cjson

GPU 加速(可選)

如果你有一個 NVIDIA GPU,你可以通過 CUDA 加速所有的運算。

首先安裝 CUDA,然後更新或安裝以下軟體包:

luarocks install cutorch

luarocks install cunn

cuDNN(可選)

當使用 CUDA 時,你可以使用 cuDNN 加速卷積運算。

首先下載 cuDNN(https://developer.nvidia.com/cudnn),然後將該庫複製到 /usr/local/cuda/lib64/。然後安裝用於 cuDNN 的捆綁元件:

luarocks install cudnn

預訓練模型

通過執行以下指令碼可下載所有的預訓練的風格遷移模型:

bash models/download_style_transfer_models.sh

這會將 10 個模型檔案(約 200 MB)下載到資料夾 models/ 中。

論文中的模型

我們在我們的論文中使用的風格遷移模型可以在資料夾 models/eccv16 中找到。下面是一些我們使用這些模型給大小為 512 的芝加哥樓群照片施加風格的例子:


帶有例項歸一化的模型

正如 Dmitry Ulyanov、Andrea Vedaldi 和 Victor Lempitsky 的論文《Instance Normalization: The Missing Ingredient for Fast Stylization》中討論的那樣,使用例項歸一化替代批歸一化(batch normalization)能夠顯著提升前饋的風格遷移模型的質量。

我們使用例項歸一化訓練了多個模型;在下載了預訓練模型之後,你可以在 models/instance_norm 資料夾中找到它們。

這些模型使用了我們在論文中所使用的一樣的架構,除了其每一層的過濾器(filter)只有一半,而且使用的是例項歸一化而非批歸一化。使用更窄的層可以讓模型更小和更快,且不會犧牲模型的質量。

下面是這些模型的一些輸出案例,影象大小為 1024:


在新影象上執行

指令碼 fast_neural_style.lua 讓你可以使用一個預訓練的模型給新的影象施加風格:

th fast_neural_style.lua \

-model models/eccv16/starry_night.t7 \

-input_image images/content/chicago.jpg \

-output_image out.png

你可以在一個完全不同的影象目錄上運行同樣的模型,如下:

th fast_neural_style.lua \

-model models/eccv16/starry_night.t7 \

-input_dir images/content/ \

-output_dir out/

你可以使用 -image_size 標籤控制輸出影象的大小。該指令碼是預設執行在 CPU 上;要在 GPU 上執行,應增加 -gpu 標籤特定所執行的 GPU。

該指令碼的完整選項介紹參見:https://github.com/jcjohnson/fast-neural-style/blob/master/doc/flags.md#fast_neural_stylelua

網路攝像頭演示

您可以使用指令碼 webcam_demo.lua 從網路攝像頭視訊流中實時執行一個或多個模型。要執行這個演示,你需要使用 qlua 而不是 th:

qlua webcam_demo.lua -models models/instance_norm/candy.t7 -gpu 0

通過給 -models 標籤新增逗號分隔的列表,你可以同時執行多個模型:

qlua webcam_demo.lua \

-models models/instance_norm/candy.t7,models/instance_norm/udnie.t7 \

-gpu 0

使用一個 Pascal Titan X,你可以輕鬆地實時地在 640x480 大小下執行 4 個模型:


該網路攝像頭的演示依賴於幾個額外的 Lua 包:

clementfarabet/lua---camera:https://github.com/clementfarabet/lua---camera

torch/qtlua:https://github.com/torch/qtlua

要安裝這些包,執行:

luarocks install camera

luarocks install qtlua

關於該指令碼的完整描述參見:https://github.com/jcjohnson/fast-neural-style/blob/master/doc/flags.md#webcam_demolua

訓練新模型

你可以在這裡找到訓練新模型的說明:https://github.com/jcjohnson/fast-neural-style/blob/master/doc/training.md

基於優化的風格遷移

指令碼 slow_neural_style.lua 類似於原來的 neural-style(https://github.com/jcjohnson/neural-style),並且使用了 Gatys 等人描述的基於優化的風格遷移方法。

該指令碼使用了和前饋訓練指令碼一樣的計算損失的程式碼,允許前饋的風格遷移網路和基於優化的風格遷移之間進行公平的比較。

和原來的 neural-style 相比,這個指令碼有如下的改進:

移除了對 protobuf 和 loadcaffe 的依賴

支援遠遠更多 CNN 架構,包括 ResNets

該指令碼的完整選項集合參見:https://github.com/jcjohnson/fast-neural-style/blob/master/doc/flags.md#slow_neural_stylelua

證書

個人或研究可免費使用;商業用途請與我聯絡。

論文:實時風格遷移和超解析度的感知損失(Perceptual Losses for Real-Time Style Transfer and Super-Resolution)


摘要:我們思考了影象轉換問題,即一個輸入影象被轉換成一個輸出影象的問題。近來針對這類問題的方法通常是使用輸出影象和 ground-truth 影象之間的 \emph{per-pixel} 損失來訓練前饋卷積神經網路(feed-forward convolutional neural networks)。另一些研究已經表明高質量的影象可以基於從預訓練的網路中提取的高層次特徵,定義和優化 \emph{perceptual} 損失函式來生成。我們將這兩種方法的優勢結合了起來,提出使用感知損失函式(perceptual loss functions)來訓練用於影象轉換任務的前饋網路。我們給出了在影象風格遷移上的結果,其中我們訓練出了一種前饋網路來實時解決由 Gatys 等人提出的優化問題。與基於優化的方法(optimization-based method)相比,我們的網路在給出類似定性結果的同時速度能快上三個數量級。我們還實驗了單影象超解析度(single-image super-resolution),其中用感知損失替代每畫素損失(per-pixel loss)的做法得到了視覺上讓人滿意的結果。

原文地址:http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650719733&idx=3&sn=950a7adb4e93bca22e4ef975877482a9&chksm=871b018bb06c889ddc87bccaa0f35de5ca5a35c156cf1164d134d5010065d68dd06ba6e7cdfa&scene=0#rd