2017-11-28 24 views
-1

현재 전체 길쌈 네트워크를 사용하여 각 픽셀을 오브젝트 또는 배경으로 분류하는 keras 모델이 있습니다. 내가 2 클래스 (개체 또는 배경)로 출력 레이어 및 binary_crossentropy 손실 Sigmoid 정품 인증을 사용하고 있습니다.Keras : 이미지 세그먼트 화시 void 라벨링 된 픽셀

그러나 몇몇 이미지의 경우 픽셀의 어떤 클래스가 속한 것인지 확신 할 수 없으므로 이러한 픽셀을 void로 레이블을 지정하여 네트워크 가중치가 이러한 픽셀에 대한 예측을 기반으로 업데이트되지 않도록하고 싶습니다. Keras에서 void 레이블을 다루는 방법이 있습니까?

일반적으로 이렇게하는 한 가지 방법은 각 픽셀에 대해 손실 가중치를 지정하고 void 픽셀의 가중치를 0으로 설정하는 것입니다 (예 : 텐서 흐름의 경우 like this). Keras에서 sample_weights를 사용하여 조사했지만 픽셀을 가중치로 만들지 않는 것처럼 작동하지는 못했습니다.

+0

> 그 기능은 이러한 목적으로 의도 된 것 같지 않습니다. 작동하면 작동합니다. 나는 그것을 사용할 것이지만 당신이 그것을 분명하게 논평했는지 확인하십시오. – collector

+0

죄송합니다. 나는 충분히 명확하지 않았다. 이미지 분할에 sample_weights 기능을 사용할 수 없었습니다. 그리고 나는 그것이 가능하다고 생각하지 않는다. 텍스트를 편집했습니다. – mclearner

답변

0

결국 sample_weight를 사용할 수 있습니다. 샘플 가중치는 2 차원 (batch_size, 예측 없음) 만 가질 수 있기 때문에 모델의 출력을 평면으로 재구성하는 것이 트릭입니다.

내 모델 정의의 마지막 2 줄 :

model.add(Reshape((-1, 1))) 
model.compile(loss='binary_crossentropy', optimizer='adam', sample_weight_mode='temporal', metrics=['binary_accuracy']) 

나는 모양 변경 ((- 1,1))를 사용하여 내 입력 이미지가 변수 크기를 가지고 있기 때문에. 모델을 트레이닝 할 때 평평한 레이블과 sample_weight도 사용해야합니다.

나는 대답을 찾았습니다 here.