2013年12月12日木曜日

OpenCVで検出器用の辞書を作成してみた

OpenCVが提供している分類器 CascadeClassifier用の辞書を作成してみた。
前回学習方法を訳してみたが、実際にを動かしてみると、相違点や問題点が見つかったので、メモしておく

1 特徴量は、HAAR、LBPだけでなくHOGが使用できる
  -featureType HOGで指定する

2  -vec のファイルで指定したサンプルファイルに登録されているpositive画像数を -numPos で指定すると opencv_traincascadeが落ちる
  以前から指摘されているようであり、numPos の数を9割くらいに減らせばよい

3 メモリが少ないと、opencv_traincascadeの起動時にメモリアロケーションエラーで落ちる
  その場合は、-numPosや、-numNegで指定する数を減らす
    -w -hで指定するサイズを小さくする (その場合、vecファイルを作り直す)必要がある

4 それでもステージの途中でメモリ不足で落ちる場合があるが、再度実行すると問題なく終了できる場合がある。

5 選んだ画像によっては、収束しないで無限に計算している場合がある
  (negのカウンタが増えていかない)
  その場合は、パラメータを変える、画像を変えるなどしないといけない
  
  条件やマシンに依存するが、posi 500枚くらいだと 30分くらいで終了する
  
  最初は -numStages を少なくしておき、検出精度をみながら増やしていくとよい

6 検出プログラムは、顔検出用のサンプルなどがそのまま使用できる
  辞書指定で、自作の辞書ファイルのパスを指定すればよい
  positive辞書作成時に使用した画像で、検証すればよい

7 計算時間短縮のためにコンソールから、プログラムを起動するときに start /highを付け加え、プロセスの優先度をあげるとよい
 反面、他の作業に支障が出る場合がある

8 時間がかかる場合、途中で計算を打ち切ることができ、後日、同じコマンドで再開することができる。
  再開時にパラメータが異なると、プログラムは起動後、すぐに終了してしまう
  パラメータを変えたい場合は、辞書保存用のフォルダー内をクリアする必要がある

9 指定する画像のサイズは、最低でも16画素必要である。

追加2013/12/13
10 ファイルのリストは、相対パスでも絶対パスでもよい

11 positive画像に指定した画像をテストした場合、検出できない場合もある
 

 
 

自作辞書の印象だが、誤検出は少ない分、検出できないケースも多い。
 positive辞書に、検出できない状況の画像を登録すればよいが、辞書が爆発することが予測できるので、ある程度妥協が必要である。

0 件のコメント:

コメントを投稿