SkillAgentSearch skills...

Learning3d

This is a complete package of recent deep learning methods for 3D point clouds in pytorch (with pretrained models).

Install / Use

/learn @vinits5/Learning3d
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<p align="center"> <img src="https://github.com/vinits5/learning3d/blob/master/images/logo.png" height="170"> </p>

Learning3D: A Modern Library for Deep Learning on 3D Point Clouds Data.

Documentation | Blog | Demo

Learning3D is an open-source library that supports the development of deep learning algorithms that deal with 3D data. The Learning3D exposes a set of state of art deep neural networks in python. A modular code has been provided for further development. We welcome contributions from the open-source community.

Latest News:

  1. [28 Feb, 2025]: CurveNet is now a part of learning3d library.
  2. [7 Apr, 2024]: Now, learning3d is available as pypi package.
  3. [24 Oct, 2023]: MaskNet++ is now a part of learning3d library.
  4. [12 May, 2022]: ChamferDistance loss function is incorporated in learning3d. This is a purely pytorch based loss function.
  5. [24 Dec. 2020]: MaskNet is now ready to enhance the performance of registration algorithms in learning3d for occluded point clouds.
  6. [24 Dec. 2020]: Loss based on the predicted and ground truth correspondences is added in learning3d after consideration of Correspondence Matrices are Underrated paper.
  7. [24 Dec. 2020]: PointConv, latent feature estimation using convolutions on point clouds is now available in learning3d.
  8. [16 Oct. 2020]: DeepGMR, registration using gaussian mixture models is now available in learning3d
  9. [14 Oct. 2020]: Now, use your own data in learning3d. (Check out UserData functionality!)

PyPI package setup

Setup from pypi server

pip install learning3d

Setup using code

git clone https://github.com/vinits5/learning3d.git
cd learning3d
git checkout pypi_v0.1.0
python3 -m pip install .

Available Computer Vision Algorithms in Learning3D

| Sr. No. | Tasks | Algorithms | |:-------------:|:----------:|:-----| | 1 | Classification | PointNet, DGCNN, PPFNet, PointConv, CurveNet | | 2 | Segmentation | PointNet, DGCNN | | 3 | Reconstruction | Point Completion Network (PCN) | | 4 | Registration | PointNetLK, PCRNet, DCP, PRNet, RPM-Net, DeepGMR | | 5 | Flow Estimation | FlowNet3D | | 6 | Inlier Estimation | MaskNet, MaskNet++ |

Available Pretrained Models

  1. PointNet
  2. PCN
  3. PointNetLK
  4. PCRNet
  5. DCP
  6. PRNet
  7. FlowNet3D
  8. RPM-Net (clean-trained.pth, noisy-trained.pth, partial-pretrained.pth)
  9. DeepGMR
  10. PointConv (Download from this link)
  11. MaskNet
  12. MaskNet++ / MaskNet2
  13. CurveNet

Available Datasets

  1. ModelNet40

