Потеря семантической сегментации, которая налагает больше штрафов на прерывистые небольшие блоки
Я работаю над проблемой сегментации. И я думаю о потере этой проблемы. Неважно, это 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? Есть ли какие-либо потери или математика, которые я могу использовать? Мы должны сделать это математически обоснованным (дифференцируемым). Благодарю.