あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

・Abstract
Gatyらの研究はCNNによる画風転写の力を示した。
この研究を改善、拡張する方法が提案されているが、包括的なサーベイは存在しない。
本稿は、現在の進展と未解決問題について議論する。

1. Introduction
省略。

2. A Taxonomy of Neural Style Transfer Methods
本章では、Style Tranferの方法の分類を行う。
分類は2つあり、1つ目はDescriptive Methodsであり、画像内の画素を反復的に直接更新する。
2つ目は、Generative Methodsであり、最初に生成モデルを反復的に最適化し、順伝播により画像を生成する。

2.1. Descriptive Neural Methods Based On Image Iteration
Descriptive Methodの目的は、styleized imageがコンテンツ画像のコンテンツ表現とスタイル画像の
スタイル表現と同時に一致するようにすることで、損失を最小化することである。
Style Transferの一つの鍵はスタイル損失関数である。
Descriptive MethodsはMaximum Mean Discrepancy(MMD)を用いる手法とMarkov Random Fields(MRF)を用いる手法に分類できる。

2.1.1. MMD-based Descriptive Neural Methods
MMDは、ヒルベルト空間の特徴の平均に基づいて2つの分布間の不一致度を表す指標である[20]。
Liらは、style transferがコンテンツ画像からスタイル画像への分布合わせとみなすことができることを示した[30]。
したがって、MMDを用いてスタイルの不一致度を測ることができる。
多くのstyle tranfer手法はスタイルを表現するためにグラム行列を使用しており、グラム行列のマッチングは
MMD最小化と同等であることが[30]で証明されている。
したがって、グラムベースのアルゴリズムは全てMMDベースの分類に属する。
Gatysのアルゴリズム[14]はMMDベースの最初の手法である。

省略。

しかし、Gatysのアルゴリズムは反復について不安定性を有する。
さらに、手動でパラメータをチューニングする必要がある。
Risserら[38]は不安定性の限界に対処するために、ヒストグラム損失を導入して、目的関数に追加した。
また、パラメータを自動的に調整する手法を提案し、Gatysらによるアルゴリズムと比較して、
より安定しており、両行に収束することが証明されている。

省略。

2.1.2. MRF-based Descriptive Nueral Methods
MRFは画像合成のための古典的フレームワークである。
Li and Wand[28]は、MRFの考え方をStyle Transferに導入した。
Gatysらのアルゴリズムは画素ごとの相関のみをキャプチャし、空間レイアウトを制約しないので、
視覚的な妥当性が低くなります。
その問題に対する対処法は、MRFを含む新しい損失関数を導入することである。

省略。

2.2. Generative Neural Methods Based On Model Iteration
Descriptive Methodにはいくつか制約がある。
1つの制約は効率である。
Generative Methodは、柔軟性を犠牲にして、速度と計算コストの問題に対処する。
重要なアイデアは、特定のスタイル画像ごとに、順伝播ネットワークを事前学習することである。
Johnsonら[24]は、Gatysらのアルゴリズムに基づく高速アプローチを紹介する。
彼らはまず、特定のスタイルごとに順伝播Generatorネットワークを学習する。

省略。

別の高速なGenerative MethodはUlyanovらのTexture Network[44]である。
Ulyanovらのアルゴリズムの背後にある重要な考え方は、Johnsonのアルゴリズムに似ている。
Generatorネットワークのアーキテクチャを除いて、Ulyanovらは、Generatorネットワークとして、
マルチスケールアーキテクチャを使用している。
さらに、2.1節のMRFベースのStyle Transferにインスパイアされ、Li and Wand[29]はadversarial
トレーニングを用いてマルコフ順伝播ネットワークを訓練することで効率の問題に取り組んでいる。
それらのアルゴリズムは、JohnsonおよびUlyanovらのアルゴリズムと比較して、複雑な画像内容の
テクスチャを保存する上でより良い性能を有する。
上記のGenerativeアプローチはDescriptiveアプローチよりも2桁高速に画像生成ができるが、その
制限も明らかである。
制限の1つは、各生成ネットワークが単一のスタイルに結び付けられており、ここのスタイルごとに
別々の生成ネットワークを訓練する必要があるということである。
この制約を解消するために、Dumoulinら[12]は、同時に複数のスタイルを学習できるアルゴリズムを提案する。
ChenとSchmidt[9]は[12]と同じ問題に対処するために、パッチベースの高速なStyle Transferアルゴリズムを
提案している。

