Руководство

Глава 2 — Инспектор (Expert View)

Пустой Expert Mode — Project Navigator слева (Images 0, Cameras, Log), пустой viewport посередине, Инспектор справа с секциями Presets/Training Configuration/Enhancements/Training Metrics
Пустой Expert Mode — Project Navigator слева (Images 0, Cameras, Log), пустой viewport посередине, Инспектор справа с секциями Presets/Training Configuration/Enhancements/Training Metrics

Пустой Инспектор до импорта: Левая боковая панель показывает счётчик Images 0 и подсказку дропа «Drop images here / or tap + to import». Инспектор справа полностью функционален, но предустановки только информативны (нет активного обучения). Предустановка по умолчанию «Preview» (5K итераций) помечена. Camera Alignment установлен на Apple Photogrammetry, Densification — на Classic, SSIM Weight — 0.20, Render Scale — 50 %. В Training Metrics и Loss History показаны пустые состояния («Start training to see live metrics», «Loss curve will appear during training»).

Инспектор с загруженными 60 изображениями flowers — боковая панель изображений показывает первые имена файлов frame_0001.jpg и далее, заголовок гласит „60 images ready“
Инспектор с загруженными 60 изображениями flowers — боковая панель изображений показывает первые имена файлов frame_0001.jpg и далее, заголовок гласит «60 images ready»

Инспектор после импорта: Статус заголовка гласит «60 images ready». Боковая панель изображений перечисляет все 60 импортированных кадров (frame_0001.jpgframe_0945.jpg, каждый 16-й кадр из набора Bouquet на 960 камер как подмножество для быстрых итераций). Логика автоматического render scale проверяет разрешение изображений (1536×2048 = 3.1 MP) и подстраивает Render Scale соответствующим образом. Кнопка Play (зелёная, внизу слева) теперь активна и запускает обучение с активной предустановкой.

Инспектор во время обучения — живой viewport показывает реконструкцию flowers Bouquet, нижняя строка метрик (Loss / LR / Gaussian count / iterations), карточка предустановки „Preview“ с пометкой „Modified“, если параметры были изменены
Инспектор во время обучения — живой viewport показывает реконструкцию flowers Bouquet, нижняя строка метрик (Loss / LR / Gaussian count / iterations), карточка предустановки «Preview» с пометкой «Modified», если параметры были изменены

Инспектор во время обучения: Строка заголовка показывает глобальный прогресс «RadianceKit — Training NN %». Viewport рендерит текущую реконструкцию Gaussian в реальном времени (обновляется каждые 50 итераций — интервал живого предпросмотра задаётся в Settings → General → Training → Live Preview). Строка метрик под viewport: текущий Loss, Learning Rate, число Gaussians и счётчик итераций (напр. 1 600/5 000 с предустановкой Preview). Карточка предустановки «Preview» получает пометку «Modified», как только любой параметр отклоняется от встроенного значения по умолчанию. Боковая панель «Log» собирает события этапов SfM и обучения.

Инспектор после завершения обучения — viewport показывает законченную реконструкцию flowers Bouquet (2 991 Gaussians после 5K итераций за 13 с), строка заголовка „Training Complete — 2,991 Gaussians“
Инспектор после завершения обучения — viewport показывает законченную реконструкцию flowers Bouquet (2 991 Gaussians после 5K итераций за 13 с), строка заголовка «Training Complete — 2,991 Gaussians»

Инспектор после обучения: Строка заголовка показывает финальное число Gaussians (здесь 2 991 — очень компактно, поскольку синтетическая сцена Bouquet из Blender имеет простую геометрию на светлом фоне). Viewport показывает законченное облако точек — активна orbital drag-навигация (вращает вокруг центра сцены). Секция Training Metrics теперь заполнена финальными значениями, график Loss History показывает ход всех 5 000 итераций. Секция Export внизу теперь активна (все кнопки форматов разблокированы).

Инспектор — это правая боковая панель в Expert Mode (⌘2). Он объединяет все параметры, относящиеся к обучению, в пять сворачиваемых секций: Presets, Training Configuration, Enhancements, Metrics и Loss Chart. Каждая секция может быть свёрнута щелчком по заголовку, а порядок можно менять через drag-and-drop (InspectorView.swift:81-97). По умолчанию все секции видны, и состояние приложения сохраняет предпочтения свёртывания и порядка между запусками.

Ряд элементов управления Инспектора также появляются почти в идентичной форме в Settings (глава 3) — обычно SfM-бэкенд, sky masking и аналогичные значения по умолчанию. Разделение сделано сознательно: Settings предоставляет глобальный для приложения шаблон для вновь создаваемых проектов, Инспектор переопределяет эти значения для текущего открытого проекта. Стоит освоить логику работы одной стороны — и другую можно использовать вслепую.

Левая колонка в Expert Mode — Project Navigator — не входит в Инспектор, но является его прямым соседом. Там можно выбирать импортированные изображения щелчком, предпросматривать их по пробелу через Quick Look и удалять через кнопку минус или клавишу Delete (с Cmd-Z для отмены). Инспектор следует за текущим выбором в боковой панели контекстно-зависимой детальной информацией, но пять основных секций всегда остаются видимыми.

