2011年3月4日金曜日

Scilab5.3.1

Scilab5.3.1が出ています。5.3.0ではWindowsXPでグラフを描くと落ちていました(僕の環境だけ?)が、今度のは落ちません。またUI関係が充実したようで、3Dのグラフィックスをぐるぐる回したりするのが簡単になっているような感じです。

ひなまつり

昨日はひなまつり。


ちらし寿司とあさりのおすまし、ワインでお祝いです(^^V

OpenCV:CUDA,GPU

OpenCV, CUDAで調べていたらこんなものが見つかりました。

GPU Technology Conference 2010

KeynoteでStanford(Google)のSebastian ThrunのDARPA Grand/Urban Challengeの自動車ロボットの話
Grand Challengeでは砂漠の中の道を状況に応じてスピードを変えて駆け抜け、Urban Challengeでは回りのロボットカーの動きを読んで上手くかわしたりしながら走っていきます。すごい!ですね。

こっちではOpenCVでのGPU利用の話がされています。

こういうものもフリーで見せてくれるんですねえ。

2011年3月1日火曜日

OpenCV:RandomTrees

OpenCVで機械学習手法であるRandomTreesを使っています。今までは分類問題(trueかfalseかを分けるような問題)に使用していましたが、回帰問題(regression, 例えばfalse(0)から true(1)の間を連続値として返すような問題)に使う必要が生じました。結局、学習するときに連続量の指定をしてモデルを作り、そのモデルを使ってやれば連続量として返してくれるようです。

Mommaさんのページの例題のbuild_rtrees_classifier関数の中の

//最後の1つ(出力でもあるresponsesの形式)を質的データに指定
cvSetReal1D( var_type, data->cols, CV_VAR_CATEGORICAL );



cvSetReal1D( var_type, data->cols, CV_VAR_ORDERED);

として学習し、ここで出来たモデルを使ってpredictするだけでよいようです。

ですので、まとめると、

train()で学習するときにCV_VAR_ORDERED(連続量)を選ぶと回帰問題になる。CV_VAR_CATEGORICAL(2値)を選ぶと分類問題となる。このモデルを読み込んでpredict()するとそれぞれ回帰問題・分類問題に対する戻り値が得られる。戻り値は学習データにつけていたカテゴリが1,0だったとすると、ASCIIコードでは1(49)と0(48)なので、分類問題のときにはdoubleで48.0と49.0になり、回帰問題のときにはdoubleの48.0~49.0の連続値となる。

2011年2月27日日曜日

箱根:雲助だんご

天気がよかったので箱根に行ってきました。箱根新道が社会実験のおかげで無料となっているのでちょっと登ってくるという感じで行けるようになりました。芦ノ湖出口で降りて芦ノ湖へ。


出るときは天気がよかったんですが、箱根に登ったときには曇っていたのと5時近かったのとでこんな感じで、富士山は見えませんでした。

箱根関所近くの雲助だんごさんへ。みたらし団子とお汁粉をあったかいお茶と頂き、温まって帰りました(^^V



2011年2月26日土曜日

dll:dllのロードに失敗

あるdllをロードするときに「dllのロードに失敗しました」といってロード出来ない時があります。もちろんそのdllへのpathが通っていることは必須ですが、dllが他のdllに依存しているときには、その依存しているdllへのpathも通しておく必要があります。

VC++でやっている場合にpath環境変数を変更したら、VC++自体を1度落として立ち上げ直さないと有効でにならない。

OpenCVの場合には<OpenCVインストールディレクトリ>\binに様々なdllが入っていますので、これに依存したdllを作ったり使ったりする場合には、このbinディレクトリをpathに入れておかなければなりません。

OpenCV:CUDA, TBB付きのインストール

OpenCVを使っていてかなり計算時間がかかる(RandomTreeを使っています)処理をやっていました。あまりにも時間がかかるので、CUDATBBがOpenCV2.2では使えることを思い出し、インストールしてみました。そのメモです。結局RandomTreeの処理自体がCUDAで実装し直されているわけではなかったようで高速化はしませんでしたが(^^;

CUDAやTBBが利用出来るバイナリは提供されていませんので、ソースをダウンロードしてmake/buildする必要があります。ここ

■安定版をインストール(ソースから)

を参考にインストールしていきます。インストールするのはWindows版の

CUDAここの下の方にある表の中のCUDA Toolkitの32bitとか自分の環境に合わせて)
NPP(Nvidia Performance Primitives)(ここの下の方にある表の中のNVIDIA Performance Primitives (NPP) libraryの32bitとか自分の環境に合わせて)
TBB(Intel Threading Building Block)(ここの一番新しいやつ、一番上ですね)
OpenCV2.2 (ここのzipファイル)

です。

ダウンロードが終わったらCmakeを立ち上げます。GUIでいろいろな設定をします。まず今回はVisualStudio2005を利用するので、




のように設定します。こうするとコンパイラにVC++2005を採用してくれ、またOpenCVのVS2005用のsolutionを作ってくれるようです。

次に、


のような画面が現れるので”Where is the source code:” に OpenCV2.2を展開したディレクトリ を、 “Where to build the binaries:” に 好きなディレクトリ(僕は参考URLに従ってOpenCV2.2のディレクトリの下にbuildというディレクトリを作り、そこを指定しました。図は別なときにやった画面なのでディレクトリは違っています。) を選択します。

それからビルドオプションを選択します。

・WITH_TBBとWITH_CUDAにチェックを入れます。
・BUILD_DOXYGEN_DOCS のチェックを外します。こうしないとbuildするときに延々とhtmlファイルを作って終了しないバグがあるようです。このときのエラーもこれが原因だったのですね(^^;

それでConfigureボタンを押すと

NPPのinclude/librariesディレクトリが見つからない

などというディレクトリの設定エラーが出ます。

こんな感じです。


例えば上の例では TBB_INCLUDE_DIR-NOTFOUNDなどとなっていますのでTBBのincludeディレクトリを設定します。

NPPに関してはNPPをダウンロードしたzipファイルの中にあるSDKディレクトリ(npp_3.2.16_win_32.zipではSDKディレクトリが中にあるだけです)を適当なところに移して、そこをCUDA_NPP_LIBRARY_ROOT_DIRにセットしたらConfigure出来て、Generateも通りました(^^V

続いてOpenCVのbuildに移ります。buildディレクトリにVS2005用のソリューションファイル(.sln)が出来ていますので、これを立ち上げます。後はここに書いてあるようにALL_BUILDとINSTALLのdebugとreleaseプロジェクトをbuildします。そのときにTBBに関連して

critical_section.h(109) : error C3861: 'TryEnterCriticalSection': identifier not found

のようなエラーが出ますので、ここに書いてあるように

Project Property -> C/C++ -> Preprocesor -> Preprocesor definitions に
_WIN32_WINNT=0x0400

を付け加えます。

opencv_mlとopencv_objdetectの2つのプロジェクトでTBBを使っているようですので、これら2つのプロジェクトのプロパティの設定を行います。releaseとdebugの両方の設定が必要です。これでbuildすればめでたくOpenCV2.2のCUDA、TBB利用版が完成です(^^V buildには結構時間がかかりますので気長に待ちましょう。