## ROS Japan UG #12 Raspberry Pi Mouseハッカソン 本日開催する[ROS Japan UG #12 Raspberry Pi Mouseハッカソン](https://rosjp.connpass.com/event/59669/)には、Raspberry Pi Mouseの教科書の著者である @ryuichiueda 先生もいらっしゃる予定です。 ぜひ教科書を持参の上、サインしてもらいましょう!僕はもちろん持参します。

Raspberry Piで学ぶ ROSロボット入門
上田 隆一
日経BP社
売り上げランキング: 102,273

@OTL さんのROSではじめるロボットプログラミング本よりも、内容は実践寄りで読み応えがあります。 ROSの話以外にも、シェルプログラミング、テスト自動化まで多岐に渡って取り上げられています。 これまたROSとは直接関係ありませんが、付録のデバイスドライバのプログラミングの章は、それ単体で本として扱って欲しいくらい興味深いです。

当日のハッカソンの様子は次回のブログで取り上げます。お楽しみに。

Chainerインストール

さて話を戻しまして、前回のブログで開発ツールなどが一式セットアップできたNVIDIA Jetson TX2に対して、ディープラーニングができるように準備を進めていきます。

僕はディープラーニングのためのライブラリにChainerを用いることにしました。 日本産ディープラーニングツールの発展にも少しは寄与していきたい気持ちがあります。 その他のライブラリでもいいのですが、最低限、NVIDIA CUDAに対応していてGPGPUを活用した高速計算ができるものがいいですね。

インストールはpipを使って簡単に行えました。

sudo apt insatll python-pip
sudo pip install -U pip
sudo pip install chainer cupy

MNISTテスト

CUDAの効果を見るために、まずはディープラーニングにおけるHello World的な存在であるMNISTの分類をGPUありなしで学習させます。 これは手書きの0〜9の数字を学習し、正しい数字に分類する問題です。

git clone git@github.com:chainer/chainer.git
cd chainer/examples/mnist

GPU未使用

GPUを未使用の場合は、あまりに時間がかかりすぎるので、途中で実行中止しました。 途中経過から考えて、学習時間は3時間半ほどはかかるのではないでしょうか。 これでは、より難しい問題を分類させようとしたら、現実的な時間で終わらせられそうにありません。

$ time ./train_mnist.py
GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.193281    0.107172              0.941033       0.9662                    645.259
2           0.0764993   0.0803331             0.976033       0.9758                    1290.04
3           0.0465235   0.0842069             0.984667       0.9747                    1935.12
4           0.0374998   0.0666212             0.987933       0.9799                    2579.93
     total [###########.......................................] 23.33%
this epoch [#################################.................] 66.67%
      2800 iter, 4 epoch / 20 epochs
   0.93675 iters/sec. Estimated time to finish: 2:43:41.225938.

^CTraceback (most recent call last):
...
KeyboardInterrupt

real    51m46.617s
user    51m44.628s
sys 0m0.460s

GPU使用

それに対してGPUを使用した場合には、3分半で実行完了しました。ざっと60倍速です。 メーターがグイグイ伸びていくので、見ていて気持ちよかったです。 これなら、いろいろと挑戦しがいがありそうです。 いやぁ、聞きしに勝るNVIDIA CUDAの偉大さですね。

$ time ./train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.18935     0.0838907             0.9424         0.9733                    57.9702
2           0.0754558   0.0762302             0.976233       0.9766                    65.2712
3           0.0479685   0.0700408             0.984449       0.9791                    72.6336
4           0.0352682   0.0785474             0.988582       0.9772                    79.9061
5           0.0268053   0.076637              0.991298       0.9788                    87.2597
6           0.026624    0.0723842             0.991782       0.9813                    94.7486
7           0.0190461   0.0847303             0.993915       0.9782                    102.095
8           0.0192349   0.0736709             0.993782       0.9812                    109.402
9           0.0171142   0.0736259             0.994665       0.9828
  116.784
10          0.0163547   0.0897696             0.994648       0.9802                    124.146
11          0.0126375   0.0841518             0.995966       0.9824                    131.527
12          0.0126419   0.0946676             0.996082       0.9798                    138.999
13          0.0126528   0.0908915             0.996382       0.9826                    146.342
14          0.012       0.0913361             0.996199       0.9818                    153.704
15          0.0103322   0.081647              0.996932       0.9854                    161.114
16          0.00833038  0.104685              0.997332       0.9789                    168.561
17          0.011705    0.0942782             0.997082       0.9824                    176.086
18          0.0115295   0.108648              0.996582       0.982                     183.487
19          0.00649577  0.098805              0.997982       0.9836                    190.932
20          0.00939677  0.107089              0.997516       0.9815                    198.213

real    3m28.758s
user    3m20.184s
sys 0m9.120s

デスクトップPCと比べた訳ではありませんが、それでもGPU内蔵ではないので、ここまでの高速化はできないでしょう。 これだけの性能でNVIDIA Jetson TX2は消費電力が10Wなんだから、魔法みたいですね。学習屋さんがこぞってNVIDIAのGPUカードを購入する訳です。

これから、ROSのトピックをSubscribeしてChainerの学習、推論データとして入力できるような仕組みを作っていきたいと思っています。 まずは、XtionのデプスデータやGazeboシミュレーションのセンシングデータを食わせてみたいです。