省略。

3.1. Modifications of Descriptive Neural Methods
Descriptive Methodsの変更のほとんどすべてが[14]のGatysらのアルゴリズムに基づいている。
NovakとNikulin[34]は、[14]のスタイル表現はスタイル画像の空間構成が不変であるという問題に対処しており、
空間スタイルと呼ばれる新しいスタイル表現を提案しており、スタイルの詳細よりも空間構成を強くとらえる。
さらに、それまでは論じられなかった様々な実験設定(バックエンド、フレームワーク、ネットワーク、初期化点、
コンテンツレイヤー、スタイルレイヤー)を変更することで、[14]のStyle Transferを探求している。
彼らの実験によると、[14]のStyle Transferアルゴリズムでは、CUDAの方がOpenCLよりも安定している。
TorchはCafferよりも高速。VGGはAlexNetとGoogleNetよりもパフォーマンスが良い。
コンテンツ画像から勾配降下を開始することは、ほとんどの実用的なアプリでより良い結果を生み出し、
ノイズはパラメータチューニングに役立つ。
ボトムコンテンツ層を追加することにより、コンテンツ画像の色が保持される。

[35]において、NovakとNikulinは、GatysらのStyle Transferを改善する方法をさらに探求している。
彼らは、Gatysらのアルゴリズムが繰り返しスタイルを転写する際に良い結果を示すが、しばしば複雑なパターンを転写することができないことを見出している。
この観察に基づいて、彼らは重み調整、より多くの層の活用、活性化シフト、異なる層からの特徴の相関、
およびブラー相関を含む様々な有用な修正を提案する。

最近、Gatysら[13, 17]は、以前のアルゴリズムを改善するためにいくつかのわずかな修正を提案している。
彼らは主に、空間、色、尺度を含む3つの知覚的要因を研究し、スタイル移転中にそれらを制御する方法を示す。
空間制御のための戦略は、所望の領域に1が割り当てられ、それ以外の場合には0であるガイダンスマップを
単純に定義することである。
カラー制御の場合、原点アルゴリズムはスタイルの色分布画像である。
しかしながら、Gatysらは、多くの場合、人々はコンテンツイメージの色を保存すること、すなわち色を転送することなくスタイルを転送することを好むかもしれないことに気付く。
Neural Style Transferでは、色を保存する2つの方法を提案している。
1つの方法は、まずスタイルイメージの色をスタイル転送の前にコンテンツイメージの色に合わせて変換することであり、
もう1つは輝度チャネルでのみスタイル転送を実行することだ。
スケールコントロールでは、スタイルミキシングと高解像度のスケールコントロールを個別に検討する。
高解像度のスケール制御は、本質的に、ダウンサンプリングおよびアップサンプリングを用いた粗いから細かい手順を通して、スタイル化された画像のブラシサイズを制御する戦略である。
図2は、出力のブラシサイズを制御する際のスケール制御戦略の再実装の結果を示す。
これらの戦略はすべて、スタイル転送のプロセスをより制御しやすくし、これらの変更のいくつかは一般的に
Generative Neural Methodsに等しく適用することができます。

3.2. Modifications of Generative Neural Methods
実際には、Generative Methodsで生成された結果は、GatysらののDiscriptive Methodほど良くないことがある。
この問題に取り組むために、Ulyanovら[45,46]はバッチ正規化とインスタンス正規化を入れ替えることで、
インスタンス固有の矛盾情報をコンテンツイメージから削除しています。
彼らは、この簡単な修正が、Generative MethodをDescriptive Methodと同等の品質を達成できるようにすることを発見した。
この改善戦略は、セクション2.2で導入された[12]のインスピレーションでもあります。
Ulyanovらは、インスタンスの正規化以外にも、定型化された画像の多様性を向上させる方法を模索している[46]。
Juleszのテクスチャ・アンサンブルからジェネレーターを簡単にサンプリングすることを奨励する新しい損失関数を提案します。

