18 std::vector<Metric> metrics,
20 int n_metrics = metrics.size();
23 n_metrics +=
params.fscore_radius.size() - 1;
30 for (
Metric metric : metrics) {
33 metric_val = distance21.
Reshape({-1}).Mean({-1}).Item<float>() +
34 distance12.
Reshape({-1}).Mean({-1}).Item<float>();
35 metric_values[idx++] = metric_val;
41 metric_values[idx++] = metric_val;
44 float *p_distance12 = distance12.
GetDataPtr<
float>(),
45 *p_distance21 = distance21.
GetDataPtr<
float>();
46 for (
float radius :
params.fscore_radius) {
48 float precision = 0., recall = 0.;
50 i < static_cast<size_t>(distance12.
NumElements()); ++i)
51 precision += p_distance12[i] < radius;
54 i < static_cast<size_t>(distance21.
NumElements()); ++i)
55 recall += p_distance21[i] < radius;
58 if (precision + recall > 0) {
59 fscore = 2 * precision * recall / (precision + recall);
61 metric_values[idx++] = fscore;
cmdLineReadable * params[]
Tensor Max(const SizeVector &dims, bool keepdim=false) const
int64_t NumElements() const
Device GetDevice() const override
Tensor Reshape(const SizeVector &dst_shape) const
core::Tensor ComputeMetricsCommon(core::Tensor distance12, core::Tensor distance21, std::vector< Metric > metrics, MetricParameters params)
Metric
Metrics for comparing point clouds and triangle meshes.
@ ChamferDistance
Chamfer Distance.
@ HausdorffDistance
Hausdorff Distance.
Generic file read and write utility for python interface.
Holder for various parameters required by metrics.