Caffeにおけるアーキテクチャ (prototxt) の可視化(Cent OS 6.6)

Deep LearningOSSであるCaffeには,ネットワークアーキテクチャを可視化するPythonツール (draw_net.py) があります.
このdraw_net.pyを実行しようとするといくつかのエラーが出てきてしまったので,備忘録として使い方を記しておこうと思います.

まず,Pythonツールそのものは以下のようにしてビルドをすることで使えるようになります.

$ make pycaffe
次に,pipを用いてpydotとgraphvizをインストールします.
$ pip install pydot
$ pip install graphviz
しかし,この状態でdraw_net.pyを実行しようとすると,次のようなエラーが出てきてしまいました.
$ python2.7 python/draw_net.py models/bvlc_reference_caffenet/train_val.prototxt caffenet.png
Couldn't import dot_parser, loading of dot files will not be possible.
Drawing net to caffenet.png
これは,pyparsingモジュールのバージョンが2.xなのが原因らしいです.そこで,pyparsingを一旦アンインストールして,1.xをインストールし直します.これで,dot_parserがimportできない旨のエラーは解消されるはずです.
しかし,今度は次のようなエラーも出てきてしまいました.
$ python2.7 python/draw_net.py models/bvlc_reference_caffenet/train_val.prototxt caffenet.png
pydot.InvocationException: Program terminated with status: 1. stderr follows: Warning: /tmp/tmpqu8WD6:3: string ran past end of line
Error: /tmp/tmpqu8WD6:4: syntax error near line 4
context: >>> ( <<< "Softmax)" [shape=record, style=filled, fillcolor="#6495ED"];
Warning: /tmp/tmpqu8WD6:4: ambiguous "6495ED" splits into two names: "6495" and "ED"
Warning: /tmp/tmpqu8WD6:4: string ran past end of line
Warning: /tmp/tmpqu8WD6:8: string ran past end of line
Warning: /tmp/tmpqu8WD6:9: ambiguous "90EE" splits into two names: "90" and " EE"
Warning: /tmp/tmpqu8WD6:9: string ran past end of line
Warning: /tmp/tmpqu8WD6:10: string ran past end of line
Warning: /tmp/tmpqu8WD6:14: string ran past end of line
Warning: /tmp/tmpqu8WD6:15: string ran past end of line
Warning: /tmp/tmpqu8WD6:16: string ran past end of line
これは,以下のサイトによると,python/caffe/draw.py内の改行の文字コードによるものだそうです.
http://stackoverflow.com/questions/24442094/pydot-not-playing-well-with-line-breaks
draw.pyの75行目にある
separator = '\n'
separator = r'\n'
のように変更します.
こうして再度,draw_net.pyを実行したところ,エラーは出ませんでした.
$ python2.7 python/draw_net.py models/bvlc_reference_caffenet/train_val.prototxt caffenet.png
Drawing net to caffenet.png

Cent OS 6.6にnvidia DIGITSを導入する方法

NVIDIAが毎年開催する開発者向けイベント「GPU Technology Conference (GTC)」が先月行われました.今年のGTCの話題は明らかにDeep Learning (深層学習) であり,基調講演はDeep Learning一色となっていました.Geforce GTX TITAN XなどのGPUの他に,TITAN Xを4基搭載したGIDITS DevBoxや自動運転システムのための車載用ボードコンピュータであるDrive PXの発表があり,NVIDIAがいかにDeep Learningを事業分野の1つの大きな柱として考えているかを伺うことができました.

しかしながら,Deep Learningを使ってモデルを学習し,認識と分類ができるようにするには作業量が多く,大変時間がかかります.そこで,DIGITS DevBoxには付属のソフトウェアとしてDIGITSが用意されています.また,DIGITSは単体のソフトウェアとしても配布されているため,DevBoxを持っていなくても使うことができます.

そこで早速,PCにDIGITSを入れてみると予想以上に使いやすかったので,今回はソフトウェアのDIGITSについて紹介したいと思います.

DIGITSって何?

DIGITSはDeep Learning GPU学習システムのソフトウェアです.DIGITSは,基本的にはDIGITS DevBoxの付属ソフトウェアですが,NVIDIAサイトもしくはGitHub上でも配布されています.ですので,DevBox(100万くらいする)を持っていなくても,GPUが一つでもあれば自分でDIGITSをダウンロードして使うことができます.

DIGITSの特徴は,アーキテクチャの設計からモデルの学習,検証をグラフィカルに行うことができるようになっていることです.また,Webブラウザを用いてネットワーク越しに操作ができます.さらに,GPUが複数ある場合にはmulti-GPUによる並列処理にも対応しています.

前提

現在は,Caffeと呼ばれるDeep Learning Frameworkにしか対応していないため,Caffeを使用することが前提になります.また,DIGITSは裏でCUDAやcuDNNを用いるため,これらもインストールする必要があります.

DIGITSの使い方

今回はCent OS 6.6における使い方を説明します.とはいえ,Linuxであれば他のディストリビューションであっても概ね同じだと思います.なお,Ubuntu 14.04以降の場合には,CaffeやCUDA,Pythonなどの必要なものがすべてオールインワンに入ったものがバイナリで用意されており,NVIDIAサイトから入手することができます.

0. CUDAとcuDNN,Caffeをインストールする
Cent OSの場合には,このバイナリは使えないため,自分でインストールする必要があります.これらのインストール方法は多くの人がブログに書いているため,ここでは省略します.ただし,CaffeのソースコードNVIDIAGitHubからダウンロードするようにしてください.

1. ソースコードをダウンロードする
ソースコードGitHubからダウンロードします.

2. Graphvizをインストールする
yumを用いてグラフ描画ツールGraphvizをインストールします.

# yum -y install graphviz gunicorn

3. Pythonライブラリをインストールする
DIGITSに必要なPythonライブラリをpipでインストールします.

# cd digits
# pip install -r requirement.txt

4. サーバを起動する
手っ取り早く使うには,localhostを使用すればよいです.digits-devserverを実行します.

# python ./digits-devserver
いくつか質問が表示されます.最初に聞かれるCaffeの場所だけ正しく入力し,残りの質問は基本的にデフォルトのままでよいです.

5. Webブラウザで開く
適当なWebブラウザを起動し,http://localhost:5000に接続します.
すると,以下のようなページが開くはずです.これでDIGITSが使えるようになります.

Mac OS X 10.10 (Yosemite)へのLaTeXとTeXShopのインストール方法まとめ

新しくMac Miniを購入したのですが,LaTeXの環境構築に手こずったので備忘録として書いておく.

MacTeX

MacTeXは,TeX LiveをベースにしたTeX/LaTeXの環境をOS Xに簡単に入れられるパッケージです.多くのパッケージが標準で入っているので,一つ一つインストールする必要がありません.

1. MacTeX-2014をダウンロードする
MacTeXのサイトもしくはミラーサイトからMacTeX.pkgをダウンロードします.
2. MacTeXをインストールする
MacTeX.pkgを実行して,MacTeXをインストールします.
3. Ghostscript 9.15をインストールする
Yosemite (OS X 10.10)だとEPS fileが表示されないとの報告があるそうなので,Richard KochのサイトからGhostscript 9.15をインストールします.

TeXShop

TeXShopOS X用のTeX統合環境で,手軽にソースファイルを編集したり,PDFの作成ができたりします.

1. 古いバージョンのTeXShopを捨てる
MacTeXをインストールして作られた,アプリケーション/TeXフォルダ内のTeXShopを捨てます.
2. TeXShopをダウンロードする
TeXShopのサイトから,Latest TeXShop Version 3を選び,ダウンロードします.
3. TeXShopをアプリケーションフォルダに入れる
4. TeXShopの環境設定を行う
TeXShopを起動し,上のバーのTeXShop > 環境設定から「設定プロファイル」の中から「pTeX (ptex2pdf)」を選びます.

Shift-JISやEUC文字コード対応

Shift-JISやEUC文字コードで書かれたソースファイルを扱う場合にビルドをすると,以下のようなエラーが出ることがある.

I can't find the format file `platex-sjis.fmt'!
これはShift-JISのケースであるが,ptexを使う場合は.fmtファイルがいらなくなるそうだ.
そこで、上記TeXShop環境設定の「内部設定」タブ内でTeX + dvips + distillerのLaTeXに書かれているファイルを開き,以下のように編集する.

ptex -kanji=$ENCODE -fmt=$PTEX-$ENCODE -progname=$PTEX $1 && \
となっている箇所を
platex -kanji=$ENCODE -progname=$PTEX $1 && \
のようにエンコーディングのオプションを削除し,platexに変更する.

DVD鑑賞店の話

研究所に正式配属されて約1ヶ月が経ちました。職場環境にも徐々に慣れてきて、グループ内で歓迎会もしてもらいました。しかし一方で、最近危険に感じることもあります。
それは、まだ仮配属されたばかりの頃に隣の部門のセンター長に言われた言葉でした。

「脱日常化」

研究で大事なのは、10年後のお客様が欲しいと思う技術を見つけられるかどうかだ。そのためには、日々フィルタリングしなければならない。見えないところに目を向けること。習慣化してしまうと見る目がなくなってしまう。

この言葉はつまり、毎日同じ生活を繰り返して習慣化してしまわないように、というアドバイスだったのです。しかし実際には、イヤホンで音楽を聞きながら毎日通勤しているので、周りの景色の変化に気を止めるなんてことはほとんどなくなってしまっているような気がします。(ダメな典型ですね)

そんなある日、ビルに掛かっていた大きな看板に目を奪われることがありました。それはDVD鑑賞店の看板だったのですが、そこにはなかなか面白いことが書かれてあったのです。

そこで今回はDVD鑑賞店の看板に書かれてあった言葉から、利用者視点で考えることの重要性について書いてみようと思います。決して卑猥な話ではないです。

ホテルがライバル

先日、同期との飲み会に出席するために渋谷に行ってきました。職場は横浜なのであまり東京のほうに行くことがなく久しぶりの東京だったのですが、渋谷に至っては指で数えられる程度しか行ったことがありませんでした。なので、周りの建物をキョロキョロ見ながら居酒屋まで行ったことを覚えています。そして、居酒屋の近くの曲がり角に差し掛かったとき、ふと大きな看板が目に入ってきました。
それは、DVD鑑賞店の看板だったのですが、そこには大きな文字で「ホテルがライバル」と書かれてあったのです。
一見すると不思議な看板です。DVD鑑賞店というのは個室でアダルトビデオを見るための店と認知していたので、ホテルがライバル(競合相手)になるとはふつう思わないでしょう。
しかし、僕はその看板を見た瞬間に「あること」に気づきました。

利用者視点で考えることの重要性

DVD鑑賞店の競合はどこだろうか。風俗店?いや、ホテルである。
この言葉の意味を隣にいた友人に話したところ、全く相手にされないどころかDVD鑑賞に興味があるの?と言われてしまったので意気消沈だったのですが、この意味は結構深いように思います。これに関してはGoogle及川卓也氏も自身のブログで語っている。


カプセルホテルを例にあげてみよう。カプセルホテルの競合はどこだろうか。ビジネスホテル?いや、タクシーである。
カプセルホテルの利用シナリオで多いのが、終電を逃してしまったときだ。タクシーで自宅まで帰ることと比べて、メリットがあるならばカプセルホテルを選ぶ。タクシーで帰宅すれば、自宅で風呂に入れ、普段のベッドで寝ることができ、着替えもできる。ただし、タクシー料金がかかる。距離によっては、カプセルホテルの料金はタクシーで帰宅するよりも安いが、簡単なシャワーくらいしかなく、睡眠スペースも狭く、着替えはできない。次の日に出勤する場合には、多少気まずい思いをするかもしれない。
カプセルホテルは、このようなタクシーとの比較で優位に立たなければならないのだ。同じドメイン(領域)でしか競合を考えないと、どうしても視野が狭くなる。実際に利用者が望んでいることの、根本まで立ち返って考えれば、本当の価値を顧客に提供することができる。終電を逃してしまったカプセルホテルの顧客の希望は、リーズナブルな料金でできるだけ良質な睡眠をとり、次の日にできるだけ仕事にさしつかえないよう出勤することである。

もう一つ例をあげよう。航空会社の競合相手はどこになるだろう。いろいろな答えがあると思うが、一つ彼らが競合として意識しているのが、通信事業者だ。出張という航空機のビジネス利用は、人と会い、そして議論することが目的である。いまや通信技術の発達により、実際に現地で会わなくても、それは実現できるようになっている。電話会議、ビデオ会議、インターネットによるメール、チャット、そのほかの通信手段。こうした通信によっては実現できない、もしくは効率的でない場合に出張を考えることになる。このケースも、カプセルホテルとタクシーの例で見たように、料金とのトレードオフがキーとなる。航空業界各社は業界内の競合だけでなく、このような通信事業者との領域を超えての競合を考えなければならなくなっている。

Nothing ventured, nothing gainedより

ここで、今回のDVD鑑賞店とホテルの例に立ち戻ってみましょう。DVD鑑賞店はネットカフェなどと同様に寝泊まりするために利用する人もいるようです。つまり、DVD鑑賞店にとってはホテルが競合になるというわけです。
渋谷で出会った一つの看板はとても重要なことを気づかせてくれました。
新しい技術やビジネスを考える上で、利用者視点に立ち、何が本当に必要とされているのかを考えることが大切です。そのためにも、脱日常化して、日々フィルタリングしていかなければいけないですね。

覚悟した話

僕は自分のことをよくinsecure overachiever (心理的に何か落ち着かないものがあって,やたら頑張らないと生きていけない人) と形容したりします.これは概ね研究に対して当てはまる話だったのですが,最近どうやら研究だけに当てはまる話でもないような気がしてきました.研究だけに当てはまる話であれば,研究が好きなのねっていう話で終わるのですが,そうでもなさそうなので,少し取り上げてみたいと思います.今考えると3年前に経験した入院生活および手術が深く関わっていると思っています.そこで,今回は入院中に「覚悟した話」をしようと思います.少し話が重たいですが,後半だけでも読んでいただけると幸いです.

1回目の入院

2010年1月某日,大学の講義聴講中に突如として強烈な胸の痛みに襲われ,保健管理センターにて自然気胸と診断される.すぐに病院に行くように言われたので翌日病院に行き,すぐに入院することになった.気胸とは肺に穴があいて呼吸困難になる病気であるが,穴は自然に閉じたらしく,5日ほどで退院することができた.

この頃はちょうど就職活動をやってた時期(結局進学することになったが)だったので,深夜バスで眠れない夜を過ごすことが多く,疲れがたまってたのかもしれないが,結局はっきりとした原因はわからず.
#研究のやりすぎではないのがポイント
このときは,健康って大事ねってことを頭で考える程度で終わる.

2回目の入院

2010年5月某日,家で本を読んでいると突如として胸に違和感を感じる.痛みはほとんどなかったが,感覚的に自然気胸が再発したと思い,翌日病院に行くと思った通りですぐに入院することになる.

今回は疲れが溜まっていたわけでもなく,やはり原因はわからず.
#研究のやりすぎではないのがポイント
ただし,状況は1回目のときと少し違っていた.自然気胸は再発率が30-50%と高いため,このままだと何度も再発する可能性があるらしい.医師からは手術をしたほうがよいと勧められた.手術をするのは嫌であったが,何度も入院するのはツラいので,手術する決心をした.(実際には,左右両方の肺が同時に気胸になったらマズいという理由もあった)ちなみに手術してからは再発していない.

手術が終わり,全身麻酔から覚めると体中が痛んでいた.自分の力で起き上がるどころか,寝返りをうつだけで大変だった.あしたのジョーの最終回に匹敵するような状態.実際,咳をしたり鼻をかんだり声を出すことすらできないくらい体は瀕死状態で,身体は火照り熱も出ていた.たぶん人間が死ぬときってこんな感じなんだろうなと思いながら夜を過ごした(無力感や弱さを想い,少し泣いていた).それから,ちょっと大げさではあるが,人間いつ死ぬかはわからないと思うようになった.というのも,気胸で亡くなる例はいくつかあるらしく,実際高校の同級生は気胸で亡くなっている.

今まで時間は無限だと思っていた.実際に無限なわけはないが,人生の最期を日頃意識したことがなかった.しかし,死を意識して人生は有限だと気づいたとき,「普通に」生活することができなくなっていた.もし自分の余命があと1年なら何をするだろうか.思うままに遊ぶとか世界一周旅行をするとかはよく聞きそうだが,僕の場合は違った.自分が生きた証をこの世に残したいと思った.自分が死んで,そして家族や知り合いも死んでしまえば、自分が生きた事実など、この世に引っかき傷ひとつ残らないのか.そう思うと無力感しかなかった.だから,研究を頑張って研究成果を残したい,ネームバリューを高めたいと思った.

「明日死ぬと思って今日を生きる」(マハトマ・ガンジー

余談

研究を頑張ろうという発想に至ったのは,タイミング的に研究室配属されてすぐに入院・手術をしたからというだけの話なのだが,3年間頑張ってみて大した研究成果を出せなかったのは結構イタい話である.4月からは社会人生活のスタートなので,今度こそは大きな結果を出せるように頑張りたいですね.少なくとも,毎日飯を食べてやがては死期を迎えるような人生は送りたくないと思うんですよね.

仕事は楽しく,趣味は真剣に

大学の仕事がひと段落したので,新しくブログを作ってみた.

今月で大学を卒業して,4月から就職します.

大学での研究はかなり無理をしていた部分があるので,これからは
「仕事はたのしく,趣味は真剣に」というのを目指してやっていこうと思います.

このブログでは,考え事とか技術的な話を書きます.