しかし、現在のニューラルアルゴリズムは、画像の深さを考慮せず、スタイル転送の過程でコンテンツ画像の深度の変化を失う。
この制限に対処するために、Liaoら[31]は、深さを保持するニューラルスタイル転送アルゴリズムを提案する。
それらのアプローチは、Johnsonらのアルゴリズム[24]に基づく深度損失関数を追加することです。
度損失関数は、コンテンツ画像と(まだ未知の)定型化された画像との間の奥行き差を測定することである。
深度は、最先端の単一画像深度推定アルゴリズム[52]を適用することによって得られる。

・Neural Style Transfer for Video Frames.
Gatysらのアルゴリズムをビデオシーケンスに拡張する研究はRuderらによってなされている[40]。
スタイル画像が与えられた場合、Ruderらのアルゴリズムは、時間的損失関数を導入して、その芸術的スタイルをビデオ全体に伝達する。
アルゴリズムの背後にある重要なアイデアは、個々のフレーム間の滑らかな遷移、すなわち、ポイント軌跡に沿った偏差のペナルティを保つために時間的制約を使用することです。
 それらのアルゴリズムは、ほとんどの時間的アーチファクトを除去し、滑らかな定型化されたビデオを生成することができることが示されている。
Andersonら[3]が提案したオプティカルフローを利用してムービーをレンダリングし、スタイル転送の最適化を初期化するアルゴリズムも、並行して行われています。

7.1. Challenges
・Problem of parameter tuning
最良の結果を得るために、通常、コンテンツ・イメージの各組み合わせに対して手作業によるパラメータ・チューニングの退屈なプロセスを必要とする。
例えば、Gatysらのアルゴリズムでは、式(6)のパラメータおよび学習率は、結果をより良くするために慎重に調整する必要がある。
Descriptive Neural Methodsの場合、Risserらは[38]のこのパラメータ調整問題に関する予備的な作業を紹介する。
彼らのアルゴリズムは単に勾配情報を利用する極端な勾配の値を防止します。
彼らは、損失内の損失または統計のような非勾配情報の助けを借りてパラメータを調整することができれば、最適化はより数学的に十分に確立される可能性が高いことを彼らの論文で認めている。
Descriptive Neural Methodsの自動パラメータチューニング戦略を改善する余地がまだあると考えています。
Generative Neural Methodsでは、パラメータチューニングの各試みのために新しいモデルを訓練する必要があるため、パラメータチューニングの問題はより深刻です。
したがって、Generative Neural Methodsのパラメータ調整によって余分な時間がかかるのは、Descriptive NeuralMethodsよりもはるかに多くなります。
しかし、われわれが知る限りでは現在、自動パラメータチューニングの問題に焦点を当てた研究はなく、一般的には、著者が提供するデフォルトパラメータを使用します。

・Problem of stroke orientation control
既存のニューラル・スタイル・トランスファー・アルゴリズムでは、多くのオイル・ペインティング・スタイルでの
ブラシ・ストロークの向き制御は考慮されていません。
しかし、ブラシのストロークの向きは、絵画では無視できない重要な要素です。
例えば、ヴィンセント・ヴァン・ゴッホの「星の夜」(図2(b))の筆のストロークは、元の動きのない暗い空を
波のように動かすように見せる波に従っているようです。
絵画のブラシストロークの向きは、見る人に印象を与え、絵師のアイデアと錯覚を伝えることができます。
それにもかかわらず、現在のニューラル・スタイル・トランスファ・アルゴリズムは特徴統計に基づいているので、
ストローク方向の制御は困難である。
定型化された結果の曲線の詳細な向きと連続性は保証するのが難しい。

