2014-12-31 13 views
5

私はHaar Cascadeをトレーニングして手を検出しようとしています。私は1000のvecファイルを持っています。 私は40のポジティブイメージと600のネガティブイメージを持っています。私は肯定的なイメージと否定的なイメージの両方を落とすことを試みました。Haar Training:エラー(-215)_img.row * _img.cols == vecSize in function

opencv_traincascade -data classifier -data classifier -vec samples.vec -bg negatives.txt 
-numstages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\ -numNeg 600 -w 80 
-h 40 -mode ALL -precalcValBufSize 1024\ -precalcIdxBufSize 1024 

PARAMETERS: 
cascadeDirName: classifier 
vecFileName: samples.vec 
bgFileName: negatives.txt 
numPos: 1000 
numNeg: 1000 
numStages: 20 
precalcValBufSize[Mb] : 256 
precalcIdxBufSize[Mb] : 256 
stageType: BOOST 
featureType: HAAR 
sampleWidth: 24 
sampleHeight: 24 
boostType: GAB 
minHitRate: 0.999 
maxFalseAlarmRate: 0.5 
weightTrimRate: 0.95 
maxDepth: 1 
maxWeakCount: 100 
mode: BASIC 



===== TRAINING 0-stage ===== 
<BEGIN 
OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in get, file /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp, line 157 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp:157: error: (-215) _img.rows * _img.cols == vecSize in function get 

中止(コアダンプ)

私はポジティブ数を下げ、再び、まだ受け取った上で、全体のプロセスをやってみました:私は、次のコマンドを実行すると、私は次のエラーを受け取ります同じエラー。助言がありますか?ところで

:私はでチュートリアルを次のです:http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

+0

エラーが最も低いのは何ですか? –

+0

私は40と100のポジティブを試しました。だから私はエラーを得たことはありません。私は40歳以下で試してみるべきですか? – dylan7

+0

私は20回までそれを取得しなければなりませんでした。 –

答えて

7

エラーは、多数の正または負のサンプルの結果ではないようです。人々は非常に大きなデータセットを訓練します!

上記のパラメータから、samples.vecを形成陽性サンプルの寸法は声明で示されている24×24、であることに気づいたことができます。

sampleWidth: 24 
sampleHeight: 24 

しかしopencv_traincascade関数を呼び出している間ディメンションを80x40として設定しようとします。これを変更してみてください-w 24 -h 24

+0

もう一度見て、私は同様のことが間違っていたと考え始めました。あなたがそれを言った後、私はそれを24に変更しようとしました。どうもありがとうございます! traincascadeがデフォルトとして24 x 24を望む理由はありますか?ちょっと興味があるんだけど。 – dylan7

+0

私はそれがデフォルト値かどうか分からない。おそらく、あなたは "opencv_createsamples"を呼び出して.vecファイルを作成するときにこれらの値を設定します。正のサンプルは、 "opencv_createsamples"コールで指定された幅と高さに再スケーリングされます。 –

+0

ありがとうございます。あなたが気にしないならば、もう1つの質問だけ。私はopencv_createsamplesの歪みプロセスが良くないと言われています。私は、歪みを使用せず、目的のオブジェクトを囲むボックスを含む.datファイルを作成することを選択肢として認識しています。これは正しいです?すべての肯定的なことを通過し、このボックスの寸法をメモするための速い方法がありますか?ありがとうございました。 – dylan7

-1

ありがとう主張は非常に明確である:それはvecSize == _img.rowsが_img.colsを*することを期待しています。私は_imgとvecSizeが何を想定しているのか分からないが、それはあなたの入力データが正しく与えられていないことを意味する。ちょうどあなたのコマンドラインを見て、あなた:

  1. は二回-data classifier -data classifierを書きました。それは問題ではありませんが、それでも問題はありません。
  2. -numPos 1000\ -numNeg 600を書きましたが、40個の陽性画像と600個の陰性画像についてお話ししていますが、代わりにそれらの数字を使用しないでください。

あなたはvecSizeのサイズが1000であるとします。このvecSizeは再び何ですか?

+0

まあ、.vecやベクトルファイルは、createsamples.plと呼ばれるhaarチュートリアルの中で、確かによく知られているスクリプトの出力です。このパールスクリプトは、opencv_createsamplesコマンドを使用します。このスクリプトは、正と負をマージして1000個のvecサンプルを作成します。しかし、さらに検証することで、vecSizeはベクトルサンプルのサイズと信じています。奇妙なのは、80×40のベクトルを指定したときに、320×160の画像が得られるということです。各次元の4の乗数は、すべての入力次元に対して発生します。 – dylan7

+0

したがって、_img.cols x _img.rowsはvecSizeではありません。私は_imgがvecサンプルだと仮定します。これは意味をなさない唯一のものです。このスクリプトやopencv_createsamplesのしくみについて知っていますか?加えて、私はベクトルがtraincascadeに必要な入力であると信じています。お手伝いありがとう。 – dylan7