ヒントを与える線画着色v3.224744…

Original article was published by Lento on Deep Learning on Medium


Introduction

前回の記事では、主にヒントとしてアタリ形式を用いた方式と、リファレンス画像を用いた方式についての実験結果について述べました。今回は前者のアタリを用いた方式と、応用として一枚の線画から多様な着色結果を生み出す方式についての検討について述べます。従って今回の記事は、以下2つのセクションから構成されます。また、前者では結果に対する考察が十分ではなく、後者では所望の結果が得られていません。あくまでも参考程度に留めておいていただければ幸いです(そのため題目のversionを小数点刻みにしています)。

  • Method: Atari
    ヒントとしてアタリを用いた線画着色について
  • Application: Diversity
    一枚の線画から多様な着色結果を生み出す方式について

Method: Atari

①Introduction

前回まではpix2pixをベースとして、Generatorの出力に対してDiscriminatorを用意してAdversarial lossを計算していました。言い換えれば、着色結果そのものに対して真偽判定を行なっていました。しかし、一般的に着色されたイラストは様々な要素(線、色、塗り方等)から構成されており、Discriminatorはそれらを同時に判定しているためどの要素を重要視しながら学習しているのか分からないのではないかと推測しました。そこで、Generatorの出力を要素毎に分解したり、意図した要素に対応する損失関数の設計を行ったりして各要素を考慮した着色が出来ないか検討しました。

②Network Architecture

今回参考にした論文の概略図を以下に示します。こちらの論文は自動線画着色についてではなく、写真からアニメ絵への画像変換についてであることにご留意ください。こちらの論文では、アニメ絵の表現として以下の三つを挙げています(論文中のFigure 3参照)。

  • Surface: 平坦かつ滑らかな面
  • Structure: スパースな色ブロックで構成される大局的な構造
  • Texture: 鋭く明瞭なエッジによる詳細な線
Xinrui Wang, et al., “Learning to Cartoonize Using White-box Cartoon Representations”

この論文では、それら三つの表現を分けて学習しています。どのように各表現を得るかについて以下で説明します。

  • Surface: エッジやテクスチャを残しつつ詳細部分は省くためGuided filterを適用する
  • Structure: スパースな色ブロックで構成させるため、SuperpixelとSelective searchによって画像を小領域に分割して似た領域は一まとめにする。今回の実装では、K-means法で200クラスのクラスタリングを行い、それぞれの領域の標準偏差を計算し、以下のように標準偏差の値によって領域を一つの値で埋める
    — 1. 標準偏差が20未満: 平均値で埋める
    — 2. 標準偏差が40より大きい場合: 中央値で埋める
    — 3. 標準偏差が20以上40以下場合: 平均値と中央値の平均で埋める
  • Texture: 色や輝度の情報を無視するため、グレースケール化する際のRGB各値に掛ける係数をランダムにシフトさせてグレースケール化

このようにして三つの表現を得ます。その後、TextureとSurfaceについてはそれぞれDiscriminatorを用意してAdversarial lossを計算、Structureについては得た表現と、表現を得る前のGeneratorの出力を入力にしてPerceptual lossを計算しています。

こちらの論文を線画着色に応用した場合の概略図が以下になります。写真が線画、アニメ絵がイラストになった以外に特に変更点はありません。

③Dataset

データセットとしてはTagged Anime Illustrationsを用いました。学習中は各データからランダムに224✕224のサイズにクラップして正解画像として与えました。

④Training Details

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

  • 損失関数としてはTextureに対するAdversarial loss, Surfaceに対するAdversarial loss, Structureに対するPerceptual loss, Content loss, Total variation lossを用いました。それぞれの係数は1.0, 1.0, 200.0, 10.0, 10000.0です。Perceptual lossの計算ではVgg19のRelu5_1の出力を用いてロスを計算しています。またSurfaceに対するAdversarial lossにおいてGeneratorの各重みを更新するための損失を計算する際には係数を0.1にしています。
  • バッチサイズは16
  • 最適化手法はAdam。学習率は0.0001。β1, β2は0.5, 0.999

⑤Results

それでは結果を見ていきます。

このように前回の記事のアタリ方式の結果と比べて平坦且つ滑らかな面が強調される結果となりました。また、下記にAblation studyとしてそれぞれの表現を考慮しない状態で学習した結果が以下の図になります。w/o Surfaceでは色褪せてしまい、w/o Textureは所々詳細部分が粗くなり、w/o Structureではアーティファクトが生じています(w/oはwithoutを表します)。

⑥Summary