・Problem of “Fast” and “Faster” Neural Style Transfer
Generative Methodはニューラル・スタイル転送の分野で最も重要なアルゴリズムの1つであり、高い計算コストは​工業アプリケーションにとってしばしば耐え難いものです。
さらに、高速アルゴリズムに存在する問題を解決することは、セクション7.2で導入されるパラメータチューニング
問題などの他の問題の解決にも役立ちます。
現在の「高速」ニューラルスタイル転送ではリアルタイムで結果を生成することができますが[24,44,29,45]、
柔軟性は失われます。
つまり、スタイル固有のモデルは各スタイルの訓練にかなりの時間を必要とします。
Dumoulinらによって提案されたアルゴリズムは、同じタイプの複数のスタイル(例えば、印象派の絵画)を同時に学ぶことができる[12]。
しかし、彼らのアルゴリズムはまだ各スタイルの種類のために訓練する必要があります。
ChenとSchmidtによって提案された高速アルゴリズムは、新しいコンテンツイメージとスタイルイメージ[9]のために働くことができますが、結果は単一のネットワークレイヤしか利用されないので他のものほど印象的ではありません。
柔軟性と品質を同時に保つことができる「高速」ニューラルスタイル転送アルゴリズムは、大いに必要とされています。
高速アルゴリズムのもう1つの問題は、出力のブラシストロークサイズを制御することです。
Descriptive Methodの場合、高解像度画像のブラシストロークサイズ制御は、[17]で提案された戦略を使用することによって達成することができる。
Generative Methodの場合、高解像度結果の品質は(図4に示されているように)あまり満足のいくものではなく、現時点では生成方法によってリアルタイムでブラシのストローク・サイズを調整することはできません。
Gatysらは、[17]において、複数のスケールを組み合わせた新しいスタイルイメージを簡単に作成することができるため、生成メソッドのブラシストロークサイズを調整する研究は自明であると宣言しています。
しかし、訓練プロセスは時間がかかり、異なる解像度の別々のモデルを訓練することは冗長です。
もう1つの解決策は、最初にコンテンツイメージのサイズを変更し、最先端の超解像アルゴリズム[26]を使用して
定型化された結果を処理することです。
しかしながら、画像の超解像度は、望ましくない余分な計算負荷を招く。
我々は、ワンショットで出力の筆のストロークサイズを制御できる新しい「高速」ニューラルスタイル転送アルゴリズムを研究する必要があると考えています。

chainer-goghで画像を更新する仕組みについて解説します。
chainer-goghは沙耶の唄VRの映像を作った時に、肉塊画風の転写に利用させていただきました。
http://akasuku.blog.jp/archives/68121368.html

なお、本記事ではchainer-goghの概要については説明しませんので、概要がわからない方はまず元記事をお読みください。
https://research.preferred.jp/2015/09/chainer-gogh/

chainer-goghと比較するために、まずは通常のニューラルネット学習の例としてtrain_mnistでネットワークを更新する仕組みについて触れます。
train_mnistでは、以下のような手順でネットワークを更新します。
model = L.Classifier(MLP(args.unit, 10)) # モデル(最適化対象パラメータ)
optimizer = chainer.optimizers.Adam() # 最適化モジュール
optimizer.setup(model) # モデルのセット
optimizer.update(loss_func) # 更新
ここで、optimizer.update()は、trainer.run() → updater.update() → optimizer.update()という流れで呼び出されます。
loss_funcにはmodelが代入されています。

optimizer.update()の中では以下のように、順伝搬・逆伝搬・パラメータ更新の処理がなされます。
if lossfun is not None:
loss = lossfun() # 順伝搬
loss.backward() # 逆伝搬
for param in self.target.params():
param.update() # パラメータ更新

以上が、通常のニューラルネット学習の手順です。
続いて、chainer-goghで画像を更新する仕組みについて解説します。

chainer-goghでは、以下のように、モデルの代わりに(更新対象の)画像をoptimizerにセットします。
img_gen = xp.random.uniform(-20,20,(1,3,width,width),dtype=np.float32)
img_gen = chainer.links.Parameter(img_gen) # 画像の更新対象パラメータ化
optimizer.setup(img_gen) # 画像のセット
そして、以下の手順で画像の更新を行います。
nn = VGG() # モデル(chainer-goghではこいつは更新しない)
y = nn.forward(img_gen.W) # 順伝搬
L = ... * F.mean_squared_error(y, Variable(...)) # 順伝搬
L.backward() # 逆伝搬
optimizer.update() # パラメータ更新
ここで重要なのが、train_mnistの場合と異なり、optimizer.update()を引数loss_funcなしで呼び出している点です。
上記したように、optimizer.update()内ではif文でloss_funcが与えられた場合のみ順伝搬・逆伝搬の計算をするようになっています。
このような仕組みによって、chainer-goghでは、モデルに画像を入力して得られる勾配を基に(モデルではなく)画像を更新するという処理を実現しています。

以上が、chainer-goghで画像を更新する仕組みです。

one two three four looking for the beat
one two three four rocking your heart
tight beat 刻んだ dance on a stage
限界無理矢理突破気味
迷える魂 ramble soul
震える瞬間 Possible time
リアルの体感追い越すClick
CoolなStanding 進めよ World

↑このページのトップヘ