Руководство

Глава 9 — SfM-бэкенды

Инспектор в режиме эксперта с шестью разделами Presets, Cameras & Capture, Training, Progress, Look и Export — каждый со строкой пояснения, когда он действует
Инспектор в режиме эксперта. Он делится на шесть разделов — Presets, Cameras & Capture, Training, Progress, Look и Export —, каждый из которых снабжён подстрокой, поясняющей, когда настройка вступает в силу. Выбор метода SfM находится в разделе „Cameras & Capture".
Развёрнутое меню Camera Alignment ровно с двумя пунктами: Apple Photogrammetry и Native
Развёрнутое меню Camera Alignment в поставляемой версии: ровно два пункта — Apple Photogrammetry и Native. COLMAP здесь не значится, а „Native" больше не несёт пометки Beta.

Пикер Camera Alignment находится в разделе инспектора „Cameras & Capture" и представляет собой раскрывающееся меню, а не Segmented Control (названия бэкендов слишком длинные для сегментов и разорвали бы узкую колонку инспектора). Количество пунктов зависит от сборки: версия App Store показывает ровно два — Apple Photogrammetry (по умолчанию) и Native. COLMAP отсутствует там как бэкенд полностью и появляется только в Developer-/DMG-сборках как третий пункт (см. Q2). Пункт для нативного метода называется просто „Native"; прежняя пометка „(experimental)" или „(Beta)" убрана — Native больше не путь для проб, а путь к качеству. Он силён в наземных орбитальных и фотосъёмочных сценах, но пока слаб в воздушном картографировании с дронов (слишком разреженное облако точек); Apple Photogrammetry остаётся надёжной настройкой по умолчанию. Если в качестве типа съёмки выбран неупорядоченный набор фотографий, приложение всегда выравнивает через Native, независимо от того, что показывает пикер — строка подсказки под пикером сообщает об этом явно, и пикер остаётся доступным для взаимодействия, потому что его значение не недоступно, а лишь переопределено. Внешние результаты SfM из Metashape, COLMAP или другого фотограмметрического ПО можно дополнительно импортировать через меню File (Q3 текстовый формат COLMAP, Q6 импорт Workspace) — пикер при этом не переключается, но импортированные позы заменяют результат SfM. Этот импорт не имеет отношения к вопросу о бэкенде COLMAP и работает в любой сборке.

SfM означает Structure from Motion. Из набора перекрывающихся фотографий программа восстанавливает для каждого снимка положение и направление взгляда камеры в общей 3D-системе координат. Для этого создаётся грубое облако 3D-точек, которое инициализирует обучение с помощью Gaussian Splatting. Результат SfM — это входные данные для собственно обучения, и он в значительной мере определяет последующее качество изображения.

RadianceKit предлагает пять путей SfM: два встроенных в приложение бэкенда (Q1 Apple Photogrammetry, Q4/Q5 Native), два пути импорта из внешних инструментов (Q3 текстовый формат COLMAP, Q6 бинарный импорт Workspace), а также Q2 COLMAP-Binary, доступный только в Developer-сборках вне App Store. Какой из них правильный, зависит от типа сцены (орбита вокруг объекта, интерьер, полёт дрона) и от того, поставляет ли внешнее ПО уже готовую реконструкцию.

Q1 — Apple Photogrammetry

ГДЕ

Expert View → Inspector → раздел „Cameras & Capture" → пикер Camera Alignment, пункт „Apple Photogrammetry". Настройка по умолчанию в каждой сборке.

ТЕХНИЧЕСКИ

Оборачивает встроенный фреймворк Apple Photogrammetry, изначально разработанный для Object Capture. Apple внутренне извлекает признаки по проприетарному конвейеру (шаги не задокументированы публично), верифицирует их через сопоставление нескольких видов и решает Bundle-Adjustment на Neural Engine + GPU Apple Silicon. Бэкенд полностью соответствует требованиям App Store (нет внешней бинарной программы, Sandbox=true, на устройстве), но выдаёт только позы камер плюс грубое облако точек — без диагностических метрик вроде длины треков или ошибки репроекции. Масштабируется, по рекомендации Apple, до пары сотен изображений. При более чем ~500 кадрах в линейных полётах дронов или крупных сценах на открытом воздухе воспроизводимо наблюдались сбои или тихое отбрасывание отдельных камер.

