Присвойте вес пикселям в сегментации изображения с помощью sample_weights. - PullRequest
0 голосов
/ 12 апреля 2020

Я использую Keras для сегментирования изображений с несколькими регионами, одна наземная правда содержит (12области: фон, дорога, велосипед, ...). Как вы можете себе представить, процент велосипедных пикселей намного ниже, чем фоновых пикселей. Следовательно, я хочу использовать выборочные веса, чтобы назначить большое значение, используя sample_weight для фона. мой набор данных содержит изображения и связанные с ними наземные истины.

для извлечения региона я сделал этот код:

Y_train[Y_train == 0] = 0                                             
Y_train[Y_train == 56] = 2       

Y_train[Y_train == 137] = 5      

Y_train[Y_train == 26] = 1       

Y_train[Y_train == 255] = 11     
Y_train[Y_train == 87] = 3       
Y_train[Y_train == 112] = 4      
Y_train[Y_train == 164] = 6      
Y_train[Y_train == 191] = 7      
Y_train[Y_train == 212] = 8      
Y_train[Y_train == 229] = 9      
Y_train[Y_train == 244] = 10 

Таким образом, основываясь на уровне серого пикселя земной правды. Я назначаю каждый регион классу от 0 до 11. Затем я использовал для своей модели слой softmax для классификации каждого региона.

Я пробовал это решение здесь , как показано ниже:

sample_weights = np.zeros((len(Y_train),82944))     
sample_weights[Y_train[Y_train==0]] = 7             
sample_weights[Y_train[Y_train==1]] = 10            
sample_weights[Y_train[Y_train==2]] = 2             
sample_weights[Y_train[Y_train==3]] = 3             
sample_weights[Y_train[Y_train==4]] = 4             
sample_weights[Y_train[Y_train==5]] = 5             
sample_weights[Y_train[Y_train==6]] = 6             
sample_weights[Y_train[Y_train==7]] = 50            
sample_weights[Y_train[Y_train==8]] = 8             
sample_weights[Y_train[Y_train==9]] = 9             
sample_weights[Y_train[Y_train==10]] = 50           
sample_weights[Y_train[Y_train==11]] = 11   

Так что я подразумеваю под этим решением, что каждый пиксель в моей метке (от 0 до 11) будет иметь значение (вес) и будет передан в массив sample_weights. Я не знаю, если это правильный путь ..

, тогда я кормил свою модель

history = model.fit(X_train, Y_train, validation_split=0.18, batch_size=1,epochs = 60 ,sample_weight=sample_weights) 

но я получаю ошибку,

ValueError: Found a sample_weight array with shape (481,). In order to use timestep-wise sample weighting, you should pass a 2D sample_weight array.

Любое другое предложение будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...