2017-10-19 5 views
1

Keras의 입력 rgb 이미지를 그레이 스케일로 변환하는 가장 좋은 방법은 정식 답을 원합니다. This answer 아마 그런 것들이 람다를 사용하면 가장 잘 될 것이라고 암시하지만, 그것은 나에게 비효율적이라고 느낍니다. Average Pooling layers이 트릭을 할 수 있어야한다고 생각하지만, 그걸 알아낼 수는 없습니다. 문서에서 누락 된 RGB에서 그레이 스케일 레이어가 있습니까? 꽤 평범한 작업 인 것처럼 보입니다.Keras RGB에서 그레이 스케일

답변

3

컬러 이미지를 그레이 스케일 이미지로 변환하는 몇 가지 공식이 있습니다. 그들은 매우 잘 결정되어 있으며, 밝기를 더 좋게할지, 어둡게할지, 대비를 좋게할지 등을 결정하는 경우가 종종 있습니다.

Three common formulas are here. "광도"공식을 사용합시다.

result = 0.21 R + 0.72 G + 0.07 B 

이것은 람다 레이어에 의해서만 가능합니다. 그리고 그것은 부적절한 것이 아니라 단지 필요한 수학 일뿐입니다.

def converter(x): 

    #x has shape (batch, width, height, channels) 
    return (0.21 * x[:,:,:,:1]) + (0.72 * x[:,:,:,1:2]) + (0.07 * x[:,:,:,-1:]) 

모델이 람다 층을 추가

Lambda(converter) 

를 AveragePooling 길 것으로 보이지만,이 층은 "공간"차원이 아니라 "채널"을 줄이는 것을 의미한다. 이러한 풀링 레이어 중 하나를 채널에 적용하려면 많은 해결 방법과 변형이 필요합니다. converter에 대한

Lambda(lambda x: tf.image.rgb_to_grayscale(x)) 

다른 옵션 : 다시, tensorflow에서 준비 공식을 사용하려는 경우

, 사용자가 제공 한 답변에 따라,이 기능을 지금 람다 레이어를 사용

스테판 Novikov 보낸으로
#perhaps faster? perhaps slower? 
def converter(x): 

    weights = K.constant([[[[0.21 , 0.72 , 0.07]]]]) 
    return K.sum(x*weights, axis=-1,keepdims=True) 

댓글을 달았습니다. 단순히 이미지를 사전 처리하는 것이라면 다른 도구를 사용하여 문제를 피할 수 있습니다.

이 작업에서 그라디언트를 추적하는 것이 중요한 경우 모델 내에서이 작업을 수행하면됩니다.

+0

나는이 대답을 좋아하지만 skimage.color.rgb2grey와 같은 광도 계산의 기존 구현을 고려해 볼 가치가있다. - http://scikit-image.org/docs/0.12.x/api/skimage.color .html –

+0

전처리에 대해서만 이야기하는 경우 동의합니다. 모델 조작의 경우, "tensors"는 keras tensors 또는 tensoflow tensors로 간주하지만 그렇지 않은 경우 그래디언트가 손실됩니다 (그래디언트가 중요한 경우). –