图像分割评价指标

图像分割评价指标

图像分割的(包括语义分割,实例分割,以及全景分割),它们的评价指标都是一样的。常用的图像分割指标有:

  • 像素准确率(Pixel Accuracy,PA)
  • 类别像素准确率(Class Pixel Accuray,CPA)
  • 类别平均像素准确率(Mean Pixel Accuracy,MPA)
  • 交并比(Intersection over Union,IoU)
  • *平均交并比(Mean Intersection over Union,MIoU)*

混淆矩阵:

混淆矩阵(confusion matrix)也叫错误矩阵(error matrix),混淆矩阵是以模型预测的类别数量统计信息为横轴,真实标签的数量统计信息为纵轴画出的矩阵,以二分类问题为例,混淆矩阵由四个部分构成:True Positive,False Positive,False Negative,False Negative,True Negative 四类,如下图所示:

table

由此可以将这个矩阵推广到多维的情况,代码如下:

1
2
3
4
5
def confusion_matrix(y_true, y_pred):
label_pairs = np.ravel_multi_index((label_img, pred_label_img),
dims=(num_classes, num_classes))
confs_matrix = np.bincount(label_pairs, minlength=num_classes**2)
return confs_matrix

Pixel Accuracy(准确率):

​ accuracy指的是正确预测的样本数占总预测样本数的比值,公式表示为:

PA=i=0npiii=0nj=0npij=TP+TNTP+TN+FP+FNPA = \frac{\sum_{i=0}^n p_{ii}}{\sum_{i=0}^n \sum_{j=0}^n p_{ij}} = \frac{TP+TN}{TP+TN+FP+FN}

后面的等号在二分类情况下成立

  • n : 类别总数,包括背景的话就是n+1
  • pijp_{ij} : 真实像素类别为 ii 的像素被预测为类别 jj 的总数量
  • TP: 真阳性数,在label中为阳性,在预测值中也为阳性的个数
  • TN: 真阴性数, 在label中为阴性,在预测值中也为阴性的个数
  • FP: 假阳性数, 在label中为阴性,在预测值中为阳性的个数
  • FN: 假阴性数, 在label中为阳性,在预测值中为阴性的个数

PA 看上去是一个很好的评价指标,但是在下面情况下,即使把整张图片都预测为背景都有很高的准确率,但这显然是不符合要求的

example

同理与其相似的还有 Precision(查准率) Recall (查全率)

交并比 IoU

​ 上面的评价指标用的都不多,Intersection-Over-Union (IoU),也称为 Jaccard 指数,是语义分割中最常用的指标之一,IoU 是预测分割和标签之间的重叠区域除以预测分割和标签之间的联合区域(两者的交集/两者的并集)。该指标的范围为 0–1 (0–100%),其中 0 表示没有重叠,1 表示完全重叠分割。

IoU=ABAB=TPTP+FP+FNIoU=\frac{\left| A\cap B \right|}{\left| A\cup B \right|}=\frac{TP}{TP+FP+FN}

注意:IoU 在多分类中每个值只能应用于单个类别类别,多分类任务中每个类别都有一个 IoU 值,mIoU ( mean Intersection over union ) 是 IoU 的平均值,它们代码如下:

1
2
3
4
5
def IoU(confs_matrix):
IoU_matrix = np.diag(confs_matrix) / (confs_matrix.sum(axis=1) +
confs_matrix.sum(axis=0) - np.diag(confs_matrix))
mIoU = IoU_matrix.mean()
return {'IoU matrix':IoU_matrix, 'mIoU': mIoU}

Dice coefficient,F1-score

​ 定义: Dice系数定义为两倍的交集除以像素和,也叫F1 score。Dice 系数与 IoU 非常相似,Dice 常用于医学影像分割,其他情况下的图像分割评价指标一般选择 mIoU

​ F1-score是为了能够评价不同算法的优劣,在 Precision 和 Recall 的基础上提出了F1值的概念,来对 Precision 和 Recall 进行整体评价。F1-score(均衡平均数)是综合考虑了模型查准率和查全率的计算结果,取值更偏向于取值较小的那个指标。F1的定义如下:

F1=(recall1+precision12)1=2 precision×recallprecision+recall=2 TPTP+FP×TPTP+FNTPTP+FP+TPTP+FN==TP2TP+FP+FNF_1 = \left( \frac{recall^{-1} + precision^{-1}}{2} \right)^{-1} = 2\ \frac{precision \times recall}{precision + recall} \\ =2 \ \frac{\frac{TP}{TP + FP} \times \frac{TP}{TP + FN}}{\frac{TP}{TP + FP} + \frac{TP}{TP + FN}} = = \frac{TP}{2TP+FP+FN}

1
2
3
4
def Dice(confs_matrix):
Dice_score = 2* np.diag(confs_matrix) / (confs_matrix.sum(axis=1) +
confs_matrix.sum(axis=0) + np.diag(confs_matrix))
return Dice_score

(BIoU)Boundary IoU

Boundary IoU是由论文Boundary IoU: Improving Object-Centric Image Segmentation Evaluation首次提出的图像分割评价指标

​ 算法的优化一般是以增加评测指标值为目的,如果AP指标对某种错误类型敏感,那么基于该指标优化的算法能很好地解决该种错误类型;反之,如果AP指标对某种错误类型不敏感,那么即使改善算法使得AP指标提升,也未必会很好地改善该错误类型

​ 当前通用的以Mask IoU为基础的AP指标对于mask边界的分割质量不敏感,导致近年来不断优化的分割算法并没有明显改善mask边界的分割质量

​ 基于以上情况,作者提出了Boundary IoU,使用Boundary IoU代替Mask IoU,能够很好地衡量分割边界的质量好坏,如下图所示:

BIoU

​ 作者在论文中论述了Boundary IoU能够再大目标与小目标评价中都十分有效,不会出现:图像周长与图像面积随着目标的变大导致的增长速率不一样,进而导致大目标对边界不敏感的问题。同时也不会对小目标施加过于大的惩罚

Boundary IoU的定义为:

Boundary IoU(G,P)=(GdG)(PdP)(GdG)(PdP)Boundary\ IoU(G,P) = \frac{\left| (G_d \cap G) \cap (P_d \cap P) \right|}{\left| (G_d \cap G ) \cup (P_d \cap P) \right|}

GdG_d 表示与Ground truth mask的轮廓距离不大于 dd 的像素集合,PdP_d 表示与预测的mask距离不大于 dd 的像素集合

example

距离 dd 控制着Boundary IoU的敏感程度,当 dd 足够大时,Boundary IoU等效于Mask IoU;当 dd 比较小时,Boundary IoU会忽略mask中远离边界的像素,使得即使对于尺寸较大的物体,Boundary IoU也会更关注物体边界附近的分割质量

​ Boundary IoU也有缺陷,比如对于类似下图中有相同圆心的2个mask,Boundary IoU的值会很高

极端情况

为解决该问题,作者推荐使用min(Mask IoU,Boundary IoU)代替计算AP时使用的Mask IoU。并将此方式计算得到的AP命名为Boundary AP,在实际使用时,超过99.9%的情况下Boundary IoU的值都要小于等于Mask IoU,因此取最小值只是为了避免上图中这种特殊的情况