Podręcznik

Rozdział 4 — Okna pomocnicze

Obok okna głównego (widok 3D plus Inspector) RadianceKit zarządza siedmioma kolejnymi oknami, wszystkie otwierane przez menu Help. Lista od góry do dołu: User Guide (⌘?), Keyboard Shortcuts (⌘/), Open Training Logs... (nie otwiera okna aplikacji, lecz Finder; dlatego nie omawiane tu dalej), Manage Storage..., Pareto Dashboard... (⇧⌘D), Holdout Analysis... (⇧⌘H), BayesOpt Console... (⇧⌘B). Trzy z nich — Dashboard, Holdout, BayesOpt — to samodzielne narzędzia analityczne. Każde z nich ma własny stos view-model, czyta lub zapisuje pliki JSON na dysku, a dla każdego istnieje argument CLI, którym możesz przy starcie aplikacji wskazać okno na konkretny plik (–dashboard-dir, –holdout-file, –bayesopt-autorun).

Cztery proste okna (User Guide, Keyboard Shortcuts, Manage Storage, plus podpozycje Open Training Logs / Open Exports Folder) otrzymują krótki wpis na element sterujący. Trzy okna analityczne są udokumentowane bardziej szczegółowo — każde z wprowadzeniem wyjaśniającym, co widzisz w oknie, kiedy je otworzyć i jak interpretować wyświetlany obraz.

Na końcu rozdziału znajduje się sekcja odsyłaczy do Inspectora okna głównego: co możesz sensownie odczytać w wykresie Loss na żywo i we wskaźniku liczby gaussianów podczas działającego treningu.

User Guide (W1–W4)

Okno User Guide z paskiem bocznym po lewej i wyrenderowaną treścią Markdown po prawej
Okno User Guide z paskiem bocznym po lewej i wyrenderowaną treścią Markdown po prawej

Co to jest: Wbudowane okno pomocy, które renderuje dostarczony z aplikacją plik guide_<jezyk>.md. Język jest wyprowadzany z ustawień (karta General → Language) lub, gdy stoi tam „System", z preferencji języka macOS. Układ jest klasyczny: po lewej pasek boczny ze wszystkimi nagłówkami, po prawej tekst ciągły.

Gdy potrzebujesz szybkiego przypomnienia o pojedynczym punkcie — czyli jako zamiennika hasła. Szczegółowa referencja to ten podręcznik; wbudowane okno pomocy jest raczej tym, czym byłoby –help w wierszu poleceń. Jest aktualizowane z każdym wydaniem aplikacji, ale treściowo trzymane na poziomie bardziej powierzchownym.

W1NavigationSplitView (pasek boczny + szczegóły)

GDZIE

Help → User Guide (⌘?).

TECHNICZNIE

Układ dwukolumnowy z wąskim paskiem bocznym (co najmniej 180 pt szerokości) dla drzewa treści i przewijalnym obszarem szczegółów dla właściwej treści Markdown. Okno ma minimalny rozmiar 700 × 500 pt. Przy pierwszym otwarciu okno ładuje pasujący guide_<lang>.md z pakietu aplikacji (fallback guide_en.md), parsuje go na rekordy bloków (nagłówki H1–H4, akapity, listy, tabele, linie podziału) i ekstrahuje osobno strukturę nagłówków dla paska bocznego. Formatowanie inline (Bold, Italic, Code-Span) jest renderowane przez wbudowany silnik Markdown. Język czytany jest z ustawień aplikacji, ze specjalnym przypadkiem chińskiego (zh-Hans) i brazylijskiego portugalskiego (pt-BR), które są utrzymywane jako pełne tagi locale, ponieważ te warianty różnią się od zh lub pt.

W2List (pasek boczny nagłówków)

GDZIE

Lewa kolumna w oknie User Guide.

TECHNICZNIE

Lista wszystkich nagłówków H2 i H3 bieżącego dokumentu Markdown. Wpisy H2 pojawiają się bez wcięcia ze średnią grubością czcionki, wpisy H3 z wcięciem 16 pt po lewej i zredukowanym stylem pierwszego planu. H4 i głębiej są ignorowane, ponieważ głębia inaczej czyni pasek boczny nieprzejrzystym. Identyfikatory kotwic są generowane z tekstu nagłówka przez slugifikację (lowercase + spacje na myślniki + filtrowanie na litery/cyfry/myślniki — ten sam algorytm, którego GitHub używa do swoich kotwic Markdown, dzięki czemu również zewnętrzne URL-e do dokumentacji potencjalnie lądowałyby na tej samej kotwicy). Lista używa natywnego stylu macOS.

W3Button (nagłówek → skok do kotwicy)

GDZIE

Na każdy wiersz paska bocznego jeden przycisk.

TECHNICZNIE

Każdy wpis paska bocznego to przycisk ustawiający bieżącą kotwicę, ale wyglądający optycznie jak wpis listy. Zmienna obserwatora wyzwala skok przewijania do odpowiedniej kotwicy z łagodną animacją przez 0,3 s. Po skoku wartość kotwicy jest resetowana, aby następne kliknięcie tej samej kotwicy znów zadziałało (inaczej obserwator nie wyzwoliłby ponownie, bo wartość się nie zmieniła).

W4ScrollView (treść szczegółowa)

GDZIE

Prawa kolumna.

TECHNICZNIE

Przewijalny, pionowo stackujący obszar treści z lazy renderingiem, ponieważ dłuższe przewodniki łatwo mogą mieć ponad 200 bloków Markdown — wariant non-lazy instancjowałby je wszystkie jednocześnie. Każdy blok otrzymuje własne ID, albo kotwicę nagłówka (dla skakalnych H1–H3), albo placeholder indeksu. Maksymalna szerokość 720 pt, padding 32 poziomo / 24 pionowo, dzięki czemu długie linie zachowują dobrze czytelny układ. Tabele są renderowane komórka po komórce z poziomymi stosami i liniami podziału; kod inline przez wbudowany silnik Markdown. Prawdziwe bloki kodu są obecnie traktowane jako akapit — znane ograniczenie okna pomocy.

Keyboard Shortcuts (W5–W6)

Okno Keyboard Shortcuts — pięć grup Navigation/Views/Capture/Editor/Training z kolumną skrótu po lewej i opisem po prawej
Okno Keyboard Shortcuts — pięć grup Navigation/Views/Capture/Editor/Training z kolumną skrótu po lewej i opisem po prawej

Statyczna lista referencyjna w pięciu sekcjach. Navigation: Mouse Drag (Orbit/Fly), Shift+Drag/Right-Drag (Pan), Scroll (Zoom), WASD (ruch fly-through), Q/E (Up/Down), F (przełącz Orbit/Fly), podwójne kliknięcie (wycentrowanie), Cmd+Scroll (dostosowanie FoV). Views: R (reset kamery), T (auto-rotacja), P (Camera Playback), B (cykl tła), 0–9 (skok do kamery treningowej 1=10%/5=50%/0=last), strzałki lewo/prawo (poprzednia/następna kamera). Capture: S (zrzut ekranu na pulpit), V (Turntable-Video), C (kopiowanie informacji o kamerze). Editor: Tab (tryb edycji), Click/Drag (Paint-Select), Option+Click (deselect), X / Delete (usuń selekcję), Cmd-Z (cofnij ostatnie usunięcie), [ / ] (rozmiar pędzla mniejszy/większy), Esc (zwolnij selekcję). Training: Start, Pause/Resume, Cancel, Continue +5K/+10K/+20K przez skróty menu w M9–M14.

Co to jest: Prosty statyczny przegląd wszystkich skrótów klawiszowych — Navigation, Views, Capture, Editor, Training. Treść jest hardkodowana, brak ładowania Markdown.

Gdy szukasz najszybszej drogi do zrobienia czegoś w widoku. WASD-Fly-Through, R dla reset kamery, B dla cyklu tła — wszystkie stoją tu.

W5ScrollView (obszar treści)

GDZIE

Help → Keyboard Shortcuts (⌘/).

TECHNICZNIE

Prosty obszar przewijania z pionową listą w środku. Padding 20 wokół, brak drzewa nawigacji bocznej (lista jest dostatecznie krótka). Treści zgrupowane w pięciu sekcjach (Navigation, Views, Capture, Editor, Training). Na kombinację klawiszy jeden wiersz z tłumaczalnym tekstem w obu kolumnach. Lewa kolumna (kod klawisza) zafiksowana na 180 pt szerokości, dzięki czemu opisy po prawej pozostają wyrównane pionowo. Brak interakcji poza przewijaniem — kliknięcie wiersza nic nie wyzwala, skróty klawiszowe są rzeczywistymi modyfikatorami klawiatury w menu i w widoku.

W6VStack (sekcje skrótów)

GDZIE

Wewnątrz ScrollView.

TECHNICZNIE

Sekcje stackowane do lewej z odstępem 16 pt. Wewnątrz pięciu sekcji nagłówek + sekwencja wierszy. Nagłówki używają drugorzędnego stylu Subheadline — celowo nie format Title, ponieważ sekcje nie muszą być nawigowalne. Treść jest celowo płaska (brak disclosure, brak wyszukiwania, brak filtru), aby komponent działał niezmiennie w każdej wersji macOS i plik pozostał czytelny.

Manage Storage (W7–W12)

Okno Manage Storage — nagłówek pokazuje „693 items · 16.74 GB total”, tabela z plikami eksportu PLY posortowana według daty, każda pozycja z pigułką formatu + nazwa pliku + rozmiar + data
Okno Manage Storage — nagłówek pokazuje „693 items · 16.74 GB total", tabela z plikami eksportu PLY posortowana według daty, każda pozycja z pigułką formatu + nazwa pliku + rozmiar + data

Widok tabelaryczny wszystkich zarządzanych przez RadianceKit plików. Nagłówek liczy 693 pozycje, łączny rozmiar 16.74 GB. Pasek narzędzi u góry: „Show in Finder" + „Refresh". Każdy wiersz: ikona PLY, nazwa pliku (np. training_20260527T211321Z.ply), data eksportu, rozmiar (waha się 7 KB do 218 MB), ikona lupy (Reveal) i ikona kosza (Move to Trash). Pliki są posortowane według daty, najnowsze u góry. W tym ujęciu demonstracyjnym dominują eksporty PLY, ponieważ dużo pracowano z –benchmark.

Co to jest: Przegląd użycia dysku dla wszystkiego, co RadianceKit składuje pod ~/Documents/RadianceKit/ — logi, eksporty, sceny, pakiety capture (od towarzysza iOS), importy (staging-kopie obrazów wejściowych). Na pozycję rozmiar w bajtach i dwa przyciski: „pokaż w Finderze" i „przenieś do kosza". NIE jest to automatyczne sprzątanie — aplikacja sama niczego nie usuwa; ty decydujesz na pozycję.

Gdy dysk się zapełnia. Przede wszystkim logi się zbierają (jeden JSONL na próbę treningu, plus _qualityMetrics.json); eksporty oczywiście też (PLY 100% surowych danych, jeden na eksport). Również użyteczne po crashu, gdy katalog staging importów ma jeszcze stare kopie obrazów wejściowych (zobacz „Disk-pressure incident" w dev_v549f-needle-reduction.md).

W7Przycisk „Show in Finder"

GDZIE

Nagłówek u góry po prawej w oknie przeglądarki storage.

TECHNICZNIE

Otwiera cały katalog RadianceKit (~/Documents/RadianceKit/) w Finderze, dzięki czemu możesz bezpośrednio zobaczyć strukturę folderu i też manipulować nią z samego Findera. Akcja otwiera nowe okno Findera i nie przechodzi do kontenera sandbox aplikacji — ~/Documents/RadianceKit/ to regularnie dostępna dla aplikacji domena Documents, nie ścieżka kontenera sandbox.

W8Przycisk „Refresh"

GDZIE

Nagłówek, obok przycisku Finder.

TECHNICZNIE

Wyzwala skanowanie w tle, które działa na zainicjowanym przez użytkownika asynchronicznym zadaniu, dzięki czemu skanowanie dużych drzew katalogów nie blokuje UI. Właściwe chodzenie przebiega przez każdy znany podkatalog (Logs, Exports, Scenes, Captures, Imports) i generuje pozycję storage na bezpośrednie dziecko. Na pozycję ustalany jest rekursywny rozmiar — preferowane jest faktyczne zużycie dysku (włącznie ze współdzieleniem hardlinków APFS) z fallbackiem na logiczny rozmiar pliku.

W9List (wpisy storage)

GDZIE

Główna treść pod nagłówkiem.

TECHNICZNIE

Lista z układem na wiersz: kategoria-specyficzna ikona SF Symbol (dokument dla logów, strzałka uploadu dla eksportów, sześcian dla scen, taca dla importów), nazwa + podtytuł (etykieta kind + sformatowana data modyfikacji), licznik bajtów po prawej (wyrównany do prawej, monospaced), przycisk Reveal (symbol lupy), przycisk Trash (kosz). Sortowanie: pierwotnie według kind (sceny najpierw, potem eksporty, logi, captures, importy, inne), drugorzędnie według daty modyfikacji malejąco (najnowsze u góry). Gdy skanowanie wciąż trwa, w miejscu wyświetlany jest postęp „Scanning...". Gdy nic nie znaleziono, wyświetlanie empty-state z ikoną tacy.

W10Przycisk wiersza „Reveal in Finder"

GDZIE

Na wiersz, symbol lupy po prawej.

TECHNICZNIE

Otwiera Finder i zaznacza specyficzny element (plik lub folder). Różnica wobec W7: W7 otwiera katalog root; W10 zaznacza dokładnie tę jedną pozycję. Praktyczny workflow: zidentyfikuj duży wpis, kliknij na lupę, potem skopiuj go na przykład na zewnętrzny wolumin.

W11Przycisk wiersza „Move to Trash"

GDZIE

Na wiersz, symbol kosza po prawej obok lupy.

TECHNICZNIE

Wyzwala okno potwierdzenia dialogu (W12). Dopiero po potwierdzeniu działa standardowa operacja macOS „przenieś do kosza" (czyli odwracalna, nie bezpośrednie usunięcie). Po udanym trash wpis jest usuwany z listy i licznik łącznych bajtów aktualizowany. Przy błędach wyświetlany jest modalny dialog błędu.

W12ConfirmationDialog (potwierdzenie usunięcia)

GDZIE

Wyzwalane przez W11, prezentowane jako sheet macOS.

TECHNICZNIE

Standardowy dialog potwierdzenia z dynamicznym tytułem „Delete <name>?" i wierszem wiadomości jawnie wskazującym, że pozycja ląduje w koszu i z niego jest przywracalna (do czasu opróżnienia kosza). Dwa przyciski: „Move to Trash" jako akcja destrukcyjna (prezentowana czerwono) i „Cancel" z automatycznym przypisaniem Esc. Dialog jest non-modal w tym sensie, że blokuje tylko to okno, nie całą aplikację — to standard macOS dla odwracalnych usunięć.

Pareto Dashboard (W13–W22)

Pareto Dashboard — pusty stan przed importem raportu
Pareto Dashboard — pusty stan przed importem raportu

Pusty stan (po pierwszym otwarciu) — empty-state z call-to-action „Open Reports Folder...". Punkty danych pojawiają się, gdy tylko raporty treningu są wczytane, zobacz następne zdjęcie.

Pareto Dashboard z 129 wczytanymi raportami benchmark — Gaussians vs PSNR z frontem Pareto, filtry Scene/Strategy/Mip
Pareto Dashboard z 129 wczytanymi raportami benchmark — Gaussians vs PSNR z frontem Pareto, filtry Scene/Strategy/Mip

Pasek narzędzi nagłówka pokazuje „129 reports of 129" (wszystkie raporty w wybranym folderze pomyślnie sparsowane — 21 dodatkowych plików nie udało się sparsować z powodu starszego formatu, zobacz listę wskazówek po prawej). Osie: selektor X-Axis na Gaussians, selektor Y-Axis na PSNR (dB). Wykres scatter: zielone punkty = strategia Classic, niebieskie punkty = MCMC. Przerywana linia frontu Pareto biegnie wzdłuż najlepiej osiągniętych wartości PSNR i osiada na plateau ok. PSNR≈30 dB od ok. 500K gaussianów. Pigułki filtrów po prawej: 7 scen (bicycle, bonsai, family, flowers, kitchen, stump, truck), 2 strategie (classic, mcmc), 3 opcje Mip-Splatting (All, On, Off). Obecnie wszystkie filtry otwarte, stąd gęsty klaster punktów.

Co to jest: Narzędzie porównawcze wielu przebiegów. Trenowałeś w przeszłości kilka scen lub tę samą scenę z różnymi ustawieniami wstępnymi — każdy taki przebieg treningu produkuje (gdy podałeś –benchmark lub uruchomiłeś przez funkcję benchmark) plik JSON-raportu, zawierający m.in. final-PSNR, SSIM, LPIPS, liczbę gaussianów i czas wallclock. Dashboard wczytuje cały folder takich raportów jednocześnie i plotuje je jako 2D scatter z wybieralnymi osiami. Dodatkowo front Pareto (zbiór niezdominowanych punktów) jest rysowany jako przerywana linia.

Po założeniu co najmniej trzech lub czterech raportów treningu. Z mniejszą liczbą punktów linia frontu nie jest wymowna. Typowy use-case: próbowałeś zrekonstruować scenę plenerową i kolejno wypróbowałeś P3 Balanced (Classic), P4 Quality (Classic), P7 MCMC Quality i P9 Outdoor (tuned) — teraz chcesz wiedzieć, która konfiguracja daje najlepszą PSNR na sekundę czasu treningu lub która potrzebuje najmniej gaussianów dla danej PSNR.

Obie osie są swobodnie wybieralne (X: psnr, ssim, lpips, ...; Y tak samo). Logika frontu Pareto w ParetoFront2D.indices wie dla każdej metryki, czy „mniejsze = lepsze" (np. LPIPS, Loss, Time) czy „większe = lepsze" (PSNR, SSIM) — linia biegnie więc w zależności od wyboru osi z lewego dolnego do prawego górnego rogu lub z lewego górnego do prawego dolnego, zawsze wzdłuż najlepszej osiągniętej kombinacji. Punkt jest Pareto-optymalny, gdy ŻADEN inny punkt w OBU wymiarach nie jest przynajmniej równie dobry (czyli żaden inny go nie dominuje). Pareto-optymalne punkty leżą na linii, inne punkty na prawo/powyżej (zależnie od orientacji osi) od niej. Punkty NA linii to prawdziwi kandydaci na „najlepsze ustawienie wstępne"; punkty DALEKO od linii to zmarnowany czas treningu.

Możesz ograniczyć wybór do konkretnej sceny (gdy np. chcesz porównywać tylko przebiegi plenerowe), do konkretnej strategii (Classic lub MCMC) lub do Mip-Splatting on/off (istotne po Fazie Q1.5, gdzie Mip pozostaje jako opt-in Advanced Flag).

Masz trzy raporty dla sceny „truck" pod ~/Documents/RadianceKit/Reports/: Run A (P4 Quality, 40K iter, 524K Gs, 105 s, PSNR 23.4), Run B (P7 MCMC, 200K iter, 150K Gs, 693 s, PSNR 24.6), Run C (P9 Outdoor, 100K iter, 1.25M Gs, 312 s, PSNR 25.8). Ustaw oś X na trainingTime, oś Y na PSNR. Run B leży po prawej u góry, Run C jeszcze bardziej w prawo u góry, Run A po lewej u dołu. Front Pareto łączy A i C — oba niezdominowane. Run B jest „lost" (C jest lepsze w Time I PSNR). Wniosek: dla „truck" nie opłaca się domyślne MCMC; albo szybko+ok (A), albo długo+bardzo dobrze (C). Zapisz konfigurację z C jako własne ustawienie wstępne (Inspector → I1 Save Preset).

Następna akcja: Najlepszą konfigurację zapisać jako ustawienie wstępne. Konkretnie: spójrz na punkty Pareto (hover pokazuje PSNR/SSIM/LPIPS/Gs/Time w tooltipie), zdecyduj, który najlepiej pasuje ci pod kątem trade-off Time-vs-Quality, otwórz odpowiedni raport (nazwa pliku zawiera timestamp przebiegu), skopiuj jego konfigurację treningu w nowym przebiegu lub zapisz ją po następnej sesji treningu jako ustawienie wstępne przez Inspector.

W13Przycisk „Open Reports Folder..."

GDZIE

Pasek narzędzi u góry po lewej.

TECHNICZNIE

Otwiera dialog wyboru folderu z prośbą „Select a folder containing benchmark .json reports". Po potwierdzeniu działa zadanie w tle parsujące sekwencyjnie wszystkie pliki .json w folderze. Błędne raporty (zepsuty JSON, błędny schemat) są zbierane i wyświetlane na dole paska bocznego jako „N file failed to parse" — bez crasha. Gdy drugie kliknięcie nastąpi podczas trwającego pierwszego ładowania, poprzednie zadanie jest anulowane, aby dwa wyniki jednocześnie nie pisały do stanu.

Także przez CLI: –dashboard-dir /sciezka/do/raportow ładuje folder już przy starcie aplikacji.

W14Selektor „X-Axis"

GDZIE

Nad wykresem, po lewej.

TECHNICZNIE

Selektor menu ze wszystkimi dostępnymi osiami metryk modułu dashboard (PSNR, SSIM, LPIPS, liczba gaussianów, czas treningu itd.). Domyślnie liczba gaussianów. Przy zmianie hover-punkt jest resetowany, ponieważ wcześniej podświetlona pozycja w starym układzie współrzędnych osi po zmianie osi nie ma więcej sensu. Selektor jest ograniczony do szerokości zawartości, aby nie ciągnął się przez całą szerokość.

W15Selektor „Y-Axis"

GDZIE

Nad wykresem, obok X-Axis.

TECHNICZNIE

Identyczne do W14, tylko że domyślnie PSNR. Wybór osi jest zapisywany niezależnie, więc użytkownik może też wybierać bezsensowne kombinacje (X=PSNR, Y=PSNR — wyrzuciłoby wszystkie punkty na przekątną). Takie kombinacje nie są jednak wyłapywane; celowa decyzja, ponieważ porównanie „SSIM vs PSNR" jest jak najbardziej interesujące, by zobaczyć jak konsystentne są metryki.

W16Przełącznik „Show Pareto Front"

GDZIE

Po prawej obok selektorów osi.

TECHNICZNIE

Standardowy przełącznik macOS. Gdy aktywny, na wykresie Pareto dodatkowo do chmury punktów rysowana jest linia z obliczonym frontem Pareto 2D. Styl: przerywana (wzór 4–4), półprzezroczysta szarość, grubość linii 1,5 pt. Obliczenia Pareto działają na głównym wątku — przy typowej liczbie raportów (≤ ~50) jest to bez problemu szybkie. Gdy przełącznik jest wyłączony, linia jest pominięta, dzięki czemu pozostają tylko gołe punkty.

W17Pigułki filtra „Scene"

GDZIE

Prawy pasek boczny w oknie dashboard.

TECHNICZNIE

Pigułki filtra dla każdej sceny występującej w wczytanych raportach. Własny układ flow, który automatycznie przepakowuje pigułki na kilka wierszy, gdy tylko szerokość zostanie wyczerpana. Aktywne pigułki otrzymują akcentowe tło, nieaktywne neutralne standardowe tło Material. Wybór wielu jest możliwy (semantyka set); gdy żadna pigułka nie jest wybrana, wszystkie sceny są uznawane za „przepuszczone" — tzn. logika set jest „pusty wybór = wszystko", nie „pusty wybór = nic".

W18Pigułki filtra „Strategy"

GDZIE

Pod filtrem Scene na pasku bocznym.

TECHNICZNIE

Dokładnie jak W17, ale dla strategii treningu — typowo dwie wartości „classic" i „mcmc", wyprowadzone z pola Strategy z JSON-raportów benchmark. Pomocne, gdy zmieszałeś raporty obu strategii i chcesz widzieć tylko jeden rodzaj (np. „pokaż tylko MCMC, ponieważ Classic już wykluczyłem").

W19Pigułki filtra „Mip-Splatting"

GDZIE

Pod filtrem Strategy na pasku bocznym.

TECHNICZNIE

Filtr trójwartościowy (zamiast set jak W17/W18): „All" / „On" / „Off". Tło: Mip-Splatting został w Fazie Q1.5 oceniony jako eksperymentalna poprawa wieloskalowa i finalny werdykt brzmiał „brak konsekwentnego ładnego wygranego; zachować jako opt-in Flag". Gdy robisz porównania Mip-on/off, często chcesz móc bardzo ostro rozdzielić. Stąd dedykowany filtr ternarny ze stanami „przepuść wszystko", „tylko Mip włączone", „tylko Mip wyłączone". Sekcja paska bocznego jest pokazywana tylko, gdy w zestawie danych jest co najmniej jeden raport Mip I co najmniej jeden bez Mip (inaczej filtrowanie nie ma sensu).

W20ChipButton (przełącznik filtra, all/on/off)

GDZIE

Komponent pomocniczy, używany w W17/W18/W19.

TECHNICZNIE

Minimalistyczny wrapper przycisku. Treść: tekst etykiety z grubością Caption i padding 10 poziomo / 5 pionowo. Tło warunkowe: gdy aktywne → kolor akcentu aplikacji z białym tekstem; w przeciwnym razie neutralne standardowe tło Material z czarnym tekstem. Forma to Capsule (pigułka). Plain-Buttonstyle, aby Material Capsule nie był pokrywany przez systemową ramkę.

W21Chart (Pareto-Scatter)

GDZIE

Środkowy obszar dashboardu.

TECHNICZNIE

Wykres Swift-Charts z dwiema warstwami: 1. punkt na raport — pozycja z wybranych metryk X i Y, kolor według Strategy, symbol według statusu Mip. Rozmiar symbolu normalnie 80, podświetlonego 200 (gdy ID odpowiada aktualnie hoverowanemu raportowi). 2. linia dla frontu Pareto, tylko gdy przełącznik włączony.

Overlay wykresu: przezroczysty prostokąt rejestruje ruch myszy; na klatkę ustalana jest euklidesowo najbliższa pozycja punktu w ramce plot i hoverowany raport aktualizowany, jeśli dystans leży poniżej 24 px (inaczej resetowany). Tak otrzymujesz tooltip bez klikania — wystarczy hover.

W22Tooltip (szczegóły hover)

GDZIE

Pod wykresem, wyświetlany przy hover.

TECHNICZNIE

Stos poziomy: nazwa sceny (Headline), tag Strategy (Caption), linia podziału, potem metryki PSNR/SSIM/LPIPS/Gs/Time w małych grupach pionowych (label + wartość monospaced). Gdy Mip był aktywowany, dodatkowo tag „Mip" Capsule w kolorze akcentu. Tło półprzezroczyste rozmycie, zaokrąglony prostokąt z promieniem 8 pt. Wyświetlany tylko, gdy mysz faktycznie jest nad punktem. Znika automatycznie przy opuszczeniu.

Holdout Analysis (W23–W29)

Holdout Analysis — pusty stan przed wczytaniem transforms.json
Holdout Analysis — pusty stan przed wczytaniem transforms.json

Pusty stan z empty-state i call-to-action „Open transforms.json...". Akceptuje format NeRF-Studio i Instant-NGP.

Pusty stan (po pierwszym otwarciu) — znaczniki kamer pojawiają się, gdy tylko wczytany jest transforms.json, zobacz następne zdjęcie.

Globe Holdout z 100 kamerami NeRF-Blender-Mic, 5 foldów po 20 kamer, strategia Angular aktywna
Globe Holdout z 100 kamerami NeRF-Blender-Mic, 5 foldów po 20 kamer, strategia Angular aktywna

Nagłówek pokazuje wczytany plik (transforms_train.json) i liczbę kamer („100 cameras"). Lewy pasek boczny: selektor strategii z dwiema opcjami — Angular (longitudinal) aktywne (wyrównuje foldy według sektorów długości/szerokości na sferze, dzięki czemu każdy fold testowy jest geometrycznie gęsty) vs Linear (round-robin) (oparte na kolejności, każda k-ta klatka jako zestaw testowy). Suwak k-foldów stoi na 5, selektor folda testowego na fold 1. Przycisk Export generuje fold-assignment.json dla Nerfstudio/Instant-NGP. Środkowy panel: projekcja globusa 3D wszystkich 100 kamer — zielone punkty = Train, czerwone punkty = bieżący fold testowy (fold 1 z 20 kamerami). Prawy pasek boczny (Angular Correlation): na fold 20 kamer + Mean Nearest Angle (fold 1: 7.9°, fold 2: 7.8°, fold 3: 7.7°, fold 4: 7.0°, fold 5: 6.3°) — mniejsza wartość oznacza, że kamery w obrębie tego folda leżą ciasno koło siebie, czyli rozdział Holdout jest przestrzennie koherentny.

Co to jest: Wizualizator 3D twojego układu kamer z logiką cross-validation. Wczytujesz transforms.json (standardowy format Nerfstudio / Instant-NGP dla póz kamer), aplikacja czyta wszystkie kamery, rzutuje ich kierunki patrzenia na sferę jednostkową i pokazuje je jako małe kulkowe znaczniki na wirtualnym globusie. Następnie dzieli kamery na k foldów (według wybranej strategii: angular lub linear), zaznacza zielonym udział treningowy a czerwonym udział testowy (Holdout), i oblicza na fold score Angular Correlation, mówiący ci jak daleko fold testowy leży w przestrzeni kątów widzenia od folda treningowego.

Gdy chcesz robić ocenę holdout — czyli: jak dobrze twój model generalizuje na niewidziane kąty widzenia? Standardem w treningu jest „every-8th view jako Holdout" (konwencja Mip-NeRF360), ale to bardzo liniowy podział. Gdy twoje obrazy są np. zgrupowane czasowo (najpierw jedna strona obiektu, potem druga), to „every-8th" nie jest reprezentatywne — losowa pozycja sekwencji ląduje w teście, ale wszyscy jej sąsiedzi są w treningu, to za proste. Przy „angular" stratyfikuje się zamiast tego po przestrzeni kątów widzenia: każdy fold zawiera kamery ze wszystkich obszarów orbity, dzięki czemu test naprawdę testuje luki w generalizacji.

Angular vs Linear: - Angular (standard): dzieli kamery według kąta longitudinalnego (współrzędna φ wokół osi Y) na k równych sektorów. Fold 0 to kamery z φ ∈ [0°, 360/k°), fold 1 następne i tak dalej. Zaleta: każdy fold pokrywa wycinek orbity; fold testowy jest przestrzennie kompaktowy, ale szeroko rozłożony po zestawie danych świata. Dobre dla klasycznych ujęć orbitalnych. - Linear (round-robin): indeks folda = (image_index modulo k). To prosty podział „every-k-th". Działa, gdy kolejność obrazów NIE ma biasu przestrzennego (np. losowo posortowane ujęcia dronowe). Działa źle, gdy obrazy klastrują się czasowo.

W globusie 3D od razu widzisz: zielone punkty (trening) i czerwone punkty (test). Gdy czerwone punkty wszystkie klastrują w jednym rogu, holdout jest słaby (brak dobrego testu generalizacji). Gdy leżą równomiernie między zielonymi, jest dobry. Score Angular Correlation na fold (prawy pasek boczny, w stopniach) mówi dodatkowo: mniejsza wartość = test jest bliski treningu (każda kamera testowa ma bliską kamerę treningu, łatwy test); większa wartość = test jest daleko od treningu (trudniejsza generalizacja).

Nagrałeś swoją scenę Truck z 251 obrazami, eksportujesz przez pozycję menu M33 (Export SfM transforms.json) plik nerfstudio. Otwórz okno Holdout (⇧⌘H), wczytaj JSON przez „Open transforms.json...", spójrz na globus. k=5 (domyślnie) daje ci 5 foldów. Kliknij na „Fold 3" — zobacz czy czerwone znaczniki są w miarę równomierne. Jeśli tak: „Export fold-assignment.json", umieść wyeksportowany plik w folderze raportów, a przy następnym przebiegu treningu z –benchmark (lub odpowiednimi ustawieniami Inspectora) dokładnie ten podział foldów jest używany jako Holdout testowy — zamiast standardu „every-8th".

W23Przycisk „Open transforms.json..."

GDZIE

Pasek narzędzi u góry po lewej.

TECHNICZNIE

Otwiera dialog wyboru pliku ograniczony do plików JSON. Po potwierdzeniu moduł Holdout ładuje plik. Loader parsuje zarówno format nerfstudio (intrinsics kamer plus listę klatek ze ścieżką obrazu i macierzą transformacji), jak i format instant-ngp (taka sama budowa). Na klatkę kierunek patrzenia jest ekstrahowany z macierzy transformacji (oś z lokalnej bazy kamery) i zapisywany. Gdy parsowanie zawiedzie, wyświetlana jest wiadomość błędu w obszarze statusu.

Także przez CLI: –holdout-file /sciezka/do/transforms.json startuje okno bezpośrednio z wczytanym plikiem.

W24Selektor „Strategy" (angular/linear)

GDZIE

Lewy pasek boczny, u góry.

TECHNICZNIE

Selektor radiowy z dwiema opcjami: Angular i Linear. Zmiana strategii automatycznie wyzwala ponowne obliczenie foldów. Kierunki patrzenia to lista wektorów jednostkowych 3D na sferze; strategia Angular rzutuje je na kąt longitudinalny φ i sortuje, strategia Linear robi po prostu podział modulo po indeksie klatki.

W25Suwak „k Folds"

GDZIE

Lewy pasek boczny, pośrodku.

TECHNICZNIE

Suwak od 3 do 10, krok 1. Przy zmianie obliczenie foldów jest automatycznie inicjowane na nowo, dzięki czemu lista foldów, indeksy Training/Test i score na fold są od razu nowo obliczane. Wybrana wartość jest wyświetlana jako tekst monospaced-digit po prawej obok etykiety.

Reguła kciuka: k=5 to standard (daje ci 20% test na fold, to zwykłe dla cross-validation). k=10 gdy masz bardzo dużo danych i potrzebujesz więcej foldów do siły statystycznej. k=3 gdy masz mało danych.

W26Selektor „Test Fold"

GDZIE

Lewy pasek boczny, pod suwakiem k.

TECHNICZNIE

Selektor menu. Opcje są dynamicznie 0..<k, etykieta „Fold 1" do „Fold N" (czyli 1-indeksowane w UI, 0-indeksowane wewnętrznie). Gdy wcześniej wybrany indeks ≥ k (np. ponieważ zredukowałeś k z 10 do 5), jest automatycznie resetowany na 0. Wybrany fold testowy jest na globusie prezentowany czerwono, wszystkie inne zielono.

W27Przycisk „Export fold-assignment.json"

GDZIE

Lewy pasek boczny, na dole.

TECHNICZNIE

Otwiera dialog zapisu z domyślną nazwą pliku fold-assignment.json. Po potwierdzeniu moduł Holdout koduje bieżący podział w schemat JSON (przypisanie fold na klatkę plus meta-blok strategii). Plik ten można potem przy następnym treningu z –benchmark przekazać, dzięki czemu ten sam Holdout jest używany do finalnej oceny metryki. Błędy zapisu wyświetlane jako tekst błędu; sukces zielonym tekstem jako „Saved to (filename)".

W28SCNView (globus kamer 3D)

GDZIE

Środkowy panel w oknie Holdout.

TECHNICZNIE

Widok globusa SceneKit. Scena składa się z: kuli Wireframe (promień 1.0, 36 segmentów, ciemnoszary), trzech kolorowych kikutów osi (czerwony/zielony/niebieski dla X/Y/Z, każdy 1.2 długości), i na kamerę małej kuli znacznika (promień 0.03) na odpowiedniej pozycji kierunku patrzenia na sferze jednostkowej (lekko na zewnątrz, aby nie zniknąć W kuli wireframe). Znaczniki przy każdej zmianie folda NIE są przebudowywane — przebudowa jest potrzebna tylko, gdy zmienia się lista klatek (czyli nowy JSON jest wczytywany). Zamiast tego na update działa in-place aktualizacja kolorów materiału: czerwony dla indeksów Test, zielony dla treningu, jasnoszary gdy ani jedno ani drugie. Tak ticki suwaka pozostają wydajne nawet przy N > 1000 kamer.

Sterowanie kamerą jest włączone — możesz myszą obracać globus, zoomować, panować. Oświetlenie sprawia, że znaczniki nie wyglądają płasko. Tło ciemnoszare.

W29FoldCard (Tap to Select Fold)

GDZIE

Prawy pasek boczny, sekcja „Angular Correlation".

TECHNICZNIE

Na fold widok karty — zaokrąglony prostokąt z promieniem 6 pt, padding 10, pionowy układ z dwoma wierszami (u góry „Fold N" + liczba kamer, na dole „Mean nearest angle:" + wartość w stopniach). Kolor tła warunkowo: aktywny fold = kolor akcentu półprzezroczysty, nieaktywne = neutralne standardowe Material. Stuknięcie wybiera fold i globus przebarwia się na żywo.

Score „Mean nearest angle" to średni najmniejszy kąt na kamerę testową do najbliższej kamery treningu (wewnętrznie liczony w radianach, w UI wyświetlany w stopniach).

BayesOpt Console (W30–W39)

Konsola BayesOpt — pusty stan przed startem próby
Konsola BayesOpt — pusty stan przed startem próby

Pusty stan z selektorem Search-Space (RadianceKit defaults (6-dim)), suwakiem Trial-Budget (domyślnie 40), Random-Seed (42) i trzema pustymi panelami dla wykresu Convergence, Trial Log i listy parametrów Search-Space.

Pusty stan (po pierwszym otwarciu) — wykres Convergence i tabela Trial wypełniają się, gdy tylko przebieg zostanie uruchomiony, zobacz następne zdjęcie.

Konsola BayesOpt po 40 próbach — wykres Convergence rośnie stromo do próby 15, Best Value 0.9943, Trial Log z tagami init/bo/restart
Konsola BayesOpt po 40 próbach — wykres Convergence rośnie stromo do próby 15, Best Value 0.9943, Trial Log z tagami init/bo/restart

Status u góry po prawej „Finished — best 0.9943 after 40 trials". Lewy pasek boczny: selektor Search-Space na RadianceKit defaults (6-dim), Trial-Budget 40, Random Seed 42. Lista parametrów pokazuje sześć hiperparametrów do strojenia z ich zakresami wartości: 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]. Pośrodku: wykres Convergence (X = indeks próby 1–40, Y = wartość Objective 0–1) — szare punkty = próbki początkowe (LHS), niebieskie punkty = akwizycja BayesOpt, pomarańczowe punkty = próby restartu (#22 i #31). Linia najlepszej wartości rośnie stromo do próby ~7, potem tylko marginalna poprawa do próby 15, od tego momentu płaski plateau przy 0.99+. Prawy pasek boczny: Trial-Log #1–#34 z score + tag (init/bo/restart). Przycisk Save-Best-Config u góry po prawej zapisuje bayesopt-best.json.

Co to jest: Konsola Bayes-optymalizacji do poszukiwania hiperparametrów. Bayes-Opt to automatyczna procedura próbująca jak najmniej eksperymentów znaleźć optymalny punkt nieznanej funkcji — typowo: „która kombinacja z mcmcMaxGaussians, capMultiplier, ssimWeight i gradThreshold daje najlepszą PSNR dla mojej klasy sceny?". Zamiast siatki 6^4 = 1296 prób Bayes-Opt próbuje około 40–100 świadomych prób i dociera blisko optimum.

Ważne: Bieżąca dostarczona w aplikacji wersja nie przeprowadza optymalizacji wobec rzeczywistych przebiegów treningu (to trwałoby dni), lecz wobec syntetycznego demo-Objective — wielomodalnego krajobrazu z charakterem hill-climbingu plus lekkim noisem. To jest tak celowo: okno ma pokazywać ci zachowanie optymalizatora (przebieg zbieżności, punkty próbek, Best-So-Far) i pozwolić ci zrozumieć definicje Search-Space. Dla rzeczywistych przebiegów BayesOpt sterowanych treningiem (jak w Fazie Q7 dla ustawień Scene-Class) używany jest osobny offline workflow CLI; okno jest wariantem Live-UI.

Trzy przypadki użycia: 1. Chcesz zrozumieć, jak działa BayesOpt — wtedy uruchom demo-przebieg i obserwuj wykres Convergence. 2. Planujesz nową klasę sceny (np. „akwaria" lub „antyczne meble"), dla której wbudowane 10 ustawień nie pasuje idealnie. Zdefiniuj mentalnie przestrzeń poszukiwań, sprawdź ją tutaj z „Bowl demo" lub ustawieniem „Densify", eksportuj potem Best-Config jako JSON i użyj jako punktu startowego dla rzeczywistego przebiegu treningu. 3. Chcesz zainspekcjonować zdefiniowane w pakiecie RKBayesOpt domyślne Search-Spaces (Mip-Subset, RadianceKit Defaults) — są wyszczególnione w panelu parametrów lewego paska bocznego.

- Wykres Convergence (środkowa kolumna): Y = najlepsza dotychczas osiągnięta wartość funkcji Objective. X = indeks próby. Początkowo stromo rosnące (BayesOpt próbuje próbki początkowe losowo, niektóre z nich są szczęśliwe), potem coraz bardziej płaskie, ponieważ region bliski-optimum jest wyczerpany. Gdy linia pozostaje płaska przez 20+ prób, możesz przebieg zatrzymać — dalsze próby nic już nie dają. Poszczególne punkty na wykresie to indywidualne wartości prób (czyli nie „best so far"), pokolorowane według fazy: szary = próbka początkowa, niebieski = akwizycja BayesOpt, pomarańczowy = restart. - Tabela prób (prawa kolumna): #1, #2, #3, ... z wartością i tagiem fazy. Najlepsza dotychczas próba jest oznaczona żółtą gwiazdką. Z tabeli możesz zidentyfikować najlepszą próbę i jej wartości parametrów obejrzeć później przy eksporcie. - Inspektor Search-Space (lewy pasek boczny): pokazuje dla wybranego ustawienia wszystkie nazwy parametrów i ich zakresy poszukiwań [lo, hi]. Gdy stoisz przy ustawieniu „RadianceKit defaults (6-dim)", widzisz np. „densifyGradThreshold [5e-7, 5e-6]" — czyli log-uniform między tymi dwiema wartościami.

Wybierz ustawienie „RadianceKit defaults (6-dim)", Trial-Budget 40, Seed 42. Kliknij „Start". Obserwuj: pierwsze 8 prób jest szarych (próbki początkowe, Latin-Hypercube), następne niebieskie (BayesOpt-akwirowane). Wykres Convergence robi się stromy do próby ~15, potem się spłaszcza. Przy próbie ~30–40 najlepsza wartość się stabilizuje. Kliknij „Save Best Config" — zostanie zapisany bayesopt-best.json z nazwą ustawienia, indeksem próby, wartością i dekodowanymi wartościami parametrów. Ten JSON możesz potem ręcznie wprowadzić do definicji swojego ustawienia.

W30Przycisk „Start"

GDZIE

Pasek narzędzi po lewej, w stanie Idle/Finished.

TECHNICZNIE

Resetuje listę prób, przełącza w stan Running, generuje nowe ID przebiegu (do wykrywania stale przy wielu kliknięciach Start) i tworzy świeżą bramkę Pause. Potem startuje zadanie w tle, wykonujące optimizer jako asynchroniczny strumień. Rozmiar próbek początkowych wynika z min(8, budget / 4 + 1) — czyli typowo 8 próbek Latin-Hypercube przy budżecie ≥ 28, mniej przy małym budżecie. Aktualizacje prób są odbierane przyrostowo i dołączane do listy. Ochrona przed stale: gdy w międzyczasie drugie kliknięcie Start ustawi nowe ID przebiegu, aktualizacje ze starego przebiegu są odrzucane.

Primary-Action-Style dla prominentnego wyglądu przycisku.

W31Przycisk „Pause"

GDZIE

Pasek narzędzi po lewej, w stanie Running.

TECHNICZNIE

Ustawia aktywną bramkę Pause i przełącza w stan Paused. Właściwy efekt: runner czeka w pętli pollingu 50 ms, zanim oceni następną funkcję Objective. To znaczy, że właśnie działająca próba jest doprowadzana do końca (jest syntetyczna i trwa tylko mikrosekundy), ale żadna kolejna próba nie jest inicjowana. Gdy Resume zadziała, idzie dalej tam, gdzie się zatrzymał.

W32Przycisk „Stop"

GDZIE

Pasek narzędzi po lewej, w stanach Running i Paused.

TECHNICZNIE

Anuluje zadanie runnera, zeruje referencję, zwalnia bramkę Pause (jeśli wciąż pauzowane), i przełącza w stan Finished (gdy istnieją próby) lub Idle (gdy żadne). Już obliczone próby pozostają widoczne w liście — Stop ich nie usuwa. Rola przycisku destrukcyjna pokazuje przycisk na czerwono, ponieważ anuluje przebieg.

W33Przycisk „Resume"

GDZIE

Pasek narzędzi po lewej, w stanie Paused.

TECHNICZNIE

Zwalnia bramkę Pause i przełącza z powrotem w stan Running. Zadanie runnera już działa (czeka w pętli pollingu); gdy pętla zauważy, że pauza jest zwolniona, działa dalej i startuje następną próbę.

W34Przycisk „Save Best Config"

GDZIE

Pasek narzędzi po prawej, zawsze widoczny (ale dezaktywowany, gdy nie ma bestTrial).

TECHNICZNIE

Otwiera dialog zapisu z domyślną nazwą pliku bayesopt-best.json, ograniczone do JSON. Po potwierdzeniu budowany jest słownik payload: nazwa ustawienia, indeks próby, wartość (score Objective), parametry (słownik dekodowanych nazw parametrów → wartości). Dekodowanie projektuje znormalizowane współrzędne przestrzeni poszukiwań w [0,1]^d z powrotem do oryginalnego zakresu wartości (ze skalami log-uniform / linear / integer odpowiednio). Wyjście JSON jest pretty-printed z posortowanymi kluczami. Przy błędzie zapisu (w bieżącej wersji demo) cicho ignorowane — brak UI błędu, ponieważ to ścieżka demo.

Przycisk pozostaje szary, dopóki żadna próba nie została przeprowadzona.

W35Selektor ustawienia „Search Space"

GDZIE

Lewy pasek boczny, u góry.

TECHNICZNIE

Selektor menu z czterema opcjami ustawienia: - „RadianceKit defaults (6-dim)" — kompletna standardowa przestrzeń poszukiwań ze wszystkimi hiperparametrami Q7. - „Mip subset (2-dim)" — tylko mipSmoothing3DScale [0.05, 0.5] log-uniform i mipFilter2DVariance [0.1, 0.6] linear. Użyteczne, gdy chcesz stroić Mip-Splatting dla klasy sceny. - „densify-until + ssim-weight + grad-thresh" — trzy parametry istotne dla densyfikacji (densifyGradThreshold log-uniform, ssimWeight linear, densifyUntilIter integer). - „Bowl demo (1-dim)" — pedagogiczna przestrzeń poszukiwań pojedynczego parametru do dem „jak działa BayesOpt".

Gdy przebieg jest aktywny, przestrzeni poszukiwań nie można zmienić (zmyliłaby optimizer).

W36Suwak „Trial Budget"

GDZIE

Lewy pasek boczny, pod selektorem Search-Space.

TECHNICZNIE

Suwak od 10 do 200, krok 5. Domyślnie 40. To znaczy: BayesOpt może zrobić maksymalnie N prób. Pierwsze są próbkami początkowymi (Latin-Hypercube), reszta to rzeczywiste próby BayesOpt. Reguły kciuka w praktyce: przestrzeń poszukiwań z d wymiarami potrzebuje około 10d do 20d prób dla dobrego optimum. Przy 6-dim Defaults więc 60–120, przy 2-dim Mip-Subset 20–40, przy 1-dim Bowl-Demo 10–20.

Podczas przebiegu suwak jest dezaktywowany.

W37Suwak „Random Seed"

GDZIE

Lewy pasek boczny, pod suwakiem Budget.

TECHNICZNIE

Suwak od 1 do 100, krok 1. Domyślnie 42. Seed jest przekazywany zarówno do początkowych próbek Latin-Hypercube, jak i do komponentu Noise demo-Objective. Powtarzalność: ten sam seed + ta sama przestrzeń poszukiwań + ten sam budżet daje dokładnie identyczną sekwencję prób. Użyteczne dla „czy wszyscy twoi koledzy otrzymują ten sam przebieg, gdy odtwarzają demo?". Podczas przebiegu dezaktywowany.

W38Chart (Convergence)

GDZIE

Środkowa kolumna okna.

TECHNICZNIE

Wykres Swift-Charts z dwiema warstwami: 1. linia „best-value-so-far" na próbę — monotonicznie rosnąca lub pozostająca taka sama krzywa w kolorze akcentu. 2. punkt na próbę z indywidualną wartością Objective, pokolorowany według fazy. Rozmiar symbolu 40. Trzy etykiety fazy: „init" (szary), „bo" (niebieski), „restart" (pomarańczowy).

Mała legenda pokazuje kolory faz u góry po lewej. Gdy lista prób jest pusta (przed pierwszym Startem), wyświetlany jest zamiast tego empty-state z ikoną wykresu i wskazówką „Press Start to begin a BayesOpt run.".

W39Tabela (Trial Log)

GDZIE

Prawa kolumna okna.

TECHNICZNIE

Obszar przewijania z lazy stackowanymi wierszami prób. Na wiersz horyzontalny stos: numer próby (3-cyfrowo monospaced, po lewej), wartość (monospaced, wyrównana do prawej, 70 pt szerokości), tag fazy (Capsule, wypełniony kolorem fazy przy 25% opacity), opcjonalnie żółta gwiazdka, gdy ta próba jest aktualnie najlepsza. Mechanizm auto-scroll automatycznie skacze na koniec, gdy tylko nowa próba dochodzi — dzięki czemu możesz przebieg na żywo czytać na dole ekranu, bez samodzielnego przewijania.

Okno główne: przebieg straty i liczba gaussianów (I39–I41, odsyłacz)

Trzy wyświetlania Inspectora w oknie głównym zasługują na własne wyjaśnienie, ponieważ podczas działającego treningu są stale widoczne i istnieją ważne reguły kciuka, kiedy przebieg wygląda zdrowo. Wyświetlania znajdują się w Inspectorze pod sekcją „Loss Chart" (zobacz rozdział 2 — Inspector) i uzupełniają analizę Holdout z okna pomocniczego powyżej.

Kiedy krzywa Loss jest zdrowa? Zdrowa krzywa Loss pokazuje trzy fazy: (1) Warmup — pierwsze 200–500 iteracji Loss spada stromo z wysokich (typowo 0.15–0.25 dla L1+SSIM łączonego w zależności od sceny) na około połowę. Gdy Loss w tej fazie NIE spada, zwykle wejście jest błędne (obrazy zepsute, pozy SfM złe, liczba gaussianów początkowych zbyt mała). (2) Densyfikacja — między ~500 a densifyUntilIteration (klasycznie 15K, MCMC do 20K lub 25K) Loss spada dalej, często z małymi skokami w dół, gdy operacje densify wstawiają nowe gaussiany a optimizer je wykorzystuje. Liczba gaussianów rośnie w tej fazie. (3) Refinement — potem Loss biegnie w spłaszczający się tail. Typowe wartości końcowe: Truck Tanks-&- Temples z P4 Quality ląduje przy L1 ≈ 0.023, Horse z Full Classic V546 przy L1 ≈ 0.0230, sceny Outdoor-Mip-NeRF360 często gorzej (0.04–0.07).

Co oznacza plateau? Plateau (krzywa Loss biegnie horyzontalnie przez kilka tysięcy iteracji) ma dwie interpretacje: (a) model jest zbieżny, dalszy trening niczego więcej nie daje — to dobry przypadek. (b) model jest stuck (minimum lokalne, słaba informacja gradientu, cap na limicie bufora) — zły przypadek. Oba wyglądają na wykresie identycznie. Rozróżnienie: spójrz na liczbę gaussianów. Gdy też jest płaska I blisko cap MCMC (np. 150K z 150K przy .fullMCMC), jesteś przy limicie — albo cap zwiększyć, albo zaakceptować plateau. Gdy liczba gaussianów wciąż rośnie, ale Loss nie spada, to stuck.

Kiedy przerwać vs trenować dalej? Reguła kciuka: 10K iteracji bez poprawy Min-Loss → przerwać, dalsze iteracje są zmarnowane. Wcześniej: możesz przez Cmd+T (menu Training → Continue Training → +5K iterations) jeszcze podłączyć przedłużenie, gdy widzisz graniczną poprawę. Uwaga: przy MCMC plateau jest często prawdziwe — cap to naturalna granica.

Plateau liczby gaussianów to NIE sygnał „gotowe". Oznacza tylko, że MCMC osiągnęło cap lub że densyfikacja Classic jest wyczerpana. Prawdziwe pytanie „gotowe" zadaje dopiero analiza Holdout — PSNR/SSIM/LPIPS na niezależnym zestawie testowym, oceniane w oknie Holdout (W23–W29) lub przez flagę –benchmark.

PSNR/Holdout to prawda, Loss tylko proxy. Loss to metryka względna: spada, gdy twój model dostosowuje się do widoków treningowych. Niski Loss nie oznacza jednak automatycznie dobrego modelu — gdy model wyuczył się obrazów treningowych na pamięć (overfitting), Loss byłby mały, ale PSNR na niewidzianych widokach (Holdout) byłaby zła. Dlatego: do finalnej oceny jakości zawsze patrz na metryki Holdout, nie na końcowy Loss sam w sobie.

Pudełko reguł kciuka

- User Guide i Keyboard Shortcuts to statyczna pomoc — przy pytaniach hasłowych szybko, do głębi używać tego podręcznika. - Manage Storage otworzyć, gdy tylko dysk spadnie poniżej 10% wolnego miejsca. Logi i staging importów to typowi winowajcy. - Pareto Dashboard sensowne dopiero po co najmniej trzech lub czterech raportach treningu. Oś X = koszty (Time / Gs), oś Y = jakość (PSNR / SSIM). Front Pareto pokazuje efektywne kombinacje. - Holdout Analysis używać, zanim publikujesz z innymi benchmarki PSNR — zapewnia ci, że twój zestaw testowy jest naprawdę reprezentatywny. - BayesOpt Console jest przede wszystkim narzędziem do nauki i inspekcji definicji przestrzeni poszukiwań. Do rzeczywistego strojenia hiperparametrów sterowanego treningiem używać offline workflow CLI. - Plateau Loss i plateau liczby gaussianów są interpretowane oddzielnie. Limit cap to nie sygnał „gotowe". Prawdziwą jakość mierzy tylko Holdout-PSNR. - 10K iteracji bez poprawy Min-Loss → trening zatrzymać.