ヘッダーナビゲーション

2016年10月10日月曜日

Pixel Recurrent Neural Networkを読んでみた

目次

初めに

大学院の研究室の論文読み会で、Pixel Recurrent Neural Networksという論文を読みました。 ICML2016のBest paper3本の内の一本で、WavenetVideo Pixel Networkの開発に影響を及ぼしたみたいなことが書いてあったので興味を持ちました。 

要約

内容はというと、最近流行りの画像生成系のお話です。

問題設定としては、自然画像を生成する様な分布を、人間に理解しやすく、大規模化が容易なモデルで学習したい。 手法としては、2次元画像のピクセルを逐次的にDeep Neural Networkで対数尤度を最大化する形式で学習するものとなっています。

この論文の貢献は、並列化しやすく、軽い自己回帰モデルを提案したこと。 そして、その手法を用いることによって、MNIST、CIFAR-10、ImageNetというデータセットにおいてこれまでのState of the artと比べて極めて高い対数尤度を達成したことだそうです。
目次に戻る

予測例

実際に学習させたモデルで、occlusionを書けた画像を入力し、隠れている部分を生成させた例が以下の通りです。
 
確かに、いい感じに補完されているかもしれない(笑)
わんちゃんが謎の生命体になっている気配がありますが。 
目次に戻る

学習の定式化

ちなみに、ここで言う対数尤度は、観測されたデータから見て、モデルがどれだけ尤もらしいかという意味での「尤度」の対数を取ったものとなっています。
 画像の対数尤度 = 各ピクセルの対数尤度の和
なので、各ピクセルにおける対数尤度を最大化するようにDeep Neural Networkを学習します。
目次に戻る

提案手法

 このためのDeep Neural Networkとして、この論文はPixel CNN, Pixel RNN(Row LSTM), Pixel RNN(Diagonal BiLSTM)を提案しています。
 今回は、2次元画像のピクセルを逐次的に処理するので、その時点で既に与えられている文脈という条件において、次のピクセルの条件付き確率を求めます。
モデルいずれも、左上の方から右に行き、端まで行ったら1つ下の段の左端に行き...という流れで走査する(その順にインデックスを付けるとする。)のですが、  提案モデル間では、この”文脈が”異なります。

3つの提案手法

頭の中で、左から下に画像を生成していくことを考えると、i番目のピクセルを生成する際にはi-1個の文脈を条件として考え、次のピクセルを予測します。
しかし、そうすると可変長の入力を処理する必要が出てきます。 それは手間がかかるということで、

 1. 近似的に予測するピクセルの近傍の固定長の文脈のみを条件として考えたものがPixel CNN。

 可変長の入力に対処するが、
 2. 全ての文脈を処理すると手間がかかりすぎる場合もあるということで、予測するピクセルの上部に有るものだけを条件として考えるのが、Pixel RNN(Row LSTM)。
3. そして、すべての文脈を考慮に入れたものが、Pixel RNN(Diagonal BiLSTM)となっています。

各ネットワークは、ConvolutionalユニットやConvolutional LSTMユニットを何層(15層ぐらい重ねてるみたいです)も重ねたFully Convolutionalな構造を持っています。すなわち、入力の空間情報を保持した形の特徴マップをもっています。そして、計算を効率的にするために、文脈として考慮しない部分の結合は省いているそうです。
目次に戻る

出力の工夫

そして、出力層は回帰かと思いきや、256クラスの多クラス分類として解いているそうです。
そうすることによって、
・画像がぼやけるなどの問題を回避できる
・分布が多峰性である場合もうまく表現できる
・0~255までのみを予測させることが出来る などの嬉しいことがあるそうです。

傍から見ると、順序関係を考慮に入れないクラス分類は情報をかなり捨てている様に思いますが、それ以上に多峰性を表現出来る利点が勝っているということなのでしょうか。 確か、ICMLのこの論文に対するレビューでもこの多峰性を上手く表現できている部分が評価されていました。
実際の出力層の様子を表現した図が以下の様になります。



なめらかな分布で、多峰性をいい感じに表現できていますね。
目次に戻る

実験結果

 最後に実験です。

MNIST, CIFAR-10(50000枚), Image Net(1,280,000枚)でそれぞれ学習を行ったそうです。 ※ImageNetは32x32や64x64にDownScaleしたものを用いたそうです。

