2017-11-11 12 views
0

내 이미지를 훈련을 위해 신경망에 보낼 작은 창으로 나누고 싶습니다 (예 : 얼굴 감지기 교육). 나는 정확히 내가 필요로하는 것처럼 보이는 Tensorflow에서 tf.extract_image_patches 메서드를 발견했다. This question은 그것이 무엇을 설명합니다.tf.extract_image_patches 메소드는 무엇을 의미합니까?

이 예는 주어진 (1x10x10x1) (번호 순서 100 통해 1)의 입력을 표시하고있다 ksize(1, 3, 3, 1) (및 strides(1, 5, 5, 1)).

[[[[ 1 2 3 11 12 13 21 22 23] 
    [ 6 7 8 16 17 18 26 27 28]] 

    [[51 52 53 61 62 63 71 72 73] 
    [56 57 58 66 67 68 76 77 78]]]] 

그러나 (이 크기 3x3N 패치/창이다, 그래서 모양 (Nx3x3x1)의) 나는이 같은 창을 기대할 : 출력은 이것이다

[[[1, 2, 3] 
    [11, 12, 13] 
    [21, 22, 23]] 
    ... 

는 왜 모두를 1D에 저장된 패치 값은? 이 방법이 위에서 설명한 목적을위한 것이 아니며 교육용 배치를 준비하는 데 사용할 수 없습니까? 나는 또한 패치를 추출하는 또 다른 방법을 찾았습니다. sklearn.feature_extraction.image.extract_patches_2d이 하나가 실제로 기대했던대로 작동합니다. 이 두 가지 방법이 똑같은 일을하지 않는 것처럼 이해해야합니까?

답변

0

이 함수는 다른 텐서 (다차원 배열)를 반환합니다.

첫째, tf.extract_image_patches 문서를 읽

결과 :

텐서를. 이미지와 같은 유형입니다. 모양이 [batch, out_rows, out_cols, ksize_rows * ksize_cols * depth] 인 4-D 텐서 이미지 "깊이"차원으로 벡터화 된 패치가 포함 된 텐서. 참고 out_rowsout_cols은 출력 패치 의 크기입니다.

기본적으로,이 [1, 2, 3][11, 12, 13], [21, 22, 23] 창을 평평하게하는, 또는 는 "깊이"차원에 갇힌 것을 말한다. out_rowsout_colsstrides 인수 (이 경우 strides=[1, 5, 5, 1])와 padding ('VALID')에서 계산됩니다. 결과적으로 출력 모양은 (1, 2, 2, 9)입니다. 즉

: 당신이 선택을 통해 액세스 할 수 있도록

  • strides
  • ksizes이 깊이를 출력 텐서는 모든 개별 윈도우를 포함한다는 것을

주를 변경하는 공간 크기를 변경 .한편


, sklearn.feature_extraction.image.extract_patches_2d :

결과 :

patches : 어레이 형상 = (n_patches, patch_height, patch_width) 또는 (n_patches, patch_height, patch_width, n_channels)n_patches 어느 되는 이미지로부터 추출 된 패치의 컬렉션 max_patches 또는 패치 수는 일 수 있습니다.

이것은 정확히 사용자가 설명하는 것입니다. 각 창은 전체 공간 치수 patch_height, patch_width을 사용합니다. 여기서 결과 모양은 에 따라 다르며 스트라이딩 및 패딩은 이 지원되지 않으며이며 첫 번째 차원은 총 패치 수로 계산됩니다.

+0

그래서 tensorflow 방법은 무엇입니까? 나는 "패치 추출"이 sklearn 메서드가하는 것과 똑같은 것이라고 생각하고 그것을 사용 하겠지만 스트라이밍이 필요합니다 ... –