mindspore.train.HausdorffDistance
- class mindspore.train.HausdorffDistance(distance_metric='euclidean', percentile=None, directed=False, crop=True)[源代码]
计算Hausdorff距离。Hausdorff距离是两个点集之间两点的最小距离的最大值,度量了两个点集间的最大不匹配程度。
给定两个集合A和B,A和B之间的Hausdorff距离定义如下:
\[H(A, B) = \text{max}[h(A, B), h(B, A)] h(A, B) = \underset{a \in A}{\text{max}}\{\underset{b \in B}{\text{min}} \rVert a - b \rVert \} h(B, A) = \underset{b \in B}{\text{max}}\{\underset{a \in A}{\text{min}} \rVert b - a \rVert \}\]其中 \(h(A, B)\) 表示,对A中的每个点a找到B集合里的最近点,这些最短距离的最大值为从A到B的单向Hausdorff距离,同理,\(h(B, A)\) 为集合B到集合A中最近点的最大距离。Hausdoff距离是有方向性的,通常情况下 \(h(A, B)\) 不等于 \(h(B, A)\)。\(H(A, B)\) 为双向Hausdorff距离。
- 参数:
distance_metric (string) - 支持如下三种距离计算方法:
"euclidean"
(欧式距离)、"chessboard"
(棋盘距离、切比雪夫距离) 或"taxicab"
(出租车距离、曼哈顿距离)。默认值:"euclidean"
。percentile (float) - 0到100之间的浮点数。指定最终返回的Hausdorff距离的百分位数。默认值:
None
。directed (bool) - 如果为True,为单向Hausdorff距离,只计算h(y_pred, y)距离;如果为False,为双向Hausdorff距离,计算max(h(y_pred, y), h(y, y_pred))。默认值:
False
。crop (bool) - 是否裁剪输入图像,仅保留目标区域。为了保证y_pred和y的shape匹配,使用(y_pred | y),即两图像的并集来确定bounding box。默认值:
True
。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import numpy as np >>> from mindspore import Tensor >>> from mindspore.train import HausdorffDistance >>> >>> 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 = HausdorffDistance() >>> metric.clear() >>> metric.update(x, y, 0) >>> mean_average_distance = metric.eval() >>> print(mean_average_distance) 1.4142135623730951
- eval()[源代码]
计算定向或非定向Hausdorff距离。
- 返回:
numpy.float64,计算得到的Hausdorff距离。
- 异常:
RuntimeError - 如果没有先调用update方法。
- update(*inputs)[源代码]
使用 y_pred、 y 和 label_idx 更新内部评估结果。
- 参数:
inputs - y_pred、 y 和 label_idx。 y_pred 和 y 为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_pred 和 y 的shape不同。