2017-04-08 2 views
0

나는 flow_from_directory를 사용하여 디렉토리에서 사진을 업로드하고 있습니다.Keras와 ImageGenerator가 검은 색 이미지를 출력합니다.

from keras.preprocessing.image import ImageDataGenerator 

train_datagen = ImageDataGenerator(rescale=1./255) 


train_generator = train_datagen.flow_from_directory(
          'Dataset/train', 
          target_size=(image_rows, image_cols), 
          batch_size=batch_size, 
          color_mode='grayscale', 
          class_mode='categorical', 
          classes=classes) 

가 그럼 난 이렇게로드 된 이미지를 확인하고 있습니다 :
는 그것은 다음과 같이 이루어집니다

import matplotlib.pyplot as plt 

p = train_generator.next() 
plt.imshow(p[0][0][:,:,0], cmap='gray') 
plt.show() 

enter image description here

좋아,하지만 난 tensorflow에 대한 Udacity의 과정을 지켜 이해 한 평균을 빼고 표준 편차로 나눔으로써 입력 데이터를 중앙에 배치하는 것이 매우 유용하다는 것을 알았습니다. 그들의 NumPy와 배열 I 넣을 검은있어 모든 이미지 몇 가지 이유를 들어
enter image description here

:
이 그래서 내가 여기

train_datagen = ImageDataGenerator(samplewise_center=True, 
            samplewise_std_normalization=True, 
            rescale=1./255) 

하고

train_datagen = ImageDataGenerator(rescale=1./255) 

을 수정 한 출력입니다 0 만입니다.

내 질문 :
왜? 당신이 color_mode = grayscale을 설정 때문에

+0

두 가지 질문 : 1. 이미지의 크기는 얼마입니까? 2. 3 채널 이미지 인 경우 모든 채널이 동일합니까 (강하게 의심됩니다)? –

+0

크기는 64 * 160이며 이미지는 회색조이며 채널은 1 개입니다. flow_from_directory의 Colormode도 '그레이 스케일'로 설정됩니다. –

답변

1

, 이미지 크기 (here 참조) 64 x 160 x 1 될 것입니다. 샘플 중심 센터링을 수행하면 채널 축을 따라 수행됩니다 (here 참조). 평균은 채널 축을 따라 계산되므로 평균 행렬은 이미지와 동일합니다. 다음과 같이 파이썬이를 테스트 할 수 있습니다 :이 후

img = np.random.randint(0,10,(5,5,1)) 
print np.squeeze(np.mean(img, axis=2, keepdims=True)) # channels last 
img -= np.mean(img, axis=2, keepdims=True) 
print np.squeeze(img) # should be all zeros 

당신이 0으로 분열을 방지하기 위해 소수 (1e-7) 각 픽셀을 나누어 뿐이다 샘플 현명한 평균 뺄셈을 수행. 이것은 여전히 ​​모든 요소를 ​​img에 0으로 유지합니다.

이 문제를 해결하기 위해 수행 할 수있는 작업은 무엇입니까?

샘플 기준 정규화를 수행하는 대신 전체 데이터 집합에 대해 수행하는 것이 좋습니다. featurewise_centerfeaturewise_std_normalization을 true로 설정하여이 작업을 수행 할 수 있습니다.

관련 문제