Секция Presets (I1–I11)

Секция Presets — самый быстрый способ применить протестированную конфигурацию. Встроенные предустановки (Classic, MCMC, Scene-Class) дают воспроизводимые отправные точки из 560+ задокументированных экспериментов; собственные предустановки можно сохранять, экспортировать, импортировать и передавать. Список сгруппирован по категориям (Classic, MCMC, SceneClass, Custom), и одновременно может быть развёрнуто несколько категорий. Контекстное меню (правый клик по строке) делает доступными Export, Duplicate, а для пользовательских предустановок — Delete.

I1Кнопка Save…

ГДЕ

Инспектор → секция Presets → кнопка Save… (панель действий внизу).

ТЕХНИЧЕСКИ

Открывает popover с текстовым полем и кнопками Save/Cancel. Текущее состояние TrainingConfig сохраняется как новая пользовательская предустановка (JSON-encoded, хранится для всего приложения). Процесс сохранения копирует все 81 параметр обучения плюс текущую стратегию densification. Предустановка автоматически попадает в категорию Custom, независимо от того, из какой встроенной предустановки была получена. Пустые имена и ввод из одних пробелов отклоняются. Уже существующие имена не отклоняются — у каждой предустановки свой внутренний ID, дубли имён технически разрешены, но практически путают.

I2Текстовое поле Preset Name

ГДЕ

Save-popover → текстовое поле «Preset Name».

ТЕХНИЧЕСКИ

Простое текстовое поле со скруглённой обводкой, широкое. При щелчке по кнопке Save значение берётся как имя предустановки. Лимита длины в UI нет, но сохраняемое имя должно быть JSON-кодируемым и отображаемым в списках UI — эмодзи и умляуты работают. Содержимое автоматически сбрасывается в пустую строку при открытии popover. Кнопка Save остаётся деактивированной, пока поле пусто после trim. Auto-suggest и pre-fill именем текущей активной предустановки нет.

I3Кнопка Cancel (диалог Save)

ГДЕ

Save-popover → кнопка Cancel (слева).

ТЕХНИЧЕСКИ

Закрывает popover без сохранения. Отбрасывает содержимое текстового поля — при следующем открытии оно будет сброшено в пустое логикой кнопки Save… (I1). Стандартный стиль кнопки, без диалогов подтверждения и без hotkeys. Текущая TrainingConfig остаётся без изменений, поскольку путь сохранения вообще не выполнялся.

I4Кнопка Save (диалог Save)

ГДЕ

Save-popover → кнопка Save (справа, заметный стиль).

ТЕХНИЧЕСКИ

Триггерит собственно сохранение. Ещё раз валидирует, что имя непустое (defensive check), и затем пишет текущую TrainingConfig как JSON в app-storage. Затем закрывает popover. Выделено синим, серым пока текстовое поле пусто. Если сохранение не удаётся (напр. из-за полного app-storage — очень маловероятно), видимого диалога об ошибке пока нет; предустановка просто не появится при следующем запуске приложения.

I5Кнопка Export…

ГДЕ

Инспектор → секция Presets → панель действий → кнопка Export….

ТЕХНИЧЕСКИ

Экспортирует текущую выбранную предустановку в файл .radiancepreset (внутри — JSON). Деактивирована, если не выбрана ни одна предустановка. По щелчку приложение открывает save-диалог с именем файла предустановки (имя предустановки + расширение .radiancepreset). Сохранённый формат содержит полную TrainingConfig плюс метаданные (имя, категория, ID, built-in-флаг). Двойной щелчок в Finder открывает приложение, но не автоматически импорт; пользователь должен воспользоваться кнопкой Import (I6).

I6Кнопка Import…

ГДЕ

Инспектор → секция Presets → панель действий → кнопка Import….

ТЕХНИЧЕСКИ

Открывает файловый диалог, разрешающий только файлы .radiancepreset (multiselect отключён). При выборе JSON-файл загружается, валидируется и вставляется в категорию Custom — с новым внутренним ID, чтобы не было коллизий со встроенными. Импорт автоматически устанавливает категорию в Custom, даже если экспортированная предустановка изначально была, напр., built-in. Повреждённые или несовместимые со старой версией схемы файлы тихо отклоняются, без диалога ошибки (консольный лог информацию даёт).

I7Строка предустановки (активация щелчком)

ГДЕ

Инспектор → секция Presets → каждая строка предустановки в каждой категории.

ТЕХНИЧЕСКИ

Щелчок по строке предустановки заменяет все поля TrainingConfig значениями из предустановки, запоминает ID активной предустановки и сбрасывает статус Modified. Активная галочка перед строкой появляется только когда предустановка выбрана И не изменена. Как только значение в TrainingConfig меняется (слайдер, степпер, переключатель в других секциях Инспектора), после имени появляется оранжевая пометка «Modified». Встроенные предустановки нельзя перезаписать — при модификации нужно создать копию кнопкой Save (I1).

I8Контекстное меню «Export…»

ГДЕ

Правый клик на любой строке предустановки → первая запись «Export…».

ТЕХНИЧЕСКИ

