3

AdaBoost.SAMME画像から HOG 特徴を抽出して、分類器 (特に、scikit-learn: multiclass Adaboost in scikit-learn ensembleを使用)に通すことができるようにしたいと考えています。

そのためには、画像を配列のようなものに変換する必要がありますshape = [n_samples, n_features]

しかし、画像から HOG 特徴を抽出した出力は 1D 配列です。これは私のコードの関連部分です:

tree = io.imread('C:\\Users\\app\\Pictures\\treephoto1.jpg')
type(tree)
print tree.shape, tree.dtype

graytree = color.rgb2gray(tree)
ge = filter.canny(graytree)
fd, hog_image = hog(ge, orientations=8, pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1), visualise=True)

を確認するfdと、次のような配列です。

ここに画像の説明を入力

最初の 9 行を取り、これがhog関数からの完全な出力であり、HOG 特徴を取得したこの画像がトレーニング データセットの最初の画像であると仮定します。

次に、1000 のトレーニング画像があるとすると、この HOG 情報はどのように表されX = [n_samples, n_features]ますか?

X以下の行は、分類器への入力として使用できる最初の行になりますか?

[1, [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]

この HOG 値の行全体が 1 つの特徴と見なされますか? それともこれは間違っていますか?私が理解していることから、トレーニング サンプルは次の形式に準拠する必要があります。

[sample_index, feature_1, feature_2, feature_3, ..., feature_x]
4

1 に答える 1

5

[n_samples, n_features]あなたが正しく言うように、scikit Learn Classifiers の場合、データは shape の行列の形式で表されます。サンプル インデックスは必要ありません (他の目的で必要な場合は、scikit Learn に渡す予定のマトリックスに入れないでください)。

あなたの例を挙げると、1つのサンプルは

samples = [[0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]

これはサンプルの python リストです。これには、機能のリストである 1 つのサンプルが含まれています。ただし、大量の数値データがある場合は、連続してメモリに保持することが不可欠です。これはnumpy.ndarrays を使用して行われます。1 つのサンプル マトリックスを配列に変換するのは、次のように簡単です。

import numpy as np
sample_array = np.array(samples)

いくつかのサンプルに移りましょう。同じものを何度かコピーしますが、もちろん違います。繰り返しますが、これは実際には配列でなければならないので、

samples =  np.array(
               [[0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149],
               [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149],
               [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]])

このサンプル マトリックスは分類器に入力できます。通常は の役割を果たしXます。

于 2014-04-10T20:15:29.330 に答える