Bag of ML Words

ML = Machine Learning, Music Love, and Miscellaneous things in daily Livings

OpenCV python wrapper install on Ubuntu 14.04 (w/ anaconda)

I tried many and finally succeeded in installing OpenCV python wrapper on Ubuntu 14.04. 

I use the Anaconda package for the main python library, thus all python-related dependencies would watch for the Anaconda package directory. That was the trouble for me. 

 

Useful references: 

1. Installing OpenCV 2.2 in Ubuntu 11.04 – Sebastian Montabone

2. LIBTIFF_4.0 link errors - OpenCV Q&A Forum

 

Procedure 

Preparation

First, download the installation package of OpenCV (for linux) from the official site. 

I used the OpenCV-2.4.10. 

Unpack it and go to the directory. Then, create a working directory for build. 

unzip opencv-2.4.10.zip

cd opencv-2.4.10

mkdir build

cd build

Next, prepare all necesarry libraries by apt-get. 

Please find the reference 1. Before apt-get install, you may remove "libopencv*" from your system (to avoid unnecesarry conflictions). 

cmake

Now we are ready to try building the OpenCV

We start from making the Makefiles by cmake. In cmake, you need to be careful on the option arguments because we rely on Anaconda package. 

Finally the command below yielded the successful installatoin: 

cmake -D BUILD_EXAMPLES=ON -D CMAKE_BUILD_TYPE=RELEASE \ 

-D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_1394=OFF \ 

-D WITH_IPP=ON -D WITH_TBB=ON -D WITH_V4L=OFF \ 

-D PYTHON_EXECUTABLE=(anaconda dir path)/bin/python

-D PYTHON_LIBRARY=(anaconda dir path)/lib/libpython2.7.so \

-D PYTHON_INCLUDE=(anaconda dir path)/include/python2.7 \ 

-D PYTHON_PACKAGES_PATH=(anaconda dir path)/lib/python2.7/site-packages \ 

-D BUILD_TIFF=ON \ 

-D CMAKE_C_COMPILER=/usr/bin/gcc

-D CMAKE_CXX_COMPILER=/usr/bin/g++ ../

 

Type the above command, and cmake wil return the specifications for making the OpenCV library. Read the specifications carefully, and correct the options if something is wrong. 

 

make and make install

If you are good, then make. This will take a while. After that, make install with sudo. 

make

sudo make install

If there are some errors during make, you need to fix it one by one. Typically I encountered with missing lib****, which we can solve instantly by apt-get.  

Test

First, check out if openCV module is loadable from your python (in anaconda):  

import cv2

If no errors, congratulation! You passed the first test. :-) 

 

Second, you would write a simple code that uses cv2 functions. Some of OpenCV functions may not be builded appropriately even if the installation finished without apparent errors && the cv2 module is loadable.

