web-dev-qa-db-ja.com

opencv、matlabのトレーニングとテストのバッグ

特定のデータセットの分類を行うために、SIFT機能を使用してopencvにBag OfWordsを実装しています。これまでのところ、私は記述子をクラスター化して語彙を生成するためにAppleを行ってきました。ご存知のように、SVMをトレーニングする必要があります... 。主要な問題は、実装の背後にある概念です。これらは私の質問です。

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

2-SVMを実装する方法は? openCVで使用されている関数を知っていますが、どうすればよいですか?

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

ありがとうございました

20
Mario

ローカル機能

SIFTを使用する場合、通常はローカル機能を抽出する必要があります。それはどう言う意味ですか?あなたはあなたの画像を持っており、この画像からあなたはローカル特徴ベクトルを抽出するポイントを見つけるでしょう。局所特徴ベクトルは、それが抽出された画像領域の視覚情報を記述する数値からなる単なるベクトルです。画像Aから抽出できる局所特徴ベクトルの数は、画像Bから抽出できる特徴ベクトルの数と同じである必要はありませんが、局所特徴ベクトルの数成分(つまり、その次元)は常にです。同じ。

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

視覚的な言葉の袋

これが(非常に)単純化されたBoWアルゴリズムです:

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

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

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

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

画像分類

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

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

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

基本的には、 ARFFファイル形式 に従ってグローバル特徴ベクトルと対応する画像ラベルをフォーマットするだけで済みます。これは基本的に、グローバル特徴ベクトルのCSVとそれに続く画像ラベルです。

24
Alceu Costa

これは、OpenCVv2.2を使用して分類するためのBagofWordsモデルを紹介する非常に優れた記事です。 http://app-solut.com/blog/2011/07/the-bag-of-words-model-in-opencv-2-2/

画像の分類にNormalBayesClassifierを使用することに関するフォローアップ記事。 http://app-solut.com/blog/2011/07/using-the-normal-bayes-classifier-for-image-categorization-in-opencv/

Caltech-256データセットの約200行のコードデモも利用できます。 http://code.google.com/p/open-cv-bow-demo/downloads/detail?name=bowdemo.tar.gz&can=2&q=

画像分類のプロセスを直感的に理解するための方法は次のとおりです。 http://www.robots.ox.ac.uk/~vgg/share/practical-image-classification.htm

多くの質問を明確にするのに本当に役立ちました。私はそれが誰かを助けることを願っています。 :)

11
sagunms