Руководство

Глава 4 — Вспомогательные окна

Помимо главного окна (3D-Viewport и Inspector), RadianceKit управляет шестью дополнительными окнами, которые все открываются через меню Help. Меню содержит восемь пунктов, сверху вниз: User Guide (⌘?), Keyboard Shortcuts (⌘/), Open Training Logs… (⇧⌘L), Open Exports Folder…, Manage Storage…, Pareto Dashboard… (⇧⌘D), Holdout Analysis… (⇧⌘H), BayesOpt Console… (⇧⌘B). Оба пункта «Open …» открывают не окно приложения, а Finder; поэтому они здесь подробно не рассматриваются. Три окна — Dashboard, Holdout, BayesOpt — являются самостоятельными аналитическими инструментами: они работают независимо от главного окна и читают или записывают JSON-файлы на диске. Каждое из этих трёх окон ты открываешь через меню Help и затем сам выбираешь в нём файл или папку, которые хочешь проанализировать — через «Open Reports Folder…», «Open transforms.json…» или кнопку «Start». Эти три окна — единственные, которые не переведены: их кнопки, регуляторы и заголовки столбцов в любой языковой версии остаются на английском. Указанные здесь подписи ты, соответственно, найдёшь на экране именно в таком виде.

Три простых окна (User Guide, Keyboard Shortcuts, Manage Storage) и оба пункта меню, связанных с папками (Open Training Logs / Open Exports Folder), получают по короткой записи на каждый элемент управления. Три аналитических окна документированы подробнее — для каждого приведено введение, объясняющее, что ты видишь в окне, когда его стоит открывать и как интерпретировать отображаемую картину.

В конце главы приведён раздел с перекрёстными ссылками на Inspector главного окна: что можно осмысленно считать с графика Live-Loss-Chart и с индикатора Gaussian-Count во время выполняющегося обучения.

Руководство пользователя (W1–W4)

Окно руководства пользователя с боковой панелью слева и отрендеренным Markdown-содержимым справа
Окно руководства пользователя с боковой панелью слева и отрендеренным Markdown-содержимым справа

Что это: Встроенное окно справки, отображающее файл guide_<sprache>.md, поставляемый вместе с приложением. Язык определяется из настроек (вкладка General → Language) или, если там указано «System», из языковых настроек macOS. Раскладка классическая: слева боковая панель со всеми заголовками, справа основной текст.

Когда тебе нужно быстро освежить в памяти отдельный момент — то есть как замену шпаргалке. Подробным справочником служит этот Manual; встроенное окно справки — это краткая версия для быстрого поиска. Оно обновляется с каждым релизом приложения, но по содержанию остаётся более поверхностным.

W1NavigationSplitView (боковая панель + детали)

ГДЕ

Help → User Guide (⌘?).

ТЕХНИЧЕСКИ

Двухколоночная раскладка с узкой боковой панелью (минимум 180 pt шириной) для дерева содержимого и прокручиваемой области деталей для собственно Markdown-содержимого. Окно имеет минимальный размер 700 × 500 pt. При первом открытии окно загружает подходящий guide_<lang>.md из App-Bundle (fallback guide_en.md), парсит его в блок-записи (заголовки H1–H4, абзацы, списки, таблицы, разделительные линии) и отдельно извлекает структуру заголовков для боковой панели. Инлайн-форматирование (жирный, курсив, code-span) рендерится встроенным Markdown-движком. Язык считывается из настроек приложения, со специальным случаем китайского (zh-Hans) и бразильского португальского (pt-BR), которые сохраняются как полные locale-теги, потому что эти варианты отличаются от zh и pt соответственно.

W2List (боковая панель заголовков)

ГДЕ

Левая колонка в окне User Guide.

ТЕХНИЧЕСКИ

Список всех заголовков H2 и H3 текущего Markdown-документа. Записи H2 отображаются без отступа с средней жирностью шрифта, записи H3 — с отступом 16 pt слева и приглушённым стилем переднего плана. Все остальные уровни — как H1, так и H4 и ниже — не появляются в боковой панели, поскольку иначе они сделали бы её неудобной для восприятия. Anchor-ID генерируются из текста заголовка через слагификацию (lowercase + пробелы в тире + фильтрация по буквам/цифрам/тире — тот же алгоритм, который GitHub использует для своих Markdown-якорей, так что и внешние URL к документации потенциально попадали бы на тот же якорь). Список использует нативный стиль macOS.

W3Button (переход заголовок → якорь)

ГДЕ

По кнопке на каждую строку боковой панели.

ТЕХНИЧЕСКИ

Каждая запись боковой панели — это кнопка, которая устанавливает текущий якорь, но визуально выглядит как элемент списка. Переменная-наблюдатель затем запускает прокрутку к соответствующему якорю с плавной анимацией продолжительностью 0,3 с. После перехода значение якоря сбрасывается, чтобы следующий клик на тот же якорь снова сработал (иначе наблюдатель не сработал бы повторно, поскольку значение не изменилось).

W4ScrollView (содержимое деталей)

ГДЕ

Правая колонка.

ТЕХНИЧЕСКИ

Прокручиваемая, вертикально складывающаяся область содержимого с ленивым рендерингом, поскольку более длинные руководства легко могут содержать свыше 200 Markdown-блоков — нелениый вариант создавал бы все блоки одновременно. Каждый блок получает собственный ID: либо якорь заголовка (его получает каждый заголовок, независимо от уровня), либо индекс-заглушку. Максимальная ширина — 720 pt, отступы 32 по горизонтали / 24 по вертикали, так что длинные строки сохраняют удобочитаемую раскладку. Таблицы рендерятся ячейка за ячейкой с помощью горизонтальных стеков и разделительных линий; инлайн-код — встроенным Markdown-движком. Настоящие блоки кода в данный момент обрабатываются как параграф — известное ограничение окна справки.

Клавиатурные сокращения (W5–W6)

Окно Keyboard Shortcuts — пять групп Navigation/Views/Capture/Editor/Training со столбцом горячих клавиш слева и описанием справа
Окно Keyboard Shortcuts — пять групп Navigation/Views/Capture/Editor/Training со столбцом горячих клавиш слева и описанием справа

Статический справочный список в пяти секциях. Navigation: Mouse Drag (Orbit/Fly), Shift+Drag/Right-Drag (Pan), Scroll (Zoom), WASD (движение в режиме Fly-Through), Q/E (Up/Down), F (Toggle Orbit/Fly), Double-click (Re-center), Cmd+Scroll (FoV-Adjust). Views: R (Reset Camera), T (Auto-Rotation), P (Camera Playback), B (Background-Cycle), 0–9 (переход к Training-Cam 1=10%/5=50%/0=last), Left/Right Arrow (Prev/Next Cam). Capture: S (Screenshot to Desktop), V (Turntable-Video), C (Copy Camera Info). Editor: Tab (Edit-Modus), Click/Drag (Paint-Select), Option+Click (Deselect), X / Delete (удалить выделение), Cmd-Z (отменить последнее удаление), [ / ] (уменьшить/увеличить размер кисти), Esc (снять выделение). Training: Option+Space (пауза/продолжение обучения), Cmd+E (экспортировать сцену). Больше здесь ничего нет — запуск, отмену и продления ты найдёшь в меню Training (глава 1).

