ヒントを与える線画着色v3: Incremental improvement

Original article was published by Lento on Deep Learning on Medium


ヒントを与える線画着色v3: Incremental improvement

Introduction

前回の記事では、主にヒントとしてアタリを用いた方式と、リファレンス画像を用いた方式についての実験結果について述べました。今回は後者のリファレンス画像を用いた方式と動画での線画着色への応用について検討しました。従って今回の記事は、以下2つのセクションから構成されます。

  • Method: Reference
    ヒントとしてリファレンス画像を用いた線画着色について
  • Application: Video
    動画に対して線画着色を行う方式について

Method: Reference

①Introduction

前回の記事では、Adaptive Instance Normalization(AdaIN)をベースとしたモデル(下図)によってリファレンス画像を用いた着色について検討しました。

しかし、リファレンス画像内と線画内のキャラクターの構造が似ている場合のみ正常に着色可能であり、似ていない場合はキャラクターの各パーツを対応させながら学習する必要があるのではないかと述べました。今回の記事では、そのような学習を行う論文を参考にして実装した結果について述べます。

②Network Architecture

今回参考にした論文の概略図を下図に示します。この論文では学習中のリファレンス画像に対して2種類のAugmentationを行います。一つ目はAppearance transformation(下図のa(・))で、画像のRGB値それぞれに対してノイズを加えます。このAugmentationの目的は、モデルの色バイアス(林檎だったら赤、海だったら青のように特定の物に対して特定の色のみを当てはめること)の暗記を防ぐためです。二つ目はSpatial transformation(下図のs(・))で、Thin plate spline(TPS)法を用いてリファレンス画像を変形させます。このAugmentationの目的は、モデルがリファレンス画像と線画内の構造を対応させながら学習させるためです。前回の記事ではこのSpatial Transformationを行わなかったため、モデルが線画の各ピクセルに対して、同じ位置にあるリファレンス画像のピクセルを単に持ってくるよう学習していたのではないかと推測しました。

Junsoo Lee, et al., “Reference-Based Sketch Image Colorization using Augmented-Self Reference and Dense Semantic Correspondence”

また、この論文ではリファレンス画像からEncoder(上図中Er)で抽出した特徴量を適用するため下図のようなSpatially Corresponding Feature Transfer(SCFT)を提案しています。Self-attention構造がベースとなっています。

Junsoo Lee, et al., “Reference-Based Sketch Image Colorization using Augmented-Self Reference and Dense Semantic Correspondence”

③Dataset

データセットとしてはTagged Anime Illustrationsを用いました。各データからランダムに224✕224のサイズにクラップしてリファレンス画像と正解画像に使用しました。学習の際に入力として用いる線画はリファレンス画像から抽出しました。

④Training Details

以下学習時の詳細を示します。

  • 損失関数としては、Adversarial loss, Content loss, Perceptual loss, Style lossを用いた。それぞれの係数は1.0, 10.0, 0.01, 50.0。Perceptual lossではVgg19のRelu1_1, Relu2_1, Relu3_1, Relu4_1, Relu5_1の各出力に対してロスを計算。Style lossではRelu4_1の出力に対してグラム行列を計算して求めた。
  • バッチサイズは16
  • 最適化手法はAdam。Discriminatorの学習率は0.0002, Generatorの学習率は0.0001。β1, β2は0.5, 0.999
  • Appearance Transformationとしては、-50から50までの値から一様分布としてランダムに選択しそれを画像のRGB値に加算した

⑤Results

それでは結果を見ていきます。以下画像群において、AdaINが前回の記事で用いた手法による結果を表し、SCFTが今回紹介した手法による結果となります。

全体的にAdaINがスプレーのようにReference画像をそのまま写像しているのに対し、SCFTでは体のパーツに対応して写像しているのが分かるかと思います(上画像群の二枚目左上は顕著)。しかし、下図のようにAdaINの方が正常に着色している場合も存在します。SCFTではリファレンス画像と同じピクセルの位置に適当に写像する結果は少なかったのですが、位置関係の対応を取ろうとして取れないと判断した場合は適当な色で着色するため下図のような結果になるのでしょうか。AdaINによる結果との比較をしながら原因を追究して汎用性を上げたいと思います。

Application: Video

①Introduction
今までは静止画に対して自動線画着色を行ってきましたが、アニメーションのような動画に対しても静止画の連続体と考えれば適用できるはずです。今回はアニメーションに対する線画着色として以下のような工程で行います。
まず、一本のアニメーションをシーンという単位で区切ります。シーンは、決まった時間で区切るのではなくフレームからフレームの遷移において大きく変化があった場合を区切り点とします(具体的な区切り点の求め方は後述)。そして、各シーンの最初のフレームと最後のフレームが既に塗られている状態で間のフレームを深層学習によって着色します。最初と最後のフレームがヒントとして与えられるので、リファレンス画像を元にして着色する形式に近いです。

