Download data from here and place its contents in the ./data
folder
To set up a conda environment, run:
conda env create -f environment.yml
conda activate torf
To train model on one of our sequences, run
./scripts/real.sh seq_color21_small 0 30
The last two arguments specify first frame to use and the last frame to use
For the real and iOS sequences, run
./scripts/real.sh seq_color21_small 0 30
and
./scripts/ios.sh dishwasher 30
respectively.
For the static sequences run
./scripts/static.sh bathroom_static 2 <width> <height> 0,8
Where the last argument specifies which views to use for training. Image dimensions are 512x512 for the bathroom sequence, and 640x360 for bedroom.
If your data contains ground truth ToF images, then you should use the RealDataset
loader, or some variant of it, and the data should be formatted as follows.
cams/
tof_intrinsics[.npy|.mat]
tof_extrinsics[.npy|.mat]
color_intrinsics[.npy|.mat]
color_extrinsics[.npy|.mat]
color/
[*.npy|*.mat]
tof/
[*.npy|*.mat]
Note that each ToF image should contain (real, imaginary) components of the measured ToF phasor
You can also optionally include:
cams/
relative_R[.npy|.mat]
relative_T[.npy|.mat]
depth_range[.npy|.mat]
phase_offset[.npy|.mat]
where relative_R
and relative_T
specify the relative pose of the color camera and ToF sensor. If you do not include these, they are initialized to identity. They can also be optimized during training with --use_relative_poses
and --optimize_relative_pose
The file depth_range
specifies a value that is twice unambiguous depth range of the ToF sensor, and phase_offset
an offset between the measured phase and the true phase. The phase offset can also be optimized during training with --optimize_phase_offset
If metric depth, rather than ToF is available, then you can replace the tof
folder with a depth
folder. In this case, you should convert depth into ToF before training (see IOSDataset
).
We expect extrinsics (world to camera) in SfM format (y down, z forward). Note that the if the extrinsics are not scale correct (i.e. do not match the scale of depth / ToF), then they should be optimized during training with --optimize_poses
If your dataset contains collocated ToF / depth and color, you can add the flag --collocated_pose
For evaluation on static sequences, run:
./scripts/static_eval.sh bathroom_static 2 <width> <height> 0,8
And then
python compute_metrics eval/[expname] 30
@article{attal2021torf,
title={TöRF: Time-of-Flight Radiance Fields for Dynamic Scene View Synthesis},
author={Attal, Benjamin and Laidlaw, Eliot and Gokaslan, Aaron and Kim, Changil and Richardt, Christian and Tompkin, James and O'Toole, Matthew},
journal={Advances in neural information processing systems},
volume={34},
year={2021}
}