まず第一に、これはここでの最初の質問なので、明確に説明できることを願っています.
私の目標は、画像内のさまざまなクラスの交通標識を検出することです。そのために、次の手順に従ってバイナリ SVM をトレーニングしました。
- 最初に、リンクにあるような切り抜いた交通標識のデータベースを取得しました。さまざまなクラス(禁止、危険など)、および否定的なイメージを考慮しました。それらはすべて 40x40 ピクセルにスケーリングされています。
http://i.imgur.com/Hm9YyZT.jpg
- HOG を機能として使用して、各クラス (1 対すべて) の線形 SVM モデルをトレーニングしました。各画像は、1728 次元の特徴で記述されます。(3 つのイメージ プレーンすべてに 3 つの特徴ベクトルを追加します)。パラメータ C を設定するために相互検証を行い、これまで見たことのない 40x40 画像でテストしたところ、非常に正確な結果が得られました (すべてのクラスで F1 スコアが 0.9 を超えています)。トレーニングとテストには libsvm を使用しました。
ここで、さまざまな画像スケールでウィンドウをスライドさせて、完全な道路画像で標識を検出したいと考えています。私が直面している問題は、(OpenCV の DetectMultiScale のように) 私のためにそれを実行できる関数が見つからなかったことです。私の解決策は非常に遅く、初歩的です (トリプル for ループを実行しているだけで、それぞれにスケール 連続した重複する 40x40 画像をトリミングし、HOG 機能を取得して、それぞれにsvmpredictを適用します)。
誰かがそれを行うためのより速い方法を見つけるための手がかりを教えてもらえますか? 入力画像全体の HOG 特徴ベクトルを取得し、そのベクトルを行列に並べ替えて、各行が各 40x40 ウィンドウに対応する特徴を持つようにすることも考えましたが、簡単な方法を見つけることができませんでした。
ありがとう、