負対数尤度は、以下の通りだそうで、先行手法に比べてかなり下がっていることが分かります。

 

 以下が、実行例です。 まず、CIFAR-10
 
 ImageNet(32x32)

 ImageNet(64x64 multiscale)
   

このmultiscaleというのは、直接64x64の画像を学習させると大域的な特徴が取れなくなってしまったことから、まず32x32を学習させて、生成させた画像を文脈として用いた上で予測させたものらしいです。

たしかに、64x64 multiscaleを見てみると、蝶とか鳥とかそれっぽいものが見える...!
目次に戻る

まとめ

 まとめると、自己回帰モデルに基づいた、画像生成アルゴリズムを並列化しやすいアルゴリズムで提案した。対数尤度でState of the artを達成。先行手法で今画像生成系では一番いい感じの画像を生成するとされるGANと同レベルに匹敵する画像を生成できた。一方、GANは定量評価が難しい一方、今回の手法は定量化が容易。しかし、この手法はピクセルごとの予測なので、実行速度が遅くなるはず。


また、今回の論文の理解に際し、PFNの得居さんのスライドを参考にさせて頂きました。
詳細まで言及されておる他、非常に分かりやすいです。

目次に戻る

2016年10月9日日曜日

自動運転のための、223GBの運転データのオープンデータ化

Udacity自動運転車を作るためのコースを開講したという話は耳にしていましたが、Udacityが223GBの運転データを一般公開されたそうです。

Open Sourcing 223GB of Driving Data
223GBのデータに含まれているのは、マウンテンビューの二車線道路を70分間運転した際のログデータだそうです。
具体的には、晴れた日と曇った日それぞれの、運転している際にカメラから撮影した画像と、緯度、経度、ギア、ブレーキ、スロットル、ハンドルの角度、スピードだそうです。
以前、Comma.aiが安価な自動運転キットを販売すると話題になりましたが、データがオープンになり開発が進むことで、高価な自動運転車に手が届かない人にも自動運転車が身近になる時の訪れが早まるかもですね。

DeepLearning用途での、AWSのP2インスタンスについてのまとめ

はじめに

AWS(Amazon Web Service)にP2インスタンスという、GPUが搭載されているインスタンスが利用できるようになったみたいです。
New P2 Instance Type for Amazon EC2 – Up to 16 GPUs
AWS、GPUベースの「P2インスタンス」を提供開始--AIやビッグデータ向け

P2インスタンスの紹介

従来のAWSのGPUインスタンスで単一GPUが搭載されているインスタンスでは、g2.2xlargeがありますが、g2.2xlargeではNVIDIA Tesla K10が搭載されていたと記憶しています。

今回のP2インスタンスの中で、単一GPUが利用可能なものはp2.xlargeです。

比較

小規模にDeepLearningでプロトタイプを作るとなると、これら2つどちらがいいかで迷うかと思います。 そこで、両者のGPUに関する性能及び価格を比較すると、

g2.2xlargep2.xlarge
GPUK10K80
FLOPS(float32)2.29TFLOPS4.365TFLOPS
GPUメモリサイズ4GB12GB
GPUメモリ転送幅160GB240GB
値段/1時間$0.0736$0.141


価格は、2016年10月9日現在のスポットインスタンスでそれぞれの最安値を参照しており、g2.2xlargeはAsia Pacific(Tokyo)のもの、p2.xlargeはUS West(Oregon)のものを参照しています。

また、NVIDIA公式ドキュメントでもTesla K10と比較して、TeslaK80は2.5倍速いと言及されています。

まとめ

 まとめると、g2.2xlargeと比べてp2.xlargeは約1.9倍ほどコストが掛かるが、FLOPSだけみて約1.9倍、GPUメモリサイズは3倍の12GB、GPUメモリ転送幅1.5倍である。 また、NVIDIAのレポートに記載されているベンチマークでは、約2.5倍の性能であるとされる。 

個人的には、大規模データセットを学習させる際やResNetの大規模なモデルを学習させる際等はGPUメモリや、GPUメモリ転送幅が極めて重要になると思いますが、それ以外の用途でもp2.xlargeは割りとコスパの良い選択なのでは無いかと思います。