# Resolved training/model config for the bundled checkpoint (weights/model_best.pth). # Trimmed down from the original training config: the original `data.train` / # `data.val` / `data.test` blocks referenced our internal dataset class and # training-data paths, which aren't needed to run inference and have been # removed. `segment_scan.py` builds the model straight from `model` below and # applies its own preprocessing pipeline (see PREPROCESS_TRANSFORM / # TEST_TIME_AUGMENTATIONS in that script) instead of going through a dataset # class, so nothing here is unused cruft other than the two notes below. weight = "weights/model_best.pth" # relative to this delivery folder's root resume = False evaluate = True test_only = False seed = 37743921 # save_path is only consulted by the standard Pointcept tools/train.py / # tools/test.py entry points (dataset-based train/eval), which this delivery # doesn't use. Left here only so this file stays loadable by those scripts if # you ever want to wire up your own dataset for standard evaluation. save_path = "./output" num_worker = 8 batch_size = 1 batch_size_val = None batch_size_test = None epoch = 3000 eval_epoch = 100 sync_bn = False enable_amp = True empty_cache = False empty_cache_per_epoch = False find_unused_parameters = False mix_prob = 0.8 param_dicts = [dict(keyword="block", lr=0.0003)] hooks = [ dict(type="CheckpointLoader"), dict(type="IterationTimer", warmup_iter=2), dict(type="InformationWriter"), dict(type="SemSegEvaluator"), dict(type="CheckpointSaver", save_freq=None), dict(type="PreciseEvaluator", test_last=False), ] train = dict(type="DefaultTrainer") test = dict(type="SemSegTester", verbose=True) model = dict( type="DefaultSegmentorV2", num_classes=10, backbone_out_channels=64, backbone=dict( type="PT-v3m1", in_channels=6, order=("z", "z-trans", "hilbert", "hilbert-trans"), stride=(2, 2, 2, 2), enc_depths=(2, 2, 2, 6, 2), enc_channels=(32, 64, 128, 256, 512), enc_num_head=(2, 4, 8, 16, 32), enc_patch_size=(1024, 1024, 1024, 1024, 1024), dec_depths=(2, 2, 2, 2), dec_channels=(64, 64, 128, 256), dec_num_head=(4, 4, 8, 16), dec_patch_size=(1024, 1024, 1024, 1024), mlp_ratio=4, qkv_bias=True, qk_scale=None, attn_drop=0.0, proj_drop=0.0, drop_path=0.3, shuffle_orders=True, pre_norm=True, enable_rpe=False, enable_flash=False, # flash-attn deliberately excluded from the minimal install; standard attention is used instead upcast_attention=False, upcast_softmax=False, enc_mode=False, # renamed from `cls_mode` in newer upstream Pointcept pdnorm_bn=False, pdnorm_ln=False, pdnorm_decouple=True, pdnorm_adaptive=False, pdnorm_affine=True, pdnorm_conditions=("ScanNet", "S3DIS", "Structured3D"), ), criteria=[ dict(type="CrossEntropyLoss", loss_weight=1.0, ignore_index=-1), dict(type="LovaszLoss", mode="multiclass", loss_weight=1.0, ignore_index=-1), ], ) optimizer = dict(type="AdamW", lr=0.003, weight_decay=0.05) scheduler = dict( type="OneCycleLR", max_lr=[0.003, 0.0003], pct_start=0.05, anneal_strategy="cos", div_factor=10.0, final_div_factor=1000.0, ) # Class scheme the model was trained on. Predicted label indices from # segment_scan.py map directly onto this list (no remap table needed). data = dict( num_classes=10, ignore_index=-1, names=[ "clutter", "floor", "ceiling", "wall", "column", "door", "window", "stairs", "railing", "lights", ], )