Dice系数和mIoU是语义分割的评价指标,在这里进行了简单知识介绍。讲到了Dice顺便在最后提一下Dice Loss,以后有时间区分一下在语义分割中两个常用的损失函数,交叉熵和Dice Loss。


文章目录

  • 一、Dice系数
  • 1 概念
  • 2 实际计算
  • Jaccard系数
  • 二、MIou
  • 1 语义分割元素分类的四种情况
  • 2.mIoU定义与单个IoU理解
  • 三 Dice Loss


一、Dice系数

1 概念

Dice系数源于二分类,本质上是衡量两个样本的重叠部分,是一种集合相似度度量函数,该指标范围从0到1,其中“1”表示完整的重叠。它的取值范围是0-1之间,越接近1说明模型效果越好。 其计算公式为:

WACV语义分割论文 语义分割dice_list


其中 |X∩Y| 是X和Y之间的交集,|X|和|Y|分表表示X和Y的元素的个数,其中,分子的系数为2,是因为分母存在重复计算X和Y之间的共同元素的原因。

看图直观理解一下

WACV语义分割论文 语义分割dice_python_02


WACV语义分割论文 语义分割dice_list_03


公式就可以理解为

WACV语义分割论文 语义分割dice_深度学习_04

2 实际计算

首先将 |X∩Y| 近似为预测图pred和label GT 之间的点乘,并将点乘的元素的结果相加:

(1)预测分割图与 GT 分割图的点乘:

WACV语义分割论文 语义分割dice_WACV语义分割论文_05


(2)逐元素相乘的结果元素的相加和:

WACV语义分割论文 语义分割dice_点乘_06


对于二分类问题,GT分割图是只有0,1两个值的,因此 |X∩Y| 可以有效的将在 Pred 分割图中未在 GT 分割图中的所有像素清零. 对于的像素,主要是惩罚低置信度的预测,较高值会得到更好的 Dice 系数.

(3)计算|X|和|Y|,这里可以采用直接元素相加,也可以采用元素平方求和的方法:

WACV语义分割论文 语义分割dice_list_07

Jaccard系数

Jaccard系数(Jaccard similarity coefficient)只关心个体间共同具有的特征是否一致这个问题,用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。

Jaccard相似系数定义为:

WACV语义分割论文 语义分割dice_list_08


可以写成下面这种形式:

WACV语义分割论文 语义分割dice_python_09

二、MIou

1 语义分割元素分类的四种情况

TP: True Positive, 真正类,将正类预测成正类数。

FP: False Positive, 假正类,将负类预测成正类。

TN: True Negtive, 真负类,将负类预测成负类数。

FN: False Negtive, 假负类,将正类预测成负类。

WACV语义分割论文 语义分割dice_python_10

2.mIoU定义与单个IoU理解

计算真实值和预测值两个集合的交集和并集之比。这个比例可以变形为TP(交集)比上TP、FP、FN之和(并集)。即:mIoU=TP/(FP+FN+TP)。

这里还是直接上个图理解一下,详细解释看图二,我觉得讲的非常棒了。

对于pascal数据集来说, 对于21个类别, 分别求IoU:

对于某一个类别的IoU计算公式如下:

WACV语义分割论文 语义分割dice_WACV语义分割论文_11


mIoU:计算两圆交集(橙色部分)与两圆并集(红色+橙色+黄色)之间的比例,理想情况下两圆重合,比例为1。

三 Dice Loss

Dice Loss的计算公式非常简单如下:

WACV语义分割论文 语义分割dice_python_12


这种损失函数被称为 Soft Dice Loss,因为我们直接使用预测概率而不是使用阈值或将它们转换为二进制mask。

Soft Dice Loss 将每个类别分开考虑,然后平均得到最后结果。比较直观如图三所示

WACV语义分割论文 语义分割dice_深度学习_13


需要注意的是Dice Loss存在两个问题:

(1)训练误差曲线非常混乱,很难看出关于收敛的信息。尽管可以检查在验证集上的误差来避开此问题。

(2)Dice Loss比较适用于样本极度不均的情况,一般的情况下,使用 Dice Loss 会对反向传播造成不利的影响,容易使训练变得不稳定。

所以在一般情况下,还是使用交叉熵损失函数。