Что это такое: Простой статический обзор всех сочетаний клавиш — Navigation, Views, Capture, Editor, Training. Содержимое встроено жёстко и не подгружается из файла.

Когда ты ищешь самый быстрый способ сделать что-то во Viewport. WASD-Fly-Through, R для сброса камеры, B для переключения фона — всё это здесь.

W5ScrollView (область содержимого)

ГДЕ

Help → Keyboard Shortcuts (⌘/).

ТЕХНИЧЕСКИ

Простая область прокрутки с вертикальным списком внутри. Padding 20 по периметру, без дерева навигации в боковой панели (список достаточно короткий). Содержимое сгруппировано в пять секций (Navigation, Views, Capture, Editor, Training). На каждую комбинацию клавиш — строка с переводимым текстом в обеих колонках. Левая колонка (код клавиши) зафиксирована на ширине 180 pt, чтобы описания справа оставались выровненными по вертикали. Никакого взаимодействия, кроме прокрутки — клик по строке ничего не запускает, сочетания клавиш — это настоящие клавиатурные модификаторы в меню и во Viewport.

W6VStack (секции сокращений)

ГДЕ

Внутри ScrollView.

ТЕХНИЧЕСКИ

Секции сложены по левому краю с отступом 16 pt. Внутри каждой из пяти секций — заголовок и последовательность строк. Заголовки используют вторичный стиль Subheadline — намеренно не формат Title, поскольку секции не должны быть навигируемыми. Содержимое намеренно плоское (без Disclosure, без Search, без Filter), чтобы компонент работал без изменений на любой версии macOS, а файл оставался читаемым.

Управление хранилищем (W7–W12)

Окно Manage Storage — заголовок показывает „1,356 items · 55.1 GB total”, таблица с экспортированными PLY-файлами, отсортированными по дате, для каждого — иконка + имя файла + размер + дата
Окно Manage Storage — заголовок показывает „1,356 items · 55.1 GB total", таблица с экспортированными PLY-файлами, отсортированными по дате, для каждого — иконка + имя файла + размер + дата

Табличное представление всех файлов, которыми управляет RadianceKit. Заголовок насчитывает 1356 элементов, 55,1 ГБ общего размера. Панель инструментов сверху: „Show in Finder" + „Refresh". Каждая строка: иконка экспорта, имя файла (например, training_20260718T194416Z.ply), дата экспорта, размер (здесь варьируется от 7,8 МБ до 2,24 ГБ), иконка-лупа (Reveal) и иконка корзины (Move to Trash). Сортировка сначала по категории, а внутри категории по дате, новейшие сверху. На этом снимке доминируют PLY-экспорты, потому что в этом хранилище прежде всего сохранялись результаты обучения.

Что это: Обзор использования диска для всего, что RadianceKit сохраняет в ~/Documents/RadianceKit/ — логи, экспорты, сцены, пакеты захвата (от iOS-компаньона), импорты (промежуточные копии входных изображений). У каждой записи размер в байтах и две кнопки: „показать в Finder" и „переместить в корзину". Это НЕ автоматическая очистка — само приложение ничего не удаляет; ты решаешь по каждой записи отдельно. Это окно локализовано: по-русски оно называется «Управление хранилищем», обе кнопки в заголовке называются «Показать в Finder» и «Обновить», кнопки в строках — «Показать в Finder» и «Переместить в корзину». Английские названия в записях ниже — это обозначения из английской версии.

Когда диск заполняется. Прежде всего накапливаются логи (один JSONL-файл на каждую попытку обучения, плюс _qualityMetrics.json); экспорты, конечно, тоже (PLY — 100% необработанные данные, один файл на экспорт). Также полезно после сбоя, когда в промежуточном каталоге импортов ещё лежат старые копии входных изображений.

W7Кнопка „Show in Finder"

ГДЕ

Заголовок сверху справа в окне обозревателя хранилища.

ТЕХНИЧЕСКИ

Открывает папку данных RadianceKit в Finder — именно тот каталог, содержимое которого перечислено в этом окне. Так ты сразу видишь структуру папок (Logs, Exports, Scenes, Captures, Imports) и можешь перемещать или копировать файлы прямо в Finder самостоятельно. Действие открывает новое окно Finder; список в этом окне при этом не обновляется — для этого есть „Refresh" (W8).

W8Кнопка „Refresh"

ГДЕ

Заголовок, рядом с кнопкой Finder.

ТЕХНИЧЕСКИ

Запускает фоновое сканирование, которое выполняется как инициированная пользователем асинхронная задача, чтобы сканирование больших деревьев каталогов не блокировало интерфейс. Само сканирование проходит по каждой известной подпапке (Logs, Exports, Scenes, Captures, Imports) и создаёт запись хранилища для каждого прямого дочернего элемента. Для каждой записи вычисляется рекурсивный размер — предпочтительно фактический объём, занятый на диске (включая совместное использование APFS-хардлинков), с резервным вариантом — логическим размером файла.

W9Список (записи хранилища)

ГДЕ

Основное содержимое под заголовком.

ТЕХНИЧЕСКИ

Список со следующим макетом для каждой строки: специфичная для категории иконка SF Symbols (документ для Logs, стрелка загрузки для Exports, куб для Scenes, iPhone для пакетов захвата, лоток для Imports), имя + подзаголовок (метка типа + отформатированная дата изменения), счётчик байтов справа (выровнен по правому краю, моноширинный шрифт), кнопка Reveal (значок лупы), кнопка Trash (значок корзины). Сортировка: сначала по типу (сначала Scenes, затем Exports, Logs, Captures, Imports, Other), затем по дате изменения по убыванию (новейшие сверху). Пока сканирование ещё выполняется, на этом месте отображается индикатор прогресса „Scanning…". Если ничего не найдено, отображается пустое состояние со значком лотка.

W10Кнопка строки „Reveal in Finder"

ГДЕ

В каждой строке, значок лупы справа.

ТЕХНИЧЕСКИ

Открывает Finder и выделяет конкретный элемент (файл или папку). Отличие от W7: W7 открывает корневой каталог; W10 выделяет именно эту одну запись. Практичный рабочий процесс: определи крупную запись, кликни на лупу, затем скопируй её, например, на внешний том.

W11Кнопка строки „Move to Trash"

ГДЕ

В каждой строке, значок корзины справа рядом с лупой.

ТЕХНИЧЕСКИ

