6

私は、3340枚のポジティブ画像と1224枚のネガティブ画像を使用して、OpenCVで歩行者用のハールのような分類器をトレーニングしようとしています。(.txtファイルではネガティブイメージ名、つまりネガティブ(1).bmpを保持し、txtファイルではポジティブ、つまりpicture(1).bmp 1 0 064128を保持します。実際のポジティブな例はすでに歩行者なので、画像ごとに1つのポジティブサンプルを指定するだけで済みます)。

トレーニングプロセス中のある時点で停止し、次のように表示されます。

「Opencvエラー:不明な関数でアサーションが失敗しました(elements_read == 1)、ファイルc:\ path \ cvhaartraining.cpp、1858行目」

これを引き起こしているものについてのアイデアはありますか?

4

1 に答える 1

12

この問題は、2012 年 6 月に OpenCV DevZone サイトでユーティリティの作成者によって回答されました。

マリアを引用するには:

問題は、vec ファイルのサンプル数が、コマンド ライン -numPos 979 で渡したものとまったく同じであることです。トレーニング アプリケーションは、vec ファイルのすべてのサンプルを使用して 0 段階をトレーニングし、次の新しいポジティブ サンプルを取得できません。 vec-fileが終わったので、ステージトレーニング。traincascade のバグは、このような場合に assert() があったことですが、ユーザーにエラー メッセージを表示して例外をスローする必要があります。r8913 で修正されました。-numPose は、各ステージのトレーニングに使用されるサンプル カウントです。一部の既に使用されているサンプルは、前の各ステージでフィルタリングできます (つまり、バックグラウンドとして認識されます) が、各ステージで (1 - minHitRate) * numPose を超えることはできません。そのため、vec ファイルには >= (numPose + (numStages-1) * (1 - minHitRate) * numPose) + S が含まれている必要があります。ここで、S は vec ファイルからのサンプル数であり、すぐにバックグラウンドとして認識できます。

それは私のために働いた。私も同じ問題を抱えていました。HAAR トレーニングに関する有名なチュートリアルに従っていましたが、-npos 7000 -nneg 2973 を使用して新しいトレーニング ユーティリティを試してみたかったのです。

だから私は次の計算をしました:

vec ファイルには >= (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S を含める必要があります

7000 >= (数値 + (20-1) * (1 - 0.999) * 数値) + 2973

(7000 - 2973)/(1 + 19*0.001) >= 数値

数値 <= 4027/1.019

数値 <= 3951 ~~ 3950

と使用:

-npos 3950 -nneg 2973

できます。また、他の人も numPos を減らすことに成功していることに気付きました: here

于 2013-01-27T00:52:02.617 に答える