2014年6月19日木曜日

非線形最小化ライブラリCeres Solverの導入方法(Windows+Visual Studio 2012)

非線形最小化問題を解くためのライブラリとしてGoogleのCeres Solverがある。このライブラリは、比較的使い勝手がよく、また、バンドル調整のような大規模な疎行列を扱うような問題にも対応している。

ここでは、Windows+Visual Studio 2012での導入方法について個人的なメモも兼ねて記載しておく。

基本的には、このページの手順にしたがって進めていくと問題なくコンパイルできました。
  1. 以下のフィアルをダウンロード


  2. gflags, glogs, CXSparseのライブラリを生成
  3. ダウンロードしたファイルを展開すると、それぞれのフォルダにVisual Studioのソリューションファイルがあるので、これを開いてビルド。参考にしたページに書かれているようなソースコードの修正は必要ありませんでした。
  4. CMakeをつかってCeres Solverのソリューションファイルを生成
  5. ソースコードの位置をceres/ceres-solver-1.8.0に設定し、バイナリ生成のためのフォルダをceres/ceres-solver/buildのように設定する。設定後、gflags, glogs, CXSparse, Eigen3のヘッダファイルの場所、ライブラリを以下のように指定し、configure, generateするとソリューションファイルが生成される。

    • EIGEN_INCLUDE_DIRにEigenへのパス
    • GFLAGS_INCLUDE_DIRにgflags-2.0\src\windows
    • GFLAGS_LIBRARYに2.で生成したlibgflags.lib
    • GLOG_INCLUDE_DIRにglog-0.3.3\src\windows
    • GLOG_LIBRARYに2.で生成したlibglog.lib
    • CXSPARSE_INCLUDE_DIRにcxsparse\Include
    • CXSPARSE_LIBRARYに2.で生成したCXSparse.lib

  6. 生成されたソリューションファイルを開き、ceresプロジェクトのプロパティでConfigurationをAll Configurationsにし、C/C++中のPreprocessorの項目でGLOG_NO_ABBREVIATED_SEVERITIESを追加
  7. バッチビルドでALL_BUILDの項目にチェックを入れてビルド。成功するとbuild/libの中にceres.libが生成される。
あとは、プログラムを作成する際に、ヘッダファイルのインクルード、生成したライブラリをリンクすることで利用可能になる。

ただし、この方法では、Suite Sparseのオプションがオンになっていないので、疎行列用の最適化処理を利用できない

Suite Sparseを利用したい場合には2.の段階でSuite Sparseのライブラリを準備する必要がある。ただし、このSuite SparseをWindows上でコンパイルしライブラリを生成することはかなり厄介な作業になる。なので、Suite Sparseのライブラリ生成には、以下のリンクにあるAll-in-one packageを利用することをお勧めする。


このページのInstructionに書いてある通りにCMakeでVisual Studio用のソリューションファイルを生成した後、ビルドするとSuite Sparseのライブラリが生成される。

あとは、CMakeでCeres solverのソリューションファイルを生成するための設定で、lapackのオプションをオンにしlapack、blasをリンク。その後、Suite Sparseのオプションをオンにし生成した各種ライブラリおよびヘッダを設定する(TBBの設定も必要だったかも)。これが終わったらgenerateしてビルドするCeres solverのライブラリが生成される。

0 件のコメント:

コメントを投稿