coding, photo, plant and demo

*Google ResearchのInceptionism関係の論文を流し読み

tech memo 20150621 203706
Google Research Blogに載っていたNeural Networkを使った画像集が面白いです。

Inceptionism: Going Deeper into Neural Networks
http://googleresearch.blogspot.jp/2015/06/inceptionism-going-deeper-into-neural.html

このグーグルの記事は簡単に言うと、特徴量から絵が作れちゃうよ、という話です。

例えば下記はダンベルの特徴量から絵を創りだしたわけですが、なぜだか腕が生えています。これはダリっぽい絵を作ろうとわざとやったわけではなく、ダンベルを表すクラスに腕が混じり込んでいることを示します。ダンベル画像に付き物のマッチョなお兄さんを完全に分離できずに学習しちゃったんだなー、とネットワークが実はうまく作れていなかったことが分かるわけです。



また、画像を認識させると色々なクラスに実は微妙に反応しています。例えば空をみるだけでも動物で学習されたネットワークの場合、鳥やら犬やらの特徴を微小ですが見つけ出してしまうわけです。その特徴量をエンハンスして可視化したらどうなるか、とやると、色々な特徴量が混じった犬面魚とかキモい生物が空に大量に出現するわけですね。人間も星を見て様々な星座を思いついたものですが、似たようなものかもしれません。


記事の最後にはその技術を反復して適用すると、さらに奇妙な画像が生成できることを示しています。極めて芸術的、前衛的と言いましょうか、狂人、ヤク中、あるいは天才が見ている世界とでも言いましょうか、興味深い結果が得られるのであります。
人間の認識の深淵を眺めるようなこの不思議な世界が気になる上に、どういう仕組でこの画像が生成されるか気になり、この記事で紹介されていた元ネタとなる論文を幾つか軽く読んでみました。

前提知識

Deep Neural Network(DNN), Convolutional Neural Network(CNN)

中間層が多数あるNNをDNNと呼び、その中でも畳み込みを行うタイプをCNNと呼びます。今回の主役です。

Deep Learningの技術と未来
http://sssslide.com/www.slideshare.net/beam2d/deep-learning-22544096
NNの基本的な構造から学習の仕組みまでわかりやすく解説。

Convolutional Neural Network @ CV勉強会関東
http://www.slideshare.net/hokutokagaya/convolutional-neural-network-cv-35089848
2013年を境にCNN勢が画像認識の大会で圧勝するようになったとか、画像認識におけるCNNの話。

Understanding Deep Image Representations by Inverting Them (2014)

http://arxiv.org/pdf/1412.0035v1.pdf

OxfordのVisual Geometry Groupの論文です。
特徴量から絵を復元しましょう、という話。簡単にいえば、絵心クイズみたいなものかな。画像認識は猫の画像を入れたら"猫"というシンボルを得ることができるわけですが、逆にその画像を認識する仕組みを使って"猫"というシンボルを入れたら猫の画像は得られるのか?を考えたというもの。
CNNに限らずSIFTやHOGの可視化にも応用してます。

このCNNにおける絵の復元の前に、2013年にHOGの特徴量の可視化についてHOGglesというアルゴリズムが提案されているので、それを見てみます。

HOGgles: Visualizing Object Detection Features (2013)
http://web.mit.edu/vondrick/ihog/iccv.pdf
この研究を始めた理由ですが、false positive(間違えてpositiveと判定されてしまう)が出た時の原因を探るためのようです。例えばHOGを使って下記の画像を認識させたら水面の部分に"Car"があると判定されてしまいました。人間がみたらどう見ても車は無いですよね?けど一度HOGの特徴量に縮退させたものをHOGglesに掛けて画像に戻すとこの通り、車っぽいものが出てきました。確かにこれだとHOG空間の中では車と思われても仕方ないと納得できて、対策が打てるわけです。


このHOGglesの更なる高精度化とCNN対応をしたものが、ここで紹介する論文と言えるかもしれません。まずは結果から。CNNの各レイヤーをこの論文の技術を使って変換したものが下記の図になります。正直fc(full connection)まで行ってしまうとよく分かりませんが、なんとなく顔に注目してるんだろうなあ、ということは分かります。


この論文では、画像を求めるための目的関数を次のように定義しています。

目標とする特徴量にできるだけ近く、自然画像の性質にできるだけ近い画像を選ぶ、という意味です。

Φ0が目的の特徴量で例えば猫を表しているとしましょう。Φ(x)が画像xを入れて出てきた特徴量、L(loss function)がそのΦ0とΦ(x)の差を表す関数で今回はユークリッドのノルムを使います。要は入力画像が猫に近ければLは小さくなります。じゃあこれだけで目的関数としては良さそう、と思うのですが、実際はこれだけではイマイチです。なぜなら、物体を認識するためだけの特徴量に落としこんでいるということは、ディティールに関する特徴が失われているわけです。つまりLだけ最小化してもディティールが無茶苦茶になる可能性があるわけです。それはCNNにはOKでも、人間としては困ります。ということで、ディティールがそれらしく自然に描かれるようにする部分がR(Regularizers)の項です。ここではノルムを使って全体を同じような画素値に寄せる制約と、Total Variationを使ってノイズを減らす制約をかけています。

TotalVvariation
http://convexbrain.osdn.jp/cgi-bin/wifky.pl?p=Total+Variation
TVはエッジを保存しつつノイズを除去するアルゴリズムとして、初めて知った時は感動したものです。

