今回はこの論文を紹介します。いよいよハリーポッターの魔法の世界も夢ではなくなってきました感じがしますね。
Background
技術としては画像生成の分野ではお約束のGAN(Generative Adversarial Network)を中心として、style変換に用いられるAda-IN(Adaptive Instance Normalization)やEncoder(Embedder)の出力をGeneratorの各層に入れるアーキテクチャ、Projection Discriminator、マルチタスク学習・Few-shot learning*1のためのMeta-learningなどが用いられています。
以下に関連リンクを貼っておきます。
Adaptive Instance Normalization
[1703.06868] Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization (cited: 238)
Projection Discriminator
[1802.05637] cGANs with Projection Discriminator (cited: 51, 日本の方の論文!)
MAML
[1703.03400] Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks (cited: 644)
Proposed Method
全体のアーキテクチャは上のようになります。
Embedder
Embedderは人の画像とその顔の向きを表すランドマークを入力して受け取り、入力画像についての人物や背景そのものに関する特徴量を出力します。*2 この特徴量は顔の向きに依存せず、人物の種類のみの情報を抽出することを目指します。はネットワークのパラメータ。
Generator
ランドマークを入力として受け取り、Embedderの出力をで線形変換したスタイルをAdaIN(Adaptive Instance Normalization)を用いて各層に注入しながら特徴抽出・生成画像の肉付けを行い、最終的に与えられたスタイルとランドマークに照らして自然な画像を出力します。がネットワークのパラメータ、が線形変換のパラメータになります。
ここでAdaINは入力を、スタイルをとして次の式で計算されます。
ここでとがバッチ単位、多チャンネルの画像、とがのサンプルごと・チャンネルごとの平均と標準偏差(つまり各サンプル・チャンネルの画素値についての統計量)、とも同様の統計量です。
DNNにおいては特徴ベクトルの平均・標準偏差などの統計量が画像のスタイルを決定する上で重要な役割をもつことが知られており、AdaINによってこれを操作することによって画像のスタイルを変換することが可能になるようです。
以上のようにAdaINの論文[1703.06868] Arbitrary Style Transfer in Real-time with Adaptive Instance Normalizationには書かれているのですが、ここでのやは単純なベクトルなので微妙に細部が異なっていそうです。恐らくStyle-Based GANと同様にからそれぞれのレイヤー、チャンネルごとのやへの変換を直接学習するようにしているのではないかと思います。つまりがそれぞれのレイヤー、チャンネルごとのやを集めたものになります。
Discriminator
通常のGAN同様が本物か偽物かを判定します。はデータセットの種類、つまり人物のインデックスを表しています。は人物ごとの特徴量(つまりeに似た役割を持つもの)を集めてきたもので、が対象の人物についての特徴量となります(もパラメータ)。畳み込み層の出力ベクトルを、のパラメータを持つ全結合層に入れてを計算します。の役割については後で詳しく説明します。
Training
画像の生成方法
Embedderの出力値を顔の向きに依存せず、人物のみに依存するパラメータにするために次のような手順を踏みます。
これによっての各フレーム(つまり顔の向き)に対する依存性が失われ、不変な特徴量が学習されることが期待されます。
誤差関数
この手順で得られた出力画像を元に次の誤差関数を最小化することを目指します。
はGeneratorの出力画像と正解の画像の中身に関する誤差で単純なピクセル二乗誤差からVGGに突っ込んだ時の中間層の特徴量の二乗誤差などが用いられます。
は出力画像と正解の画像がDiscriminatorにとってどれだけ見分けづらいか、つまり出力画像のリアルさに関する誤差で、GANの基本となる誤差です。普通はなどが用いられることが多いですが、ここでは次のヒンジ型誤差を使っています(最近の流行り?)。
はEmbedderによる人物特徴量とDiscriminatorの人物特徴量が一致することを要請する特徴量で、単純に誤差が用いられるようです。
の存在意義
とを近づけるよう学習するなら最初からの部分にを突っ込めばいいやんけとなりそうですが、この工夫には次のような事情が考えられそうです。
- はモデルの出力値で訓練中大きく変化する上、Generatorはに大部分依存しているのでこれをDiscriminatorにも使うと学習が不安定になりそう
- そもそもGeneratorとDiscriminatorでパラメータを共有するのはまずいのでは?(敵対的に学習させるので両者が完全に独立であるべき )
またそもそもなぜのようなパラメータを用意するかについてですが、メタ学習は上図のようにタスク(ここではそれぞれの人物)に依存しないパラメータとタスクごとのパラメータを明示的に分け、共通パラメータをうまく学習させることでタスク依存のパラメータの最適化を効率化する、ということが目的のフレームワークです。ここではモデルパラメータなどが共通パラメータにあたり、人物特徴量やはタスク依存のパラメータになります。に人物への依存性を集中させることでDiscriminatorのパラメータの人物への依存性を減らしていると考えられます。
Fine-Tuning
このプロセスによりモデルの学習が完了したら、次のような手順で推論ができることになります。
- 推論対象の人物の画像を複数Embedderに入れてとを計算
- 推論対象のランドマークとをGeneratorに入れて推論結果を得る
このまま推論をしてもある程度はうまく行くようですがさらにリアルな画像を得るために次のFine-Tuningを行うと良いみたいです。
- 複数の人物に対して推論する必要はもうないのでEmbedderは不要、代わりに直接スタイルを最適化する。初期値をとしてGeneratorの新しいパラメータの一部とする。
- Discriminatorのも人物ごとに保持しておく必要はなく、の部分を直接最適化すれば良い。ただしはわからないので代わりにを使い、初期値をとして新しいパラメータを作る。
- 以外の誤差により(通常のGANと同様に)パラメータを最適化する。
以上により推論対象の人物に最適化されたパラメータを得ることができます。
Results
結果については公式のビデオを見るのが圧倒的にわかりやすいので割愛します。やFine-Tuningを使わない場合の比較も行なっています。
Comment
GANの部分についてはさほど目新しさはありませんが、メタ学習の考え方を取り入れることで人物依存のパラメータと共通のパラメータをうまく分離して効率的な学習が可能になっているのが興味深い点だと思います。特にFine-Tuningの部分の、前段階の学習の結果の出力値を初期値として新しいパラメータを作り、それを目的のタスクに向けて最適化していくというのがとても面白く、参考になりました。
個人的に最近メタ学習やfew-shot learningに興味が出てきたのでこれからそちらの方向に勉強の範囲を広げていければと思っています。
最後までお読み頂きありがとうございました!