ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
reusex::gsplat::MCMCOptions Struct Reference

3DGS-MCMC density control (Kheradmand et al. More...

#include <train.hpp>

Public Attributes

bool enabled = false
double cap_factor = 2.0
 Hard ceiling on the Gaussian count, as a multiple of the seed count.
std::int64_t cap_absolute = 0
double growth = 1.05
 Multiplicative growth per refine pass, capped by the budget.
int refine_every = 100
 iterations between relocate+grow passes
int refine_start = 500
 first eligible iteration
double refine_stop_fraction = 0.85
 Last eligible iteration, as a fraction of the run.
float min_opacity = 0.005f
 Opacity at or below which a Gaussian counts as dead and is relocated.
float noise_lr = 5e5f
 scales the Langevin noise (paper's value)
float noise_opacity_t = 0.005f
 noise gate transition point
float noise_opacity_k = 100.0f
 noise gate sharpness
float opacity_reg = 0.0f
 L1 regularizers in activated space.
float scale_reg = 0.0f

Detailed Description

3DGS-MCMC density control (Kheradmand et al.

2024).

The reference 3DGS densifier keys on the screen-space position gradient, which gsplat's world-space rasterizer does not produce — see the note on TrainOptions::prune_enabled. MCMC needs no screen-space quantity: it relocates collapsed Gaussians onto high-opacity ones, samples new ones from the same distribution up to a capped budget, and injects Langevin noise so the whole thing is a sampler rather than a greedy heuristic.

Defaults follow gsplat's MCMCStrategy except for cap, which is relative here (see below).

Definition at line 37 of file train.hpp.

Member Data Documentation

◆ cap_absolute

std::int64_t reusex::gsplat::MCMCOptions::cap_absolute = 0

Definition at line 47 of file train.hpp.

◆ cap_factor

double reusex::gsplat::MCMCOptions::cap_factor = 2.0

Hard ceiling on the Gaussian count, as a multiple of the seed count.

Relative rather than absolute because this trainer seeds from a LiDAR cloud whose size is a property of the scan, not of the algorithm: a building-scale capture and a 1 m corridor differ by an order of magnitude, and one absolute cap cannot serve both. cap_absolute overrides it when non-zero.

Definition at line 46 of file train.hpp.

◆ enabled

bool reusex::gsplat::MCMCOptions::enabled = false

Definition at line 38 of file train.hpp.

◆ growth

double reusex::gsplat::MCMCOptions::growth = 1.05

Multiplicative growth per refine pass, capped by the budget.

Definition at line 50 of file train.hpp.

◆ min_opacity

float reusex::gsplat::MCMCOptions::min_opacity = 0.005f

Opacity at or below which a Gaussian counts as dead and is relocated.

Definition at line 60 of file train.hpp.

◆ noise_lr

float reusex::gsplat::MCMCOptions::noise_lr = 5e5f

scales the Langevin noise (paper's value)

Definition at line 62 of file train.hpp.

◆ noise_opacity_k

float reusex::gsplat::MCMCOptions::noise_opacity_k = 100.0f

noise gate sharpness

Definition at line 64 of file train.hpp.

◆ noise_opacity_t

float reusex::gsplat::MCMCOptions::noise_opacity_t = 0.005f

noise gate transition point

Definition at line 63 of file train.hpp.

◆ opacity_reg

float reusex::gsplat::MCMCOptions::opacity_reg = 0.0f

L1 regularizers in activated space.

In the paper these are what let Gaussians die, so relocation has dead samples to recycle.

Default 0, against the paper's 0.01, on measured evidence. They are unusable for a building-scale interior traverse, and the reason is scene topology rather than a tuning problem. 3DGS-MCMC was developed on object-centric captures where nearly every Gaussian projects into nearly every view, so the constant regularizer pull is balanced by a photometric gradient on almost every step. A corridor traverse is the opposite: each of our 344 views sees a small fraction of 1.2 M Gaussians, so most Gaussians receive only the regularizer gradient on most steps — and Adam, being scale-invariant, converts that into a step of the full learning rate. At lr_opacities = 5e-2 an off-screen Gaussian falls from the seed opacity to min_opacity in ~60 iterations.

Measured on NewOffice (394 views, 30 k iterations): with the paper's 0.01 the model collapses to 12.73 dB held-out and MCMC relocates 415 M Gaussians — ~68 % of the model on every refine pass. Lowering the weight does not help, exactly as Adam's scale invariance predicts: at 1e-4 it still collapses (15.20 dB, 22 M relocations). Only 0 is stable.

Re-enable them for object-centric capture, where the assumption holds.

Definition at line 88 of file train.hpp.

◆ refine_every

int reusex::gsplat::MCMCOptions::refine_every = 100

iterations between relocate+grow passes

Definition at line 52 of file train.hpp.

◆ refine_start

int reusex::gsplat::MCMCOptions::refine_start = 500

first eligible iteration

Definition at line 53 of file train.hpp.

◆ refine_stop_fraction

double reusex::gsplat::MCMCOptions::refine_stop_fraction = 0.85

Last eligible iteration, as a fraction of the run.

Refinement has to stop well before the end so the final Gaussians get optimized rather than merely placed.

Definition at line 57 of file train.hpp.

◆ scale_reg

float reusex::gsplat::MCMCOptions::scale_reg = 0.0f

Definition at line 89 of file train.hpp.


The documentation for this struct was generated from the following file: