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

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

白黒映像をカラーで見たい...。

 

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


 おおげさかもしれませんが、それは空を飛びたいとかと同じ種類の欲求ではないかと思います。自分も惹き付けられますが、かなり昔にもそれに挑戦した人がいました。以前図書館で、古い1960〜70年代くらいの技術雑誌でしたが、白黒TVの前でカラーフィルタを高速で回転させることでカラーTVにするという記事が載っていました。しかし情熱には感心しましたが、そんな単純な仕組みでまともな色が付くとは思えませんでした。

以下はカラー(RGB)から白黒(グレースケール)へ変換する式ですが、

 白黒(グレースケール)*1 = 0.299×R + 0.587×G + 0.114×B

白黒(グレースケール)からカラーに戻そうにも、RGBの値の組み合わせはいくつも存在するため値が特定できません。ある白黒(グレースケール)の値が青みがかった色なのか、緑がかった色なのか特定できない...。
 ところが人間なら、ある程度は特定することができます。上の白黒の絵なら、木は緑、空は青、顔は肌色と、特に意識せずにできます。上の式の係数は、カラーを、人間が自然に感じられる白黒の輝度に変換する値となっていて、その結果の値も、色を特定する手がかりとなります。しかしそれに加えて、人間は絵の中の物体が何か認識してその色を知っているから色を特定できます(人間は、さらに品質の悪いグレースケールでも、そしてグレースケール無しの輪郭線だけでも特定できます)。
 正確には、特定というよりも、頭の中の記憶から色を決めていますので、それらしい色(もっともらしい色)を想像しているといった方がより適切なようです。たとえば白黒のドラえもんを見せられたらほとんどの人はあの青や赤や黄を想像できます。しかし、鳥や花や蝶など見せられたらどうでしょうか。それらに詳しくなければ、正しい色ではなく、それらしい色で想像しているはずです。自然の風景なども、人によって想像する色が微妙に違ってきます。
そういった意味では、冒頭のカラーフィルタの仕組みも、カラーTVにするというよりは、見る側の想像力を補って脳内補完で色を付けるためだけの装置だったのかもしれません。

自動彩色ネットワークの概要

 さて先に述べたような、もっともらしい色を想像して色を付けるという処理を、機械で実現するには、

 ① 画像から物体を認識
 ② データベースから物体の色を検索
 ③ 物体の領域に色を塗る

とすれば実現できそうです。しかし、現実には画像の認識や領域の特定は機械にとっては難しい問題でした。このあたりの話は画像処理の教科書やディープラーニングの記事でよく出てきますので簡単に述べますが、研究は進み、21世紀に入ってからは画像の明暗の方向や量などから画像の特徴量を取り出し、それを識別器で学習して画像を認識することができるようになりました。そして、2012年にディープラーニングが、それらの手法をかなり上回る精度での認識を実現しました。このとき用いられた手法のCNN(Conventional Neural Network:畳み込みニューラルネットワーク)は、実は以前から存在していたものだったのですが、以前と比べより高速な計算機と大量のデータ処理ができるようになり画像認識に適用したところ、最高の認識精度が達成されました。この最高の精度という事実は圧倒的な力をもちます。そしてディープラーニングが急速に広まって現在に至るのは多くの方がご存知のとおりです。

 ディープラーニングによる自動彩色は、2015年の末くらいから出てきました。手法はいくつかありますが、以降では、今回実験で用いた手法の概要を、キーワードを元に説明していきます。これは、Ryan Dahl氏によるAutomatic Colorizationサイト*2をベースとしていますが、文章と図は独自に作成しています。この手法(この手法に参照された手法も含む)は、上の①〜③に相当する処理が、ディープラーニングのネットワーク内だけで完結します。そして、訓練後はあたかもカラーフィルタのように、白黒画像をネットワークに流すだけで色を付けて出力するところがシンプルで感心するところです。なおCNNに関する基礎知識があればより理解しやすいと思います。数多くの良解説サイトがありますので、知りたい方はそちらをご覧ください。

CNNの基本

 CNNは画像認識によく用いられます。学習済みのCNNは、画像が何であるかを予測します。下の図では、画像が「傘」「クラゲ」「こども」であることを予測しています。(クラゲは明らかに勘違いですが)

 

f:id:eiji-kb:20161125222153p:plain(注:上図のCNNは4層ですが、これは簡略化して描いており、実際はまだ多層です)

