图像分割中的loss--处理数据极度不均衡的状况

Posted hotsnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像分割中的loss--处理数据极度不均衡的状况相关的知识,希望对你有一定的参考价值。

序言:

对于小目标图像分割任务,一副图画中往往只有一两个目标,这样会加大网络训练难度,一般有三种方法解决:

1、选择合适的loss,对网络进行合理优化,关注较小的目标。

2、改变网络结构,使用attention机制。

3、类属attention机制,即先检测目标区域,裁剪后再分割训练。

 

场景:

现在以U-net网络为基础,使用keras进行实现小目标的分割。

 

Loss函数:

1、Log loss

对于二分类任务,log loss如下:

技术图片

其中,yi为输入实例xixi?的真实类别, pi为预测输入实例 xi属于类别 1 的概率。对所有样本的对数损失表示对每个样本的对数损失的平均值。

这个loss函数每一次梯度的回传对每一个类别具有相同的关注度,所以容易受到类别不平衡的影响。

这种情况参照airbus-ship-detection。这个任务是检测海面上的船只,整个图片中大海占幅较大,所以采用一些技巧:使用montage拼接图片,对只有大海的图片进行采样来减少图片大小。

 

2、WCE loss(weighted cross-entropy)

带权重的交叉熵

二分类WCE:

技术图片

技术图片

这个loss的缺点时需要人为的调整困难样本的权重,增加调整难度。

 

3、Focal loss

能否使网络主动学习困难样本呢?

focal loss的提出是在目标检测领域,为了解决正负样本比例严重失调的问题。

focal函数公式:

技术图片

对比上面其实就是多了 (1-pi)r

loss值随样本概率变大而变小。

技术图片

 

基本思想是,对于类别极度不平衡的情况下,网络如果在log loss下会倾向只预测负样本,并且负样本的预测概率会非常高,回传的梯度也很大。

但是如果添加了上述项,则focal 函数会使预测概率大的样本的loss变小,而预测概率小的样本的loss变大,从而加强了对正样本的关注度。

from keras import backend as K
‘‘‘
Compatible with tensorflow backend
‘‘‘
def focal_loss(gamma=2., alpha=.25):
    def focal_loss_fixed(y_true, y_pred):
        pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
            pt_0 = tf.where(tf.equal(y_true, 0), y_pred, tf.zeros_like(y_pred))
            return -K.sum(alpha * K.pow(1. - pt_1, gamma) * K.log(pt_1))-K.sum((1-alpha) * K.pow( pt_0, gamma) * K.log(1. - pt_0))
return focal_loss_fixed

model_prn.compile(optimizer=optimizer, loss=[focal_loss(alpha=.25, gamma=2)])

使用U-net输入输出都是一张图,直接使用会导致loss值很大。而且调参alpha和gamma也麻烦。

 

4、Dice loss

直观理解为两个轮廓的相似程度。

技术图片

或则表示为:

技术图片

二分类的dice loss:

技术图片

def dice_coef(y_true, y_pred, smooth=1): 
    intersection = K.sum(y_true * y_pred, axis=[1,2,3]) 
    union = K.sum(y_true, axis=[1,2,3]) + K.sum(y_pred, axis=[1,2,3]) 
    return K.mean( (2. * intersection + smooth) / (union + smooth), axis=0) 

def dice_coef_loss(y_true, y_pred): 
    1 - dice_coef(y_true, y_pred, smooth=1)

使用dice loss有时会不可信,原因是对于sofemax或log loss其梯度简言之是p-t ,t为目标值,p为预测值。而dice loss 为 2t2  /  (p+t)2

如果p,t过小会导致梯度变化剧烈,导致训练困难。

 

以上是关于图像分割中的loss--处理数据极度不均衡的状况的主要内容,如果未能解决你的问题,请参考以下文章

使用 xgboost 处理极度不平衡

Focal Loss 的理解

图像分割loss集合

RetinaNet——使用Focal Loss解决物体检测中的样本均衡问题

图像处理MATLAB应用实战系列(九十七)-基于对比度限制自适应直方图均衡化和分水岭变换实现细胞图像分割

承接TensorFlow深度学习代做pytorch图像处理