必要にかられてOpenCVの機械学習を使い始めたのだけど、
ひどく遅くて仕事にならない。
配布されたライブラリだと
シングルタスクでしか動かないらしい。
12コアのCPUを積んでるのに、1コアしか使わないなんて…
そこで。
TBBやらCUDAやらを有効にして再ビルドすることにしたのだけど、
機械学習関係は最新版が色々良いらしい。。。
との風の噂を信じて。
バージョンを 2.4.11から3.0へバージョンアップ!
リリースしたての 3.0.0。
マイナーバージョンが0ってのが、身の危険を感じさせてくれます。
とは言え
どうせビルドするなら、
トラブル解決ついでに新しいAPIの流儀を覚えるのも悪くない。
いいかげん、手持ちのプロジェクトに残ってる OpenCV1の名残を消したいし。
ビルドの基本的な作業は
アーカイブ展開 → cmake → VisualStudio でビルド
という手順。
なのだけど、
リリースホヤホヤの新作だけに、
オプション全部入りにしておいて終夜稼動でビルド。
翌朝 にっこり。
と言う訳には行かない。
今回必要なオプションは
CUDA 5.5、TBB、EIGEN、contribのmoduleのいくつか。
opencv3.0とcontribのアーカイブはgitからクローンし、
TBBとEIGENは最新のアーカイブを取ってくる。
CUDAは既にインストール済み。
CUDAを含めたOpenCVのビルドにはべらぼうな時間がかかるので、
まず最初にTBBとEIGENだけ有効にしたCPUだけの環境をインストールした。
このOpenCV3環境を使って、
手元のプロジェクトをOpenCV3対応に修正する作業の裏で、
CUDAを有効にした環境のビルド作業を続ける。
でもでも。
CUDAを組込む前から、
既に恐しく高速化された関数群の恩恵に感動!
TBBの影響かな?爆速です。
中の方々に感謝です。
が、
このgit版のソースでは、エラーが多くてCUDAを組み込んだビルド諦めた。
中の方々に感謝しつつ、
CUDA版は3.0リリース日に固められていたアーカイブを
ダウンロードして使うことに。
contribのmoduleでソースの修正が必要そうなものは、
CMake でチェックを外してスキップすることにし、
再びビルド。
待つこと半日。
ビルドが遅いのは、VisualStudio版のcudaのコンパイラnvccのせい。
Linux版のnvccは速いのだけどね。本当、遅い。
3度ほど、この作業を繰り返して
必要なライブラリ群は、ビルドとインストールが完了した。
仕事しながら裏で作業していたとは言え、
全部合わせるとcuda版のビルドに2日かかったことになる。
大昔のntemacs並ですわ。
悲しいのは
python用のbindingがビルドできなかった事。
まぁ、pythonはメインの仕事には使わないんだけど。
あと大事なTipsを一つ。
cmakeでPATHを新たに指定するとき、
PATHにバックスラッシュを含んでいると、
エスケープ記号と間違われて、後でコンパイルエラーになる。
結構後で分かるので、時間のロスが悲しいよ。
スラッシュで置き換えれば、問題なくコンパイルできる。
2.4.11の時は、困った記憶がないんだけどな。
それと、ソースファイルの文字コードでワーニングがしこたま出るけど、
まさか日本語を直書きしている訳ではないと思うので、今回はスルー。
リビジョンが10回くらい上がったら、もう一回ビルドだ!