图像分割的损失函数
基于分布相似度的损失
在此类损失函数中,主要使用信息论中的交叉熵机制来度量模型输出和真实目标之间所包含的信息的相似性。
交叉熵损失
假设$P(Y=0)=p$,$P(Y=1)=1-p$。预测值由logistic/sigmoid函数计算得出:
$P(\hat Y=0)= \frac{1}{1+e^{-z}}$和$P(\hat Y=1)=1- \frac{1}{1+e^{-z}}=1-\hat p$
交叉熵损失函数的定义形式如下:
上述交叉熵损失为二维交叉熵损失。
加权交叉熵损失
加权交叉熵损失(weighted corss entropy, WCE)是交叉熵损失的一种变体,其中,所有的正样本都被乘以一个系数以进行加权。该损失函数常用于类别不平衡问题中。例如,当你有一张有10%的黑像素和90%的白像素的图片时,常规的CE效果不会太好。
WCE定义如下式:
减少假负样本的数目,将$\beta$设置为大于1.增加假正样本的数目,将$\beta$设置为小于1。
weighted bce代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def criterion_pixel(logit_pixel, truth_pixel):
logit = logit_pixel.view(-1)
truth = truth_pixel.view(-1)
assert(logit.shape==truth.shape)
loss = F.binary_cross_entropy_with_logits(logit, truth, reduction='none')
if 0:
loss = loss.mean()
if 1:
pos = (truth>0.5).float()
neg = (truth<0.5).float()
pos_weight = pos.sum().item() + 1e-12
neg_weight = neg.sum().item() + 1e-12
loss = (0.25*pos*loss/pos_weight + 0.75*neg*loss/neg_weight).sum()
return loss
均衡交叉熵损失
均衡交叉熵损失(balanced corss entropy, BCE)和WCE类似,唯一的不同之处在于也对负样本进行了加权。
如下式所示:
Focal loss
在机器学习任务中,除了会遇到严重的类别样本数不均衡问题之外,经常也会遇到容易识别的样本数目和难识别的样本数目不均衡的问题。为了解决这一问题,何凯明大神提出了Focal loss。
Focal loss尝试降低easy example对损失的贡献,这样网络会集中注意力在难样本上。
FL定义如下:
上述公式为二分类问题的Focal loss,可以看出对于每一个样本,使用$(1-\hat p)^\gamma$作为其识别难易程度的指标,预测值$\hat p$越大代表对其进行预测越容易,因而其在总体损失中的占比应该越小。
对于多分类问题,其形式为:
对于每一个样本,$p_t$为模型预测出其属于其真实类别的概率,$\alpha_t$可用于调节不同类别之间的权重。将$\lambda$设置为0便可以得到BCE。
下述代码既可以计算二分类问题,也可以计算多分类问题的focal loss。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27