バックナンバー

[ --.--.-- ] スポンサーサイト

[ 2014.12.26 ] OpenCVのメモリ制限

--.--.-- --:-- | EDIT
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Category: スポンサー広告
Permanent Link | Comment(-) | Trackback(-) | PageTop↑
2014.12.26 16:50 | EDIT
OpenCVで識別器生成時やクラスタリング時によくメモリ不足(Insufficient Error)になっていたのでメモしておきます.

OpenCV,特に32ビットで処理するときには下記のような制限があります.

internal.hppより
#define CV_MAX_ALLOC_SIZE (((size_t)1 << (sizeof(size_t)*8-2)))

これはプログラム上でのメモリ確保を制限して挙動を保証するために設けられているのですが,大量の学習画像から特徴量を取得する機械学習やクラスタリング問題においてはこの制限を超えてしまうことが多く見受けられます.

ひとつの解決策は下記に示すように制限を外すためにOpenCVの中(internal.hpp)を書き換えてOpenCV自体をビルドしなおすことです.

//#define CV_MAX_ALLOC_SIZE (((size_t)1 << (sizeof(size_t)*8-2)))
#define CV_MAX_ALLOC_SIZE ULLONG_MAX
( http://masabloggers.blogspot.jp/2014/02/opencv-win32.html より)

もう一つの解決策はOpenCVの処理を64ビットにすることです.

Visual Studioの場合,その際に注意することは,
- 環境設定のPathを64ビット用に設定する
Visual Studio2010の場合(C:\opencv\build\x64\vc10\bin;C:\opencv\build\common\tbb\intel64\vc10)にするなど
- 構成マネージャのプラットフォームを32ビットから64ビット用にする
といったところです.


32ビット場合にはOpenCVの制限を外しても多少改善される程度ですが,64ビットの場合には限界を格段に引き上げられるので後者の改善策がオススメです.
これをしておくだけであとは使用するPC依存になります.良いPCを使用するだけ学習のサンプル数を増やすことができると考えます.
スポンサーサイト
 | ホーム | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。