前回記事のようにGeneratorの出力そのものに対してAdversarial lossで学習する場合と比較して、平坦且つ滑らかな面が際立った結果となりました。本来ならイラストを学習データにしているので、アニメ絵とは異なった結果になるはずですが、学習データにアニメ絵が多く含まれているとかSurfaceの表現を重視するように学習が進んだとかが原因かもしれません。このように結果に対する考察が不十分のため実験をまだ重ねる必要があります。

Application: Diversity

①Introduction
これまで実装してきた自動線画着色の出力結果は一種類のみでした。つまり多種類の出力を想定していないシステムになっていました。しかし、実際のイラストを見てみると、色のバリエーションだけでなく影の付き方、塗り方(厚塗り、アニメ絵塗りetc)等にもバリエーションが存在します。そこで、線画とヒント(アタリ方式)を入力にして多様な出力が可能なのか検討しました。こちらの記事で用いたStarGANのように、多様な出力を行う場合には入力としてラベルを与えるのが一般的です。しかし、私がイラストに関して素人ということもあり各イラストがどのような塗り方、影の付き方をしているのかをラベル付けするのは困難だと判断しました。そこで、バリエーションを生むためにランダムなノイズを与えながら多様な出力が出来ないか以下の流れで確かめることにしました。

  • 初期検討: 経験的に学習し易いバリエーションとして色が挙げられる。多様な色を出力させながら学習出来るのか検討
  • 本検討: 初期検討の妥当性が確認出来たら、色は固定にして多様な出力(塗り方、影のつき方等)が可能な手法を検討

②Network Architecture
ベースの構造としてはBicycleGANを用います。概念図を以下に示します。

Jun-Yan Zhu, et al., “Toward Multimodal Image-to-Image Translation”

今回の学習ではスタイルを制御する手段として、離散的なラベルではなく、ある次元の正規分布に従うベクトルをランダムに発生させそれを入力に加えることで出力を変化させます。このようなランダムなベクトルを以後ノイズと呼びます。ノイズによって出力を制御できるかどうか確かめるため、BicycleGANの著者らは以下のような手順で検討を始めました。

  • まず、(b)のようにpix2pixの入力に画像とは別にノイズを加算して出力がどう変化するか確かめてみました。しかし、pix2pixの論文でも述べられているように出力結果はノイズを影響を無視するような学習を行う事が分かりました(つまり、ノイズの値に関わらず出力は一通りのみ)。
  • 次に、(c)のようなcVAE-GANを検討しました。線画着色に当てはめると着色画像をencodeして、encodeした潜在ベクトルと線画を組み合わせて復元するというものです。復元を意図しているためGeneratorの出力に対して正解との絶対平均値誤差を取り、自然な出力に見せたいためAdversarial lossを計算します。しかし、この手法では獲得した潜在ベクトルは学習データから得られているものの、推論時に発生させるノイズは正規分布から得ているため、推論時に学習データに沿う着色が出来ない場合があります。また、Discriminatorは推論時に発生するノイズを入力にした場合の出力を学習出来ないという欠点も存在します。
  • 次の代案として(d)のようなcLR-GANを検討しました(LR: Latent Regressor)。この手法では、線画とノイズを入力にして着色画像を出力します。そしてEncoderを用いて潜在ベクトルを獲得し、ノイズとの平均絶対値誤差を取ります。cVAE-GANのように復元を意図しているのではなく、単に入力の線画にノイズを加えているため出力は正解着色画像のようにはならないですが、自然な出力に見せたいためAdversarial lossを計算しています(憶測ですが、もし出力と正解着色画像の絶対平均誤差を計算するとpix2pixと同等になってしまい、結局一通りしか出力されないと思われます)。この手法ではAdversarial lossのみを計算しているためGeneratorの出力が入力に沿わない場合(例えば線画着色なら線画を無視した出力になる)が大いにあり得ます。
  • そこで、著者らは(c)のcVAE-GANと(d)のcLR-GANを組み合わせたBicycleGANというものを考案しました。cVAE-GANの欠点である学習時と推論時で異なるノイズ、cLR-GANの欠点であるGeneratorの出力が入力に沿わない問題も原理上は解決できます。

③Initial Experiment

まず初期検討として、BicycleGANを用いて色などの多様な出力が可能なのか確かめました。従って下図のような流れになります。入力は線画とノイズです。

④Advanced Experiment

次に本検討として、色は固定にして多様な出力(塗り方や影のつけ方等)が可能かどうか確かめました。以下の図(b)のような流れになります。入力は線画とヒント、ノイズです。

