----------【2018.09.07 更新】---
もし、この記事を見て、コードを GitHub からダウンロードして手順を試したい場合は、《SVM オブジェクト分類と位置検出》シリーズの 6 つの記事をすべて注意深く読むことを強くお勧めします。内容は多くありませんが、アルゴリズムとコードの理解に大いに役立ちます。
----------【2018.01.22 更新】---- 次元削減アルゴリズム -----
t-SNE 次元削減アルゴリズムについての記事を読みましたが、PCA よりも効果が良いとされていますので、皆さんも試してみてください。
--------【2017.12.22 更新】---- 手順の説明 ------
私が最も良いと思う手順をまとめます。
-
HoG で特徴を抽出します。
-
PCA で特徴を次元削減し、PSO でパラメータ C と gamma を最適化します。次元削減は PSO の実行速度を高速化するためであり、そうでないと非常に遅くなりますが、分類の効果が低下します。
-
最初のステップで得た特徴と 2 番目のステップで得たパラメータを使用して、初期 SVM モデルをトレーニングします。
-
Hard Negative Mining で SVM モデルを最適化します。
-
スライディングウィンドウ検出を行い、最後に NMS ボックスリグレッションを行います。
現在、正例は 2700、負例は 2700 です。テストセットには 1200 の負例と 700 の正例があります。
** 最新のコードの GitHub リンク:** https://github.com/HansRen1024/SVM-classification-localization
最近、伝統的な方法でのオブジェクト分類を研究しています。使用している方法は HoG + SVM ですが、分類の正確性はあまり高くありません。私の経験を書きます。
まず、原理を具体的には理解していません。インターネット上の情報が多すぎるため、まずは大まかに理解してからこの記事を読んでください。
ImageNet のカップデータセット: https://pan.baidu.com/s/18ho4UI50x4YP6lkrjPm7Kw
一、HoG 特徴数の計算#
まず、2 つのパラメータについて説明します:
-
セルのピクセル数
-
ブロックのセル数
HoG は画像から特徴を抽出するためのスライディングウィンドウです。ブロックはこのウィンドウです。ブロックにはセルがあり、セルで特徴を抽出します。ブロック内のすべてのセルの特徴を統合すると、そのブロックの特徴になります。すべてのブロックの特徴を統合すると、画像全体の特徴になります。
HoG は、セル内で特徴を抽出する際に角度で理解できます。通常、9 つのグループに分けられ、1 つのグループには 40 度あります。9 つのグループはそれぞれ 1 つの特徴値を表します。それでは、画像の特徴数を計算できます。
300 × 600 の画像の場合、1 つのセルのピクセル数は 15 × 15 で定義されており、1 つのブロックには 2 × 2 つのセルがあります。画像全体には 10 × 20 のブロックがあります。
1 つのセル:9 つの特徴
1 つのブロック:4 × 9 = 36 の特徴
画像全体:10 × 20 × 36 = 3600 の特徴
二、説明#
HoG に直接画像を投入すると、背景などの要因が最終的な特徴抽出に大きな悪影響を与えます。したがって、私が提供する特徴抽出コードには 2 つの部分が含まれています。1 つは xml ファイルの bbox 情報に基づいてオブジェクトを切り取り、特徴を抽出する部分です。もう 1 つは画像全体に対して直接特徴を抽出する部分です。最終的な特徴の数は入力画像のサイズに依存するため、切り取られた画像と全体の画像を同じサイズにリサイズする必要があります。詳細はコードのコメントを参照してください。
パスの説明:
./train/positive # オブジェクトを切り取る必要のあるトレーニングセットのポジティブ
./test/positive # オブジェクトを切り取る必要のあるテストセットのポジティブ
./train/positive_rest # オブジェクトを切り取る必要のないトレーニングセットのポジティブ
./train/negative # オブジェクトを持たないトレーニングセットのネガティブ
./test/negative # オブジェクトを持たないテストセットのネガティブ
後書き#
私は ILSVRC から画像を取得しました。トレーニングセットは 8000 枚以上で、正例と負例は半々です。テストセットは 2000 枚以上の画像で、正例と負例は半々です。その後、PCA を行いましたが、正確性には影響しませんでしたが、モデルの頑健性を向上させました。次の記事では、PCA を追加したコードを公開します。PCA を行う主な目的は、後で PSO を使用して最適化された SVM パラメータ C と gamma を求めるために特徴を次元削減する必要があるためです。そうしないと、計算量が非常に大きくなります。