Идентичная функциональность с I5 (кнопка Export…), но удобнее доступна — без необходимости предварительно выбирать предустановку. Экспортирует напрямую предустановку из строки, по которой щёлкнули. Работает одинаково для всех категорий (built-in или custom), без ограничений. Экспорт содержит built-in-флаг и оригинальную категорию, но при повторном импорте категория мапится в Custom, как описано под I6.

I9Контекстное меню «Duplicate»

ГДЕ

Правый клик на любой строке предустановки → вторая запись «Duplicate».

ТЕХНИЧЕСКИ

Клонирует предустановку в категорию Custom. Создаёт новый внутренний ID, добавляет « Copy» к имени и сохраняет копию. Работает и для встроенных предустановок — клон тогда редактируем. Оригинал остаётся нетронутым. TrainingConfig копируется значение-за-значением (JSON round-trip), так что нет reference-bindings между оригиналом и копией.

I10Контекстное меню «Delete»

ГДЕ

Правый клик на ваших собственных строках предустановок → последняя запись «Delete» (красная, destructive).

ТЕХНИЧЕСКИ

Видна только для пользовательских предустановок. Встроенные удалить нельзя. Запись помечена как destructive, появляется в контекстном меню красной и отделена разделителем, чтобы не щёлкнуть случайно. Диалога подтверждения нет — щелчок сразу удаляет предустановку. Удалённая предустановка не восстанавливается (Cmd-Z здесь не работает — Undo в текущей сборке существует только для списка изображений, не для операций с предустановками). Если удалённая предустановка только что была активной, текущая TrainingConfig остаётся без изменений, обнуляется только выбор активной предустановки.

I11Заголовок категории (expand/collapse)

ГДЕ

Инспектор → секция Presets → каждый заголовок категории (Classic, MCMC, SceneClass, Custom).

ТЕХНИЧЕСКИ

Состояние свёртывания на категорию с разными значениями по умолчанию: Classic стартует развёрнутой, MCMC, SceneClass и Custom — свёрнутыми. Состояние не сохраняется — при перезапуске приложения все категории снова в значении по умолчанию. Стрелка-шеврон поворачивается с анимацией. Число справа в заголовке показывает количество предустановок в этой категории. Hit-area щелчка охватывает всю область заголовка.

Секция Training Configuration (I12–I22)

Вырезка только секции Training Configuration — Camera Alignment (Apple Photogrammetry активна, Native (Beta) неактивна), Densification (Classic активна), Max Iterations 5,000 / Densify Until 3,500 со значком link, слайдер SSIM Weight 0.20, слайдер Render Scale на 100 % (1,536×2,048 = 3.1 MP)
Вырезка только секции Training Configuration — Camera Alignment (Apple Photogrammetry активна, Native (Beta) неактивна), Densification (Classic активна), Max Iterations 5,000 / Densify Until 3,500 со значком link, слайдер SSIM Weight 0.20, слайдер Render Scale на 100 % (1,536×2,048 = 3.1 MP)

Здесь живут центральные рычаги: какой SfM-бэкенд должен считать, как работает densification, сколько итераций, сколько веса SSIM. При стратегии MCMC появляются два дополнительных переключателя («MCMC Quality» и «Auto-scale by scene»), скрытые в Classic-режиме. При бэкенде Native SfM добавляется поле FOV override, нужное только для видеокадров без EXIF focal length.

I12Picker Camera Alignment

ГДЕ

Инспектор → Training Configuration → Camera Alignment (сегментированный picker наверху).

ТЕХНИЧЕСКИ

Сегментированный picker с двумя опциями: Apple Photogrammetry и Native (Beta). Выбор определяет SfM-бэкенд, используемый при следующей реконструкции камер. Одновременно он влияет, какие дополнительные элементы Инспектора видны: Native дополнительно показывает FOV override (I13), нужный только для видеокадров без EXIF. Примечание: для очень больших уличных съёмок можно через workspace import импортировать результат внешнего инструмента (Metashape или COLMAP) — см. главу 1 (M5) и главу 9 (Q3, Q6).

I13Поле FOV Override (Native SfM)

ГДЕ

Инспектор → Training Configuration → FOV Override (видно только при Camera Alignment = Native).

ТЕХНИЧЕСКИ

Числовое текстовое поле (диапазон 0–170°), по умолчанию 0 = автоматическое определение из EXIF или эвристика. Ручной ввод нужен, когда входные изображения извлечены из видео, не содержащего метаданных focal length. Типичные значения: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, дрон с full-frame-сенсором ≈ 84°. Значение ограничивается [0, 170] — выходящие значения сразу отбрасываются обратно. Влияет только на нативный SfM-конвейер (Q4/Q5); Apple Photogrammetry это значение полностью игнорирует.

I15Picker Densification

ГДЕ

Инспектор → Training Configuration → Densification (сегментированный picker, всегда виден).

ТЕХНИЧЕСКИ