Запускает диалог подтверждения (W12). Только после подтверждения выполняется стандартная операция macOS «переместить в корзину» (то есть обратимая, без прямого удаления). После успешного перемещения в корзину запись удаляется из списка, а счётчик общего размера в байтах обновляется. При ошибках отображается модальный диалог с ошибкой.

W12ConfirmationDialog (подтверждение удаления)

ГДЕ

Вызывается W11, отображается как sheet macOS.

ТЕХНИЧЕСКИ

Стандартный диалог подтверждения с динамическим заголовком „Delete <name>?" и строкой сообщения, которая явно указывает, что запись попадёт в корзину и может быть восстановлена оттуда (пока корзина не очищена). Две кнопки: „Move to Trash" как деструктивное действие (отображается красным) и „Cancel" с автоматической привязкой к Esc. Диалог является немодальным в том смысле, что блокирует только это окно, а не всё приложение — это стандарт macOS для обратимых удалений.

Панель Pareto (W13–W22)

Панель Pareto — пустое состояние перед импортом отчётов
Панель Pareto — пустое состояние перед импортом отчётов

Пустое состояние (после первого открытия) — Empty-State с призывом к действию «Open Reports Folder…». Точки данных появляются, как только загружены отчёты обучения, см. следующий снимок.

Панель Pareto с 384 загруженными benchmark-отчётами — Gaussians vs PSNR с Pareto-фронтом, Scene/Strategy/Mip-фильтром
Панель Pareto с 384 загруженными benchmark-отчётами — Gaussians vs PSNR с Pareto-фронтом, Scene/Strategy/Mip-фильтром

В верхней панели инструментов справа отображается «384 reports of 384» (все отчёты в выбранной папке успешно распознаны); слева от кнопки «Open Reports Folder…» указано имя загруженной папки, здесь «Benchmarks». Оси: селектор оси X установлен на Gaussians, селектор оси Y — на PSNR (dB), рядом активная галочка «Show Pareto Front». Легенда сверху слева: синий = mcmc, зелёный = classic, оранжевый = hybrid, плюс форма символа для Mip-Splatting Вкл/Выкл. Пунктирная линия Pareto-фронта проходит вдоль лучших достигнутых значений PSNR и выходит на плато около PSNR≈30 дБ примерно при 300 тыс. Gaussians; облако точек доходит до более чем 1,5 млн Gaussians. Чипы-фильтры справа: более 30 сцен (в т.ч. bicycle, bonsai, family, flowers, garden, kitchen, stump, truck, а также пронумерованные серии тестов 360, drone и photo), 3 стратегии (classic, hybrid, mcmc), 3 опции Mip-Splatting (All, On, Off) с активным «All». В данный момент фильтр по сцене или стратегии не установлен, поэтому виден плотный кластер точек.

Что это: Инструмент сравнения нескольких прогонов. В прошлом ты обучал несколько сцен или одну и ту же сцену с разными Preset-ами — из анализа бенчмарка для каждого прогона обучения создаётся JSON-файл отчёта, содержащий, помимо прочего, итоговый PSNR, SSIM, LPIPS, количество Gaussians и время выполнения. Отдельного переключателя для этого анализа в интерфейсе нет; панель просто анализирует то, что уже лежит в виде отчётов в выбранной папке. Она считывает сразу целую папку таких отчётов и строит их в виде 2D-диаграммы рассеяния с выбираемыми осями. Дополнительно рисуется Pareto-фронт (множество недоминируемых точек) в виде пунктирной линии.

После того как у тебя появилось не менее трёх- четырёх отчётов обучения. При меньшем количестве точек линия фронта не информативна. Типичный сценарий использования: ты пытался реконструировать сцену на улице и последовательно прогнал P3 Balanced (Classic), P4 Quality (Classic), P8 Quality (MCMC) и P9 Drone / Aerial — теперь ты хочешь узнать, какая конфигурация даёт лучший PSNR на секунду времени обучения или какая требует меньше всего Gaussians при заданном PSNR.

Обе оси выбираются свободно (ось X: Gaussians, время обучения, PSNR, SSIM, LPIPS, …; ось Y аналогично). При расчёте Pareto-фронта для каждой метрики известно, что означает «меньше = лучше» (LPIPS, Gaussians, Training Time, BRISQUE) или «больше = лучше» (PSNR, SSIM, FSIM, MS-SSIM) — поэтому линия проходит, в зависимости от выбора осей, либо снизу слева направо вверх, либо сверху слева направо вниз, всегда вдоль наилучшей достигнутой комбинации. Точка является Pareto-оптимальной, если НИ ОДНА другая точка не является как минимум такой же хорошей в ОБЕИХ измерениях (то есть ни одна другая точка её не доминирует). Pareto-оптимальные точки лежат на линии, другие точки — справа/выше неё (в зависимости от ориентации осей). Точки НА линии — это настоящие кандидаты на «лучший Preset»; точки ДАЛЕКО от линии — это потраченное впустую время обучения.

Ты можешь ограничить выборку определённой сценой (например, если хочешь сравнить только прогоны на улице), определённой стратегией (classic, hybrid или mcmc) или включением/выключением Mip-Splatting (Mip-Splatting — это опциональная настройка для продвинутых пользователей, поэтому прямое сравнение имеет смысл).

У тебя есть три отчёта для сцены «truck» в одной папке отчётов: Run A (P4 Quality (Classic), 524 тыс. Gs, 105 с, PSNR 23.4), Run B (P8 Quality (MCMC), 150 тыс. Gs, 693 с, PSNR 24.6), Run C (P5 Ultra Detail, 1,25 млн Gs, 312 с, PSNR 25.8). Установи ось X на Training Time, ось Y на PSNR. Run B находится справа сверху, Run C ещё дальше справа сверху, Run A слева снизу. Pareto-фронт соединяет A и C — обе не доминируются. Run B «проигрывает» (C лучше и по времени, И по PSNR). Вывод: для «truck» путь через MCMC не оправдан; либо быстро+нормально (A), либо долго+очень хорошо (C). Сохрани конфигурацию из C как отдельный Preset (Inspector → I1 Save Preset).

Следующее действие: Сохранить лучшую конфигурацию как Preset. Конкретно: посмотри на точки Pareto (при наведении в подсказке показывается PSNR/SSIM/LPIPS/Gs/Time), реши, какой вариант лучше всего подходит тебе с точки зрения компромисса между временем и качеством, открой соответствующий отчёт (имя файла содержит временную метку прогона), скопируй его конфигурацию обучения в новый прогон или сохрани её как Preset через Inspector после следующей сессии обучения.

W13Кнопка «Open Reports Folder…»

ГДЕ

Панель инструментов вверху слева.

ТЕХНИЧЕСКИ

Открывает диалог выбора папки с предложением «Select a folder containing benchmark .json reports». После подтверждения запускается фоновая задача, которая последовательно разбирает все файлы .json в папке. Некорректные отчёты (повреждённый JSON, неверная схема) собираются и отображаются внизу в боковой панели как «N file failed to parse» — без сбоя. Если второй клик происходит, пока ещё выполняется первая загрузка, предыдущая задача отменяется, чтобы два результата не записывались в состояние одновременно.

Выбранная папка не запоминается постоянно: после открытия окна через Help → Pareto Dashboard… (⇧⌘D) ты снова выбираешь её здесь. Имя загруженной папки появляется затем справа от кнопки.

W14Селектор «X-Axis»

ГДЕ

Над диаграммой, слева.

ТЕХНИЧЕСКИ

Меню-селектор со всеми доступными метрическими осями модуля панели (PSNR, SSIM, LPIPS, количество Gaussians, время обучения и так далее). По умолчанию — количество Gaussians. При смене оси наведённая точка сбрасывается, потому что ранее подсвеченная позиция в старой системе координат осей после смены оси теряет смысл. Селектор ограничен по ширине содержимым, чтобы не растягиваться на всю ширину.

W15Селектор «Y-Axis»

ГДЕ

Над диаграммой, рядом с X-Axis.

ТЕХНИЧЕСКИ

Идентичен W14, только по умолчанию установлен PSNR. Выбор оси сохраняется независимо, поэтому пользователь может выбрать и бессмысленную комбинацию (X=PSNR, Y=PSNR — все точки окажутся на диагонали). Такие комбинации не блокируются; это сознательное решение, потому что сравнение «SSIM vs PSNR» вполне интересно — чтобы увидеть, насколько согласованно ведут себя метрики.

W16Переключатель «Show Pareto Front»

ГДЕ

Справа от селекторов осей.

ТЕХНИЧЕСКИ

Флажок, по умолчанию установлен. Pareto-фронт дополнительно к облаку точек накладывается на диаграмму в виде линии — пунктирной (шаблон штриха 4–4), серой полупрозрачной, толщиной линии 1,5 pt. Внимание: в выпущенной версии галочка не влияет на диаграмму — линия фронта рисуется всегда, независимо от того, отмечена она или нет. Фронт пересчитывается заново при каждой смене оси и после каждого изменения фильтра.

W17Чипы фильтра «Scene»

ГДЕ

Правая боковая панель в окне панели.

ТЕХНИЧЕСКИ

Чипы-фильтры для каждой сцены, встречающейся в загруженных отчётах. Собственный flow-макет, автоматически переносящий чипы на несколько строк, как только ширина исчерпана. Активные чипы получают акцентный фон, неактивные — нейтральный стандартный материальный фон. Возможен множественный выбор (семантика множества); если ни один чип не выбран, все сцены считаются «пропущенными» — то есть логика множества такова: «пустой выбор = всё», а не «пустой выбор = ничего».

W18Чипы фильтра «Strategy»

ГДЕ

Под фильтром Scene в боковой панели.

ТЕХНИЧЕСКИ

Точно так же, как W17, но для стратегий обучения — как правило, три значения «classic», «hybrid» и «mcmc», взятые из поля Strategy JSON-файлов benchmark-отчётов. Полезно, если у тебя смешаны отчёты нескольких стратегий и ты хочешь увидеть только один вид (например, «показать только прогоны MCMC, потому что Classic я уже исключил»).

W19Чипы фильтра «Mip-Splatting»

ГДЕ

Под фильтром Strategy в боковой панели.

ТЕХНИЧЕСКИ

Трёхзначный фильтр (в отличие от множества, как в W17/W18): «All» / «On» / «Off». Причина: Mip-Splatting — это мультимасштабное расширение, которое в зависимости от сцены либо помогает, либо нет — поэтому оно остаётся сознательно включаемой настройкой, а не стандартом. Когда ты сравниваешь Mip вкл/выкл, часто хочется чётко разделить эти случаи. Отсюда выделенный тернарный фильтр с состояниями «пропускать всё», «только Mip включён», «только Mip выключен». Секция боковой панели появляется, как только загруженный набор вообще содержит отчёты — то есть практически всегда; она исчезает только тогда, когда вообще ничего не загружено.

W20ChipButton (переключатель фильтра, all/on/off)

ГДЕ

Вспомогательный компонент, используется в W17/W18/W19.

ТЕХНИЧЕСКИ

Минималистичная обёртка-кнопка. Содержимое: текст-метка с размером шрифта Caption и отступами 10 по горизонтали / 5 по вертикали. Фон условный: если активен → акцентный цвет приложения с белым текстом; иначе — нейтральный стандартный материальный фон с обычным цветом текста (адаптируется под светлое и тёмное оформление). Форма — капсула (в виде пилюли). Стиль plain- button, чтобы материал капсулы не перекрывался системной рамкой.

W21Диаграмма (Pareto-Scatter)

ГДЕ

Центральная область панели.

ТЕХНИЧЕСКИ

Диаграмма на базе Swift Charts с двумя слоями: 1. точка на каждый отчёт — позиция по выбранным метрикам X и Y, цвет по Strategy, символ по статусу Mip. Размер символа обычный — 80, подсвеченный — 200 (если ID соответствует текущему наведённому отчёту). 2. линия для Pareto-фронта (см. W16 — она рисуется всегда). Дополнительно наведённая в данный момент точка показывает над собой название сцены в виде небольшой капсулы.

Наложение диаграммы: прозрачный прямоугольник регистрирует движение мыши; для каждого кадра определяется евклидово ближайшее положение точки в системе координат диаграммы, и наведённый отчёт обновляется, если расстояние меньше 24 px (иначе сбрасывается). Так ты получаешь подсказку без клика — достаточно наведения.

W22Подсказка (детали при наведении)

ГДЕ

Под диаграммой, появляется при наведении.

ТЕХНИЧЕСКИ

Горизонтальный стек: название сцены (Headline), тег Strategy (Caption), разделительная линия, затем метрики PSNR/SSIM/LPIPS/Gs/Time, каждая в небольшой вертикальной группе (метка + значение моноширинным шрифтом). Если Mip был включён, дополнительно капсула-тег «Mip» акцентного цвета. Фон — полупрозрачное размытие, скруглённый прямоугольник с радиусом 8 pt. Отображается только тогда, когда курсор мыши действительно находится над точкой. Исчезает автоматически при уходе курсора.

Анализ Holdout (W23–W29)

Holdout Analysis — пустое состояние перед загрузкой transforms.json
Holdout Analysis — пустое состояние перед загрузкой transforms.json

Пустое состояние с Empty-State и призывом к действию „Open transforms.json…". Принимает форматы NeRF-Studio и Instant-NGP. Маркеры камер появляются, как только загружен файл transforms.json — смотри следующее изображение.

Holdout-Globe с 86 камерами, 5 Folds, активна Angular-Strategy
Holdout-Globe с 86 камерами, 5 Folds, активна Angular-Strategy

