Chamfer Distance
Расстояние Чамфера показывает, насколько близко совпадают наборы точек, 3D-поверхности или границы объектов. Оно помогает решать задачи реконструкции, сегментации и обучения моделей.
Расстояние Чамфера показывает, насколько близко совпадают два набора точек. Его вычисляют по расстоянию от каждой точки до ближайшего соседа в другом наборе. Чем меньше значение, тем лучше совпадение. В компьютерном зрении эту метрику используют для сравнения 3D-облаков точек — наборов дискретных пространственных координат — и 2D-границ объектов. Порядок точек не имеет значения, а количество точек в наборах может различаться.
Истоки метрики связаны с сопоставлением по фаскам (chamfer matching), предложенным Х. Г. Барроу, Дж. М. Тененбаумом, Р. К. Боллесом и Х. К. Вульфом в 1977 году для сопоставления фигур, представленных кривыми на изображениях. В механическом САПР фаска — это скошенная кромка, размеры которой описывают физический элемент.
Как вычисляется расстояние Чамфера#
Для двух непустых наборов точек A и B часто используют определение на основе квадратов расстояний, которое включает три шага:
- Для каждой точки в A найди ближайшую точку в B, возведи евклидово расстояние в квадрат и усредни полученные значения.
- Повтори вычисления в обратном направлении: от B к A.
- Сложи два средних значения для обоих направлений.
Первое направление учитывает штраф за предсказанные точки, удалённые от эталонной поверхности; обратное направление — штраф за участки эталона, отсутствующие в предсказании. Здесь используется та же операция поиска ближайшего соседа, что и в методе k ближайших соседей, но для каждого запроса находится один сосед. Реализация расстояния Чамфера в PyTorch3D поддерживает вычисления в обоих направлениях и только в одном направлении.
Выбор квадратов или обычных расстояний, а также суммирования или усреднения меняет оценку. Согласно другой распространённой конвенции усредняют средние значения для двух направлений, получая половину их суммы. Поэтому способ вычисления расстояния, единицы координат и нормализация входят в определение метрики для конкретного эксперимента.
В этом примере вычисления в 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. Для идентичных наборов точек результат равен нулю.
Функция потерь Чамфера при обучении моделей#
Функция потерь Чамфера — это расстояние Чамфера, используемое как функция потерь. Нейронная сеть предсказывает координаты точек, а обратное распространение ошибки вычисляет градиенты, которые смещают эти точки к эталонным. Выбор ближайших соседей делает целевую функцию кусочно-дифференцируемой: в области, где соответствия остаются неизменными, квадраты расстояний дают градиенты по координатам.
Одно из основополагающих применений — Point Set Generation Network (PSGN) Хаоцяна Фаня, Хао Су и Леонидаса Дж. Гуибаса, представленная на CVPR 2017. В ней расстояние Чамфера используется как целевая функция для обучения 3D-реконструкции по одному изображению: сеть восстанавливает облако точек объекта по фотографии. Такая целевая функция для наборов точек позволяет обучаться без заранее заданных попарных соответствий между точками.
Применение в реконструкции и сегментации#
В задачах 3D-реконструкции расстояние Чамфера позволяет сравнивать дискретизированные предсказанные поверхности с эталонной геометрией. Оно также применяется для подгонки сетки: вершины оптимизируют так, чтобы точки, взятые с сетки, приближались к целевым точкам. При подгонке сетки дельфина к сфере оптимизация только функции потерь Чамфера приводит к неровной поверхности; регуляризация по рёбрам, нормалям и лапласиану помогает сохранять локальную структуру сетки.
В сегментации экземпляров расстояние Чамфера измеряет пространственное расхождение между дискретизированными предсказанными и размеченными контурами. Сегментация Ultralytics YOLO26 предоставляет координаты полигонов через Masks.xy, позволяя использовать наборы точек для внешней оценки границ на основе расстояния Чамфера. В отличие от оценки по площади пересечение над объединением, расстояние между контурами показывает, насколько разнесены границы.
Связанные метрики и интерпретация оценок#
Три связанных понятия помогают понять, что именно отражает оценка:
- Расстояние Хаусдорфа использует наибольшее расхождение между ближайшими соседями, подчёркивая самое существенное несовпадение границ или поверхностей.
- Расстояние землекопа находит транспортировку между распределениями с минимальной стоимостью и сохранением массы, устанавливая соответствия между точками в наборах.
- Расстояние Чамфера с учётом плотности учитывает неравномерную локальную дискретизацию. При обычном сопоставлении по Чамферу у нескольких точек может быть один и тот же ближайший сосед, поэтому для плотных кластеров ошибка может быть небольшой, даже если точки распределены неравномерно.
На сравнение влияют плотность дискретизации, выравнивание и предобработка данных. Обычное расстояние имеет те же единицы измерения, что и координаты; квадрат расстояния — единицы, возведённые в квадрат. Если перевести оба облака из метров в сантиметры, обычное расстояние Чамфера увеличится в 100 раз, а расстояние Чамфера на основе квадратов расстояний — в 10 000 раз.










