Потеря семантической сегментации, которая налагает больше штрафов на прерывистые небольшие блоки - PullRequest
0 голосов
/ 07 ноября 2018

Я работаю над проблемой сегментации. И я думаю о потере этой проблемы. Неважно, это 2D изображение или 1D сегментация сигнала, я думаю, что они похожи. Обычно потери, которые мы выбираем для минимизации сегментации, являются перекрестными, что направлено на повышение точности классификации по точкам / точкам, и кооптирование, которое в целом делает предсказываемую область максимально приближенной к истинности.

Представьте, что теперь у меня есть изображение с фоном около половины пикселей (маска = 0) и еще одно лицо человека (маска = 1). Конечно фон и область лица непрерывны. И у меня есть хорошо обученная модель сегментации, и она хорошо работает с пиксельной точностью до 95%. Очень хорошо, 95% пикселей получили правильные метки, 0 для фона, 1 для переднего плана. Но что меня расстраивает, так это то, что остальные 5% пикселей образуют крошечные изолированные отверстия в предсказанной маске. В большой области 1, есть несколько 0. Кроме того, на большой площади 0, есть несколько единиц. (Постобработка решит это наверняка, но я хочу, чтобы модель это сделала).

Я не думаю, что кросс-энтропия или потеря кости-кости могут справиться с этим эффективно. Я хочу добавить еще один элемент к потере, и он добавляет больше штрафов к этим изолированным отверстиям, чтобы модель могла подавлять выходные маски с прерывистыми небольшими участками.

def myLoss(y_true, y_pred):
    lamda = 0.8
    item1 = binaryCrossEntropy(y_true, y_pred)    
    item2 = discontinuousPenalty(y_pred)
    return lamda * item1 + (1-lamda) * item2

Итак, как должен выглядеть item2? Есть ли какие-либо потери или математика, которые я могу использовать? Нам нужно сделать это математически обоснованным (дифференцируемым). Спасибо.

...