mindspore.train.MeanSurfaceDistance

查看源文件
class mindspore.train.MeanSurfaceDistance(symmetric=False, distance_metric='euclidean')[源代码]

计算从 y_predy 的平均表面距离。通常情况下,用来衡量分割任务中,预测情况和真实情况之间的差异度。

给定两个集合A和B,S(A)表示A的表面像素,任意v到S(A)的最短距离定义为:

dis(v,S(A))=min sAS(A)vsA

从集合B到集合A的平均表面距离(Average Surface Distance)为:

AvgSurDis(BA)=sBS(B)dis(sB,S(A))|S(B)|

其中, ||*|| 表示距离度量, |*| 表示元素的数量。

从集合B到集合A,以及从集合A到集合B的表面距离平均值为:

MeanSurDis(AB)=sAS(A)dis(sA,S(B))+sBS(B)dis(sB,S(A))|S(A)|+|S(B)|
参数:
  • distance_metric (str) - 支持如下三种距离计算方法: "euclidean" (欧式距离)、 "chessboard" (棋盘距离、切比雪夫距离) 或 "taxicab" (出租车距离、曼哈顿距离)。默认值: "euclidean"

  • symmetric (bool) - 是否计算 y_predy 之间的对称平均平面距离。如果为 False ,计算方式为 AvgSurDis(y_predy) ;如果为 True ,计算方式为 MeanSurDis(y_predy) 。默认值: False

支持平台:

Ascend GPU CPU

样例:

>>> import numpy as np
>>> from mindspore import Tensor
>>> from mindspore.train import MeanSurfaceDistance
>>> x = Tensor(np.array([[3, 0, 1], [1, 3, 0], [1, 0, 2]]))
>>> y = Tensor(np.array([[0, 2, 1], [1, 2, 1], [0, 0, 1]]))
>>> metric = MeanSurfaceDistance(symmetric=False, distance_metric="euclidean")
>>> metric.clear()
>>> metric.update(x, y, 0)
>>> mean_average_distance = metric.eval()
>>> print(mean_average_distance)
0.8047378541243649
clear()[源代码]

内部评估结果清零。

eval()[源代码]

计算平均表面距离。

返回:

numpy.float64,计算得到的平均表面距离值。

异常:
  • RuntimeError - 如果没有先调用update方法。

update(*inputs)[源代码]

使用 y_predylabel_idx 更新内部评估结果。

参数:
  • inputs - y_predylabel_idxy_predy 为Tensor、list或numpy.ndarray。 y_pred 是预测的二值图像。 y 是实际的二值图像。 label_idx 数据类型为int或float,表示像素点的类别值。

异常:
  • ValueError - 输入的数量不等于3。

  • TypeError - label_idx 的数据类型不是int或float。

  • ValueError - label_idx 的值不在 y_predy 中。

  • ValueError - y_predy 的shape不同。