Q3 — Текстовый формат COLMAP (Metashape / ETH3D)

ГДЕ

Меню „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) ИЛИ перетаскивание папки с sparse/0/cameras.txt.

ТЕХНИЧЕСКИ

Читает стандартизированный текстовый экспорт COLMAP — три текстовых файла cameras.txt, images.txt, points3D.txt в подпапке sparse/0/ — и конвертирует во внутреннюю модель результата SfM. То же определение формата, что и у бинарного экспорта COLMAP, только в ASCII вместо бинарного вида. Выдаётся Agisoft Metashape, RealityCapture, PolyCam и бенчмарком ETH3D именно в этой раскладке. Парсер использует то же распознавание моделей камер, что и бинарный парсер, и знает все одиннадцать стандартных моделей камер COLMAP — от SIMPLE_PINHOLE и PINHOLE через SIMPLE_RADIAL (собственная настройка COLMAP по умолчанию) и OPENCV до вариантов «рыбий глаз». Устойчив к строкам-комментариям и пустым строкам. В тестах масштабируется до ~1 400 камер (ETH3D Tunnel) без проблем.

Q4 — Native SfM (инкрементальный)

ГДЕ

Expert View → Inspector → раздел „Cameras & Capture" → пикер Camera Alignment, пункт „Native" (без прежней пометки „(experimental)"). Инкрементальный режим является режимом по умолчанию для этого бэкенда; для Native выбора Mapper нет. Строка „Mapper" под ним относится исключительно к COLMAP: в Developer-сборках она видна, но затемнена, пока выбран Native, а в версии App Store отсутствует полностью. По-настоящему нативные строки — „FOV Override", „High-Quality" и „Native SfM Recipe" — при других бэкендах больше не исчезают, а остаются затемнёнными и сообщают в строке под собой, что нужно переключить, чтобы их снова разблокировать. Между инкрементальным и глобальным методом самостоятельно переключаться нельзя: инкрементальный жёстко задан по умолчанию, а на глобальный метод приложение переходит только само по себе (см. Q5).

ТЕХНИЧЕСКИ

Собственная GPU-ускоренная реализация всего конвейера SfM: признаки FAST+BRIEF ИЛИ SuperPoint+LightGlue через CoreML (включается переключателем „High-Quality"; при неупорядоченных фотонаборах активно в любом случае), за которым следуют сопоставление Hamming-KNN, фундаментальная матрица RANSAC, построение треков, выбор начальной пары, Two-View-Bootstrap (F→E плюс DLT), жадный инкрементальный Mapper с регистрацией PnP и триангуляцией по нескольким видам, и финальный Bundle-Adjustment через Levenberg-Marquardt со схур-редукцией с Huber-функцией потерь и аналитическими якобианами через решение Холецкого. Полностью соответствует требованиям App Store: нет внешней бинарной программы, Sandbox=true. Со встроенным детектором коллапса: он классифицирует результат как вырожденный, если менее 60 % входных кадров зарегистрировано, если частота точек на камеру падает ниже 13 или если облако точек почти плоское. За этим не следует немедленное переключение метода — приложение сначала повторяет инкрементальный прогон (оно принимает первый безупречный результат, иначе лучший из попыток) и переходит на глобальный Mapper (Q5) лишь тогда, когда даже лучшая попытка остаётся вырожденной. Эмпирически чисто работает на сценах орбиты/поворотного стола; на более общих движениях (полёт дрона, интерьеры со сложной геометрией) успешность ниже — но детектор эти случаи отлавливает. Надёжно масштабируется до ~200 камер, выше — со значительно большим временем работы.

Q5 — Native SfM (глобальный)

ГДЕ

Вызывается автоматически, когда инкрементальный Mapper (Q4) срабатывает детектором коллапса (менее 60 % входных кадров зарегистрировано, частота точек на камеру ниже 13 или почти плоское облако точек) — причём только после того, как инкрементальный прогон был повторён и даже лучшая попытка осталась вырожденной. Вручную запросить его нельзя: в инспекторе для этого нет пикера и вообще нет переключателя — приложение само решает, когда переключиться.

ТЕХНИЧЕСКИ

Глобальный вариант нативного конвейера. Сначала извлечение признаков + сопоставление, как в Q4, затем оценка относительной позы для всех верифицированных пар, далее усреднение вращений (синхронизирует все повороты камер в мировой системе координат) и усреднение переносов (на основе LSQR с матрично-свободной разреженной формулировкой, чтобы избежать переполнения целых чисел при больших наборах камер). Масштабируется до ~5 000 камер в принципе, на практике качество заметно снижается выше нескольких сотен камер. Обрабатывается как „уровень отката": применяется, когда инкрементальный Mapper вырождается даже после повторения, и сам повторно детектору коллапса не подвергается — если его результат остаётся разреженным, вместо этого срабатывает общее предупреждение о качестве конвейера.

Q6 — Импорт Workspace Metashape / COLMAP-текст

ГДЕ

Меню File → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Перетаскивание папки с sparse/0/cameras.{bin,txt} и images/.

ТЕХНИЧЕСКИ

Автоматически распознаёт, соответствует ли папка, выбранная перетаскиванием или через панель открытия, одной из трёх раскладок Workspace COLMAP (sparse/0/, sparse/ или корень) и представлена ли реконструкция в бинарном виде (cameras.bin) или текстовом (cameras.txt). Бинарный путь использует бинарный парсер COLMAP, текстовый путь — загрузчик ETH3D — оба производят одну и ту же модель результата SfM, а остальная часть конвейера (импорт изображений, запуск обучения MCMC) агностична к источнику. Изображения открываются через систему security-scoped закладок песочницы приложения, поэтому импорт работает и в версии App Store. Специально предназначен для случая «экспорт из Metashape без пересчёта реконструкции». Упомянутое в пункте меню File распознавание предупреждает в журнале приложения, если выбранная папка не является распознаваемым Workspace.

Q7 — Рецепты Native (Standard / Professional / E3 High-Accuracy)

ГДЕ

Expert View → Inspector → раздел „Cameras & Capture" → строка „Native SfM Recipe". Строка доступна для взаимодействия, только если в качестве Camera Alignment выбран „Native" и в качестве типа съёмки задан неупорядоченный набор фотографий — иначе она стоит затемнённой и указывает под собой, что нужно изменить (правила доступности описаны в Главе 2).

ТЕХНИЧЕСКИ

Три ступени одного и того же нативного бэкенда. Они меняют не алгоритм, а то, насколько тщательно он работает:

Standard — базовый рецепт без дополнительных ступеней.

Professional — дополнительно задействует две вещи: распознанные маркеры AprilTag входят как жёсткие тела в Mapping и Bundle-Adjustment, а на готовых позах выполняется плотная дотриангуляция (более плотное начальное облако точек). Если съёмка не содержит маркеров, детектор ничего не находит, и действует только плотная ре-триангуляция.

E3 High-Accuracy — строится на основе Professional и дополнительно подключает HQ-фронтенд (разбиение SuperPoint 3×3, LightGlue с 4096 ключевыми точками, пары Covisibility), а также совместное уточнение фокусного расстояния по всем камерам. Это даёт самые резкие позы камер и самое долгое время сопоставления.

Какой бэкенд когда использовать?

СценарийРекомендуемый бэкенд
Первый результат, не раздумываяQ1 Apple Photogrammetry (по умолчанию)
Сканирование объекта, 50–200 фотоQ1 Apple Photogrammetry
Максимальное качество на той же сценеПресет „Maximum Quality (Native)" — Q4 Native + рецепт Q7 E3
Съёмка с распечатанными маркерами AprilTagQ4 Native + рецепт Q7 Professional
Большой открытый объект / дрон / >500 снимковИмпорт Q6 Workspace (посчитать в Metashape или COLMAP, затем загрузить)
Есть экспорт из Metashape/RealityCaptureИмпорт Q6 (SfM не нужен)
ETH3D / академический набор COLMAP-TextИмпорт Q3 COLMAP-Text
Q4 сворачиваетсяQ5 Native global (переключается автоматически)

Быстрое сравнение

BackendApp StoreSandboxВнешний бинарникBest UseМакс. ~камер
Q1 Apple PGOrbit-Object~300
Q2 COLMAP Binary❌ (только Developer-сборка)colmap/glomapOutdoor large~5 000
Q3 COLMAP-Text-ImportBench rigs~1 500
Q4 Native incrementalOrbit-Object~200
Q5 Native globalQ4-Fallback~5 000
Q6 Workspace-ImportMetashape-Reuseна источник