Implementation for Iso-Points (CVPR 2021)

Official code for paper Iso-Points: Optimizing Neural Implicit Surfaces with Hybrid Representations

paper | supplementary material | project page


Iso-points are well-distributed points which lie on the neural iso-surface, they are an explicit form of representation of the implicit surfaces. We propose using iso-points to augment the optimization of implicit neural surfaces.
The implicit and explicit surface representations are coupled, i.e. the implicit model determines the locations and normals of iso-points, whereas the iso-points can be utilized to control the optimization of the implicit model.

The implementation of the key steps for iso-points extraction is in and utils/
To demonstrate the utilisation of iso-points, we provide scripts for multiple applications and scenarios:



This code is built as an extension of out Differentiable Surface Splatting pytorch library (DSS), which depends on pytorch3d, torch_cluster.
Currently we support up to pytorch 1.6.

git clone --recursive
cd iso-points

# conda environment and dependencies
# update conda
conda update -n base -c defaults conda
# install requirements
conda env create --name DSS -f environment.yml
conda activate DSS

# build additional dependencies of DSS
# FRNN - fixed radius nearest neighbors
cd external/FRNN/external
git submodule update --init --recursive
cd prefix_sum
python install
cd ../..
python install

# build batch-svd
cd ../torch-batch-svd
python install

# build DSS itself
cd ../..
python develop

prepare data

Download data

cd data

Including subset of masked DTU data (courtesy of Yariv, synthetic rendered multiview data, and masked furu stereo reconstruction of DTU dataset.

multiview reconstruction


# train baseline implicit representation only using ray-tracing
python configs/compressor_implicit.yml --exit-after 6000

# train with uniform iso-points
python configs/compressor_uni.yml --exit-after 6000

# train with iso-points distributed according to loss value (hard example mining)
python configs/compressor_uni_lossS.yml --exit-after 6000



python configs/dtu55_iso.yml


implicit surface to noisy point cloud

python data/DTU_furu/scan122.ply --use_off_normal_loss -o exp/points_3d_outputs/scan122_ours



Please cite us if you find the code useful!

      title={Iso-Points: Optimizing Neural Implicit Surfaces with Hybrid Representations},
      author={Wang Yifan and Shihao Wu and Cengiz Oztireli and Olga Sorkine-Hornung},
      booktitle = {CVPR},
      year = {2020},


This work was supported in parts by Apple scholarship, SWISSHEART Failure Network (SHFN), and UKRI Future Leaders Fellowship [grant number MR/T043229/1]

A good portion of this codebase uses or adapts codes from previous works and implementations. We sincerely thank the authors for their effort in making their work accessible.
Most notably we refer to the following repos