3

이미지에서 HOG 피쳐를 추출하여 분류 자 ​​(AdaBoost.SAMME, 특히 scikit-learn : multiclass Adaboost in scikit-learn ensemble 사용)에 넣을 수 있습니다. HOG 특징 배열을 다루는 방법 scikit-learn에서 분류에 사용 하시겠습니까?

나는 배열과 같은 shape = [n_samples, n_features]

그러나 이미지에서 HOG 특징을 추출의 출력이 1 차원 배열의로 이미지를 변환해야합니다, 그렇게합니다.

enter image description here

이의 첫 번째 9 개 행을 보자 이것은 전체 출력 것을 가정

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을 확인하면,이 같은 배열입니다 : 이 관련 부분 내 코드입니다 hog 함수에서 가져 왔으며 HOG 기능이있는이 이미지가 내 훈련 데이터 세트의 첫 번째 이미지라는 것을 알 수 있습니다.

그럼 내가 천 개의 훈련 이미지를 가지고 있다면이 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 값 행은 단일 기능으로 간주됩니까? 아니면 틀린가? 내가 이해에서 , 훈련 샘플이 형식을 준수해야한다 : 당신이 바르게 말한대로 scikit를 들어

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

답변

4

는, 데이터 형태 [n_samples, n_features]의 행렬의 형태로 표현되는 분류를 배운다. 샘플 색인은 필요하지 않습니다 (다른 목적을 위해 필요하다면 scikit에 전달하려는 행렬에 넣지 마십시오).

귀하의 예를 촬영 한 샘플이 샘플의 파이썬 목록입니다

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

될 것이다. 여기에는 귀하의 기능 목록 인 하나의 샘플이 들어 있습니다. 그러나 숫자 데이터가 많은 경우 연속적으로 메모리에 유지해야합니다. 이는 numpy.ndarray을 사용하여 수행됩니다. 하나의 샘플 행렬을 배열로 변환하는 것은 쉽습니다.

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의 역할을하고, 분류기에 공급 될 수있다.

+0

좋아요. 혼란 스럽네요. * n_samples * 값은 * [n_samples, n_features] * 모양을 유지해야합니까? 당신이 만든 배열은 오직 * [n_features] * 인 것처럼 보입니다. 내가 천 개의 훈련 이미지를 가지고 있다면, 분류자는 * [1000, samples] *를 취할 것인가? 아니면 간단히 * [샘플] *? – user961627

+0

또한 * sample_array *는 하나의 샘플 이미지에 대한 행렬이지만 사용자는이를 "기능 목록"이라고도합니다. 하지만 ** ** HOG 기술자 만 사용하고 있으며 다른 기능은 없습니다.그래서 전체 값 배열을 가지고 있음에도 불구하고 이것은 HOG 기능으로 받아 들여질 것입니다. 맞습니까? 그래서 HOG와는 다른 기능을 사용한다면 np.array ([HOG 기능 세트], [두 번째 기능 유형 세트]))와 같은 샘플이 표시됩니까? 나는 컴퓨터 비전에 익숙하지 않으므로 배열에 – user961627

+2

이라는 용어에 익숙하지 않습니다. 3 개의 이미지에 대한 설명자를 가진 샘플을 호출했습니다. 각 이미지는 한 행으로 표시됩니다. 각 이미지는 샘플입니다. 사용하는 이미지의 수는 n_samples입니다. 이미지 당 HOG 피처의 수는 n_features입니다. "n_samples"와 "n_features"는 입력의 개수와 각 입력의 크기를 각각 나타냅니다. – eickenberg

관련 문제