ここ数日、車のカスケード型分類器を生成するために createsamples メソッドと traincascade メソッドを調査してきました。私のように、多くの人は、すべてのエラーや問題を回避する方法について手がかりを持っていないことに気付いているので、この投稿では、私の手順と推論、および私の問題をできる限り説明します.
もう少しコンテキストを与えるために、過去にHaar機能を備えたブースト分類器を自分で実装しましたが、メソッドがカスケードされていないため、非常に遅くなりました. ただし、カスケード分類の背後にある方法についてはよく知っています。
問題: 画像上の車の分類
550 個のポジティブ ウィンドウ (車を含む 100w x 40h の画像) と 500 個のネガティブ ウィンドウ (車を含まない 100w x 40h の画像) を提供するデータセット (一連の画像) をダウンロードし、このデータを使用してカスケード分類器をトレーニングするつもりです。
ステップ 1 - サンプルを作成するための .dat ファイルを生成する
createsamples アプリケーションには、ポジティブ サンプルとネガティブ サンプルに関する情報を含む .dat ファイルが必要です。2 つの .dat ファイルを生成しました。1 つは正のウィンドウ、もう 1 つは負のウィンドウです。
positive.dat 構造例:
CarData\TrainImages\POS\pos-0.pgm 1 0 0 100 40
CarData\TrainImages\POS\pos-1.pgm 1 0 0 100 40 (and more 548 lines of this)
数値 1 は、画像全体に 1 つのオブジェクトがあることを示し、次の 4 つの整数は、オブジェクト (この例では画像全体) を持つ境界ボックスを表します。
negative.dat 構造例:
CarData\TrainImages\NEG\neg-0.pgm
CarData\TrainImages\NEG\neg-1.pgm(and more 498 lines of this)
ステップ 2 - .vec ファイルを生成する
これを行うには、次のコマンド ラインで createsamples.exe アプリケーションを使用します。
: createsamples.exe -info path/positive.dat -vec samples.vec -bg negative.dat -w 100 -h 40 -num 550
これまでのところ、samples.vec ファイルは問題なく生成されています。
ステップ 3 - カスケード分類子をトレーニングする
これを行うには、次のコマンド ラインで traincascade アプリケーションを使用します。
: traincascade.exe -data CarDetector -vec path/samples.vec -bg path/negative.dat -numStages 15 -stageType BOOST -featureType HAAR -w 100 -h 40 -bt DAB -maxDepth 2 -mode ALL
パラメータの説明:
numStages(15): 分類子に 15 の決定段階を持たせることを意味します。
stageType(BOOST): 各ステージはブーストされた分類器です
featureType(HAAR): 分類に haar 機能を使用します。HOG、LBPもございます。
w(100): 検出窓幅
h(40): 検出ウィンドウの高さ
bt(DAB): Discrete Adaboost (logitboost などではなく) を使用することを意味します
maxDepth(2): 各弱分類器が分類に 3 つの機能を使用することを意味します
-mode(ALL): さまざまな haar 機能をすべて使用することを意味すると思います。
エラー
コマンドを実行すると、エラー メッセージが表示されずにプログラムがすぐにクラッシュするため、何が間違っているのかまったくわかりません。これは、このアプリケーションを使用しようとしている多くの人々が共有する問題であるため、この問題に精通した誰かが私の手順の問題を特定してくれることを願っています.
よろしく!
重要 - 編集 2:
より多くの情報を取得できるかどうかを確認するために、非推奨のアプリ haartraining を使用して分類器をトレーニングしようとしましたが、次のようになります。