Переключает между двумя стратегиями densification: Classic (оригинальная процедура 3DGS с clone/split/prune и gradient threshold) и MCMC (Stochastic Gradient Langevin Dynamics с Relocation, NeurIPS 2024). При переключении с Classic на MCMC приложение автоматически устанавливает MCMC-специфичные поля в проверенные значения по умолчанию (reg weights = 0, MCMC cap multiplier 3.0, sample/noise schedule). Без этой автоматической инициализации сессии со старыми предустановками страдали от 1.4.4 MCMC-collapse-бага (460K→5 Gaussians, watchdog kill). Выбор picker дополнительно определяет, какие элементы Инспектора видны — при MCMC появляются I16/I17. Подробный эффект полей — в главе 6, T11–T16 (Classic) и T61–T73 (MCMC).

I16Переключатель MCMC Quality

ГДЕ

Инспектор → Training Configuration → MCMC Quality (только при Densification = MCMC).

ТЕХНИЧЕСКИ

Переключает gradient accumulation на 2 шага (актив) или 1 шаг (неактив). Накапливает градиенты из двух последовательных видов камеры перед выполнением шага оптимизатора. Эмпирически (Session 33, V544a) уменьшает финальную L1-ошибку примерно на 6 % (0.0246 с Quality против 0.0261 без, в среднем по 3 прогонам на Horse-Full- MCMC). Цена: удвоенное время обучения. При очень длинных тренировках (200K итераций) это приводит к 10+ минутам дополнительного ожидания — так что оправдано только если действительно нужны последние проценты качества. Влияет только на обучение, не на формат экспорта или отображение в viewport.

I17Переключатель Auto-scale by scene

ГДЕ

Инспектор → Training Configuration → Auto-scale by scene (только при MCMC).

ТЕХНИЧЕСКИ

Когда активен, масштабирует эффективный потолок max-Gaussians по числу SfM init-точек × MCMC cap multiplier (по умолчанию 3.0). Пример: SfM даёт 250K init-точек, base cap = 150K, multiplier 3.0 → эффективный потолок = max(150K, 750K) = 750K. При деактивации строго применяется только base. Был введён для v1.4.5, потому что большие уличные съёмки свыше 1000 кадров и соответственно высокой плотностью SfM-точек морили densification жёстким cap 150K по умолчанию — избыточные точки оставались, новые не могли появляться. По умолчанию OFF в пользовательских предустановках, ON во встроенных MCMC. Влияет только на время обучения, не на экспорт.

I18Степпер Max Iterations

ГДЕ

Инспектор → Training Configuration → GroupBox → Max Iterations.

ТЕХНИЧЕСКИ

Степпер с диапазоном 1 000–100 000, шаг 1 000. Определяет общее число итераций оптимизатора. Линейно коррелирует с временем обучения (половина = прим. 50 % времени). Эмпирические sweet spots: 20K (Classic Balanced, L1≈0.028), 40K (Classic Quality, L1≈0.023), 200K (MCMC Full, L1≈0.0246). Свыше 40K с Classic в среднем едва ли что-то даёт — diminishing returns. При изменении, если активна link-функция (I19), Densify Until пропорционально подтягивается (отношение по умолчанию: 0.5, т.е. Densify- Until = Max/2).

I19Кнопка Link/Unlink (Densify ↔ Iterations)

ГДЕ

Инспектор → Training Configuration → GroupBox → маленькая link-кнопка между Max Iterations и Densify Until.

ТЕХНИЧЕСКИ

Кнопка-переключатель, замораживающая соотношение Densify Until к Max Iterations. Когда активна (link-значок выделен), при каждом изменении Max Iterations Densify Until подтягивается пропорционально. Когда unlinked (значок link-plus), значения остаются независимыми. По умолчанию linked, потому что это отражает типичную корреляцию — когда вы тянете обучение на удвоение итераций, обычно хотите, чтобы densification тоже шёл пропорционально дольше. Соотношение вычисляется из текущего значения при установке link-кнопки; типичное соотношение — 0.5 (Densify-Until = половина числа итераций).

I20Степпер Densify Until

ГДЕ

Инспектор → Training Configuration → GroupBox → Densify Until.

ТЕХНИЧЕСКИ

Степпер с диапазоном 500–50 000, шаг 500. Определяет индекс итерации, начиная с которого больше не добавляются новые Gaussians через clone/split (Classic) или relocation (MCMC). После достижения уточняются только позиция и цвет. Более высокие значения = больше Gaussians = больший файл, более долгое per-iteration-время (+30–60 % GPU-времени на шаг). Типичные значения: 15K (для 30K max-iter), 20K (для 40K), 100K (для 200K MCMC). При активном link (I19) автоматически масштабируется. Действует по-разному при Classic vs MCMC: Classic полностью останавливает рост, MCMC останавливает relocation-логику, но адаптация sample/noise продолжает работать.

I21Слайдер SSIM Weight

ГДЕ

Инспектор → Training Configuration → GroupBox → SSIM Weight.

ТЕХНИЧЕСКИ

Слайдер 0.0–1.0 с шагом 0.05, отображается как «0.20». Смешивает L1 loss (0.0) и SSIM loss (1.0). L1 ужесточает яркость на пиксель, SSIM ужесточает структурное сходство (края, локальные статистики). По умолчанию 0.2 — значение из оригинальной статьи 3DGS (Kerbl 2023) и обратно-инженерно определено как устойчивый компромисс в многочисленных сессиях. Более высокие значения (0.5+) способствуют сохранению деталей, но могут игнорировать локальные ошибки яркости. Более низкие значения (< 0.1) ведут к потере деталей на резких краях. Вычисление SSIM работает в шейдере с гауссовым окном 11×11. Производительность: при 0.0 (только L1) обучение примерно на 8–12 % быстрее, поскольку вычисление SSIM в шейдере пропускается.

