Chamfer Distance
Chamfer距離は、点群、3Dサーフェス、または物体の境界がどの程度一致しているかを測定し、再構成、セグメンテーション、モデル学習を支援します。
Chamfer距離は、2つの点集合がどの程度一致しているかを測る指標であり、各点ともう一方の集合内の最近傍点との距離から計算されます。値が小さいほど一致度が高いことを示します。コンピュータービジョンでは、3D点群(サンプリングされた空間座標の集合)と2D物体境界の比較に使われます。点の順序は関係なく、点集合に含まれる点の数が異なっていてもかまいません。
起源は、H. G. Barrow、J. M. Tenenbaum、R. C. Bolles、H. C. Wolfが1977年に発表したChamferマッチングにあり、画像の曲線で表現された形状のマッチングに用いられました。機械CADにおける面取りとは、寸法で物理的な特徴を表す、斜めに削られた縁のことです。
Chamfer距離の計算方法#
空でない2つの点集合AとBについて、一般的な二乗距離の定義は次の3つの手順で構成されます。
- Aの各点についてB内の最近傍点を見つけ、ユークリッド距離を二乗し、これらの値を平均します。
- BからAへの方向でも同じ計算を行います。
- 2方向の平均を合計します。
最初の方向では、参照サーフェスから遠い予測点にペナルティを課し、逆方向では予測に含まれない参照領域にペナルティを課します。これは、クエリごとに1つの近傍を用いる、k近傍法と同じ最近傍探索を使います。PyTorch3DのChamfer実装は、双方向と単方向の両方の計算に対応しています。
二乗距離か非二乗距離か、および合計か平均かという集約方法によってスコアは変わります。もう1つの一般的な規約では、2方向の平均をさらに平均するため、合計した場合の値の半分になります。そのため、実験で用いる指標の定義には、距離の規約、座標の単位、正規化が含まれます。
このPyTorchによる計算では、ペアごとのユークリッド距離を算出するためにtorch.cdistを使用します。
import torch
a = torch.tensor([[0.0, 0.0], [2.0, 0.0]])
b = torch.tensor([[0.0, 0.0], [3.0, 0.0]])
# Reduce squared distances in each nearest-neighbor direction.
distances = torch.cdist(a, b, p=2)
squared_distances = distances.square()
a_to_b = squared_distances.min(dim=1).values.mean()
b_to_a = squared_distances.min(dim=0).values.mean()
chamfer = a_to_b + b_to_a
print(f"Squared Chamfer distance: {chamfer.item():.2f}")出力は1.00です。それぞれの方向の平均値は0.50です。同一の点集合では値が0になります。
モデル学習におけるChamfer損失#
Chamfer損失とは、損失関数として使用するChamfer距離のことです。ニューラルネットワークが点の座標を予測し、誤差逆伝播によって、予測点を参照点に近づける勾配が得られます。最近傍点の選択により目的関数は区分的に微分可能となり、対応関係が固定された領域内では、二乗距離から座標の勾配が得られます。
基礎となる応用例として、Haoqiang Fan、Hao Su、Leonidas J. Guibasが提案し、CVPR 2017で発表した点集合生成ネットワーク(PSGN)があります。このモデルは、単一画像からの3D再構成の学習目的関数としてChamfer距離を使用し、写真から物体の点群を予測します。この点集合を用いる目的関数により、事前に点と点の対応関係を定義せずに学習できます。
再構成とセグメンテーションでの応用#
3D再構成では、Chamfer距離によって、サンプリングした予測サーフェスと参照形状を比較します。また、メッシュフィッティングにも利用でき、メッシュからサンプリングした点が対象のサンプルに近づくように頂点を最適化します。球体からイルカへのメッシュフィッティングでは、Chamfer損失だけを最適化するとサーフェスが不均一になります。そのため、エッジ、法線、ラプラシアンによる正則化でメッシュの局所構造を制約します。
インスタンスセグメンテーションでは、Chamfer距離によって、サンプリングした予測輪郭とアノテーション済み輪郭の空間的なずれを測定します。UltralyticsのYOLO26セグメンテーションでは、Masks.xyを通じてポリゴン座標を取得できるため、外部でChamfer距離に基づく境界評価を行うための点集合を利用できます。面積に基づくIntersection over Unionとは異なり、輪郭距離は境界間の隔たりを表します。
関連する指標とスコアの解釈#
スコアが何を捉えているかを理解するうえで、次の3つの関連概念が役立ちます。
- Hausdorff距離は、最近傍点とのずれの最大値を用いるため、最も大きな境界またはサーフェスの不一致を重視します。
- Earth Mover距離は、分布間で質量を保つ最小コストの輸送を求め、点集合間の対応付けを行います。
- 密度を考慮したChamfer距離は、局所的なサンプリングの不均一性に対処します。通常のChamferマッチングでは複数の点が同じ最近傍点を共有できるため、サンプリングの均一性が低くても、密集したクラスターの誤差が小さくなる場合があります。
そのため、サンプリング密度、位置合わせ、データの前処理は比較結果に影響します。非二乗距離の単位は座標と同じで、二乗距離の単位はその二乗です。2つの点群をメートルからセンチメートルに変換すると、非二乗Chamfer距離は100倍、二乗Chamfer距離は10,000倍になります。