さて、式はできたもののこれをどう解くかが問題です。
ここではGradient decent(GD; 勾配降下法)を使って(局所)最適を求めているようです。ただ単なる勾配法ではなく慣性を付けてます。それでちょっとは局所最適解に陥りにくくなるのかな。よく分かりません。勾配(gradient)は学習するときにback-propagationで使っているので、そのまま流用すればOKだそうです。

Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps (2014)

http://arxiv.org/pdf/1312.6034v2.pdf

前述と同じOxfordのVisual Geometry Groupの論文です。
さきと同様のgradientベースの可視化とsaliency mapを使った可視化及びそれを応用すると物体抜き出しができるという話。同じ2014年ですが、さっきのものより古く可視化に関してはTVの項がないためか、出てくる絵としてはちょっと微妙です。


ConvolutinalじゃないDNNに関しては下記の論文で可視化していたようで、その拡張になるのかな。
Visualizing Higher-Layer Features of a Deep Network (2009)
http://www.iro.umontreal.ca/~lisa/publications2/index.php/attachments/single/207

saliency mapというのは
http://www.ite.or.jp/data/a_j_keyword/data/FILE-20120103132039.pdf
によると
 サリエンシーマップは, 画像領域に対する「人の興味」の度合い を表したもの 
だそうで、ここではCNNが注目した場所と思えば良さそう。これは入力画像においてスコア関数を微分してやればいいそうです。結局これもback-propagationを使って求めるだけ。それにIterative Graph Cutという手法を組み合わせるとあら不思議、わりと物体が切り抜けます。認識器を作ると抜き出しもできることが分かりました。

Interactive Graph Cuts for Optimal Boundary & Region Segmentation of Objects in N-D Images
http://www.eecs.berkeley.edu/~efros/courses/AP06/Papers/boykov-iccv-01.pdf


Deep Neural Networks are Easily Fooled: High Confidence Predictions for Unrecognizable Images (2015)

http://arxiv.org/pdf/1412.1897v4.pdf
USのワイオミング大学の人の論文。

説明動画もあります。

http://www.youtube.com/watch?v=M2IebCN9Ht4


DNNによって物凄く画像認識の精度が上がってきたけど、実は簡単にfalse positiveな画像が生成できてしまう。つまり、一見人間に認識能力が近づいてきたが、実際はまだまだ人間とは隔たりがあるという話。

その画像はどうやって作るかというと、進化的アルゴリズム(Evolutionary Algorithms;EA, 遺伝的アルゴリズムなど)を使ってます。ゲノムの定義は2種類試してます。直接的にgrayscale画像をゲノムとする場合と、より自然画像らしい絵を作るための圧縮パターン(対称性や繰り返しなどの情報)をゲノムとする場合。後者はcompositional pattern-producing network (CPPN)という手法を使っているらしい。

Compositional Pattern Producing Networks: A Novel Abstraction of Development(2007)
http://eplex.cs.ucf.edu/papers/stanley_gpem07.pdf

この2種類の方法を使うと、前者だと人間にはノイズにしか見えないけど何故かDNNには数字として認識されてしまうとか、後者では人間には妙な幾何学模様にしか見えないのにDNNには同様に数字として認識される画像が量産できてしまいます。


人間には全く理解できないですが、これがDNNには数字に見えてしまうとは何とも奇妙ですね。

Inverting Convolutional Networks with Convolutional Networks (2015)

http://arxiv.org/pdf/1506.02753.pdf
ドイツのフライブルク大の人の論文。

これも特徴量から画像を作り出す話です。
ただ、先ほどまでの論文は勾配法やら遺伝的アルゴリズムやらで、ある制約条件下で特徴量が一致するように画像を変化させていくことで、画像を作り出していたわけですが、今回は特徴量から画像を作るためのCNNを作りました、という話です。CNNを評価するためにまた別のCNNができるという最早ワケの分からない状態になってます。

これがその処理の流れですが、通常の画像認識と流れが正反対です。


で、特徴量から画像を捻り出すCNNを使って各レイヤーを画像に変換した絵がこちら。


だいぶ自然な感じになっています。見方を変えるとただボカしただけですが、情報量を減らしても上で先に紹介した論文と比べて元の絵に近いと言えます。今まで画像の圧縮といえば、周波数空間へ変換するのがお決まりでしたが、これはもしかすると何らかのNNの特徴量空間に変換して圧縮する時代が到来するのかもしれません、と未来を感じますね。


さて、これはこれで面白いのですが、この論文の下敷きになっている同じ人(Alexey Dosovitskiy)が今年の頭に出している論文も面白いです。

Learning to Generate Chairs with Convolutional Neural Networks (2015)
http://arxiv.org/pdf/1411.5928v2.pdf

特徴量から画像が作れるということは、入力する特徴量をAからBに変化させたら面白い画像ができるんじゃない?ということで、特徴量ベースのモーフィングを実験しています。その例が椅子なのですが、2つの椅子を滑らかに変化させていくという、意味の分からない芸当を成し遂げています。


http://www.youtube.com/watch?v=QCSW4isBDL0

現時点では学習させるときに椅子の位置姿勢やライティング情報も教師として用意しておくなど、色々と制限はあるようですが、例えば2次元画像ではなくボクセルとして物体を学習させてモーフィングさせたらどうなるのか、等興味は尽きません。

所感

特徴量→画像の変換ができるようになれば、色々と面白いことが出来そうです。
椅子のモーフィングならず、新しい椅子を作れるかもしれません。猫というモチーフを指定すれば、猫のゆるキャラが生成できるかもしれません。
今はまだキモい画像しか作れませんが、人間しか出来ないと思われていたクリエイティブな様々な仕事も、そのうち計算機に置き換えられるのかもですね。

面白い反面、世の中どーなっちゃうのか、怖くもありますな。