I22Слайдер Render Scale

ГДЕ

Инспектор → Training Configuration → GroupBox → Render Scale.

ТЕХНИЧЕСКИ

Слайдер 0.25–1.0 с шагом 0.25, отображается как «100 %». Масштабирует разрешение рендеринга обучения относительно размера исходного изображения. Самый большой рычаг производительности: 50 % сокращает GPU-время прим. на 75 % (поскольку в 4× меньше пикселей), 25 % — прим. на 94 %. Gradient threshold автоматически масштабируется. Под слайдером появляется живое отображение разрешения в MP (напр. «2304×1296 (3.0 MP)»). Если текущее значение отклоняется от рекомендованного, оранжевым текстом показывается «— recommended: 50 %». Рекомендация целится в ~3 MP эффективного разрешения — диапазон, наиболее эффективно обрабатываемый GPU Apple Silicon. Для 4K-исходных изображений рекомендуется, напр., 25 %, для FullHD — 100 %. Изменение дополнительно триггерит buffer reallocation.

Секция Enhancements (I26–I29)

Вырезка только секции Enhancements — четыре строки: Post-Training Compactification (переключатель on), MetalFX Spatial Upscaling (off), MPS Lanczos Scaling (off), Perceptual Loss (слайдер на „Off“). Каждая строка с подзаголовком объясняет свою функцию
Вырезка только секции Enhancements — четыре строки: Post-Training Compactification (переключатель on), MetalFX Spatial Upscaling (off), MPS Lanczos Scaling (off), Perceptual Loss (слайдер на «Off»). Каждая строка с подзаголовком объясняет свою функцию

Секция Enhancements группирует четыре функции, которые улучшают качество изображения, не меняя сам базовый цикл обучения. Первые три (I26–I28) — это post-training или viewport-этапы: Compactification наводит порядок после окончания обучения, MetalFX и MPS Lanczos — чистые viewport-рендереры, не влияющие на идущее обучение. Perceptual Loss (I29), несмотря на принадлежность к секции, является компонентой обучения — активируется как дополнительный loss-член во время обучения, поэтому отделена от viewport-переключателей разделителем.

I26Переключатель Post-Training Compactification

ГДЕ

Инспектор → Enhancements → Post-Training Compactification.

ТЕХНИЧЕСКИ

Активирует V443 post-processing: после завершения итераций обучения Gaussians с непрозрачностью ниже 0.01 (1 % видимости) удаляются. Эмпирически это уменьшает размер файла на ~55–58 % при нулевой видимой потере качества — потому что эти Gaussians и так не вносят визуального вклада. Compactification работает как GPU compact pass и занимает от долей секунды до нескольких секунд в зависимости от числа Gaussians. Не влияет на производительность обучения. Если этот переключатель выключен, невидимые Gaussians тоже экспортируются — актуально только если хотите использовать формат для другого этапа обучения (Continue Training), иначе впустую потраченное хранилище.

I27Переключатель MetalFX Spatial Upscaling

ГДЕ

Инспектор → Enhancements → MetalFX Spatial Upscaling.

ТЕХНИЧЕСКИ

Активирует Apple MetalFX Spatial Upscaler в рендерере viewport. Когда разрешение обучения (через I22 Render Scale) ниже размера viewport, MetalFX масштабирует отрендеренный кадр ML-based до размера дисплея. Даёт самые резкие результаты из всех вариантов масштабирования, потому что модель ML-upscaler оптимизирована на резкие края. Конвейер рендерера переконфигурируется вживую при переключении — видно немедленно, без перезапуска. Имеет приоритет над MPS Lanczos (I28): если оба активны, MetalFX побеждает. Overhead производительности в viewport прим. 1–2 мс на кадр на GPU M3. Действует только на живой viewport, не на отрендеренные экспорты (orbit video, скриншоты) — те рендерятся в полном разрешении источника.

I28Переключатель MPS Lanczos Scaling

ГДЕ

Инспектор → Enhancements → MPS Lanczos Scaling.

ТЕХНИЧЕСКИ

Активирует Apple Metal Performance Shaders с Lanczos-resampling как viewport upscaler. Lanczos — классический resampling с 8-tap sinc-фильтром — резче, чем билинейный, классический алгоритм без ML. Конвейер рендерера переконфигурируется вживую при переключении. Игнорируется, если MetalFX (I27) тоже активен. Минимальный overhead (<0.5 мс на кадр), но качество ниже MetalFX. Применение: fallback для сцен, в которых MetalFX даёт артефакты (напр., сильные линейные структуры, которые ML-upscaler иногда «утюжит»). Действует, как и I27, только на живом viewport, не в экспортах.

I29Слайдер Perceptual Loss

ГДЕ

Инспектор → Enhancements → Perceptual Loss.

ТЕХНИЧЕСКИ