②Network Architecture

今回参考にした論文の概略図を以下に示します。二段階を経て着色を行っています。まずColor Transform Networkによって最初と最後のフレームを元にして着色を行い、次にTemporal Constraint Networkによって時間方向の制約を課し、更に着色の質を高めます。

Min Shi, et al., “Deep Line Art Video Colorization with a Few References”

Color Transform Networkでは、中間層にResidual Blockを並べたEncoder-Decoder構造を軸に据えています。線画をEncodeした後に、最初のフレームと最後のフレームの線画、Distance field画像、着色画像からSimilarity based Color Transform Layerを経た特徴量が加算されます。Similarity based Color Transform Layerがどのような流れで特徴量を計算しているのかは以下の図に示します。具体的な計算方法については論文をご覧ください。

Min Shi, et al., “Deep Line Art Video Colorization with a Few References”

次に、最初と最後のフレームとそれぞれに対応する線画をチャンネル方向に連結させたものを入力にして、Embedderによって大局的な色特徴量を抽出します。抽出した特徴量はResidual Blockの中でAdaptive Instance Normalization(AdaIN)によって適用します。また、軸にあるDecoderに通す前に二か所においてLatent Decoderを通して3chの画像を出力するようにします。これは、こちらの論文でも使用されていますが学習の安定性を高めるために存在します。

Temporal Constraint Networkでは、時系列に対する一貫性を保ちます。即ち、着色するフレームが最初と最後のフレームの間に存在するという制約を課します。このため、多くの手法では3D Convolutionを用いていますが、今回紹介する手法では計算量と計算時間の短縮のため3D Convolutionの代わりにこちらの論文で提案されているLearnable gated temporal shift module (LGTSM)を使用しています。このLGTSMはGenerator, Discriminator両方に用いています。

③Dataset

30分アニメを18本(全て異なるタイトル)用意し、まずシーンの選定を行いました。選定方法は上記で参考にした論文に倣います。連続する2フレームそれぞれにおいてRGB各チャンネルでヒストグラムを求め、768次元(256次元×3)のベクトルを作成します。フレーム同士でそのベクトルの差を計算し、閾値以上であればシーンが移り変わったと判断します。閾値の決め方は、解像度に依存するのでアニメ毎に設定しました。
シーン決定後、各フレームの線画はSketchKerasを用いて抽出しました。学習の際には、フレームと線画からランダムに256×256の領域をクラップしています。

④Training Details

以下学習時の詳細を記します。まずは、Color Transform Networkの学習についてです。

  • 損失関数としては、Adversarial loss, Content loss, Perceptual loss, Total variation loss, Latent constraint lossを用いた。それぞれの係数は1.0, 10.0, 1.0, 1000.0, 1.0。Perceptual lossではVgg19のRelu1_1, Relu2_1, Relu3_1, Relu4_1, Relu5_1の出力に対してロスを計算。Latent constraint lossでは、2つのLatent Decoderの出力に対して着色画像と平均絶対値誤差を計算し加算した
  • バッチサイズは16
  • 最適化手法はAdam。学習率は0.0001。β1, β2は0.5, 0.999
  • 前セクションで紹介した手法を参考にして、与える最初と最後のフレームに対してThin plate splineを用いたSpatial Augmentationを行う

次に、Temporal Constraint Networkの学習についてです。

  • 損失関数としては、Adversarial loss, Content loss, Perceptual loss, Total variation lossを用いた。それぞれの係数は1.0, 10.0, 1.0, 1000.0。Perceptual lossではVgg19のRelu1_1, Relu2_1, Relu3_1, Relu4_1, Relu5_1の出力に対してロスを計算
  • バッチサイズは4
  • 最適化手法はAdam。学習率は0.0001。β1, β2は0.5, 0.999
  • Thin plate splineを用いたSpatial Augmentationは行わない
  • Temporal Constraint NetworkはColor Transform Networkの出力を入力として用いるため、Color Transform Networkを予め学習させておく必要がある。この時、Color Transform Networkを十分に学習させたモデルでなければTemporal Constraint Networkの重みは学習中すぐに発散した。従ってColor Transform Networkを700000iterationと十分に学習させた後、Time Constraint Networkの学習を始めた。

⑤Results

それでは結果を示していきます。以下のgif群は、最左の画像が最初のフレーム、左から二番目の画像が最後のフレーム、三番目の画像が着色したい間のフレーム、最右の画像が着色結果になります。

このように最初と最後のフレームをヒントにして、間のフレームが塗れているのが分かります。今回はColor Transform Networkの出力に対して、Temporal Constraint Networkでより着色の質を高めようと意図していますが、比較の結果を下図に示します。Color Transform Networkの出力時点で既に大局的に塗れていますが、Temporal Constraint Networkによって細かいアーティファクトが無くなっているのが分かるかと思います(後頭部に位置するノイズが消えている等)。