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 件のコメント:
コメントを投稿