In my system I frequently encountered with problems on video (movie) processing functions :-( 

 

If you encounter the linker problem of GLIBC with libm.so.6 (like me), you may copy libm.so.6 from /lib/x86_64-linux-gunu/libm.so.6 to anadonda/bin/../lib/. 

Be sure to keep the original libm.so.6 (that of anadonca) as a different file!

Import Error: `GLIBC_2.15' not found - OpenCV Q&A Forum

 

Done. 

No errors? Have fun with OpenCV!! ;-)

Python: 外部コマンドの呼び出し方

普段はos.system('command')を使っていたのですが、


pythonで外部のシェルスクリプトやコマンドを実行する方法 - Qiita

 

これによると、commandsパッケージ使ったほうがいいみたいですね。

今度からそうします。

 

2015/03/13追記:

h-miyako様からコメントいただきました。

commandsはもう3.系にはないそうです。

os.sytemも使わない方が良くて、

subprocessモジュールを使うことが良いようです。

勉強しなおします。

 

勉強しなおしました

subprocesだと、subprocess.callを使えばいいです。

import subprocess

retcode = subprocess.call("ls") # ls する
recode2 = subprocess.call("ln", "-s", "./temp/neko", "./mike") "

# ln -s ./temp/neko ./mike してる

ポイントは、本当に最初の1つのコマンドだけくくりだして、のこりのargumentsは順番に与えていくことですね

Cython

Cython使ったことないんですけど。前はnumba使ったんですけど、

指導している子によると使える範囲せまいらしいので、

やっぱCythonかな~って。

 

というわけで@taki_taki__くんのブログエントリをメモっておく

そもそもomakeを知らないというところから始めなければ・・・

 


PyCharm上でCythonのビルドを簡単にするには | 左京区パラボラ日記

 


Cython開発とomake連携 | 左京区パラボラ日記

Java: args4jによるコマンドラインのパース

今まではString[] argsを使ってたけど、

今後はこれで決まりっぽいな。各種フラグを簡単に指定できるようになるのはいいね

 

Parsing command line options in JDK 5.0 style: args4j | Java.net

 

優先度とToDoリストによる仕事の効率化について:私に欠けていた1つのポイント

自分は仕事が遅いという自覚があり、ずっと悩んでいるので仕事術の類の記事は色々読んできました。仕事柄、とくに研究についてのものが多いですが。

それらの中でも、実に多くの記事が

「ToDoリストを活用せよ」

と言っています。色々なやり方がありますが、共通点は以下の通りです。

  1. やるべきことをリストアップする
  2. それに重要度の点数をつける
  3. 重要度の点数の高いものからこなしていく
  4. 特に、毎日一番重要な3つを集中的にこなす

もちろん、長いこと私もこれを実践してきましたが、正直、仕事の効率が上がったとは思えませんでした。

 

しかし、この年末辺りから、ToDoリストによる仕事の効率化が目に見えて向上してきました。もちろん、まだ実践して3週間ほどですのでこの後またダメになるかもしれませんが、今のところその気配はありません。

そして、それはある一つのポイントを見落としていたことによるものだと得心しましたので共有させていただきます。それは

出来る限り細かく具体的な作業にまでブレイクダウンする

という点でした。

 

「頭を悩ませずに、淡々と処理を行うためのリストアップ」

そもそも、なぜタスクをリストアップして重要度順に処理するというらいふはっくが有効なのでしょうか?

まず、リストにメモすることでやるべきことを忘れないというのが1つ。

そして、重要度をつけることでその中でも大事なものを確実に処理するというのがあります。

そして、今回の気付きで理解したもう一つの機能が、「次にすべき作業で頭を悩ませずに、機械的に処理に没頭する」です。そして、この点が私のToDoリストには足りなかったようです。

 

実際の具体例を見てもらったほうがいいと思います。

以下は、今私が取り組んでいる執筆作業に関するToDoリストの一部です。

 

以前

 
イントロ
(略)
スペクトラルクラスタリング
 | - 関係データクラスタリング
 | - まずは自分の直観で説明
 | - 具体的なアルゴリズム
 | - 導出など
 | - 適用例

イントロ

(略)

スペクトラルクラスタリング

 | - 関係データクラスタリングとは

       | - クリーク、コミュニティ
       | - 外に疎、中で密。中で疎、外で密。
 | - 関係データクラスタリングの難しさ。
       | - わかりにくさ難しさの絵をつくるために、2次元関係データの行列を沢山作成
       | - 構造がある例とない例。見分けがつかない
 | - スペクトラルクラスタリングとは。
       | - 適用可能なデータ
       | - 実際の適用例。
       | - 3種類を全て実装
       | - 番良いとされるアルゴを実際に人工データに適用してデータと結果の図を生成
 | - 具体的なアルゴリズム。1番良いとされているアルゴ
 | - なぜ動くのか直観的な説明
       | - 完全排他的クラスタの例。行列図とグラフ図
 | - 導出
・・・・・・

 

以前のリストも、リストアップとしては間違っていません。やるべきことを全て書き出しています。しかし、リスト中の各要素の粒度が大きい、あるいは抽象度が高いです。こうなると、リストの各要素をこなすために、何からやらなければならないか、そこでまたリソースの再配分を考えないといけません。この再配分が明確に記載されていないので、

ここで手戻りが発生したり効率が落ちる-->嫌になる-->やる気が減る-->仕事が遅くなる

というのが失敗の王道パターンでした。

 

一方、今のリストですと、さらに細かく分解されていきます。分解の粒度は、私にとっては具体的な作業が明確な、ある意味で最小単位の作業です。ここまでやると、各要素をこなすためにその内部でのリソース配分は必要ありません。集中してリストの要素を一つずつ淡々と潰すだけになります。

書いてみれば当たり前も当たり前、なんてことはないポイントでしたが、これが大きく効率の改善につながりました。

  1. 次にやるべき事が非常に明確になり、リソース再配分に頭を悩ますことがなくなったのは述べたとおりです。このリソース再配分フェーズに入るとこれまでの経験から「あ、これアカン奴や・・・いやだー」という気分が発生するので、それを避けられるのは精神衛生上良いです(個人的には)。
  2. 個々のリスト要素はかなり労力が小さく、また終了条件が明確になります。したがって、少数ではあっても毎日確実にリストを潰していけます。これは日々進捗が発生することになるので、「進捗どうですか」という攻撃に対して有効な対処法です。

 

研究の実験などでは、さらに内部的にToDoを細かく詰めるようにします

Evernoteなどで実験用のテンプレートを作成して、

  • 実験の目的
  • 仮説
  • 検証する要素
  • 予想される結果
  • 使用するデータ
  • 手続き
  • 検証要素に必要なパラメータセットのリスト
  • 使用するプログラムと場所
  • 実験結果の保存先

などを実験作業の前に集中して考え抜いて記録します。

あとは書いてある通りに作業して、実験結果をまとめて予想との食い違いなどを検証します。ここでも、とにかく自分自身で何も悩まず淡々と実験を進めることができるまで細かく書いていくことが必要です。

 

研究職を何年もやってきた私が、今さらこんなエントリを書くのは今更感が高くて我ながら情けないのですが・・・*1

 

ブレイクダウンに至るやりかた

ですが、初めからこんなに細かく書き下すことは難しいです。というか初めからそこまで見えているなら苦労しません。

では、どうするかというと、実際に作業を手がける、これが一番良いっぽいです。

 

まずは昔のレベルの粗いレベルで良いので、リストアップと順序づけをします。そして、重要と思われるタスクに手を着けて実際に作業します。

で、作業していくと、「あ、あれもやらなきゃ」「これ言うならこの実験も必要だよなぁ・・・」というのがどんどん出てきます。それをすぐにリストに反映していきます。つまり、作業すればするほどどんどんリストが細かく長くなっていきます。

それと同時に、リスト内容の精査と圧縮・取捨選択も常につづけます。そのうちリストの更新が止まれば、後は本当に潰していくだけです。

 

 

以上、拙いながらようやくToDoリストの使い方が分かってきたのでまとめてみました。もうしばらく上記のやり方をやってみて、ダメならまた報告するかもしれません。

*1: (;_;) 

NIPS 2014 所感とか概要とかまとめ

今年はワークショップに論文とおったのでNIPSに参加してきました。

会社への報告書をまとめたので、利益背反(?)にならない範囲&&個人的趣味のフレーバー載せて所感書いてみますね。

概要

NIPSなにそれ美味しいのって方はそもそもこの記事読まないと思いますけども。

NIPSとは機械学習分野における最高峰の国際会議です。

http://nips.cc/

機械学習(というかコンピュータサイエンス)はジャーナルよりも国際会議の方が評価される不思議な分野ですが、その中の最高峰なんで、NIPS paper持ってると凄い人って感じです。

今年は12/08~13の間、モントリオールで開催されました。参加者はなんと2,400人over!! 去年が1,800人ほどだったはずなので、すごいペースで増えています。

本会議は発表が400件ちょい、いつも通り採択率は25%くらいです。本会議は4日間あって、毎日100件ずつポスター発表っていう感じでした。

朝から夕方までシングルセッションで招待講演とえりすぐりの論文によるオーラル・スポットライト、夕方から深夜までポスターといういつも通りの体力勝負スケジュールでした。

今年のNIPSを一言でまとめると、「DNN祭り」でしょうか。

DNN/DL (Deep Neural Network / Deep Learning)は画像、音声音響、NLP分野のビッグウェーブですが、NIPSも完全にそれに乗ってるようです。

会議PDFの目次見て、目grepで数えた範囲だと、400件超の本会議論文のうち35件以上はDNNでした。これって大変なことで、機械学習全般(の最先端)をカバーするNIPSの10%近くがディープだけで埋まったってことですよね・・・

ただ、award papersにはDeep有りませんでしたね。実際、発表見てても深い理論とかは無い感じなので・・・

でも、性能や話題性、使うデータ量などの勢い・インパクトは凄い。ディープなポスターはやはり人気でしたし、オーラルセッションに選ばれた論文はやはり圧倒的な凄さを感じました。

 

また、DNN workshopが本会議後に開催されたのですが、参加者数百人(600という噂)、採録ポスター50本という、ほぼ一つの小規模会議レベル。聴講者も研究者だけじゃなくて、色々な企業の人がいましたね*1

応用分野だけではなくて、機械学習研究としてもDNNはまだまだ盛り上がりそうですね。

 

トピックモデルの霊圧が・・・消えた・・・!?

消えました。本会議のPDFを検索してみると、タイトルにtopic modelsを使ったものは1報のみでした。会議でポスターを眺めていても、やはり存在感を感じませんでした。

トピックモデルは今後は応用分野で生き残っていく のでしょう。そこがSVMとの違いですかね・・・

 

他の話題

ここから先はあんまり言うとアレなんですけど、差し支えのない範囲で。

Bayesian Optimization (Blackbox function optimization)は、私はIBIS2014で初めて存在を知ったのですが、NIPS2014では一大勢力になっていました。

Banditも安定してたくさん研究が発表されていましたが、私はチェックしていません。

最適化はたくさんたくさん研究が発表されています。まあ、王道ですしね。 凸も非凸もたくさんあります。

 

個人的にお勧め論文

400件もあるととてもカバーしきれないですし、人によって興味も全然違うと思いますが、どなたにも安心してお勧めできるのが以下の2(+1)論文です。

 

Asymmetric LSH (ALSH) for Sublinear Time Maximum Inner Product Search (MIPS)

Outstanding paperのうちの1つ。高速に内積最大値を与えるデータを探してくるタスクです。ちょっとの工夫で、LSHを使えるようにしています。エレガント。

 

How transferable are features in deep neural networks?

DNNを解析してやろう、というオーラル論文です。中間層のtransferability, あるいは抽象度を定量化して評価するという試みで、発表を聴いてる最中も会場から「おお・・・(感心)」というオーラを感じました。

 

Sequence to Sequence Learning with Neural Networks

中身は、Long Short-Term Memoryを使って可変長シーケンス間の写像をDNNで学習して、機械翻訳に応用したもの。

Take home messageが

If you have a large big dataset

And you train a very big neural network

Then success is guaranteed!!

 

ということで多分、会場で一番くらい話題をさらった発表(プレゼン的に)。

 

お楽しみとか感想とか

とにかくモントリオール寒すぎでした。スキーも出来ないのに寒いとこで開催する意味はないですねぇ・・・

 

f:id:Dr_KayAi:20141210072712j:plain

 だいたい毎日こんな感じ。地下道が発達しているとの受け売りでしたが、会場から食事に行く際にはほぼ必ず地表を歩くことになり、しかも毎日吹雪でしたからね・・・

 

f:id:Dr_KayAi:20141208092741j:plain

f:id:Dr_KayAi:20141213152541j:plain

クリスマスムード満点。

 

f:id:Dr_KayAi:20141210123226j:plain

ワインは不毛の地のようでしたが、ジビールゥは発達しているようです。とりあえず、この店のは全部飲みました。

 

来年もNIPSはモントリオールで決定です。再来年は、なんとリスボンになる可能性が微レ存・・・?

 

*1:ということは、DNN使えますな学生さんは・・・!?!?。

Ubuntu14インストールとトラブルメモ

Fedoraやめて懐かしのdebian系列Ubuntuに乗り換えました。

安定安心のdebian系列。

 

Acrobat

どうも最新のstableにはacrobatは無くなったらしい。ということで古いパッケージをとってきてインストールするようです。

ここにあるようにすればOK.足りないsoファイルとか出てきたら、それっぽいライブラリを片っ端からインストールしておきましょう。


software installation - How do I install Adobe Acrobat Reader from the repository? - Ask Ubuntu

 

Tex

やっぱりtexliveになります。

apt-get install texlive*

フォントやパッケージのインストールも必要かもしれませんね ・・・・

その時は追記します。

nvidiaカーネル

相変わらず、nvidia周りには泣かされます。

システムから要請される自動セキュリティアップデートパッチ当てたら死んだり・・・。

というわけで、そういう場合の復旧方法。

事前にrootのホームにnvidiaからダウンロードしておいたインストールパッチを置いておくことが肝要。

1)rootでログイン
2)Xを停止
 # service lightdm stop
 を実行してXを停止する。
3)NVIDIAドライバをインストールする。
 ./NVIDIA-Linux-x86_64-340.46.run
4)マシン再起動

 (2014.12.22追記)

上記でダメなときは、


Ubuntu 14.04 install NVIDIA driver - Ask Ubuntu


[all variants] [HOWTO] Install NVIDIA drivers manually on Lynx

にあるやり方を踏襲しています。

 

nvidiaの過去ドライバのアンインストール

apt-get --purge remove nvidia* && sudo apt-get autoremove

reboot

#nouveauのdisableはリンク先を参照。中身を確認

less /etc/modprobe.d/blacklist-nouveau.conf

less /etc/modprobe.d/nouveau-kms.conf

# 状態反映?

update-initramfs -u

reboot

 

#最新のパッケージ各種をインストール

apt-get install kernel-source* (それっぽいやつ全部インストール)

apt-get install kenel-headers-'uname -r' (uname -rで確認した名前にあう、genericってやつをインストール)

apt-get install build-essential

 

kernel-なんちゃらは、linux-なんちゃらかもしれません。

apt-get install linux-source* 

apt-get install linux-headers-'uname -r'


update-initramfs -u

reboot


# 最新のドライバをダウンロードして上記の作業で再インストール

#設定を保存

nvidia-xconfig

 

 

大体の場合、こけるのは最新ライブラリのアップデートが足りてないからです。

まずはapt-get upgradeしてみて、それから上記全部試してみましょう。

 

日本語

Ubuntu14.04-Liveで日本語入力設定 | Do You Linux??-どぉよおぅリナックス

時々消えてしまった苦しんだので、上記のリンクを張っておきますが、ここで簡潔にまとめておきます。

 

killall ibus-daemon % いったんibusを殺す

ibus-setup % これでibus使いますか?って出てくるのでOKする 

 こうするとibusの設定ウィンドウが出てきますので、「入力メソッド」のタブを開きましょう。んで、「入力メソッドの選択」タブから日本語-->anthyを選んで、「追加」します。この追加が第一の重要ポイントです。

 

つぎにシステム設定の中のキーボード-->テキスト入力に進みます。

ここで、「使用する入力ソース」の中にAnthyがあればOK。

なければ左下の「+」ボタンを押して、日本語(Anthy)を選んで追加します。

この追加が第二の重要ポイントです。

 

最後に、上のほうの「Mo」アイコンあるいは「EN」アイコンをクリック、日本語入力(Anthy)を選べばOK!

半角全角ボタンで日本語と半角英語を切り替えられます。