初期検討と異なる部分は、一旦平坦化(上図のFlatterに相当)させた上でGeneratorの入力として用いていることです。本検討を始めた当初は、上図(a)のように直接Generatorに入力しようと考えていましたがこの方式だとヒントで与えた色に関係なく多様な色を出力していました。そこで絵師がイラストを描く際には、まずベタ塗りをした上で影付けや各種塗り方を行う流れを踏襲して一旦平坦化(ベタ塗りに相当)させて、その上でGeneratorの入力として用いようと考えました。
平坦化用ネットワークの学習について説明します。ネットワークの入力に線画とヒントを与えて、平坦化された着色画像を正解としてpix2pixのように学習しました。正解に用いる平坦化された着色画像はDanbooRegionを用いて用意しました。DanbooRegionは以下図のようにイラストと小領域に分割したマップをペアで含むデータセットです。

Lvmin Zhang, et al., “DanbooRegion: An Illustration Region Dataset”

DanbooRegionの論文でも述べられていますが、以下の図のように分割した各領域の中央値のみを選ぶことで平坦化された着色画像を用意することが可能です。

Lvmin Zhang, et al., “DanbooRegion: An Illustration Region Dataset”

今回はAnime Sketch Colorization Pairの全ての画像に対して平坦化された着色画像を用意し、入力を線画とヒントとして平坦化用ネットワークを学習しました。深層学習によって着色した画像を上記の流れで平坦化画像に変換する方式も考えましたが、着色モデルによる色の塗り間違いが平坦化画像にも反映されるのではないかと推測して正しい平坦化画像を用意してそれらを学習する方式にしました。学習した平坦化用ネットワークの推論結果を以下に示します。

⑤Dataset

データセットとして今回はこちらのGithubページにある顔イラストのみを集めたものを用いました。初期検討、本検討のBicycleGANの学習どちらにもこのデータセットを用いています。本来ならTagged Anime Illustrationsを用いて全身画像も含めて学習させたかったのですが、現時点で学習に失敗しているため問題を簡素化する目的で顔イラストのみを用いています。

⑥Training Details

初期検討、本検討どちらにおいてもBicycleGANの学習には以下の詳細で行っています

  • 損失関数としてはAdversarial loss, Content loss, Latent constraint loss, KL loss, Mode seeking regularizerを用いた。それぞれの項の係数は1.0, 10.0, 0.5, 0.01, 1.0
  • バッチサイズは16
  • 最適化手法はAdam。学習率は0.0001。β1, β2は0.5, 0.999
  • ノイズの次元は8

⑦Results

  • 初期検討の結果
    まず初期検討に対しての結果を見ていきます。

線画からノイズに応じて多様な色を持つ出力が可能になっていることが分かります。従って初期検討としては十分だと思い、次の本検討に移りました。

  • 本検討の結果
    それでは、本検討の結果を見ていきます。

このように、ヒントとして与えられる色は保っているもの、結果としては背景や色の濃淡が変わっているのみで本来狙っていた塗り方や影の付き方に変化は見られないという結果でした。今後の予定としては以下の3つがあります。

  • BicycleGAN以降の手法を試す
    BicycleGAN自体は3年前の論文なので、最近の手法だとより良い特徴抽出が可能なのかもしれません。しかし、今回のようにノイズで多様さを制御する手法として比較的最近のSPADETSITを試してみましたがノイズに関わらず一通りの出力をする結果でした。悪戯に様々な手法を試すのではなく、それぞれの手法を理解した上で試します。
  • 明示的に塗り方や影の付き方の表現を得る
    前のセクションでは明示的にSurface, Structure, Textureの表現を得ていました。同様に、影や塗り方の表現を何らかの手法で得られたらと思います。塗り方についてはまだ不透明ですが、影についてはこちらの論文等を参考にしながら進めたいです。
  • あらゆるデータセットに対する汎用的な手法
    Datasetの節でも述べましたが、全身画像でのデータセットではBicycleGANの学習に失敗したので今回は顔イラストのみのデータセットとして用いました。着色対象に制限がないようにしたいので、どのようなデータセットでも学習可能になるよう目指します。

Summary

今回はアタリを用いた方式と、応用として一枚の線画から多様な着色結果を生み出す方式についての検討について述べました。前者は明示的にSurface, Structure, Textureの三つの表現に分けて学習を行い、後者は暗示的に塗り方や影等の表現を学習しようとしました。特に後者に関しては、狙った通りの結果が得られなかったです。イラストの構成要素を考慮しながら獲得したい表現を明示的にどのように得るか模索していきたいと思います。