This repository contains a Python implementation of the Iterative Closest Point (ICP) algorithm for aligning a SMPL-X model to a 3D point cloud with unknown correspondences. It utilizes Chamfer Distance as loss function, which is a two-way point-to-point distance function. Please check out main.ipynb for more descriptive explanation.
iterative-closest-points/
├── environment.yml # Conda environment file (see Setup below)
├── main.ipynb
├── models/ # Directory for the body models
│ └── smplx/
│ └── SMPLX_NEUTRAL.npz # SMPL-X neutral pose model file (download from https://smpl-x.is.tue.mpg.de/)
├── outputs/ # example outputs
│ └── icp-convergence-0.gif
│ └── icp-convergence-1.gif
│ └── icp-convergence-2.gif
└── README.md # This document
-
Clone the Repository:
git clone https://github.com/MelihDarcanxyz/iterative-closest-points.git cd iterative-closest-points
-
Create Conda Environment:
It is highly recommended to use a Conda environment for managing dependencies. This ensures reproducibility and avoids conflicts with other Python projects.
conda env create -f environment.yml conda activate icp
Results may take a while load, depending on your download speed. Thanks for your patience.
Experimenting with more sophisticated learning rate scheduling techniques, such as different cyclical learning rates or adaptive learning rates, could lead to faster and more stable convergence.
Additionally, incorporating surface normals into the loss function, where we can understand the orientation of points, can provide valuable geometric information and potentially improve alignment accuracy, encouraging the aligned point clouds to not only be close in position but also in orientation.
- Point to plane distance implementation
- Experiment with normal distances
- Failed convergence detection (loss >
$THRESHOLD
) and restarting with different learning rate schedules.$THRESHOLD
is empirically5e-5
.