mindspore.nn.RootMeanSquareDistance

class mindspore.nn.RootMeanSquareDistance(symmetric=False, distance_metric='euclidean')[源代码]

计算从 y_predy 的均方根表面距离。

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

\[{\text{dis}}\left (v, S(A)\right ) = \underset{s_{A} \in S(A)}{\text{min }}\rVert v - s_{A} \rVert\]

从集合B到集合A的均方根表面距离(Root Mean Square Surface Distance)为:

\[RmsSurDis(B \rightarrow A) = \sqrt{\frac{\sum_{s_{B} \in S(B)}^{} {\text{dis}^2 \left ( s_{B}, S(A) \right )} }{\left | S(B) \right |}}\]

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

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

\[RmsSurDis(A \leftrightarrow B) = \sqrt{\frac{\sum_{s_{A} \in S(A)}^{} {\text{dis} \left ( s_{A}, S(B) \right ) ^{2}} + \sum_{s_{B} \in S(B)}^{} {\text{dis} \left ( s_{B}, S(A) \right ) ^{2}}}{\left | S(A) \right | + \left | S(B) \right |}}\]

参数:

  • distance_metric (string) - 支持如下三种距离计算方法:”euclidean”、”chessboard” 或 “taxicab”。默认值:”euclidean”。

  • symmetric (bool) - 是否计算 y_predy 之间的对称平均平面距离。如果为False,计算方式为 \(RmsSurDis(y_{pred} , y)\), 如果为True,计算方式为 \(RmsSurDis(y_{pred} \leftrightarrow y)\)。默认值:False。

支持平台:

Ascend GPU CPU

样例:

>>> import numpy as np
>>> from mindspore import nn, Tensor
>>>
>>> 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 = nn.RootMeanSquareDistance(symmetric=False, distance_metric="euclidean")
>>> metric.clear()
>>> metric.update(x, y, 0)
>>> root_mean_square_distance = metric.eval()
>>> print(root_mean_square_distance)
1.0000000000000002
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_pred或y中。

  • ValueError - y_predy 的shape不同。