fast.ai cutting-edge-dl-for-coders-part2の Lesson9の課題で、Fast Style Transferを実装した。

はじめに

前回の続きです。Lesson8ではStyle Transferを試した。

  • [Neural Style Transerで京都渡月橋の写真にゴッホのスタイルをとらんすふぁー | Futurismo][1]

今回は、その続き。

Lesson9の課題は、[Perceptual Losses for Real-Time Style Transfer][2]という論文を読んで理解し、Fast Style Transferを実装せよとのこと。

概要

前回のNeural Style Transferでは、学習に時間がかかることが問題だった。

この論文で書かれた手法をつかうと、学習したネットワークに画像を入力すると、順伝搬のみの計算でStyle Transferができる。GPUだと一瞬で(CPUだと一瞬じゃなかった)できる。なので、Real-Timeな画像処理=動画作成ができる。

これはすごい!

ネットワークの全体像は以下のような感じ。論文より引用。

![][3]

Image Transform NetworkLoss Network の2つのネットワークを組み合わせる。

Image Transform Networkのアーキテクチャは、以下のサブドキュメントが詳しい。

  • [JohnsonECCV16Supplementary.pdf][4]

Loss Networkは、VGG-16を用いる(全結合層をとったもの)。Content Loss と Style Lossを足しあわせ(これを Perceptual Lossと定義している)、損失関数とする。やっていることは、Lesson8のStyle Transferに似ている。

この損失関数を使って Image Transform Networkを 誤差逆伝播法で最適化する。Loss Networkは学習させない(公開済みの重みを使う)、Image Transform Networkのみ学習させる。

学習には、MS COCOという画像データを論文では利用していたが、Lesson9では、ImageNetからの抜粋画像([https://files.fast.ai/data/)を利用した。][5]

ちょっと言葉足らずなので、詳しくは以下の記事を参考に。とても詳しく書いてあって参考になった。感謝。

  • [画像の高速スタイル変換を行う論文の紹介 - Qiita][6]
  • [リアルタイム画風変換とその未来 : LINE Engineering Blog][7]

結果

今回も、与えられたJupyter Notebookをコピペして作成。コードの意味が理解できていないという情けない状況。がんばろう

  • 学習: [https://github.com/tsu-nera/cutting-edge-dl-for-coders-part2/blob/master/fast_style_transfer.py][8]

ノートPCの webcamから動画を取り込んで、fast style transfer で変換して、再度出力するということをやったが、ノートPCの非力なCPUでは、リアルタイムでは行かなかった。

  • 表示: [https://github.com/tsu-nera/cutting-edge-dl-for-coders-part2/blob/master/fast_style_transfer_show.py][9]