意味論的情報と空間情報

  一番右側の、線の形の層(全結合層)から「傘」の確率が何%、「くらげ」の確率が何%などといった確率を取り出すようにしますが*3、言い換えるとこの層は、その画像は何か、という意味的な情報(ここでは以降、意味論的情報と書きます)を持つと考えられます。この層は1次元です。
 他方、四角で表した畳み込み層は、縦、横からなる2次元の空間を持ちます。まず一番左側の層に画像が入力されますが、ここでは入力画像と同じ解像度を持ちます。つまり元の画像のディテールがわかる情報を持ちます。右の層に進むにつれ、プーリング層というものを通して縦横のサイズは小さくなっていき、解像度は低下していきます。一番左側の畳み込み層がもっとも大きな空間情報をもち、右に進むにつれて空間情報は小さくなります。

まとめると、CNNの層は、
 ・右に行くほど、意味論的情報が増大します。(左に行くほど、意味論的情報は減少します)
 ・左に行くほど、空間情報が大きくなります。(右に行くほど、空間情報が小さくなります)

大域的な空間情報

右に行くほど空間情報が小さくなるということは、
・右に行くほど、大域的な空間情報を捉えている。
とも言えます。

下図は、各畳み込み層のあるチャネル(プレーン)を、拡大して大きさを揃えてみたものです。一番右のチャネルでは、1画素が画像をより大域的に捉えていることがわかるかと思います。 

 

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

 以下の絵の方が分かりやすいでしょうか。太陽など、右の層の方がより大域的に捉えているのがわかると思います。(注:色は便宜的に塗ったものです。)

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

 なお、このような考え方は、CNNだけということではなく、従来手法でも画像ピラミッドという同様の考え方が存在します。

ハイパーコラム

 CNNに入力された画像の、1画素分のデータを、CNNの層の間で串刺しで見たものが、ハイパーコラム*4
です。画像を入力して各層で活性化したデータ*5を全て結合します。
上の2つの図で言えば、赤線でつないだデータを結合するイメージです。下図で言えば、すべての層の活性化したデータを結合するイメージです。

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

      

 このハイパーコラムには、単に画像の各画素の明暗や色の情報だけではなく、CNNで物体の認識や領域検出に使われる情報も、含まれることになります。