Available Loss Functions

  1. Classification Loss (Cross Entropy)
  2. Registration Losses (FrobeniusNormLoss, RMSEFeaturesLoss)
  3. Distance Losses (Chamfer Distance, Earth Mover's Distance)
  4. Correspondence Loss (based on this paper)

Technical Details

Supported OS

  1. Ubuntu 16.04
  2. Ubuntu 18.04
  3. Ubuntu 20.04.6
  4. Linux Mint
  5. macOS Sequoia 15.3.1

Requirements

  1. CUDA 10.0 or higher
  2. Pytorch 1.3 or higher
  3. Python 3.8

How to use this library?

Important Note: Clone this repository in your project. Please don't add your codes in "learning3d" folder.

  1. All networks are defined in the module "models".
  2. All loss functions are defined in the module "losses".
  3. Data loaders are pre-defined in data_utils/dataloaders.py file.
  4. All pretrained models are provided in learning3d/pretrained folder.

Documentation

B: Batch Size, N: No. of points and C: Channels.

Use of Point Embedding Networks:

from learning3d.models import PointNet, DGCNN, PPFNet
pn = PointNet(emb_dims=1024, input_shape='bnc', use_bn=False)
dgcnn = DGCNN(emb_dims=1024, input_shape='bnc')
ppf = PPFNet(features=['ppf', 'dxyz', 'xyz'], emb_dims=96, radius='0.3', num_neighbours=64)

| Sr. No. | Variable | Data type | Shape | Choices | Use | |:---:|:---:|:---:|:---:|:---:|:---:| | 1. | emb_dims | Integer | Scalar | 1024, 512 | Size of feature vector for the each point| | 2. | input_shape | String | - | 'bnc', 'bcn' | Shape of input point cloud| | 3. | output | tensor | BxCxN | - | High dimensional embeddings for each point| | 4. | features | List of Strings | - | ['ppf', 'dxyz', 'xyz'] | Use of various features | | 5. | radius | Float | Scalar | 0.3 | Radius of cluster for computing local features | | 6. | num_neighbours | Integer | Scalar | 64 | Maximum number of points to consider per cluster |

Use of Classification / Segmentation Network:

from learning3d.models import Classifier, PointNet, Segmentation
classifier = Classifier(feature_model=PointNet(), num_classes=40)
seg = Segmentation(feature_model=PointNet(), num_classes=40)

| Sr. No. | Variable | Data type | Shape | Choices | Use | |:---:|:---:|:---:|:---:|:---:|:---:| | 1. | feature_model | Object | - | PointNet / DGCNN | Point cloud embedding network | | 2. | num_classes | Integer | Scalar | 10, 40 | Number of object categories to be classified | | 3. | output | tensor | Classification: Bx40, Segmentation: BxNx40 | 10, 40 | Probabilities of each category or each point |

Use of Registration Networks:

from learning3d.models import PointNet, PointNetLK, DCP, iPCRNet, PRNet, PPFNet, RPMNet
pnlk = PointNetLK(feature_model=PointNet(), delta=1e-02, xtol=1e-07, p0_zero_mean=True, p1_zero_mean=True, pooling='max')
dcp = DCP(feature_model=PointNet(), pointer_='transformer', head='svd')
pcrnet = iPCRNet(feature_moodel=PointNet(), pooling='max')
rpmnet = RPMNet(feature_model=PPFNet())
deepgmr = DeepGMR(use_rri=True, feature_model=PointNet(), nearest_neighbors=20)

| Sr. No. | Variable | Data type | Choices | Use | Algorithm | |:---:|:---:|:---:|:---:|:---:|:---:| | 1. | feature_model | Object | PointNet / DGCNN | Point cloud embedding network | PointNetLK | | 2. | delta | Float | Scalar | Parameter to calculate approximate jacobian | PointNetLK | | 3. | xtol | Float | Scalar | Check tolerance to stop iterations | PointNetLK | | 4. | p0_zero_mean | Boolean | True/False | Subtract mean from template point cloud | PointNetLK | | 5. | p1_zero_mean | Boolean | True/False | Subtract mean from source point cloud | PointNetLK | | 6. | pooling | String | 'max' / 'avg' | Type of pooling used to get global feature vectror | PointNetLK | | 7. | pointer_ | String | 'transformer' / 'identity' | Choice for Transformer/Attention network | DCP | | 8. | head | String | 'svd' / 'mlp' | Choice of module to estimate registration params | DCP | | 9. | use_rri | Boolean | True/False | Use nearest neighbors to estimate point cloud features. | DeepGMR | | 10. | nearest_neighbores | Integer | 20/any integer | Give number of nearest neighbors used to estimate features | DeepGMR |

Use of Inlier Estimation Network (MaskNet):

from learning3d.models import MaskNet, PointNet, MaskNet2
masknet = MaskNet(feature_model=PointNet(), is_training=True) masknet2 = MaskNet2(feature_model=PointNet(), is_training=True)

| Sr. No. | Variable | Data type | Choices | Use | |:---:|:---:|:---:|:---:|:---:| | 1. | feature_model | Object | PointNet / DGCNN | Point cloud embedding network | | 2. | is_training | Boolean | True / False | Specify if the network will undergo training or testing |

Use of Point Completion Network:

from learning3d.models import PCN
pcn = PCN(emb_dims=1024, input_shape='bnc', num_coarse=1024, grid_size=4, detailed_output=True)

| Sr. No. | Variable | Data type | Choices | Use | |:---:|:---:|:---:|:---:|:---:| | 1. | emb_dims | Integer | 1024, 512 | Size of feature vector for each point | | 2. | input_shape | String | 'bnc' / 'bcn' | Shape of input point cloud | | 3. | num_coarse | Integer | 1024 | Shape of output point cloud | | 4. | grid_size | Integer | 4, 8, 16 | Size of grid used to produce detailed output | | 5. | detailed_output | Boolean | True / False | Choice for additional module to create detailed output point cloud|

Use of PointConv:

Use the following to create pretrained model provided by authors.

from learning3d.models import create_pointconv
PointConv = create_pointconv(classifier=True, pretrained='path of checkpoint')
ptconv = PointConv(emb_dims=1024, input_shape='bnc', input_channel_dim=6, classifier=True)

OR
Use the following to create your own PointConv model.

PointConv = create_pointconv(classifier=False, pretrained=None)
ptconv = PointConv(emb_dims=1024, input_shape='bnc', input_channel_dim=3, classifier=True)

PointConv variable is a class. Users can use it to create a sub-class to override create_classifier and create_structure methods in order to change PointConv's network architecture.

| Sr. No. | Variable | Data type | Choices | Use | |:---:|:---:|:---:|

View on GitHub
GitHub Stars854
CategoryEducation
Updated16h ago
Forks108

Languages

Python

Security Score

95/100

Audited on Apr 2, 2026

No findings