単語の袋のトレーニングとテスト opencv、matlab 質問する

単語の袋のトレーニングとテスト opencv、matlab 質問する

特定のデータセットの分類を行うために、SIFT 機能を使用して、OpenCV で Bag Of Words を実装しています。これまで、記述子をクラスタリングして語彙を生成するために Apple を使ってきました。SVM をトレーニングする必要があることはわかっていますが、いくつか疑問があり、本当に混乱しています。主な問題は実装の背後にある概念です。以下が私の疑問です。

1- 特徴を抽出して語彙を作成する場合、すべてのオブジェクト (たとえば 5 つのオブジェクト) の特徴を抽出して 1 つのファイルに入れて、すべての単語を含む 1 つの語彙ファイルにすべてを作成しますか? また、後で分類を行うときにそれらをどのように分離しますか?

2- SVM を実装するにはどうすればいいですか? OpenCV で使用される関数はわかっていますが、どのように実装するのでしょうか?

3- MATLABでSVMトレーニングの実装を行うことはできますが、作業のガイドとなるコードはありますか?Andrea Vedaldiが使用したコードを見たことがあります。ここしかし、彼は毎回 1 つのクラスのみで作業しており、演習で使用している .mat ファイルの作成方法を示していないという別の問題があります。私が見つけた他のすべての実装では、SVM を使用していません。この点についても指導していただけますか。

ありがとう

ベストアンサー1

地域の特徴

SIFT を使用する場合、通常はローカル フィーチャを抽出します。これはどういう意味でしょうか。画像があり、この画像からローカル フィーチャ ベクトルを抽出するポイントを見つけます。ローカル フィーチャ ベクトルは、抽出元の画像領域の視覚情報を表す数値で構成されたベクトルです。画像 A から抽出できるローカル フィーチャ ベクトルの数は、画像 B から抽出できるフィーチャ ベクトルの数と同じである必要はありませんが、ローカル フィーチャ ベクトルのコンポーネント数 (つまり、その次元数) は常に同じです。

さて、ローカル特徴ベクトルを使用して画像を分類する場合、問題が発生します。従来の画像分類では、各画像はグローバル特徴ベクトルによって記述されます。これは、機械学習のコンテキストでは、数値属性のセットとして見ることができます。ただし、ローカル特徴ベクトルのセットを抽出しても、画像分類に必要な各画像のグローバル表現は得られません。この問題を解決するために使用できる手法は、バッグ オブ ワード (BoW) とも呼ばれるバッグ オブ ビジュアル ワードです。

視覚的な言葉の袋

以下は(非常に)簡略化された BoW アルゴリズムです。

  1. 画像セットから SIFT ローカル特徴ベクトルを抽出します。

  2. これらのローカル特徴ベクトルをすべて 1 つのセットにまとめます。この時点では、各ローカル特徴ベクトルがどの画像から抽出されたかを保存する必要さえありません。

  3. 重心座標を見つけて各重心に ID を割り当てるために、ローカル特徴ベクトルのセットにクラスタリング アルゴリズム (例: k-means) を適用します。この重心のセットが語彙になります。

  4. グローバル特徴ベクトルは、各画像で各重心が何回発生したかをカウントするヒストグラムになります。ヒストグラムを計算するには、各ローカル特徴ベクトルの最も近い重心を見つけます。

画像分類

ここでは、あなたの問題が次のとおりであると想定しています:

入力として、ラベル付き画像のセットと、外観に基づいてラベルを割り当てたいラベルなし画像のセットがあります。問題が風景写真を分類することだとします。画像ラベルは、たとえば「山」、「ビーチ」、「森林」などになります。

各画像から抽出されたグローバル特徴ベクトル(つまり、視覚的な単語の集まり)は、数値属性のセットとして見ることができます。各画像の視覚的特徴を表す数値属性のセットと、それに対応する画像ラベルは、分類器のトレーニングに使用できます。たとえば、次のようなデータマイニングソフトウェアを使用できます。ウェカは、SMO と呼ばれる SVM の実装を備えており、問題を解決します。

基本的には、グローバル特徴ベクトルとそれに対応する画像ラベルを、ARFF ファイル形式これは基本的に、グローバル特徴ベクトルとそれに続く画像ラベルの CSV です。

おすすめ記事