Recycle-GANを用いた行動模倣

Introduction

今までは画像処理をメインにやってきましたが、そろそろ動画や3Dに手を出したいという思いもあり、今回は動画処理を行いました。行ったのはRecycle-GANです。このRecycle-GANで顔動画の模倣を行います。即ち顔を映した動画を入力に入れると、別の人物が似たような動きをするというものです。
このようなスタイル変換では従来はCycleGANが用いられてきました。しかし、動画を連続した画像と考えると、CycleGANを各フレーム毎に適用しても一つの似たような画像しか生成しないという問題がありました(Perceptual mode collapse)。個人的には時間方向を考慮していないのだから当然という気もしますが、そのような問題を解決するのがRecycle-GANです。

Recycle-GAN

基本的にはCylceGANの拡張です。XとYという2つのドメイン間の変換で、それぞれにGeneratorとDiscriminatorが存在し、Recycle-GANでは時間方向の予測を行うPredictorもそれぞれ存在します。PredictorにはUNetを用いています。

出典: Aayush Bansal, et al., “Recycle-GAN: Unsupervised Video Retargeting”

損失関数としては、CycleGANと同様にAdversarial lossとCycle lossが存在し、以下2つの項を加えています。
まずRecurrent lossは下の式で表されるものであり、ある時刻tまでの入力画像からPredictorを通して出力したものと、次の時刻の入力画像とのL2 lossを取ります。

次に加える項が下の式で表されるRecycle lossです。Recurrent lossの拡張になっており、次の時刻の入力とのL2 lossになっています。ただ、その次の時刻のフレームの生成のために

  • Generator(X→Y)を通してもう一方のドメインに変換
  • もう一方のドメインにおけるPredictorを通して、そのドメインにおける次の時刻のフレーム画像を生成
  • Generator(Y→X)を通して、生成したいドメインにおける次の時刻のフレーム画像を生成

という流れです。Recurrent lossが直接的なら、Recycle lossは間接的です。百合みたいですね。

以上述べたAdversarial loss、Cycle loss、Recurrent lossとRecycle lossの和をGeneratorの損失関数としました。論文中ではCycle lossを加えてないのですが、著者実装(?)ではCycle lossを加えていたので自分で実装する際にも加えています。

Dataset

2種類のデータセットを用意しました。

  • 大崎甘奈ちゃんと大崎甜花ちゃんのシャニマスにおける映像(4分半)を用意し、1sに4フレーム毎抽出し、顔が映るように各フレームを切り出しました。学習用にはそれぞれ1000枚用意しています。因みに甘奈ちゃんと甜花ちゃんで服装や背景が違うのはいいですが、それぞれの1000枚の画像で背景や服装は同じになるようにしています。
  • 声優の上坂すみれさんと内田真礼さんのコメント動画を用意し、同様に1sに4フレーム抽出し、顔画像を切り出しました。上坂すみれさんは500枚、内田真礼さんは280枚のフレーム画像を用意しています。

Experiment

2種類のデータセットに対して、甘奈ちゃん→甜花ちゃん、上坂すみれさん→内田真礼さんとなるように学習しました。以下詳細を記します。

  • Generatorの構造は、1/2のdown samplingを2回、Residual Blockを6層、2倍のUp samplingを2回。。Up samplingにはNearest Neighbor Upsampling → Convolutionとした。
  • Predictorへの入力は現在の時刻と、一つ前の時刻のフレーム画像をconcatしたものとした。
    用意したデータセットから連続した20フレームを抜き出し、その中で前から2フレームずつ学習に回し、次のフレームを予測するようにした。
  • DiscriminatorとGeneratorは交互に学習。Discriminatorを先に学習。
  • Cycle loss、Recurrent loss、Recycle lossの重みは10.0とし、Adversarial lossの重みは1.0とした。
  • 最適化手法はAdam(α=0.0002、β1=0.5)

Results

それでは結果を示します。まず左に甘奈ちゃん→甜花ちゃんの変換結果を載せます。入力動画の各フレームにGeneratorを適用し、動画を生成しました。可愛いですね。ただ、動きは模倣出来ているものの、表情は出来ていない状態です。これは甜花ちゃんの学習データに豊かな表情が含まれてないためと推察します。甜花ちゃんの笑顔を生成できなくて残念です….

次に上坂すみれさん→内田真礼さんの変換結果を示します。動画の余白が多いのはご了承ください。こちらも行動は模倣できており、口の動きもそれなりになっています。手がちゃんと出ているのも凄いですね。ただ、生成画像の画質が粗いので次は学習データを増やしてどうなるか見てみようと思います。

Summary

今回はRecycle-GANを用いた動画のスタイル変換を行いました。最近は、Everybody Dance Now等動画でのスタイル変換が見受けられるようになり、CV系Deep Learningの対象が画像から動画へと移り変わっていくのを日々実感しています。計算資源的についていけるだろうか、という思いはありますが….
動画では時間方向の予測が重要となります。今回用いたRecycle-GANはRecurrent lossとRecycle lossを考慮することでこれに対処しており、例えばEverybody Dance Nowでは以下の図のようなTemporarl smoothingを用いることで対処しています。このような時間方向を踏まえた損失関数は今後様々に考えられていくのではないでしょうか。
個人的には動画でのスタイル変換ということで、アニメキャラクターの動きを他のキャラクターに伝搬させたりしたいですね。

出典: Caroline Chan, et al., “Everybody Dance Now”

Environment

OS : Ubuntu 16.04 LTS (64-bit)
CPU : Intel(R) Core(TM) i5–4590 CPU @ 3.30 GHZ
GPU : NVIDIA GTX970
メモリ : 8GB