分割任务的Loss函数【转】

作者:张良怀
链接:https://www.zhihu.com/question/294635686/answer/606259229
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

我来谈谈分割任务的Loss函数

首先想要解释一下,Loss函数的目的是为了评估网络输出和你想要的输出(Ground Truth,GT)的匹配程度。我们不应该把Loss函数限定在Cross-Entropy和他的一些改进上面,应该更发散思维,只要满足两点:

(1)能够表示网络输出和待分割目标的相似程度(2)Loss的计算过程是可导的,可以进行误差反传

仍然从Cross-Entropy和它的一些改进说起,这一类Loss函数可以叫做Pixel-Level的Loss,因为他们都是把分割问题看做对每个点的分类,这一类包括:

1.CE(cross-entropy)。

2.wCE(weighted cross-entropy)。可以看UNet原论文,对边界像素这些难学习的像素加大权重(pixel-weight);当然还可以做类层面的加权(class-weight),比如对前景像素加大权重,背景像素减小权重,或者不同的类别按照其所占像素的比例,分配权重,占比小的权重大一些,占比大的权重小一些,解决样本不平衡的问题。

3.focal loss。很巧妙又简洁的一种方式。它使难分类样本权重大,易分类样本权重小。至于哪些是难分类样本哪些是易分类样本,都由网络的输出和真实的偏差决定。这就实现了网络自适应调整。类比我们学知识,难学习的内容,我们同样时间学的不好自己知道,我就会自觉的花更多精力去学习。以前的神经网络没有识别难易任务自动分配精力的方式,focal loss带来了这种自适应反馈。同样能够实现这种自适应方式的还有在线难样本挖掘(Online Hard Example Mining,OHEM)。

2016年的VNet论文首次提出了Dice Loss,应该是Class-Level的Loss的代表。

Dice系数是分割效果的一个评判指标,其公式相当于预测结果区域和ground truth区域的交并比,所以它是把一个类别的所有像素作为一个整体去计算Loss的。因为Dice Loss直接把分割效果评估指标作为Loss去监督网络,不绕弯子,而且计算交并比时还忽略了大量背景像素,解决了正负样本不均衡的问题,所以收敛速度很快。

类似的Loss函数还有IoU Loss。

如果说DiceLoss是一种区域面积匹配度去监督网络学习目标的话,那么我们也可以使用边界匹配度去监督网络的Boundary Loss。我们只对边界上的像素进行评估,和GT的边界吻合则为0,不吻合的点,根据其距离边界的距离评估它的Loss。这一类论文可以搜关键词Boundary aware,Boundary Loss等。

不管是逐像素、区域,还是边界,它们都是低维特征,我们还可以考虑使用预测结果和GT的高维特征的匹配度去监督网络,高维特征即Mask的一些形状特征,这样的监督方式就能够让网络学会去学习目标结构的形状先验(Shape Prior)。如何提取高维特征,有的论文使用PCA对输出和GT进行降维,也有使用自编码器(AutoEncoder)的Encoder端进行编码的(需先使用Mask训练一个自编码器),然后对降维后的编码计算距离,作为最终的Loss。这一类论文可以搜关键词Shape Prior,Shape Constrained...,Anatomically Constrained等等。

以上所有的Loss都是用Mask去监督网络的输出,如果我们的Mask标注的并不够好呢,我们是不是可以考虑引入一些原图的信息作为辅助,丰富Loss函数,监督网络,这种思路叫做Weakly-supervise/Semi-supervise,弱监督。

上述大多都是结合自己的工作和文献阅读的总结。如果有不恰当的地方,欢迎交流讨论。

编辑于 2019-07-07 18:42

猜你喜欢

转载自blog.csdn.net/qq_39333636/article/details/125416473