D i c e Dice Dice 系数是一种集合相似度量函数,通常用于计算两个集合的相似度,取值范围是 [ 0 , 1 ] [0, 1] [0,1]:
D i c e ( X , Y ) = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ Dice(X, Y) = \frac {2 | X\cap Y|} { |X| + |Y| } Dice(X,Y)=∣X∣+∣Y∣2∣X∩Y∣
∣ . ∣ |.| ∣.∣ 表示取集合元素的数量函数
D i c e ( X , Y ) = 两 者 交 集 元 素 的 个 数 × 2 两 者 元 素 数 量 之 和 Dice(X, Y) = \frac {两者交集元素的个数 \times 2} {两者元素数量之和} Dice(X,Y)=两者元素数量之和两者交集元素的个数×2
PaddleSeg
中的实现:
def dice(intersect_area, pred_area, label_area):
"""
Calculate DICE.
计算 DICE 值.
Args:
intersect_area (Tensor): The intersection area of prediction and ground truth on all classes.
pred_area (Tensor): The prediction area on all classes.
label_area (Tensor): The ground truth area on all classes.
Returns:
np.ndarray: DICE on all classes.
float: mean DICE of all classes.
"""
# 将三者转化为 np.adarray
intersect_area = intersect_area.numpy()
pred_area = pred_area.numpy()
label_area = label_area.numpy()
# 两个集合元素的数量
union = pred_area + label_area
class_dice = []
for i in range(len(intersect_area)): # 在每一类中开始迭代
if union[i] == 0:
# 如果分子为 0,也就是当前图片没有该类元素
dice = 0
else:
dice = (2 * intersect_area[i]) / union[i]
class_dice.append(dice)
mdice = np.mean(class_dice)
return np.array(class_dice), mdice
intersect_area, pred_area, label_area
这三个参数是通过:
calculate_area(pred, label, num_classes, ignore_index=255)
来计算的,接上一篇博客:
[PaddleSeg 源码阅读] PaddleSeg计算 mIoU