pixel-wise cross entropy loss:

是最常用于语义分割的loss函数。This loss examines each pixel individually, comparing the class predictions (depth-wise pixel vector) to our one-hot encoded target vector。左边的是预测的值,右边的是标签值(采用one-hot编码),并且是depth-wise pixel vector.

语义分割 边缘 语义分割边缘loss_语义分割 边缘

由于交叉熵损失评估每一个像素点的类别预测,然后平均所有的像素点。这个本质上就是对图片上的每个像素进行平等的学习。这就造成了一个问题,如果在图像上的多种类别有不平衡的表征,那么训练会由最主流的类别主导。

        由于上述缺陷,有人提出在不同的输出通道上加权(也就是类别上加权),以抵消数据集中的类别不平衡表现

        同时又有人提出在像素层面上加权,比如在分割物体的边缘上添加一个很大的权重。这个在U-Net: Convolutional Networks for Biomedical Image Segmentation就是这样做的,像素加权。

        另外一种流行的损失函数是基于Dice coefficient(Sørensen–Dice coefficient)实际上是两个样本之间重叠的度量。度量范围从0到1,如果是1则说明完全重叠,所以越高越好。Dice coefficient最初是为二进制数据开发的,计算公式为:

                                                                             

语义分割 边缘 语义分割边缘loss_语义分割 边缘_02

其中

语义分割 边缘 语义分割边缘loss_ci_03

代表的是A和共同的元素部分,|A|代表set(A)中的元素,对B同理。下面是计算

语义分割 边缘 语义分割边缘loss_ci_03

的一个例子,在预测值和标签值逐像素相乘,然后加起来:

语义分割 边缘 语义分割边缘loss_ci_05

因为我们的标签是二值的,那么就可以有效的去除预测中处于没有激活的任何像素。对于剩下的像素,本质上是 essentially penalizing low-confidence predictions。

其中|A|和|B|的计算有研究者提出两种方式:第一种就是简单的全部元素相加,第二种就是平方和。这两种方式我们可以选择之后再进行实验对比效果。下面的例子是第二种方式:

语义分割 边缘 语义分割边缘loss_语义分割 边缘_06

采用第二种方式的代码实现链接,里面采用了拉普拉斯平滑也就是分子分母都加1:

为了建立一个最小化损失,我们采用的损失函数是:

                                                                      

语义分割 边缘 语义分割边缘loss_语义分割 边缘_07

该函数被称为the soft Dice loss,because we directly use the predicted probabilities instead of thresholding and converting them into a binary mask.对于神经网络的输出,分子部分连接了激活的标签和预测值,分母部分连接着每一个mask的激活数量。这对于损失是一个很好的正则化作用,因此the soft Dice loss并不难学习那些在图片中空间表征较少的类别(类别不平衡)。

the soft Dice loss实现如下:

语义分割 边缘 语义分割边缘loss_ci_08

 https://www.jeremyjordan.me/semantic-segmentation/#datasets