Слайдер 0.0–0.2 с шагом 0.01, при 0.0 отображается как «Off», иначе как «0.05» и т.д. Активирует дополнительный loss-член, сравнивающий многомасштабное гауссово размытие рендеринга с ground truth-изображением (3 blur scale). Захватывает структурные различия, которые L1+ SSIM сами по себе не обнаруживают. Реализация V460. Эмпирически значение 0.05–0.1 улучшает L1-балл в сессиях на несколько процентов, но стоит ~5 % времени обучения (дополнительный forward pass через blur-kernel). Свыше 0.15 обучение становится нестабильным, и L1 снова ухудшается (loss-член доминирует в оптимизации). Действует во время обучения, не в post-processing — несмотря на позицию в секции «Enhancements» это не чистая post-обработка.

Секция Metrics (I30–I38)

Вырезка только секции Training Metrics после завершённого обучения на Bouquet (5K итераций, финально 2 991 Gaussians) — таблица с метриками обучения (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)
Вырезка только секции Training Metrics после завершённого обучения на Bouquet (5K итераций, финально 2 991 Gaussians) — таблица с метриками обучения (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)

Пока идёт обучение, секция Metrics показывает девять живых значений из цикла обучения. До начала обучения секция пуста («Start training to see live metrics»). Все значения обновляются каждые ~30 итераций (частота обновления потока). Секция read-only — ни один элемент не кликабелен и не изменяем. Для более глубокого анализа смотрите JSONL- training-логи под ~/Documents/RadianceKit/Logs/ (скрипт python3 scripts/analyze_logs.py best 5).

I30Iteration

ГДЕ

Инспектор → Metrics → Iteration. Read-only.

ТЕХНИЧЕСКИ

Отображается в формате «4523 / 40000» — текущая итерация над общим планируемым числом итераций. Считает синхронно с циклом обучения, который отправляет значения каждые ~30 iter. Второе число соответствует значению Max Iterations на момент старта; оно больше не меняется, даже если пользователь подкручивает степпер позднее — идущий прогон использует собственную snapshot-копию. Если приложение через меню Training (Continue Training +5K/+10K/+20K) додавливает дополнительные итерации, знаменатель увеличивается.

I31Loss

ГДЕ

Инспектор → Metrics → Loss. Read-only.

ТЕХНИЧЕСКИ

Float-значение с шестью знаками после запятой (напр. «0.024385»). Измеряет комбинированный L1+SSIM loss (смесь управляется через I21 SSIM Weight) плюс опциональный Perceptual Loss (I29) и другие регуляризаторы. Шкала не абсолютная, а зависит от сцены — для большинства сравнений требуется тот же датасет. Типичные конечные значения при хороших конфигурациях: - Classic Quality 40K iter: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iter: 0.024–0.028 - Outdoor drone 30K: 0.030–0.060 (хуже из-за геометрии) - Indoor apartments: 0.018–0.025

Значения выше 0.10 после 5K итераций указывают на SfM- проблемы (плохие позы камер) — прервите и пересчитайте SfM.

I32Learning Rate

ГДЕ

Инспектор → Metrics → Learning Rate. Read-only.

ТЕХНИЧЕСКИ

Отображение в научной нотации (напр. «1.60e-04»). Текущая скорость обучения для параметров позиции (у 3DGS шесть независимых LR для позиции, SH-DC, SH-Rest, непрозрачности, масштаба, поворота — здесь отображается позиция-LR как представительное значение). Начальное значение по умолчанию — 1.6e-4, которое спадает через exponential decay до ~1.6e-6 к концу обучения. Decay настраивается через поле LR schedule в training configuration (T-поле в главе 6). Если LR остаётся необычно высоким (напр. 1e-3 или более после 10K итераций), это может указывать на неверно загруженную конфигурацию.

I33SH Degree

ГДЕ

Инспектор → Metrics → SH Degree. Read-only.

ТЕХНИЧЕСКИ

Integer 0–3. Степень спherical harmonics для цветового представления. Стартует на 0 (только DC-компонента, т.е. независимый от направления цвет на Gaussian — значит только одна RGB-константа) и прогрессивно растёт до 3 по ходу обучения. Стандартное расписание поднимает степень на итерациях 1000/2000/3000 на 1 каждый раз. SH-3 соответствует 48 цветовым коэффициентам на Gaussian (3 RGB-канала × 16 SH-базисных функций). Более высокая SH-степень = более зависимое от направления отражение (глянцевые поверхности выглядят корректно по-разному под разными углами обзора), но также больше памяти и более медленное обучение.

I34Gaussians

ГДЕ

Инспектор → Metrics → Gaussians. Read-only.

ТЕХНИЧЕСКИ

Текущее число Gaussians в модели, отформатировано с locale-разделителем (напр. «524.318»). Рост: - Classic: стартует на SfM init-точках (обычно 50K–300K), растёт через clone/split до незадолго до Densify Until, затем статично до конца обучения (по модулю pruning) - MCMC: sample-точки добавляются до MCMC cap, затем только relocation

Здоровые конечные значения: - Classic Quality: 400K–700K (Horse 524K, Garden 800K) - MCMC Full: точно на cap (по умолчанию 150K, с auto-scale множителем × SfM count, в зависимости от сцены 500K–1.5M)

