読者です 読者をやめる 読者になる 読者になる

(後編)マハリクmahalita 白黒アニメよ色よ付け えいっ! (ディープラーニングによる白黒アニメの自動彩色実験)

白黒アニメをカラーで見たい...。

 

  f:id:eiji-kb:20161125214435p:plain     (C)光プロダクション・東映アニメーション/魔法使いサリーより引用。右は自動彩色。

 
前編(この彩色手法の基本的概要)

ネットワーク構造

今回の彩色実験に用いたモデルのネットワーク図です。 

f:id:eiji-kb:20161125224703p:plain

ベースはPavel Gonchar氏のcolornet*1です(上図右側)。これはRyan Dahl氏のAutomatic Colorization*2をベースにしたTensorflowによる実装です。今回作成したモデルは、colornetのChainerによる移植ですが、さらに以下の変更を加えています。

1.色空間としてYUVではなくLabを使用し、colornetの最終層のシグモイドを除外した。
2.VGG16第5層も彩色ネットワーク側に接続し利用した。
3.Satoshi Iizuka, Edgar Simo-Serra, and Hiroshi IshikawaのLet there be Color!*3のFusion Layerに影響を受け、VGG16全結合層を利用する簡易FUSION層を追加した。

や3は、アニメはキャラクタがアップで表示されることがあるため、大域的な領域の、彩色性能の向上を目標として追加しました。
細かい話ですが、colornetでは拡大にバイリニア法が使っていますが、このモデルでは、Upconvolution(Deconvolution)を使用しています。
なおVGG部分は、K. Simonyan氏らによるILSVRC-2014 model*4をCaffeモデルからChainerモデルへ移転したmitmul氏の chainer-imagenet-vgg*5を使用しました。

訓練データ

 実験で使用したアニメは、横山光輝原作、東映動画製作の魔法使いサリーです。少女向けアニメですが、内容的には男児も含めた子供一般が楽しめるように作成されています。放送開始は1966年、17話まで白黒、18話からカラーで制作されました。よってオープニングも白黒版とカラー版が存在します(オープニングは、背景とカメラワークに差異が存在します)。

 今回は、本編(第1話)を彩色することを主な目標とします。そのため、18話からのカラー放送を訓練データとして使用しました。

訓練データ
  魔法使いサリー6話分(18〜23話,OP ED抜き,2時間18分,フレーム数248,433)

 なお、フレーム数は約25万ですが、アニメには連続して同じフレームが存在します。そのため、実質的な訓練データ数としては、もう少し少なめに見積る必要があります。

訓練時間

使用機器

  CPU Intel Core i7-4790K
  GPU NVIDIA TITAN

 訓練時間は1エポック(6話分の訓練データをモデルに1回学習させる)およそ20〜22時間かかりました。なお、学習状況のモニタ機能を利用し、かつ同じ計算機上で別作業も行っていましたので、実際は、もう何割かは速く処理することが可能です。今回は1エポックずつ作業し、3日かけて3エポック実施しました(厳密には、1から2エポックのつなぎ処理が少し漏れましたので,3エポックには満たないです。次章に記載した最大学習回数(741,868)が、フレーム数248,433×3エポック=745,299とイコールでないのはそのため)。
 話が前後しますが、訓練データとして動画をそのまま使用しました。手軽に大容量の訓練データを与えたいというのが第一の理由でしたが、実際に行おうとすると、サリーのカラー放送は全91話ありますので、これを訓練するには1エポックだけでざっと12〜13日はかかりそうです。今回は断念して6話分で訓練を行いました。

実験結果

下図は、白黒放送第1話に、自動彩色を施した結果です。自動彩色に使用したモデルの学習回数は、741868(最大)、720000、680000、660000です。


・学習回数741868(最大)モデルによる自動彩色

 f:id:eiji-kb:20161125231342p:plain  

・学習回数720000モデルによる自動彩色

 f:id:eiji-kb:20161125235630p:plain

・学習回数680000モデルによる自動彩色 

 f:id:eiji-kb:20161126000127p:plain 

・学習回数660000モデルによる自動彩色

 f:id:eiji-kb:20161126001223p:plain


 
 以上の画像ですが、各モデルで見栄えがいいのものを選んで載せています。実際には、彩色はうまく行かなかった例も多々あります。下図では、よし子ちゃん(右のキャラクタ)の腕に塗り漏れが発生しています。 (その他の例は動画で確認できます)


 

 f:id:eiji-kb:20161126001656p:plain

 

学習結果の傾向

 学習モデルによって、彩色の得意不得意があります。例えば学習回数720000では背景の木々の緑がよく出ます。今回、訓練データとして動画を用いましたが、これは、モデルは動画の頭から順に1フレームずつ学習しています。そして、アニメはシーンにより色彩が違ってきます。モデルを保存するタイミングで、そのタイミングのシーンに適合しているため学習モデルによって彩色の傾向に違いが出たと考えられます。またモデルによっては、シーンをまたがっての学習中なのか、まったく冴えない彩色をするモデルもあります。この点は、今回の訓練方式の欠点かと思います。エポックごとに学習係数を低減していくと、もう少しモデル間の差異は小さくなったかもしれませんが、今回は全エポック一律の学習係数で訓練しています。
 学習回数680000のモデルでは、背景の木々が緑だったりピンクだったりに彩色されました。これは訓練データの風景(下図)に、日中の緑の木々だけでなく、桜や夕焼けに染まった風景もあったことが影響したと考えられます。しかしながら、これはこれでグラデーションがかかったように見えていいリズム感が出ましたので、個人的には気に入っています。

 

  f:id:eiji-kb:20161126003319p:plain



