Skip to content

jinwoolee1230/POLI

Repository files navigation

POLI: Point-to-Ellipsoid

Learning Point Cloud Geometry as a Statistical Manifold

POLI demo
Global Registration
🌍 Global Registration
Object Pose Estimation
📦 Object Pose Estimation
LiDAR Odometry
🚗 LiDAR Odometry

POLI turns sparse, messy LiDAR point clouds into rich geometric understanding — a single self-supervised network predicts a Gaussian ellipsoid per point, capturing local geometry on a statistical manifold. Plug it into any 3D perception pipeline — registration, object pose estimation, LiDAR odometry — and get instant accuracy gains. No labels. No architectural changes. Just better geometry.

Paper: arXiv

Accepted for publication in Robotics: Science and Systems (RSS) 2026.

@misc{lee2026learningpointcloudgeometry,
  title         = {Learning Point Cloud Geometry as a Statistical Manifold: Theory and Practice},
  author        = {Jinwoo Lee and Jiwoo Kim and Woojae Shin and Giseop Kim and Hyondong Oh},
  year          = {2026},
  eprint        = {2605.10456},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  url           = {https://arxiv.org/abs/2605.10456},
}


About POLI (Point-to-Ellipsoid)

Self-supervised geometry reasoning for 3D perception

POLI architecture

Point clouds are a fundamental representation for robotic perception tasks such as localization, mapping, and object pose estimation. However, LiDAR-acquired point clouds are inherently sparse and non-uniform, providing incomplete observations of the underlying geometry. Such sparsity and non-uniformity hinder reliable geometric reasoning, leading to degraded performance in downstream perception tasks. To mitigate these issues, prior work has attempted to compensate for the sparsity and non-uniformity of point clouds by estimating point cloud geometry. However, in the absence of an explicit model of point cloud geometry, existing approaches have predominantly relied on either hand-crafted statistics of local point distributions or end-to-end supervised deep learning, which often suffer from limited scalability or require large amounts of accurately labeled training data. To address these challenges, we explicitly model and estimate point cloud geometry under a principled mathematical formulation. Theoretically, we represent the point cloud geometry as a statistical manifold induced by a family of Gaussian distributions that captures the local geometry of each point. Building on this formulation, we design a probabilistic model that predicts per-point local geometry in the form of a Gaussian distribution. Practically, we introduce a deep neural network to instantiate the estimation of these Gaussian distributions, and term the resulting estimator as Point-to-Ellipsoid (POLI). By consistently estimating point-wise local geometry across diverse point clouds, POLI learns a mapping between point cloud observations and their underlying geometry. Importantly, this mapping is learned in a self-supervised manner, removing the reliance on labeled data while maintaining strong geometric inductive biases. The resulting representation integrates seamlessly into existing robotic perception pipelines without requiring architectural modifications. Extensive experiments demonstrate that the proposed theory and practice enable accurate and robust estimation of point cloud geometry and consistently improve performance across a wide range of robotic perception tasks.


Getting Started

Step 1. Clone the Repository

git clone https://github.com/jinwoolee1230/POLI.git
cd POLI

Step 2. Set Up the Environment

conda env create -f environment.yml
conda activate poli

Step 3. Install Additional Dependencies

For Training
Package Repository
pointnet2_ops Pointnet2_PyTorch/pointnet2_ops
sdprlayer / sdprlayers utiasASRL/sdprlayer
torch_kdtree thomgrand/torch_kdtree
For Demo and Testing
Package Repository
pointnet2_ops Pointnet2_PyTorch/pointnet2_ops
ROBIN / spark_robin MIT-SPARK/ROBIN
pyridescence koide3/iridescence
torch_kdtree thomgrand/torch_kdtree

Pretrained Checkpoints

Sensor / Task Available Checkpoints
VLP (Velodyne) 0.2 m · 0.5 m · 1.0 m
OS2 (Ouster) 1.0 m · 1.5 m · 2.0 m
Object Pose Estimation object_500n1000points.pth

Demos

1. Global Registration

Global Registration Demo

Command

python applications/global_registration/POLI_FPFH_ROBIN_GNC.py
Pipeline — POLI-Densification + FPFH + ROBIN + GNC-TLS
# 1. Load the pretrained POLI model
model = load_model(checkpoint)

# 2. Predict the underlying geometric structure of each point cloud
P, Q, C_p, C_q = predict_covariances(model, P, Q)

# 3. Densify point clouds by sampling from the learned distributions
P_dense = densify_points(P, C_p, samples_per_point=100, n_std=0.5)
Q_dense = densify_points(Q, C_q, samples_per_point=100, n_std=0.5)

# 4. Compute FPFH features on the densified point clouds
fpfh_p = compute_fpfh(P_dense)
fpfh_q = compute_fpfh(Q_dense)

# 5. Establish mutual feature correspondences
src_idx, tgt_idx = estimate_mutual_feature_matches(fpfh_p, fpfh_q)

# 6. Extract the maximum consensus set
src_inliers, tgt_inliers = maximum_consensus(P_dense[src_idx], Q_dense[tgt_idx])

# 7. Estimate the rigid transformation
R_est, t_est = registration(src_inliers, tgt_inliers)

2. Object Pose Estimation

Object Pose Estimation Demo

Command

python applications/object_pose_estimation/POLI_FPFH_ROBIN_GNC.py
Pipeline — POLI-Normal + FPFH + ROBIN + GNC-TLS
# 1. Load the pretrained POLI model
model = load_model(checkpoint)

# 2. Predict the underlying geometric structure of each point cloud
P, Q, C_p, C_q = predict_covariances(model, P, Q)

# 3. Compute normals from predicted covariances
n_p = extract_normal(C_p)
n_q = extract_normal(C_q)

# 4. Compute FPFH features using the predicted normals
fpfh_p = compute_fpfh(P, n_p)
fpfh_q = compute_fpfh(Q, n_q)

# 5. Establish mutual feature correspondences
src_idx, tgt_idx = estimate_mutual_feature_matches(fpfh_p, fpfh_q)

# 6. Extract the maximum consensus set
src_inliers, tgt_inliers = maximum_consensus(P_dense[src_idx], Q_dense[tgt_idx])

# 7. Estimate the rigid transformation
R_est, t_est = registration(src_inliers, tgt_inliers)

3. LiDAR Odometry

POLI-GICP LiDAR Odometry Demo

Command

python applications/lidar_odometry/POLI_GICP.py \
    --checkpoint    ./weights/HeLiPR/vlp_helipr_0.2m.pth \
    --dataset_dir   [/path/to/train_data] \
    --output_folder ./tmp/poli_gicp
Pipeline — POLI-Covariance + Generalized-ICP
# 1. Load the pretrained POLI model
model = load_model(checkpoint)

# 2. Predict the underlying geometric structure of each point cloud
P, Q, C_p, C_q = predict_covariances(model, P, Q)

# 3. Run Generalized-ICP using the learned covariances
R, t = GICP(P, Q, C_p, C_q)

Training

1. Download the Dataset

Download the HeLiPR dataset from the official website.

2. Generate Training Data

Scene pairs must be generated from each HeLiPR sequence before training.

Required Inputs

Argument Description
--lidar_scan Directory containing LiDAR scan files (.bin) from a single HeLiPR sequence
--ground_truth Ground-truth trajectory file corresponding to the same sequence
--output_folder Output directory where generated training data will be saved
--voxel_size Voxel size in meters

Note: This preprocessing step should be performed separately for each HeLiPR sequence.

python data_preprocess/scene/HeLiPR_make_dataset.py \
    --lidar_scan     [/path/to/helipr/lidar] \
    --ground_truth   [/path/to/helipr_gt.txt] \
    --output_folder  [/path/to/train_data] \
    --voxel_size     [voxel_size (meter)]

3. Run Training

Required Arguments

Argument Description
--dataset_dir Dataset directory generated in the preprocessing step
--logdir Directory where training logs and checkpoints will be saved
--mean Mean value used for z-score normalization
--scaling_factor Standard deviation for z-score normalization (default: 100.0)
python train.py \
    --dataset_dir     [/path/to/train_data] \
    --logdir          [/path/to/logdir] \
    --mean            [MEAN] \
    --scaling_factor  [SCALING_FACTOR]

Authors

Jinwoo Lee*1
Jiwoo Kim*1
Woojae Shin1
Giseop Kim2
Hyondong Oh1

1 Field AI and Robotics Laboratory (FAIR) FAIR
Korea Advanced Institute of Science and Technology (KAIST), Daejeon, Republic of Korea

2 Autonomy and Perceptual Robotics Lab (APRL) APRL
Daegu Gyeongbuk Institute of Science and Technology (DGIST), Daegu, Republic of Korea


License

This project is released under the MIT License. See LICENSE for details.

About

[RSS 2026] Learning Point Cloud Geometry as a Statistical Manifold: Theory and Practice

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages