アニメのスケッチをResidual U-net とAC GANで着色する論文を読んだ

シェアする

  • このエントリーをはてなブックマークに追加
スポンサーリンク

はじめに 

皆さんは、絵を自動で着色できたら素敵だと思いませんか?有名なWebサービスとしてPaintsChainerがあります。私は、絵がうまくないので活用することができませんが、絵を描く人からしたらすごくいいサービスですよね。でも、PaintsChainerでは、着色する時、部分毎に色のヒントを上げることで完成度の高いカラー絵が出来上がります。

今回、読んだ論文は、色の情報、ヒントを人から上げずに自動的に着色をしようという試みになっています。個人作品には、PaintsChainerの方が利便性は高そうですが、同じキャラクターの絵を複数描く場合とかですと、自動で着色できた方がよさそうです。

その論文がこちらになります。

Style Transfer for Anime Sketches with Enhanced Residual U-net and Auxiliary Classifier GAN

この論文で使用されているAC-GANについてはこちら

GoogleColaboratory と Keras で AC GAN を試してみた

論文の内容

アブストラクト

スタイル転送方法で、コンテンツ画像とスタイル画像から自動的に合成ができる。しかし、アニメスケッチだとスケッチラインを出力として色付けし、特定のスタイル転送で失敗する。

そこで、Residual U-net と AC-GANを使ってグレースケールスケッチにスタイルを適用して自動的に着色する方法を提案する。PaintChainerでは、ヒントを追加することで完成度の高いもの作れるけど、既存の絵を使うことができない。

コントリビューション

  • スケッチに絵のスタイルを適用する
  • Residuel U-net でバランスの情報量を有するペアの画像を処理できる
  • Residuel U-net を2つの追加損失で学習する効果的な方法
  • 異なるスタイルの絵を扱うのに適したAC-GANから変更されたDiscriminator

Generatorのアーキテクチャと目的

今回のネットワークの構成の詳細が次の図です。

(論文より)

グローバルスタイルのヒントをエンコーダとデコーダの中間層に追加するのは、最初ではない。関連研究として、ディープネットワークを用いた大域特徴と局所特徴の学習による白黒写真の自動色付け(http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/ja/)がある(日本語論文なのでぜひ見てほしい)。グローバルヒントが高次元ベクトルとして分類ネットワークの高レベルレイヤから抽出され、次に色付けネットワークに追加されます。 写真の色付けのために、影、材料およびテクスチャは入力において既知の変数であり、ネットワークは色分布を分析するために情報のスポットのみを必要とするこの関連研究の論文では、グローバルヒントとして1×1×256のベクトルしか使用しない。

しかし、ネットワークがさまざまなユニークなスタイルの絵にスケッチをペイントするには、このベクトルでは足りない。よって、1×1×4096または1×1×2048のサイズでスタイルヒントを追加します。 しかし、そのようなGeneratorを学習することに失敗したことから、有名なネットワーク構成であるU-netの「性質」がわかった。失敗した結果を次に示します。

(論文より)

U-net

U-netは「怠け者」であることをこの論文の著者は主張しています。なぜなら、U-netは低レベルのレイヤで問題解決をできるようになったら上位レイヤは学習しなくなるからです。イメージ的には次の図のようになる。

(論文より)

1×1×256のヒントでは、スケッチを自動的に着色するにはほど遠いため、VGG 19の fc1 の出力から、 Relu の活性化なしで、1×1×4096 のヒントが得られました。 4096のヒントベクトルは非常に有益かつ強力ですが、新たに初期化されたUネットの場合、4096のベクトルをレイヤに直接追加すると、中間レベルのレイヤの出力が非常にノイズが多くなることがあります。「怠け者な」U-netでは、ノイズの多い中間層は放棄され、これらの層では結果として勾配を受け取ることができません。

(論文より)

 そこで、残差ネットワークを使うことにしました。 「怠け者」になる可能性のある各レイヤーに追加の損失を付けると、中間レベルレイヤの出力がどれほど雑音がおおいものであっても、レイヤはUネットによって放棄されることなく、全てのレイヤーが安定する。 したがって、中間レベルのレイヤーに非常に有益なヒントを追加することが可能です。 「ガイドデコーダ1」と「ガイドデコーダ2」では、中間レベルのレイヤーで勾配が消えるのを防ぐため、2つの追加損失を実装しました。 2つのガイド・デコーダがある場合とない場合の損失傾向を次の図に示します。

(論文より)

lossの定義

  • xとy:スケッチと絵の対の領域
  • V(x):ReLUがないVGG19のfc1の出力
  • Gf(x,V(x)):U-netの最終出力
  • Gp1,Gp2:ガイドデコーダの出力
  • α,β:推奨値は0.3,0.9

エントリに位置するガイドデコーダを供給することで中間層のグレースケールマップ使用しているので、最終的な損失はここでT(y)はyをグレースケール画像に変換することができる。

Discriminatorのアーキテクチャと目的

従来のcGANはこのプロジェクトには適していません。絵画は複雑な作業であり、人間の芸術家は色の選択、構図、微調整を考慮する必要があり、これらのすべてが絵画のグローバルな仕方に焦点を当てる必要があります。しかし、AC-GAN は、グローバル情報よりもスケッチ線と色の関係に常に重点を置く傾向があります。 Pix2Pixを使った我々の実験では、AC-GAN が適用されると、Generator は激しく抵抗し、その線を囲む色は極端に大きくなり、過度に着色されている。チューニングパラメータではバランスが取れません。
さらに、Discriminator がスタイルを伝え、それに応じて勾配を与える能力を持っているかどうかを評価することができます。我々は最終的にAC-GANを使い、我々のDiscriminatorは正確に4096の出力を有し、入力が偽である場合にはすべて最小化され、入力が真の場合にはVGG19のfc1の同じ値に近づく。

しかし、損失を最小限に抑えるためには、GPUに大きなメモリサイズが必要です。 DCGANのDiscriminator を使用して、高速かつ大量のバッチサイズを実現しました.2つの損失関数をシフトすることによってネットワークを微調整します。

最終的な目的関数は、次のようになる。

まとめ

このネットワークはVGGの分類能力に応じて、ユーザが与えたスタイルマップに従ってスケッチを描くことができる。

しかし、ここで使用している学習済みモデルはImageNetの写真分類のためのものであり、絵のためのものではない。よって、今後は絵のためのネットワークを学習させ精度を上げたい。また、Res Networkの層数が多く、batchsizeが4以下である。


いかがだったでしょうか。文面だけだとピンとこないところもあるので、次回はコードを見ながらどのように実装しているのかを見ていきたいと思います。

この論文で使用されているAC-GANについてはこちら

GoogleColaboratory と Keras で AC GAN を試してみた

最後まで読んでいただきありがとうございました。よろしければこの記事をシェアしていただけると励みになります。よろしくお願いします。

スポンサーリンク
レクタングル広告(大)
レクタングル広告(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル広告(大)