Заголовок показывает загруженный файл (transforms.json) и количество камер („86 cameras"). Левая боковая панель: Strategy-Picker с двумя опциями — активна Angular (longitudinal) (сортирует камеры по их долготному углу вокруг орбиты и затем распределяет их поочерёдно по Folds) против Linear (round-robin) (то же поочерёдное распределение, но по порядку изображений, а не по углу обзора). Слайдер k-Folds установлен на 5, Test-Fold-Picker на Fold 1. Кнопка Export создаёт fold-assignment.json для дальнейшего использования во внешних инструментах оценки. Средняя панель: 3D-проекция-глобус всех 86 камер, распределённых по всей сфере — зелёные точки = Train, красные точки = текущий Test-Fold (Fold 1 с 18 камерами). Правая боковая панель (Angular Correlation): для каждого Fold число камер + Mean Nearest Angle (Fold 1: 18 Cams / 8.5°, Fold 2: 17 / 6.1°, Fold 3: 17 / 6.2°, Fold 4: 17 / 6.7°, Fold 5: 17 / 6.4°) — меньшее значение означает, что у каждой тестовой камеры есть близкая тренировочная камера, то есть тест проще.

Что это: 3D-визуализатор твоего расположения камер с логикой перекрёстной проверки. Ты загружаешь transforms.json (стандартный формат Nerfstudio / Instant-NGP для поз камер), приложение считывает все камеры, проецирует их направления обзора на единичную сферу и отображает их в виде маленьких сферических маркеров на виртуальном глобусе. Затем оно делит камеры на k Folds (по выбранной стратегии: angular или linear), помечает зелёным тренировочную долю и красным тестовую долю (Holdout), и вычисляет для каждого Fold показатель Angular-Correlation, который говорит, насколько далеко тестовый Fold находится в пространстве углов обзора от тренировочного Fold.

Когда ты хочешь провести оценку Holdout — то есть: насколько хорошо твоя модель обобщается на невиданные углы обзора? Стандарт в обучении — „каждый 8-й вид как Holdout" (конвенция Mip-NeRF360), но это очень линейное разделение. Если твои изображения, например, кластеризованы по времени (сначала одна сторона объекта, потом другая), то „каждый 8-й" не репрезентативен — случайная позиция в последовательности попадает в тест, но все её соседи находятся в тренировке, это слишком просто. С „angular" стратификация происходит вместо этого по пространству углов обзора: каждый Fold содержит камеры из всех областей орбиты, так что тест действительно проверяет пробелы в обобщении.

Angular vs Linear: - Angular (по умолчанию): сортирует все камеры по их долготному углу (φ-координата вокруг оси Y) и затем распределяет их поочерёдно по k Folds — первая камера кольца попадает в Fold 1, вторая в Fold 2, а после k камер обход начинается заново. Преимущество: каждый Fold содержит камеры из всех направлений орбиты, равномерно распределённые по кольцу. Хорошо для классических orbit-съёмок, потому что разделение больше не зависит от порядка съёмки. - Linear (Round-Robin): то же поочерёдное распределение, но по позиции изображения, а не по углу (индекс Fold = image_index по модулю k). Это простое разделение „каждый k-й". Работает, если порядок изображений НЕ имеет пространственного смещения (например, случайно отсортированные снимки с дрона). Плохо работает, если изображения кластеризуются по времени — тогда соседние кадры оказываются в разных Folds, и тест становится слишком простым.

В 3D-глобусе ты сразу видишь: зелёные точки (Training) и красные точки (Test). Если красные точки все кучкуются в одном углу, Holdout плохой (не хороший тест на обобщение). Если они равномерно расположены между зелёными, он хороший. Показатель Angular-Correlation для каждого Fold (правая боковая панель, в градусах) дополнительно говорит: меньшее значение = тест близок к тренировке (у каждой тестовой камеры есть близкая тренировочная камера, лёгкий тест); большее значение = тест далеко от тренировки (более жёсткое обобщение).

Ты снял свою сцену Truck с 251 изображением, экспортируешь через пункт меню M33 (Export SfM transforms.json) файл nerfstudio. Открой окно Holdout (⇧⌘H), загрузи JSON через „Open transforms.json…", посмотри на глобус. k=5 (по умолчанию) даёт тебе 5 Folds. Кликни на „Fold 3" — посмотри, достаточно ли равномерны красные маркеры. Если да: „Export fold-assignment.json". Экспортированный файл предназначен для внешних инструментов оценки (Nerfstudio, Instant-NGP); сам RadianceKit не считывает его повторно и продолжает обучение против собственного стандарта Holdout „каждый 8-й". Окно служит здесь, таким образом, для оценки того, допускает ли твой набор камер вообще честный тест.

W23Кнопка „Open transforms.json…"

ГДЕ

Панель инструментов вверху слева.

ТЕХНИЧЕСКИ

Открывает диалог выбора файла, ограниченный JSON- файлами. После подтверждения модуль Holdout загружает файл. Загрузчик разбирает как формат nerfstudio (интринзики камеры плюс список кадров с путём к изображению и матрицей трансформации), так и формат instant-ngp (та же структура). Для каждого кадра направление обзора извлекается из матрицы трансформации (ось Z локального базиса камеры) и сохраняется. Если разбор не удаётся, в левой боковой панели появляется сообщение — но только если там уже была загружена сцена; при самой первой попытке окно остаётся в пустом состоянии без видимого сообщения.

Загруженный файл не запоминается постоянно: после открытия окна через Помощь → Holdout Analysis… (⇧⌘H) ты выбираешь его здесь заново. Его имя появляется затем справа от кнопки.

W24Picker „Strategy" (angular/linear)

ГДЕ

Левая боковая панель, вверху.

ТЕХНИЧЕСКИ

Radio-Picker с двумя опциями: Angular и Linear. Смена стратегии автоматически запускает пересчёт Folds. Направления обзора представляют собой список 3D-единичных векторов на сфере; стратегия Angular сортирует их по их долготному углу φ и затем распределяет их поочерёдно по Folds, стратегия Linear делает то же поочерёдное распределение по индексу кадра и полностью игнорирует геометрию. Обе стратегии поэтому создают одинаково большие Folds; они отличаются только тем, по чему производится предварительная сортировка.

W25Слайдер „k Folds"

ГДЕ

Левая боковая панель, посередине.

ТЕХНИЧЕСКИ

Слайдер от 3 до 10, шаг 1. При изменении расчёт Folds автоматически запускается заново, так что список Folds, индексы Training/Test и показатель для каждого Fold сразу же пересчитываются. Выбранное значение отображается моноширинным цифровым текстом справа от метки.

Правило: k=5 — стандарт (даёт тебе 20% теста на каждый Fold, это обычно для перекрёстной проверки). k=10, если у тебя очень много данных и нужно больше Folds для статистической значимости. k=3, если у тебя мало данных.

W26Picker „Test Fold"

ГДЕ

Левая боковая панель, под слайдером k.

ТЕХНИЧЕСКИ

Picker-меню. Он перечисляет ровно столько записей, сколько Folds настроено, с подписями от „Fold 1" до „Fold N". Если ранее выбранный индекс ≥ k (например, потому что ты уменьшил k с 10 до 5), он автоматически сбрасывается на 0. Выбранный Test-Fold отображается на глобусе красным, все остальные зелёным.

W27Кнопка „Export fold-assignment.json"

ГДЕ

Левая боковая панель, внизу.

ТЕХНИЧЕСКИ

Открывает диалог сохранения с именем файла по умолчанию fold-assignment.json. После подтверждения модуль Holdout кодирует текущее разделение в JSON-схему (распределение Fold по кадрам плюс мета-блок стратегии). Файл предназначен для внешних инструментов оценки — RadianceKit не считывает его повторно. Кнопка неактивна, пока не загружен файл камер. Успех сообщается как „Saved to (filename)", ошибка записи как „Export failed: …" — оба появляются в одном и том же месте под кнопкой и оба зелёным текстом, так что цвет не различает эти случаи.

W28SCNView (3D Camera Globe)

ГДЕ

Средняя панель в окне Holdout.

ТЕХНИЧЕСКИ

SceneKit-вид глобуса. Сцена состоит из: проволочной сферы (радиус 1.0, 36 сегментов, тёмно-серая), трёх цветных отрезков осей (красный/зелёный/синий для X/Y/Z, каждый длиной 1.2), и для каждой камеры маленькой маркерной сферы (радиус 0.03) в соответствующей позиции направления обзора на единичной сфере (немного снаружи, чтобы она не исчезала ВНУТРИ проволочной сферы). Маркеры при каждом изменении Fold НЕ перестраиваются — перестройка нужна только тогда, когда изменяется список кадров (то есть загружается новый JSON). Вместо этого при каждом обновлении выполняется обновление на месте цвета материала: красный для тестовых индексов, зелёный для тренировки, светло-серый если ни то, ни другое. Так тики слайдера остаются производительными даже при N > 1000 камер.

Управление камерой активировано — ты можешь мышью вращать глобус, увеличивать масштаб, панорамировать. Освещение обеспечивает то, что маркеры не выглядят плоскими. Фон тёмно-серый.

W29FoldCard (Tap to Select Fold)

ГДЕ

Правая боковая панель, секция „Angular Correlation".

ТЕХНИЧЕСКИ

Для каждого Fold отдельное карточное представление — скруглённый прямоугольник с радиусом 6 pt, отступ 10, вертикальная раскладка с двумя строками (сверху „Fold N" + количество камер, снизу „Mean nearest angle:" + значение в градусах). Цвет фона условный: активный Fold = акцентный цвет с полупрозрачностью, неактивные = нейтральный стандартный материал. Нажатие выбирает Fold, и глобус живо перекрашивается.

Показатель „Mean nearest angle" — это средний наименьший угол для каждой тестовой камеры до ближайшей тренировочной камеры (вычисляется внутренне в радианах, отображается в градусах в UI).

Консоль BayesOpt (W30–W39)

Консоль BayesOpt — пустое состояние перед началом Trial
Консоль BayesOpt — пустое состояние перед началом Trial

Пустое состояние с выбором пространства поиска (RadianceKit defaults (6-dim)), слайдером бюджета Trial (по умолчанию 40), Random-Seed (42) и тремя пустыми панелями для графика сходимости (Convergence-Chart), журнала Trial и списка параметров пространства поиска. График сходимости и таблица Trial заполняются, как только запуск начат — см. следующее изображение.

Консоль BayesOpt после 40 Trials — график сходимости резко растёт до Trial 13, лучшее значение 0.9943, журнал Trial с тегами init/bo/restart
Консоль BayesOpt после 40 Trials — график сходимости резко растёт до Trial 13, лучшее значение 0.9943, журнал Trial с тегами init/bo/restart

Статус справа вверху „Finished — best 0.9943 after 40 trials", рядом кнопка „Save Best Config"; слева вверху кнопка „Start". Левая боковая панель: выбор пространства поиска на RadianceKit defaults (6-dim), бюджет Trial 40, Random Seed 42. Список параметров показывает шесть настраиваемых гиперпараметров с их диапазонами значений: mipSmoothing3DScale [0.05, 0.5], mipFilter2DVariance [0.1, 0.6], densifyGradThreshold [5e-07, 5e-06], ssimWeight [0.05, 0.5], mcmcNoiseScale [1e-05, 0.0001], mcmcRelocationInterval [50, 200]. Центр: график сходимости „Convergence (best value so far)" (X = индекс Trial 0–40, Y = значение целевой функции 0–1) — синие точки = начальные образцы (Initial-Samples), зелёные точки = BayesOpt-Acquisition, оранжевые точки = перезапущенные Trial (Restart-Trials) (#22 со значением 0.5303 и #31 со значением 0.4885). Синяя линия лучшего значения резко растёт до Trial ~5, затем только незначительное улучшение до Trial ~13, после чего плоское плато около 1.0. Правая боковая панель: журнал Trial, здесь прокручен к Trials #8–#36, с оценкой и тегом (init/bo/restart). Кнопка Save-Best-Config справа вверху записывает bayesopt-best.json.

Что это: Консоль байесовской оптимизации для поиска гиперпараметров. Bayes-Opt — это автоматический метод, который пытается найти оптимальную точку неизвестной функции с минимальным числом экспериментов — типично: «какая комбинация верхней границы гауссиан, веса SSIM и порога Densify даёт наилучший PSNR для моего класса сцен?» Вместо сетки из 6^4 = 1296 испытаний BayesOpt пробует около 40–100 информированных испытаний и таким образом приближается к оптимуму.

Важно: Текущая версия, поставляемая в приложении, выполняет оптимизацию не на реальных запусках обучения (это заняло бы дни), а на синтетической демо-целевой функции — многомодальном ландшафте с характером восхождения на холм (Hill-Climbing) плюс лёгкий шум. Это сделано намеренно: окно должно показать тебе поведение оптимизатора (ход сходимости, точки-образцы, Best-So-Far) и дать понять определения пространства поиска. Для реальных, управляемых обучением запусков BayesOpt (как они выполнялись при разработке поставляемых Preset) используется отдельный путь оценки вне приложения; это окно — живой вариант для наблюдения.

Три случая применения: 1. Ты хочешь понять, как работает BayesOpt — тогда запусти демо-прогон и наблюдай за графиком сходимости. 2. Ты планируешь новый класс сцен (например, «Аквариумы» или «Антикварная мебель»), для которого пятнадцать встроенных Preset подходят не идеально. Мысленно определи пространство поиска, проверь его здесь с «Bowl demo (1-dim)» или «densify-until + ssim-weight + grad-thresh», затем экспортируй лучшую конфигурацию как JSON и используй её как отправную точку для реального запуска обучения. 3. Ты хочешь изучить встроенные стандартные пространства поиска (Mip-подмножество, RadianceKit Defaults) — они перечислены в панели параметров левой боковой панели.

- График сходимости (средняя колонка): Y = лучшее достигнутое на данный момент значение целевой функции. X = индекс Trial. Вначале крутой подъём (BayesOpt пробует начальные образцы случайно, некоторые из них удачны), затем всё более плоский, потому что область около оптимума исчерпана. Если линия остаётся плоской 20+ Trial, можно останавливать прогон — дальнейшие Trial уже ничего не дают. Отдельные точки на графике — это индивидуальные значения Trial (то есть не «лучшее на данный момент»), окрашенные по фазе: синий = initial sample, зелёный = bayesopt acquisition, оранжевый = restart. - Таблица Trial (правая колонка): #1, #2, #3, … с соответствующим значением и тегом фазы. Лучший на данный момент Trial отмечен жёлтой звездой. Из таблицы можно определить лучший Trial и позже посмотреть его значения параметров при экспорте. - Инспектор пространства поиска (левая боковая панель): показывает для выбранного Preset все имена параметров и их диапазоны поиска [lo, hi]. Если выбран Preset «RadianceKit defaults (6-dim)», ты видишь, например, „densifyGradThreshold [5e-7, 5e-6]" — то есть log-uniform между этими двумя значениями.

Выбери Preset «RadianceKit defaults (6-dim)», бюджет Trial 40, Seed 42. Нажми «Start». Наблюдай: первые 8 Trial синие (начальные образцы, Latin-Hypercube), следующие — зелёные (получены через BayesOpt). График сходимости резко растёт до Trial ~13, после чего выравнивается. При Trial ~30–40 лучшее значение стабилизируется. Нажми «Save Best Config» — будет сохранён bayesopt-best.json с именем Preset, индексом Trial, значением и декодированными значениями параметров. Этот JSON затем можно вручную перенести в определение своего Preset.

W30Кнопка «Start»

ГДЕ

Панель инструментов слева, в состоянии Idle/Finished.

ТЕХНИЧЕСКИ

Сбрасывает список Trial, переключается в состояние Running, генерирует новый Run-ID (для обнаружения устаревших данных при многократных кликах по Start) и создаёт свежий Pause-Gate. Затем запускается фоновая задача, которая выполняет оптимизатор как асинхронный поток. Число начальных образцов растёт вместе с бюджетом, но не более 8 — то есть обычно 8 образцов Latin-Hypercube при бюджете от 28, меньше при малом бюджете. Обновления Trial принимаются инкрементально и добавляются в список. Защита от устаревших запусков: если тем временем второй клик по Start устанавливает новый Run-ID, обновления из старого запуска отбрасываются.

Стиль основного действия (Primary-Action) для заметного вида кнопки.

W31Кнопка «Pause»

ГДЕ

Панель инструментов слева, в состоянии Running.

ТЕХНИЧЕСКИ

Активирует Pause-Gate и переключается в состояние Paused. Фактический эффект: раннер ждёт в цикле опроса с интервалом 50 мс, прежде чем оценить следующую целевую функцию. Это означает, что текущий выполняющийся Trial доводится до конца (он ведь синтетический и занимает лишь микросекунды), но новый Trial не запускается. Как только выполняется Resume, всё продолжается с того места, где остановились.

W32Кнопка «Stop»

ГДЕ

Панель инструментов слева, в состояниях Running и Paused.

ТЕХНИЧЕСКИ

Прерывает задачу раннера, обнуляет ссылку, снимает Pause-Gate (если ещё была пауза), и переключается в состояние Finished (если Trial существуют) или Idle (если их нет). Уже вычисленные Trial остаются видимыми в списке — Stop их не удаляет. Деструктивная роль кнопки показывает её красной, потому что она прерывает прогон.

W33Кнопка «Resume»

ГДЕ

Панель инструментов слева, в состоянии Paused.

ТЕХНИЧЕСКИ

Снимает Pause-Gate и переключается обратно в состояние Running. Задача раннера уже выполняется (она ведь ждёт в цикле опроса); как только цикл замечает, что пауза снята, он продолжает работу и запускает следующий Trial.

W34Кнопка «Save Best Config»

ГДЕ

Панель инструментов справа, всегда видна (но серая, пока нет лучшего результата).

ТЕХНИЧЕСКИ

Открывает диалог сохранения с именем файла по умолчанию bayesopt-best.json, ограниченный JSON. После подтверждения формируется словарь полезной нагрузки: имя Preset, индекс Trial, значение (оценка целевой функции), параметры (словарь декодированных имён параметров → значения). Декодирование проецирует нормализованные координаты пространства поиска в [0,1]^d обратно в исходный диапазон значений (с соответствующими масштабами log-uniform/linear/integer). Вывод JSON отформатирован с отступами (pretty-printed) и отсортированными ключами. При ошибке записи (в текущей демо-версии) это молча игнорируется — нет UI ошибки, потому что это демо-путь.

Кнопка остаётся серой, пока не выполнен ни один Trial.

W35Пикер Preset «Search Space»

ГДЕ

Левая боковая панель, сверху.

ТЕХНИЧЕСКИ

Пикер-меню с четырьмя вариантами Preset: - «RadianceKit defaults (6-dim)» — полное стандартное пространство поиска со всеми шестью стандартными гиперпараметрами. - «Mip subset (2-dim)» — только mipSmoothing3DScale [0.05, 0.5] log-uniform и mipFilter2DVariance [0.1, 0.6] linear. Полезно, если хочешь настроить Mip-Splatting для класса сцен. - «densify-until + ssim-weight + grad-thresh» — три параметра, релевантных для Densify (densifyGradThreshold log-uniform, ssimWeight linear, densifyUntilIter integer). - «Bowl demo (1-dim)» — педагогическое пространство поиска с одним параметром для демонстрации «как работает BayesOpt».

Пока прогон активен, пространство поиска сменить нельзя (это сбило бы оптимизатор с толку).

W36Слайдер «Trial Budget»

ГДЕ

Левая боковая панель, под пикером пространства поиска.

ТЕХНИЧЕСКИ

Слайдер от 10 до 200, шаг 5. По умолчанию 40. Это означает: BayesOpt может выполнить максимум N Trial. Из них первые несколько — начальные образцы (Latin-Hypercube), остальные — настоящие Trial BayesOpt. Практическое правило: пространству поиска с d измерениями требуется примерно в десять-двадцать раз больше Trial, чем d, для хорошего оптимума. Для 6-мерных Defaults это 60–120, для 2-мерного Mip-подмножества 20–40, для 1-мерного Bowl-Demo 10–20.

Во время прогона слайдер отключён.

W37Слайдер «Random Seed»

ГДЕ

Левая боковая панель, под слайдером бюджета.

ТЕХНИЧЕСКИ

Слайдер от 1 до 100, шаг 1. По умолчанию 42. Seed передаётся как в начальные образцы Latin-Hypercube, так и в компонент шума демо-целевой функции. Воспроизводимость: тот же Seed + то же пространство поиска + тот же бюджет дают точно идентичную последовательность Trial. Полезно для вопроса «получат ли все твои коллеги один и тот же прогон, если воспроизведут демо?». Во время прогона отключён.

W38Диаграмма (Convergence)

ГДЕ

Средняя колонка окна.

ТЕХНИЧЕСКИ

Диаграмма Swift Charts с двумя слоями: 1. линия для «best-value-so-far» по каждому Trial — монотонно возрастающая или неизменная кривая в акцентном цвете. 2. точка на каждый Trial с индивидуальным значением целевой функции, окрашенная по фазе. Размер символа 40. Три метки фазы: «init» (синий), «bo» (зелёный), «restart» (оранжевый).

Маленькая легенда показывает цвета фаз вверху слева. Если список Trial пуст (до первого запуска), вместо диаграммы показывается пустое состояние (Empty-State) со значком графика и подсказкой «Press Start to begin a BayesOpt run.».

W39Таблица (Trial Log)

ГДЕ

Правая колонка окна.

ТЕХНИЧЕСКИ

Область прокрутки с лениво выстраиваемыми строками Trial. В каждой строке горизонтальный стек: номер Trial (3-значный, моноширинный, слева), значение (моноширинное, выровнено по правому краю, шириной 70 pt), тег фазы (капсула, заполненная с прозрачностью 25% — серый для «init», синий для «bo», оранжевый для «restart»; это намеренно другие цвета, чем цвета точек на соседней диаграмме), опционально жёлтая звезда, если этот Trial сейчас лучший. Механизм автопрокрутки автоматически переходит в конец, как только появляется новый Trial — так что можно следить за живым ходом внизу экрана, не прокручивая вручную.

Главное окно: история потерь и количество гауссианов (I39–I41, перекрёстная ссылка)

Три индикатора Inspector в главном окне заслуживают отдельного объяснения, потому что они постоянно видны во время выполняющегося обучения, и существуют важные практические правила о том, когда график выглядит здоровым. Индикаторы расположены в Inspector в разделе Fortschritt, в раскрывающейся группе Verlustverlauf (см. главу 2 — Inspector), и дополняют анализ Holdout из окна Aux выше.

Когда кривая Loss здорова? Здоровая кривая Loss показывает три фазы: (1) Warmup — в первые 200–500 итераций Loss резко падает с высокого уровня (обычно 0.15–0.25 для комбинации L1+SSIM, в зависимости от сцены) примерно до половины. Если Loss на этой фазе НЕ падает, значит, обычно неверны входные данные (испорченные изображения, плохие позы SfM, слишком малое количество начальных гауссианов). (2) Densification — между ~500 и densifyUntilIteration (классически 15K, MCMC до 20K или 25K) Loss продолжает падать, часто с небольшими скачками вниз, когда операции Densify добавляют новые гауссианы, а оптимизатор их использует. Количество гауссианов на этой фазе растёт. (3) Refinement — после этого Loss переходит в постепенно выполаживающийся хвост. Типичные конечные значения для ориентира: хорошо освещённая сцена с объектом (например, Tanks-&-Temples Truck с P4 Quality) достигает L1 ≈ 0.023, обширные внешние сцены вроде тех, что в Mip-NeRF 360, закономерно остаются выше (0.04–0.07).

Что означает плато? Плато (кривая Loss идёт горизонтально на протяжении нескольких тысяч итераций) имеет две интерпретации: (a) модель сошлась, дальнейшее обучение уже ничего не даёт — это хороший случай. (b) модель застряла (локальный минимум, плохая информация о градиенте, упор в лимит буфера) — плохой случай. Оба варианта выглядят на графике одинаково. Различить их можно так: посмотри на количество гауссианов. Если оно тоже плоское И близко к пределу MCMC (например, 150K из 150K при пресете P8 Quality (MCMC)), значит, ты упёрся в лимит — либо повысь Cap, либо прими плато как есть. Если количество гауссианов ещё растёт, а Loss не падает, значит, это застревание.

Когда прерывать, а когда продолжать обучение? Практическое правило: если за 10K итераций минимальный Loss не улучшился → прерывай, дальнейшие итерации потрачены впустую. До этого момента: через меню Training → Continue Training → «+5,000 iterations» ты можешь добавить продление, если видишь пограничное улучшение (для этого нет сочетания клавиш). Внимание: при MCMC плато часто настоящее — Cap является естественной границей.

Плато количества гауссианов — это НЕ сигнал «готово». Оно означает лишь, что MCMC достиг Cap или что Classic Densification исчерпал себя. На настоящий вопрос «готово ли» отвечают только PSNR/SSIM/LPIPS на независимом тестовом наборе — соответствующие цифры находятся в отчётах бенчмарков, которые ты анализируешь в Pareto Dashboard (W13–W22). Окно Holdout (W23–W29) эти метрики не предоставляет; оно оценивает лишь, допускает ли твой набор камер вообще честное разделение на обучающие и тестовые ракурсы.

PSNR/Holdout — это истина, Loss — лишь приближение. Loss является относительной метрикой: он падает по мере того, как твоя модель подстраивается под обучающие виды (Views). Но низкий Loss не означает автоматически хорошую модель — если модель заучила обучающие изображения наизусть (переобучение, Overfitting), Loss был бы низким, но PSNR на невиданных видах (Holdout) была бы плохой. Поэтому: для итоговой оценки качества всегда смотри на метрики Holdout, а не только на конечный Loss.

Блок эмпирических правил

- User Guide и Keyboard Shortcuts — это статичная справка: удобны для быстрых вопросов по ключевым словам, а для глубокого понимания используй именно это руководство. - Открывай Manage Storage, как только на диске остаётся меньше 10% свободного места. Логи и Imports-Staging — обычные виновники. - Pareto Dashboard имеет смысл использовать не раньше, чем после трёх-четырёх отчётов о тренировках. Ось X = стоимость (Time / Gs), ось Y = качество (PSNR / SSIM). Pareto-фронт показывает эффективные комбинации. - Используй Holdout Analysis перед тем, как публиковать PSNR-бенчмарки вместе с другими — это гарантирует, что твой тестовый набор действительно репрезентативен. Экспортированное разбиение на фолды предназначено для внешних инструментов; RadianceKit продолжает обучение относительно „every-8th". - BayesOpt Console — это прежде всего инструмент для изучения и исследования определений пространства поиска: он работает с демонстрационной функцией, а не с реальными тренировочными запусками. - Плато функции потерь (Loss-Plateau) и плато числа гауссианов (Gaussian-Count-Plateau) нужно интерпретировать раздельно. Достижение лимита (Cap-Limit) не означает сигнал «готово». Реальное качество измеряется только через Holdout-PSNR. - Если за 10K итераций нет улучшения минимальной потери → останови обучение.