Сегментация изображения с использованием U-net и функции потери кубика - PullRequest
1 голос
/ 11 мая 2019

Я работаю над сканированием МРТ для сегментации медицинских изображений для классификации опухолей головного мозга (набор данных Brats 2018), так как это очень несбалансированный набор данных. Я использую unet + потеря кубиков для каждого изображения, но я не получаю удовлетворительных результатов. Иногда это работает нормально, но иногда это происходит, поскольку сегментация не обнаружена в одном и том же наборе данных.

def dice_loss(y_true,y_pred): 
  axis = tuple(range(1,len(y_pred.shape)-1)) 
  numerator = 2. * K.sum(K.abs(y_pred * y_true), axis)
  denominator = K.sum(K.abs(y_pred) + K.abs(y_true), axis)
  dsc = K.mean(numerator*class_weight_gen(y_true)/denominator)
  return dsc

def dice_score(y_true,y_pred):
  numerator = 2.* K.sum(K.abs(y_pred * y_true))
  denominator =K.sum(K.abs(y_pred) + K.abs(y_true))
  dsc = K.mean(numerator/denominator)
  return dsc

sgd = optimizers.SGD(lr=0.01,momentum=0.9,nesterov=False)
model.compile(optimizer=sgd,loss=dice_loss,metrics=[dice_score])
lr_reduce = callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3) 

Используется модель U-net Я думаю, что мой код верен, но сегментация идет не правильно (где, как это работает для бинарной классификации, т.е. я пытался только для опухоли и не опухолевой области), что было бы возможной причиной.

...