ところで、シーンによって彩色が違ってくるということは、やはりそのシーンばかりを集めて専用の訓練データを作って訓練したほうが綺麗では、と考えられます。試してみたところ、魔法の国のシーンでは、カラー放送に近い彩色結果が得られました。 


(左から、白黒、本編モデルで彩色、魔法の国モデルで彩色)

   f:id:eiji-kb:20161126004124p:plain



 しかし、他のシーンでは特に印象的な結果は出ませんでした。理由は6話分(約2時間20分)からシーンを集めましたので、訓練データ自体が小さくなったのが一因と考えられます。かといって訓練データを大きくするのは、現状では手作業となってしまうためあまり現実的とは言えません。魔法の国のシーンがうまくいったのは、元々背景の色が単調であったことや、白黒放送と同じ原画・動画(中割り)を使ったと考えられるシーンがカラー放送にあったためと考えられます。

 

 あと、オープニングについては、カラー放送のオープニングを学習していない本編モデルでも、当然白黒放送のオープニングの彩色はできますが、やはりカラー放送のオープニングを訓練したモデルを使った方が、カラー放送に近い彩色はできます。



(左から、白黒放送、本編モデル(680000)彩色、カラー放送OPモデル彩色、カラー放送)
f:id:eiji-kb:20161109235311j:plain                          ©光プロダクション・東映アニメーション



 サリーちゃん本編(白黒放送第1話)への彩色実験の結果です。今回、複数モデルを使用して彩色しましたので、主観になりますがモデル間で比べてみて綺麗と思ったシーンで編集してみたのが以下の動画となります。(OP+1話。1話はダイジェスト編集しています)


 

     

                      ©光プロダクション・東映アニメーション

 


単体のモデルで彩色した結果を知りたい方は、先に紹介したGitHubに、学習回数680000で彩色した動画のリンクを貼っていますのでご参照ください。

色彩設計の違い

 上の動画を見たら、カブ(下図のキャラクタ)の服の色が、カラー放送と比較してかなり違うと感じられたと思います。また、オープニングの家の屋根も赤になっていません。これらは、カラー放送と白黒放送で色彩設計が違うためと考えられます。


 

(左から、カラー放送、カラー放送→グレースケール化したもの、白黒放送)  

  f:id:eiji-kb:20161126005629p:plain


真ん中がカラー放送をグレースケール化したものですが、白黒放送と比べると服や屋根の輝度が違うのがわかります。カブは白黒放送ではシャツとズボンの違いがはっきりわかりますが、カラー放送をグレースケール化すると、服の境界線が分かりづらくなります。なおカラー放送だからカラーを優先するのは当然ですが、カラー放送に切り替えられた1967年当時はまだカラーTVの普及率は1.6%(翌68年でも5.4%、ただしこの後急速に普及し75年には90%超えます。*6総務省)だったため、当時放送を見ていた、多くのちびっ子たちは切り替わった際に違和感を抱いたのではと思われます。話がそれましたが、今回使った手法では彩色にあたってグレースケールが重要な情報となりますので、輝度にこれだけ違いがあると彩色は難しいようです。
 なおサリーちゃんの服は白黒放送から赤としての設定だったようで、今回の手法でも赤でうまく塗れています。ただしサリーちゃんの顔の色には、ばらつきがでました。原因のひとつとして考えられるのは、訓練データ(カラー放送)でも、サリーちゃんの顔の色にばらつきがあることです。
 また、訓練データについて補足しますと、キャラクターの作画についても多様性があります。サリーちゃんも、顔の描き方から身長まで、かなり幅があります(特に中割りにおいて顕著でした。中にはサリーちゃんじゃなくて別のギャグアニメだろうといったテイストのものまでありました)。

汎化性能

 上で紹介したサリーちゃんの動画も、彩色したのは訓練データには含まれていない白黒作品です。さらに、サリーちゃんで学習したモデルを、まったく違う白黒作品に適用して彩色テストしてみました。テストしたのは、石ノ森章太郎原作、佐武と市捕物控(1968)です。サリーちゃんとはかなり違う作風の作品です。使用したモデルは、サリーちゃん本編学習回数680000のモデルです。

  

  f:id:eiji-kb:20161126025102p:plain


 最後のフレームはかなりポップな彩色となりました。全体的に色がにじみましたが、それでかえって味が出たというか、印象深い彩色になったと感じました。かつてのパソコン、AppleIIやPC-6001では、あえてにじみを活用することで色を出していたといいますが、2016年の今に、このようなアナログっぽい処理が復活するとは感慨深いです。ディープラーニングの自動彩色でこういったことが楽しめるのは、今のうちだけかもしれないですね。
 動画は、後半とOPのみとしています。

 

     

                                ©石森プロ