(メモ:このハイパーコラムは、脳の第一次視覚野のハイパーコラムから名前を借用しています。視覚野については画像処理分野でもよく触れられますので、簡単に説明します。第一次視覚野などの脳の新皮質は、6層の神経細胞層を持ちます。そして第一次視覚野の細胞には特定の方位の線分に好んで反応するものがあります。この同じ方位に反応する細胞を縦に6層にまとめたものが、方位コラムと呼ばれるものです。方位コラムは、少しずつ違う方位に反応し、それらが集合しています。この集合の内部には、色や明暗に反応する部位が存在し、これらはブロブと呼ばれます。また両眼からの情報は第4層に入力されますが、ここでは左右両眼どちらの入力が優位か明瞭に分かれます。この部位が眼球優位コラムと呼ばれます。これら両眼に対応する眼球優位コラムとブロブと一周期分の方位コラムの集まりをワンセットにしたものがハイパーコラムと呼ばれるものです。これは、視覚情報分析の最小単位と考えられています。
つまり、ディープラーニングでいうハイパーコラムと第一次視覚野のハイパーコラムは同じものではありません。ディープラーニングでいうハイパーコラムも、方位選択性は存在しますが、ある1点の情報を中心に一周期分が集合しているわけではありません。また意味論的にはより多くの情報を含んでいます。後者は第二次、第三次視覚野といった上位の視覚野との連携を連想させます。)    

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

 (引用 https://grey.colorado.edu/CompCogNeuro/index.php/CCNBook/Perception、一部加筆)

セグメンテーション

 ハイパーコラムのデータを利用することで、領域の検出(セグメンテーション)が可能です。

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


 左下のオレンジ枠は、各層から印象的なチャネルを選択して可視化したものです。3列目では、顔のパーツ(目と口のセット)に反応したり、頭髪に反応したりするチャネルが出現しているのが興味深いところです。そしてこの複数の層のチャネルを、ハイパーコラム的にいくつか重ねあわせたものが、図右上になります。もっとも右の図では、顔の領域によく反応しています。これらは単に重ね合わせただけですが、セグメンテーションの手法を適用すれば、もっときれいに領域の検出が可能です。 

(データ作成サイト Christian S. Perone,"Convolutional hypercolumns in Python",http://blog.christianperone.com/2016/01/convolutional-hypercolumns-in-python/ ,2016)

ハイパーコラムを使った彩色

 以上がハイパーコラムの概要の説明でした。そして、この色情報の他に物体の認識や領域検出に使われるデータを含んだハイパーコラムを、特徴量として使用するのが、ハイパーコラムを使った自動彩色の基本コンセプトになります。つまりハイパーコラムのデータを特徴量として、任意の関数の万能近似器であるフィードフォワード型の多層ニューラルネットワークに入力して、そのニューラルネットワークに正解データとしてカラー画像を与え学習させるというコンセプトです。
 

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

 a.カラー放送から白黒画像に変換したデータをCNNに入力
 b.ハイパーコラムのデータを特徴量として、c.カラーを学習するニューラルネットワークに入力
 c.カラーを学習するニューラルネットワークは、
  自身の出力が正解のd.カラー画像との誤差が小さくなるよう学習

 

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

 訓練済みのネットワークに白黒画像を入力すると、カラー画像を出力
 

 さて、この手法により彩色は可能となります。しかし、この手法ではハイパーコラムのデータサイズが巨大になりますので、マシンのリソースによってはメモリ不足が発生するという問題があります。

残差エンコーダ

 Ryan Dahl氏は当初ハイパーコラムを使った彩色ネットワークを試していましたが、ILSVRC2015のクラス分類エントリで優勝したマイクロソフト研究所のResidual Network(ResNet)という、人間の認識精度を超えたとされる手法からひらめきを得て、残差エンコーダなる彩色ネットワークを発案しました。

 

 f:id:eiji-kb:20161123070635p:plain
引用(左):Kaiming He他,Deep Residual Learning for Image Recognition,https://arxiv.org/pdf/1512.03385v1.pdf 

 

 ResNetは、最大152もの層をもったネットワークです。通常、ネットワークは多層になると訓練時の誤差が増大し精度が上がらないことが知られています。そこでResNetでは、データの流れをショートカットしたブロックを導入することで、多層であっても高い精度での訓練ができるようにしました。ショートカットすることで、ショートカットされた中の層は、ショートカットされたデータとの残差を学習すればよいことになります。ResNetでは、上図のようなボトルネックブロックも提案されました。これは3層をショートカットする接続ですが、中間層で次元圧縮を行います。これはオートエンコーダと同様の考え方です。オートエンコーダは、入力層と出力層が同じ次元を持ち、入力層からのデータを中間層で次元圧縮して、出力層で復元するニューラルネットワークです。そして彩色ネットワークは、入力が白黒情報で、出力がそのカラー情報である、ほぼオートエンコーダのようなものと考えられます。そこで、Ryan Dahl氏はResNetの考えを取り入れて、以下のような構造の彩色ネットワーク、残差エンコーダを発想しました。これは、ハイパーコラムを使用した彩色ネットワークと比べ、省メモリ、かつ訓練の高速化と精度の向上を実現しています。


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

補足

 少し細かい補足ですので、興味のない方は飛ばしてください。上で説明してきた彩色ネットワークは、実際はカラー情報としてRGBではなく、別の色空間(YUVなど)を使用しています。今回作成したモデルでは、Lab色空間を使用しました。Lab色空間は、Lとaとbの3チャネルで色を表現します。

 

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

先に説明した訓練と検証も正確には、下図のようになります。

 

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

 

 もうひとつ補足しておきます。彩色のために、果たしてハイパーコラム各層の全データが必要なのか、不明なところがあります。情報は多ければ良いというものでなく、本来は彩色に必要なデータのみあればいいはずです(もっとも、その必要なデータを自動的に取り出すのが、ディープラーニングのいいところなのですが)。実際に実験したところ、以下のように残差エンコーダーからショートカットをなくし、彩色ネットワークへ入力するデータも最終層(赤部分)のみにしても、色の学習は可能でした。

 

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

 ただし、訓練速度は落ちました。訓練時の品質も良くはありませんでした。このことは最終的な訓練結果による精度を予測するものではありませんが、筋が良いとは思えなかったため自分は簡単なテストで留めています。

後編につづく:実験結果

 

 

(2015/12/5 分割・修正)

*1:正確には輝度

*2:Ryan Dahl, "Automatic Colorization", http://tinyclouds.org/colorize/, 2016

*3:ソフトマックス関数を用いる

*4:Bharath Hariharan, Pablo Arbeláez, Ross Girshick, Jitendra Malik,"Hypercolumns for Object Segmentation and Fine-grained Localization",2015,https://arxiv.org/abs/1411.5752

*5:活性化関数適用後のデータ

広告を非表示にする