XFreq-GS
July 23, 2026 ยท View on GitHub
XfreqGS is the public-release codebase for the paper's RF spectrum synthesis experiments. This repository keeps only the minimal training, inference, rendering, and CUDA extension sources needed to reproduce the core workflow.
Repository Scope
- Included:
train.py,inference.py,arguments/,scene/,gaussian_renderer/,utils/,submodules/ - Included:
dataset/for dataset construction and quick verification - Not included: real datasets, checkpoints, logs, build outputs, IDE metadata, internal planning files
Environment
Create the conda environment and install the CUDA extensions:
conda env create -f environment.yml
conda activate xfreqgs
pip install -e ./submodules/simple-knn
pip install -e ./submodules/complex-gaussian-tracer
Dataset Layout
We provide a method for generating the XfreqGS dataset. And a small dataset is included to help quickly verify the code.
Please place the generated dataset, or the provided small verification dataset, under:
dataset/<dataset_name>/
The current loader expects at least:
dataset/<dataset_name>/
|- spectrum/
|- tx_pos.csv
|- gateway_info.yml
\- freq.txt
Optional user-provided split files can be passed through --train_index_path and --test_index_path.
Derived artifacts such as generated split indices and initialized points3D.ply are written under:
logs/<dataset_name>/<exp_name>/dataset_artifacts/
This avoids modifying the raw dataset directory.
Training
Basic training:
python train.py --dataset <dataset_name>
Training outputs are stored under:
logs/<dataset_name>/<exp_name>/
Examples with common parameters:
Use a custom experiment name:
python train.py --dataset <dataset_name> --exp_name xfreqgs
Use custom dataset and log roots:
python train.py \
--dataset <dataset_name> \
--input_data_folder /path/to/datasets \
--log_base_folder /path/to/logs
Train with explicit split files:
python train.py \
--dataset <dataset_name> \
--train_index_path splits/train_index.txt \
--test_index_path splits/test_index.txt
Regenerate the initialization point cloud and change the initialization mode:
python train.py \
--dataset <dataset_name> \
--gene_init_point \
--point_init_mode random \
--voxel_size_scale 1.2
Resume training from a checkpoint:
python train.py \
--dataset <dataset_name> \
--exp_name xfreqgs_baseline \
--iterations 30000 \
--start_checkpoint logs/<dataset_name>/xfreqgs_baseline/chkpnt30000.pth
Useful parameters:
--dataset: dataset name underdataset/or under--input_data_folder--exp_name: experiment name and output subdirectory--input_data_folder: dataset root directory--log_base_folder: output root directory--iterations: total number of training iterations--start_checkpoint: checkpoint path for resuming training--train_index_path: custom training split file--test_index_path: custom test split file--point_init_mode: point initialization mode, currentlycubeorrandom--voxel_size_scale: scale factor for initialization voxel size--data_device: runtime device such ascuda:0
Inference
python inference.py --dataset <dataset_name> --exp_name <exp_name>
If --start_checkpoint is not provided, inference first looks for chkpnt<iterations>.pth, then falls back to the numerically latest checkpoint in the experiment directory.
Acknowledgments
This codebase is adapted from GSRF (nesl/GSRF).
It also builds upon 3D Gaussian Splatting (3DGS) by the GraphDECO research group at Inria (graphdeco-inria/gaussian-splatting).