При MCMC, если число падает до < 60 % cap → аномалия (collapse-индикатор, указывает на слишком агрессивные регуляризаторы).

I35GPU Memory

ГДЕ

Инспектор → Metrics → GPU Memory. Read-only.

ТЕХНИЧЕСКИ

Оценка потребления памяти Gaussian-буфера как число Gaussians × 616 байт (отформатировано в memory-стиле). 616 байт — эмпирический размер полностью оснащённого Gaussian (позиция, масштаб, поворот, непрозрачность, SH-коэффициенты степени 3, gradient accumulator). Отображение не учитывает overhead рендерера (tile buffer, sort buffer, backward buffer) — реальная потребность в GPU-памяти обычно в 2–3 раза выше этого значения. При 500K Gaussians: отображается ~290 MB, реально ~700 MB. При 1.5M Gaussians: отображается ~880 MB, реально ~2.5 GB. На M3 Max с 64+ GB Unified Memory не критично, на M3 Pro с 18 GB уже предел.

I36Speed

ГДЕ

Инспектор → Metrics → Speed. Read-only.

ТЕХНИЧЕСКИ

Итерации в секунду с одним знаком после запятой («24.3 it/s»). Вычисляется тренером как скользящее среднее по последним ~100 итерациям. Типичные значения: - предустановка Quick (1K iter): 80–120 it/s (коротко, без устойчивого состояния) - Classic 20K @ 1.0 Render Scale (сцена Truck, M3 Max): 25–35 it/s - Classic 20K @ 0.5 Render Scale: 80–120 it/s - MCMC 200K @ 0.5 Render Scale: 25–50 it/s (медленнее из-за relocation) - При 1M+ Gaussians и полном разрешении: < 10 it/s

Уменьшение скорости по ходу обучения нормально — больше Gaussians = больше вычислений на итерацию. Внезапные провалы (напр. с 30 → 5 it/s) указывают на GPU thermal throttling или конкурирующие приложения.

I37Elapsed

ГДЕ

Инспектор → Metrics → Elapsed. Read-only.

ТЕХНИЧЕСКИ

Уже прошедшее время как «4:23» (m:ss) или «1:23:45» (h:mm:ss). Смена формата от 1 часа. Измеряет только чистое время обучения, не предшествующие фазы (вычисление SfM, импорт изображений). С pause/resume часы продолжают идти — так что это wall-clock, не CPU time.

I38ETA

ГДЕ

Инспектор → Metrics → ETA. Read-only.

ТЕХНИЧЕСКИ

Оценочное оставшееся время как «17:42» или «1:12:35». Расчёт: (Max Iterations − текущая итерация) / итерации в секунду. Показывает «–», когда скорость сейчас нулевая (в самом начале или во время паузы). Оценка не подстраивается под типичное замедление к концу обучения — особенно при MCMC и Classic с большими значениями Densify-Until обучение склонно становиться медленнее, потому что появляется всё больше Gaussians. Реально обычно остаётся на 10–20 % выше изначального ETA.

Секция Loss Chart (I39–I41)

Вырезка только секции Loss History после завершённого обучения — Current 0.0064, Min 0.0035 (зелёный), синяя кривая от 0.027 (итерация 1) к 0.0035 (итерация 5K) с характерным изгибом около iter 200, ниже график Gaussian Count оранжевым
Вырезка только секции Loss History после завершённого обучения — Current 0.0064, Min 0.0035 (зелёный), синяя кривая от 0.027 (итерация 1) к 0.0035 (итерация 5K) с характерным изгибом около iter 200, ниже график Gaussian Count оранжевым

Секция Loss Chart визуализирует ход обучения со временем. Состоит из двух графиков: Loss Curve (большой, сверху, синий) и Gaussian Count (меньше, снизу, оранжевый). Оба строятся вживую во время обучения и сохраняются до следующего старта обучения. До первого обучения область пуста («Loss curve will appear during training»). Графики — чистые SwiftUI path-drawings (не Swift Charts framework), поэтому рендерятся плавно даже при 100K+ точек.

I39Current Loss (отображение)

ГДЕ

Инспектор → Loss Chart → левая label-область «Current: 0.0287». Read-only.

ТЕХНИЧЕСКИ

Float-значение последней точки loss-выборки, форматировано с четырьмя знаками после запятой. Идентично с I31 (Loss в секции Metrics), здесь только компактнее отформатировано. Источник — loss-history — список, получающий запись каждые ~30 итераций. В список добавляются только конечные значения — NaN/Infinity (очень редко, в случае gradient explosion bug) фильтруются.

I40Min Loss (отображение)

ГДЕ

Инспектор → Loss Chart → правая label-область «Min: 0.0245» (зелёный). Read-only.

ТЕХНИЧЕСКИ

Минимум всех когда-либо виденных значений loss текущего прогона обучения. Живо пересчитывается из loss-history — никакого отдельного сохранения. Отображается зелёным текстом, потому что «Min» = «лучший на данный момент». Пунктирная зелёная линия на нижнем краю графика визуально маркирует эту Y-позицию. С continue- training-сессиями отслеживание min рестартует — старая история заменяется в UI новой (не дописывается). Если текущее обучение идёт хуже предыдущего, отображение min может оказаться больше предыдущего конечного результата.

I41График Gaussian Count

ГДЕ

Инспектор → Loss Chart → второй график снизу (оранжевый). Read-only.

ТЕХНИЧЕСКИ

Линейный график числа Gaussians по итерациям обучения. Источник: история числа Gaussians (список пар (iter, count), заполняемый тренером каждые ~30 iter). Y- шкала динамическая между минимумом и максимумом истории. При стратегии Classic кривая обычно выглядит так: стабильно растёт до Densify Until, потом плоская (с маленькими pruning-колебаниями). При MCMC: крутой подъём до cap, затем горизонтальная линия (relocation удерживает число постоянным). Если кривая падает несмотря на активное обучение, densification прунит слишком агрессивно — индикация неверных дефолтов или известного MCMC-collapse- бага (тема hotfix v1.4.4).

Как читать кривую loss?

График loss — важнейший диагностический инструмент в Инспекторе — ни один другой индикатор не показывает так напрямую, продвигается ли обучение полезно или застряло. Типичная здоровая форма — быстрый спад в первые 1000–3000 итераций (от ~0.15 до ~0.05), за которым следует медленный, устойчивый спад до конца обучения (до 0.020–0.030). Логарифмически кривая выглядит как гладкая диагональ.

Что означает плато в loss? Если кривая остаётся плоской несколько тысяч итераций, есть два возможных прочтения: (a) обучение «сошлось» — loss больше не может существенно падать, потому что модель так хороша, как может быть с данными данными и настройками. Это желаемое; это «готово». (b) Обучение «висит» — loss мог бы ещё падать, но оптимизация застаивается (локальный минимум, learning rate слишком мал, densification выключен). Различение: если значение loss лежит в типично хорошем диапазоне (0.020–0.030 при indoor/object, 0.040–0.060 при outdoor), и кривая плоская с 5K итераций, оно сошлось. Если значение явно выше, чем у сравнимых сцен (напр. 0.08), оно висит.

Примечание: плато Gaussians ≠ плато Loss. Плато по числу Gaussians не означает «обучение готово». Это только означает, что densification перестал добавлять новые точки — либо потому что достигнут (Classic), либо потому что MCMC cap полон. Обучение продолжается после этого и только уточняет существующие точки. Фактический сигнал «готово» вы читаете по кривой loss и по отображению Iteration (I30), не здесь.

Правило большого пальца для отмены: Если кривая loss после 5000+ итераций лежит выше 0.08 и едва ли снижается, с высокой вероятностью SfM-реконструкция перекошена. Прервите обучение, загляните в главу 9, подходит ли выбранный SfM-бэкенд к сцене, при необходимости переключитесь на COLMAP/Native, потом перезапустите. Лучше вложить 10 минут в лучший SfM, чем 2 часа обучения с плохим выравниванием камер.

Когда обращаться к Инспектору?

Быстрая справка: какая секция + какие элементы управления для какого типичного варианта использования?

Распространённая задачаСекцияID элементов
Загрузить готовую настройкуPresetsI7 (клик по строке)
Сохранить свою настройкуPresetsI1 → I2 → I4
Поделиться настройкой с коллегойPresetsI5 (Export) или I6 (Import)
Сменить SfM-бэкенд (напр., потому что Apple-PG слишком нестабилен)Training ConfigurationI12 (см. гл. 9)
Обработать видеокадры без EXIF focal lengthTraining ConfigurationI13 (FOV Override)
COLMAP-производительность: GLOMAP вместо ClassicTraining ConfigurationI14
Переключить с Classic на MCMCTraining ConfigurationI15
Дать обучению дольше работатьTraining ConfigurationI18 (Max Iter) + I20 (Densify Until) — связаны через I19
Уполовинить GPU-времяTraining ConfigurationI22 (Render Scale на 50 %)
Качество обучения +6 % (MCMC)Training ConfigurationI16 (MCMC Quality)
Уличная сцена с большим числом SfM-точекTraining ConfigurationI17 (Auto-scale by scene)
Настроить / сменить путь COLMAPTraining ConfigurationI23 / I24 / I25
Сделать экспорт-файлы меньшеEnhancementsI26 (всегда оставлять включённым)
Более резкий viewport без увеличения времени обученияEnhancementsI27 (MetalFX)
MetalFX слишком сильно сглаживает → альтернативаEnhancementsI28 (MPS Lanczos)
Последний процент детализации с тонкими структурамиEnhancementsI29 (Perceptual Loss 0.05–0.1)
Мониторинг обученияMetricsI30 (прогресс), I36 (темп), I38 (оставшееся время)
Раннюю оценку качестваMetricsI31 (Loss < 0.05 после 5K = хорошо)
Подозрение на SfM-проблемуMetrics + Loss ChartI31 + I39 (Loss > 0.08 после 5K → SfM-redo)
Различать convergence vs застрялLoss ChartI39 + I40 (читать loss-плато)
Выявить densification-проблемуLoss ChartI41 (кривая Gaussian падает → bug)