ソース

 ソースをGitHubに上げています。

github.com

ネットワーク構造は先に述べたとおりです。損失関数は平均二乗誤差(MSE)です。Labのaとbの分それぞれMSEを求めます。そしてそれぞれSGDで最適化します。SGDの学習係数はデフォルト0.0002です。なお、VGGとcolornetの接続については、ソフトなので戻り値でと言われそうですが、ワイヤ的に記述したかったため、そういう書き方にしております。

ネットワーク設定について

 ネットワーク設定するにあたって、実験して結果を見ながら試行錯誤を行いました。しかしディープラーニングは訓練データも大きく実験時間もかかるため、なかなか恵まれた環境でもない限りデータや実験時間に制約を受けてしまうのが実情かと思います。今回、予備実験の段階では、軽めの訓練データで試行して、あたりをつけながら進めていきました。そのため、考察を述べるには実験が不十分な側面がありますが、差し支えないと思える程度で述べておきます。

 2.の第5層の接続ですが、これはもともとオリジナルのAutomatic colorizatonでもマシンリソース不足により実装されなかったことが述べられています。実際にこの層を利用したモデルをいくつか作り実写動画で訓練して試したところ、どのモデルにおいても大域的な領域の、色の学習は速くなりました。その点は良かったのですが、単に第5層を接続しただけのモデルでは、学習時に下図左のような、パズルの抜けのような塗り漏れが散見されました。 

 

    f:id:eiji-kb:20161125230108p:plain

 

第5層は空間情報としては縦横14x14と大域的なため、そのような影響が出たと考えられます。この改善についてはあとで述べます。3.の簡易FUSION層も大域的な塗りの精度向上を目指したものです。これは、意味論的情報(参照論文では大域特徴)である全結合層を再度2次元に束ね、抽象化の進んだ空間的情報(参照論文では中レベル特徴)となった層と融合させるというものです。自分は全結合層の利用は発想にありませんでしたので、最初論文を読んだ時、なるほどと感嘆しました。そしてVGGの全結合層をFUSIONして特徴量として使うだけなら、たいして実装の手間はかからないため追加しました。しかし、当モデルにおいては、大域的な塗りと言う点で期待したほどの効果は表れませんでした。参照論文のモデルとは、ネットワーク構造から損失関数から誤差逆伝搬の範囲から、いろいろと差異があるためと考えられます。しかしながら、前述の塗り漏れについては改善傾向が見られました(上図右)。ただその理由としては、単に第5層の情報が弱まったことでそのような効果が現れた可能性があります(FUSIONする際に第5層由来のデータもサイズが半分に縮小されています)。しかし、第5層を使用したモデルの、大域的な領域の色の学習の速さを持ち、かつ第4層までを使用した従来モデルに劣らない塗りの丁寧さが共存していると評価できましたので、この簡易FUSION層はモデルに採用しました。  

試される方へ

 試して見ようとする方のためにメモ的なことを記しておきます。まず、画像の明度のヒストグラムは、訓練データとテストデータの間で差が小さくなるように調整した方が、良い結果が得られると思います。
 Chainerのバージョンですが、今回紹介した実験は全て1.8.2でおこなっています。現在(2015年12月5日)の最新バージョンは、1.18.0です。この最新バージョンで簡単な動画を使い、訓練と検証が動作することを確認しています。細かいことですが、この間のバージョンでは、動かない場合があるかもしれません。1.13.0にバージョンアップをした時に訓練を試したところ、画像に強いムラが表れました(一度しか試していないため、たまたまかもしれません)。また1.14.0にバージョンアップしたときは、CUDA関連のエラーが出ました。
 CPUでの利用ですが、出先で古いMacBook Air(Late2010)でサリーちゃんOPを使って訓練を試したことがありますが、1エポックでおよそ1日かかりました。CPUのみでの処理なら、検証のみ行うのがおすすめです。

おわりに

 このブログはChainer MeetUP #03で発表した内容をもとに作成しました。それから少し手を加えています。カラー化に関する論文やソースの著者の方に感謝します。そして原作者の方、アニメ制作の方に敬意を表します。サリーちゃん50周年おめでとうございます。mOm

*1:Pavel Gonchar, "colornet", https://github.com/pavelgonchar/colornet, 2016

*2:Ryan Dahl, "Automatic Colorization", https://github.com/Eiji-Kb/mahalitahttp://tinyclouds.org/colorize, 2016

*3:Satoshi Iizuka, Edgar Simo-Serra, and Hiroshi Ishikawa, "Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification",ACM Transaction on Graphics ,Proc. of SIGGRAPH 2016

*4:K. Simonyan, A. Zisserman, "Very Deep Convolutional Networks for Large-Scale Image Recognition", https://arxiv.org/pdf/1409.1556.pdf,2015

*5:mitmul, "chainer-imagenet-vgg", https://github.com/mitmul/chainer-imagenet-vgg, 2015

*6:総務省,平成26年版情報通信白書,http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h26/html/nc121220.html

広告を非表示にする