8

静止画から車両(車、バイクなど)を認識したい。SURFを使用して有用なキーポイント記述子を取得し、MLP(多層パーセプトロン)ニューラルネットワークをトレーニングすることを考えていました。ただし、ニューラルネットワークへの入力と出力がわからないため、画像のどの部分に車両が配置されているか(おそらくその周りに描かれた長方形)を特定できます。SURFは、記述子とともに画像内の有用なキーポイントを返すことができることを知っています(私はこれを行いました)。キーポイントには角度があり、各キーポイントは64または128の長さのベクトルに対応します記述子として。私が知らないのは、これらのキーポイントが正確に何であるか、そしてそれらをニューラルネットワークへの入力としてどのように使用できるかということです。

私はPythonでOpenCVを使用しています。

SURFやその他の特徴抽出方法を使用するのは初めてです。これに関連するどんな助けも非常に良いでしょう。

4

3 に答える 3

8

サーフ機能を使用する場合、それは、サーフ構成に応じて、フロートセットオフベクトル[128]または[64]を意味し、ニューラルネットは次のように設定されます。

-モデルを使用してデータベースを作成します。

-bikes
-cars
-autobus
-truck

-車からモデルを外した異なるモデルの写真10枚、自転車からモデルを外した異なるモデルの写真10枚、トラックからモデルを外した異なるモデルの写真10枚など、各タイプのオブジェクトの異なる写真を撮ります。各オブジェクトクラスの写真ごとに、サーフ特徴ベクトルを抽出します。

-各タイプのオブジェクトは、このようにニューラルネット内のオブジェクトの1つのオフクラスを表します。

-car   ;object class 1 =binary representaation in 4 bits= 0 0 0 1
-bikes ;obejct class 2 =binary representaation in 4 bits= 0 0 1 0 
-truck ;obejct class 3 =binary representaation in 4 bits= 0 0 1 1
-ball  ;obejct class 4 =binary representaation in 4 bits= 0 1 0 0

-バイナリレペセンタシオンの各ビットは、ネットワークの出力層の1つのニューロンに対応し、認識されるオブジェクトの1つのクラスを表します。

これで、ニューラルネットワークの構成は、特徴ベクトルのサイズと、この方法で認識したいオブジェクトのタイプの数に基づきます。

入力層のニューロンの数;構成して使用したオフサーフ特徴ベクトルのサイズに応じて64または128

ニューラルネットの出力層のニューロンの数は、この例で認識したいオブジェクトのクラスの数になります4

各ニューロンに必要な活性化関数は、シグモイド関数またはtanh関数(http://www.learnartificialneuralnetworks.com/)です。これは、異常な機能または別のバイナリローカル機能記述子(Brisk、 ORB、BRief)次に、ステップ関数o sigm関数のように、各ニューロンにバイナリ活性化関数を使用します。

ネットワークのトレーニングに使用されるアルゴリズムはバックプロパゲーションです

続行する前に、ニューラルネットワークをトレーニングするためのデータセットを設定して準備する必要があります

-all feature vector extracted from picture belong a car will be label or asociated to class 1               
-all feature vector extracted from picture belong a bike will be label or asociated to class 2
-all feature vector extracted from picture belong a truk will be label or asociated to class 3
-all feature vector extracted from picture belong a ball will be label or asociated to class 4

この例では、出力層に4つのニューロンがあり、入力層に1280r64のニューロンがあります。

-認識モードでのニューラルネットの出力は、この4つのニューロンの中で最も高い値を持つニューロンになります。

ニューラルネットの出力は、入力ベクトルが1つのクラスのオブジェクトに属する確率であるため、トレーニングフェーズを開始する前に、データセット内のすべての特徴に対して[0,1]の間隔で正規化を使用する必要があります。データセット内。

ネットワークをトレーニングするためのデータセットは、次のように分割する必要があります。

-70% off the data used to train
-15% off the data used to validate the network arquitecture (number of neurons in the hidden layyer)
-15% off the data used to test the final network

ニューラルネットワークをトレーニングする場合、停止基準は認識率であり、85〜90%に近い場合です。

なぜsvmマシンではなくニューラルネットを使用するのか、svmマシンは正常に動作しますが、このような線形分類の問題がない場合、または異なるオブジェクトクラスやオブジェクトのタイプが多数ある場合、この不足は最高の分離クラスマップを作成できません。認識フェーズの結果を正確に

ニューラルネットワーク理論について読んで、それらがどのように機能するかを理解することをお勧めします

http://link.springer.com/chapter/10.1007%2F11578079_10

opencvには、ニューラルネットmlpモジュールへの機械学習クラスがあります

これがあなたを助けることができることを願っています

于 2013-02-24T16:39:49.857 に答える
2

私の提案は、ニューラルネットワークの代わりにBOWを観察することです。ここで、オブジェクト分類(最初の部分2番目の部分)にBagOfWordsモデルでSURFを使用する例を参照してください。分類のパフォーマンスを向上させるために、単純ベイズ分類器をSVMに置き換えてみることができます。また、作者は良いソースコードの例を提供しました。始めるのに良いポイントだと思います。

于 2013-01-18T16:46:25.197 に答える
2

検出されたオブジェクトを分離する簡単な方法は、そのような入力画像で輪郭検出器を実行することです。

その後、ニューラルネットワークによって認識される各特徴ベクトルに関連付けられた各キーポイントからのx、y座標を使用し、これらのキーポイントの数が各オブジェクトの各輪郭の横にあることを確認できます。

同時に、たとえば2つのタクシーがある場合、正しい車の検出を検証するためのしきい値を設定できます。2つの輪郭が各車に属し、その後、各輪郭にキーポニットがいくつあるかを確認します。

  • 輪郭所属タクシー1には20個のキーポニットがあります
  • 輪郭はタクシー1に属し、内部に5つの主要なポニットがあります

認識されたオブジェクトとしてタクシー1または車1として与えることができます

検証オブジェクトが認識され、その輪郭が表示されたら、オブジェクトを閉じたバウディングボックスを計算できます。

それを行う別の方法は、各トレーニング画像が各オブジェクトに属する輪郭を抽出し、その境界ボックスを計算することです。これを純粋な画像のように使用して特徴を抽出し、トレーニングセットですべての画像にします。

于 2013-03-01T10:58:54.013 に答える