画風のニューラルネットワークのアルゴリズム（人工知能が美術や音楽を作るMagenta 翻訳②）

###はじめに
<Font color="gray" >この記事は、GoogleのMagentaプロジェクトのドキュメント
["A Neural Algorithm of Artistic Style"](https://github.com/tensorflow/magenta/blob/master/magenta/reviews/styletransfer.md)（Cinjon Resnick)の翻訳です。
このドキュメントは、[Gatys氏らによる同名の論文](http://arxiv.org/abs/1508.06576)のレビュー記事であり、
[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)で配布されている成果物です。
</font>

　Google Brainはディープラーニングにより、美術や音楽を生成するプロジェクトMagentaを立ち上げました。Magentaの目的の1つは、プロジェクトの研究を紹介することでもあり、いくつかの論文のレビュー記事を公開しています。

　今回のレビュー記事で紹介しているのは、"A Neural Algorithm of Artistic Style"という論文です。これは、ディープラーニングで画風変換をする研究が書かれた論文で、結構話題になりました。現在では、動画の変換などの研究も発表されていて、ニューラルネットワークの新たな可能性が感じられます。

#画風のニューラルネットワークのアルゴリズム

　最近2015年の8月に、テュービンゲン大学のGatys氏らが["A Neural Algorithm of Artistic Style"](http://arxiv.org/abs/1508.06576)を発表しました。この論文は、ある芸術作品を他の芸術作品の画風で表現する方法を説明し、世界中のFacebookのウォール（投稿）を駆け巡りました。公衆の注目を集め、私たちが画像アプリのために構築したツールでこの技術を使用して、創造的な芸術を作れるということが認められました。

　こんなことができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/128182/7e5c1a1e-e767-531c-37a6-2143ef597854.png)

　この論文は、入力画像Sの画風と入力画像Cのコンテンツ（画像に移っているもの）を結びつけるような技術を仮定しています。上の画像は「星月テュービンゲン」で、Sはヴァン・ゴッホによる星月夜、Cはテュービンゲン大学の写真です。この技術は、画風の損失Lsとコンテンツの損失Lcからなる、[エネルギー最小化問題](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%81%A9%E5%8C%96%E5%95%8F%E9%A1%8C)を組み立てることを必要としています。キーとなるアイディアは、画像の階層的な理解ができるディープ畳み込みネットワーク([VGG-19](http://www.robots.ox.ac.uk/~vgg/research/very_deep/))を利用することです。画風を表す指標として、VGGから多層の特徴量の相関を抽出します。一方、コンテンツを表すものは、特定の層の表現量に対応します。

　コンテンツの損失は、特定の層のそのままのL2誤差で定義されました。さらに明確にすれば、Lcにはconv4_2層を利用し、Xを使った時の層の出力とCを使った時の層の出力との1/2をした二乗誤差損失を計算しました。

　一方で、画像の損失として、この論文はグラム行列を使用しました。この行列は、与えられた層のベクトル化された特徴同士を内積した行列です。経験的に、これらは特徴相関のとても良い代用になっており、ある画像のグラム行列と他のもののグラム行列の間のL2誤差は、それらの画風がどれくらい近いかを比較する方法として、とてもよく機能します。さらに直観的な説明をすると、テクスチャのモデリングのようなアルゴリズムを考えた場合に、グラム行列は特徴を表すものの内の空間を要約した統計量として考えることができます。それらの特徴量を使うことは、画風が似ていることを見るための良い代用となっています。

　結局、Lsはグラム行列間の平均二乗誤差を使い計算します。Conv1_1, conv2_2, conv3_1, conv4_1, conv5_1のそれぞれの層に対し、XとSのグラム行列の平均二乗誤差を計算します。これらの誤差の和が画風の存失Lsとなります。

　Xを最初ホワイトノイズ画像にして、これらの損失を一緒に[L-BFGS法](https://ja.wikipedia.org/wiki/%E6%BA%96%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95)で最小化していき、画風変換効果を出します。もちろん、調節しなければならないことがあり、LcとLsの重みパラメーターはCとSに多少依存します。XをSかCのどちらかの画像で初期化するとおそらくうまくいきますが、それは決定論的な結果になります。実際には、ネットワークは最初に低レベルの画風の特徴に合わせていきます、そして徐々に画像のコンテンツを修正していきます。それぞれの画像を完成させるのにはGPUでは3~5分かかります。他の画像に対する効果は、どの畳み込みネットワークが使われているのかによって変わるということも述べておきます。例えば、顔認識のために訓練されたネットワークは顔の画風変換で良く働くでしょう。

　この研究の貢献は、機械学習の枠を超えて拡大しました。公衆によく知られ、多様で新しい専門家を惹きつけました。デビューし道を切り開いてから、効果を改善することと新しい領域に適合させることの両方でたくさんの業績があります。ここでは、これらのうち3つを手短に説明します。色を保持した画風変換、ビデオの画風変換、瞬間的な画風変換です。

#色を保持した画風変換

　この分野での一番最近のイノベーションから説明します。Gatys氏らのこの[論文](https://arxiv.org/pdf/1606.05897.pdf)は最初の画風変換方法を、コンテンツ画像の色を保持することで改めました。二つの手法が説明されています。1つめは、画風画像の配色をコンテンツ画像の配色に合うように変換することによるものです。この新しいS'が前のSの代わりに画風の入力として使われます。これを達成するためにこの論文では2つの違う線形変換を説明しています。

　説明されているもう１つの手法は、輝度空間のみでの変換です。まず、SとCから輝度チャンネルを抽出し、この輝度の領域で画風変換を行い、画風変換の出力にカラーチャンネルを後付けします。これらの手法には利点と欠点を比較するような簡単な議論も起こっています。下にある画像で出力を見ることができます。ピカソの"Seated Nude"を使い、この画風に夜のニューヨークの画像を変換していて、原画像の配色が維持されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/128182/ff75fd16-43ab-214b-06c6-f4a12013c3c9.png)

#ビデオの画風変換

　Ruder氏らの[論文](https://arxiv.org/abs/1604.08610)は画風変換をビデオに適用しようとしたらどうなるか見ています。ここでは、単純にフレームの時系列に独立にGatys氏のアルゴリズムを適用すると、画風変換の結果は安定でないために、ちらちらしたり間違った切れ目があったりしてしまうと述べています。そこでこの論文は、オプティカルフローと呼ばれる手法を用いて、変換を規則正しくする方法を説明しています。そのために[DeepFlow](http://lear.inrialpes.fr/src/deepflow/)や[EpicFlow](http://arxiv.org/abs/1501.02565)といった最先端の推定アルゴリズムを利用します。

　さらに、いくつかの手法によりフレームを通じた一貫性をさらに強めています。これには、領域や動きの境界を、両方の方向にあるオプティカルフローを動かすことによって検出することを含んでいます。同様に、時間的に遠いフレームからの逸脱にたいしてペナルティを科すことで、長期間の一貫性を制御したりもしています。

　やはり、結果はとても印象を与えるものとなりました。シームレスではないものの、フレームは、一貫的で印象的です。動作例を[Youtube](https://www.youtube.com/watch?v=Khuj4ASldmU)で見ることができます。

#瞬間的な画風変換

　Johnson氏らの[論文](https://arxiv.org/abs/1603.08155)では、スピードの問題を問いて、答えています。Gatys氏とRuder氏の研究は計算するのにフレーム毎に3~5分かかるような長い最適化のステップがあります。筆者は構成を修正し、VGGの前に “Image Transformer Network” (ITN)と呼ばれる他のディープネットワークを追加しました。結果として、Gatys氏の最適化ステップを満足させるような画像化、ちょうど1回の順伝播によって生産されました。

　この研究での手法では、あらかじめ画風の画像Sを用意し、VGGをSによって与えられる画風とコンテンツの損失の合計を返すブラックボックスとして扱います。ITNの入力は変換したいコンテンツの画像Cです。画風とコンテンツの損失を最適化することによって、CをC'へと変換するようネットワークの訓練をします。Sは全てのCにたいして固定されているため、Gatys氏のオリジナルの研究で使われている、順伝播と逆伝播を用いた長い最適化をすることをせずに、画風変換を実現することができます。

　質が落ちるか良くなるかは議論に上がっています。しかしながら、明らかなのは、1秒に15フレームの画風変換を実行できる現時点でただ一つのモデルだということです。

#これからの展望
　これは、本当に興味深い領域です。なぜなら、多様な方針を想像でき作っていけるからです。リアルタイムのオプティカルフローのように、知っていることからはじめ、さらに良くしていくのはどうでしょう。シームレスに動画のシーンからキャラクターを変換するように、新しいアートを開発するのはいかがでしょう。音楽のような、新しい領域ではどうでしょう。ディランがディズニーっぽくなるのを聞いてみたいですね。

*ここで使われている画像は、参照した論文のものを用いています。