All Projects → itailang → Samplenet

itailang / Samplenet

Licence: other
Differentiable Point Cloud Sampling (CVPR 2020 Oral)

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Samplenet

Dss
Differentiable Surface Splatting
Stars: ✭ 175 (-17.45%)
Mutual labels:  point-cloud, geometry-processing
Pointnet
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
Stars: ✭ 3,517 (+1558.96%)
Mutual labels:  point-cloud, geometry-processing
Cgal
The public CGAL repository, see the README below
Stars: ✭ 2,825 (+1232.55%)
Mutual labels:  point-cloud, geometry-processing
3dmatch Toolbox
3DMatch - a 3D ConvNet-based local geometric descriptor for aligning 3D meshes and point clouds.
Stars: ✭ 571 (+169.34%)
Mutual labels:  point-cloud, geometry-processing
geometric adv
Geometric Adversarial Attacks and Defenses on 3D Point Clouds (3DV 2021)
Stars: ✭ 20 (-90.57%)
Mutual labels:  point-cloud, geometry-processing
Learning to sample
A learned sampling approach for point clouds (CVPR 2019)
Stars: ✭ 120 (-43.4%)
Mutual labels:  point-cloud, geometry-processing
Torchsparse
A high-performance neural network library for point cloud processing.
Stars: ✭ 173 (-18.4%)
Mutual labels:  point-cloud
Cloud annotation tool
L-CAS 3D Point Cloud Annotation Tool
Stars: ✭ 182 (-14.15%)
Mutual labels:  point-cloud
Semantic3dnet
Point cloud semantic segmentation via Deep 3D Convolutional Neural Network
Stars: ✭ 170 (-19.81%)
Mutual labels:  point-cloud
Awesome 3d Detectors
Paperlist of awesome 3D detection methods
Stars: ✭ 163 (-23.11%)
Mutual labels:  point-cloud
Graph Cnn In 3d Point Cloud Classification
Code for A GRAPH-CNN FOR 3D POINT CLOUD CLASSIFICATION (ICASSP 2018)
Stars: ✭ 206 (-2.83%)
Mutual labels:  point-cloud
Msn Point Cloud Completion
Morphing and Sampling Network for Dense Point Cloud Completion (AAAI2020)
Stars: ✭ 196 (-7.55%)
Mutual labels:  point-cloud
Displaz
A hackable lidar viewer
Stars: ✭ 177 (-16.51%)
Mutual labels:  point-cloud
3d Pointcloud
Papers and Datasets about Point Cloud.
Stars: ✭ 179 (-15.57%)
Mutual labels:  point-cloud
Dbnet
DBNet: A Large-Scale Dataset for Driving Behavior Learning, CVPR 2018
Stars: ✭ 172 (-18.87%)
Mutual labels:  point-cloud
Point Transformer Pytorch
Implementation of the Point Transformer layer, in Pytorch
Stars: ✭ 199 (-6.13%)
Mutual labels:  point-cloud
Matgeom
Matlab geometry toolbox for 2D/3D geometric computing
Stars: ✭ 168 (-20.75%)
Mutual labels:  geometry-processing
Vision3d
Research platform for 3D object detection in PyTorch.
Stars: ✭ 177 (-16.51%)
Mutual labels:  point-cloud
Orb Slam2 with semantic label
orb-slam2 with semantic label
Stars: ✭ 186 (-12.26%)
Mutual labels:  point-cloud
Meshlab
The open source mesh processing system
Stars: ✭ 2,619 (+1135.38%)
Mutual labels:  point-cloud

SampleNet: Differentiable Point Cloud Sampling

Created by Itai Lang, Asaf Manor and Shai Avidan from Tel Aviv University.

teaser

Introduction

This work is based on our arXiv tech report. Please read it for more information. You are also welcome to watch the oral talk from CVPR 2020.

There is a growing number of tasks that work directly on point clouds. As the size of the point cloud grows, so do the computational demands of these tasks. A possible solution is to sample the point cloud first. Classic sampling approaches, such as farthest point sampling (FPS), do not consider the downstream task. A recent work showed that learning a task-specific sampling can improve results significantly. However, the proposed technique did not deal with the non-differentiability of the sampling operation and offered a workaround instead.

We introduce a novel differentiable relaxation for point cloud sampling. Our approach employs a soft projection operation that approximates sampled points as a mixture of points in the primary input cloud. The approximation is controlled by a temperature parameter and converges to regular sampling when the temperature goes to zero. During training, we use a projection loss that encourages the temperature to drop, thereby driving every sample point to be close to one of the input points.

This approximation scheme leads to consistently good results on various applications such as classification, retrieval, and geometric reconstruction. We also show that the proposed sampling network can be used as a front to a point cloud registration network. This is a challenging task since sampling must be consistent across two different point clouds. In all cases, our method works better than existing non-learned and learned sampling alternatives.

Citation

If you find our work useful in your research, please consider citing:

@InProceedings{lang2020samplenet,
  author = {Lang, Itai and Manor, Asaf and Avidan, Shai},
  title = {{SampleNet: Differentiable Point Cloud Sampling}},
  booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  pages = {7578--7588},
  year = {2020}
}

Installation and usage

This project contains three sub-directories, each one is a stand-alone project with it's own instructions. Please see the README.md in classification, registration, and reconstruction directories.

Usage of SampleNet in another project

Classification and reconstruction projects are implemented in TensorFlow. Registration is implemented with PyTorch library. We provide here an example code snippet, for the usage of PyTorch implementation of SampleNet with any task. The source files of SampleNet for this example are in registration/src/ folder.

import torch
from src import SampleNet, sputils

"""This code bit assumes a defined and pretrained task_model(),
data, and an optimizer."""

"""Get SampleNet parsing options and add your own."""
parser = sputils.get_parser()
args = parser.parse_args()

"""Create a data loader."""
trainloader = torch.utils.data.DataLoader(
    DATA, batch_size=32, shuffle=True
)

"""Create a SampleNet sampler instance."""
sampler = SampleNet(
    num_out_points=args.num_out_points,
    bottleneck_size=args.bottleneck_size,
    group_size=args.projection_group_size,
    initial_temperature=1.0,
    input_shape="bnc",
    output_shape="bnc",
)

"""For inference time behavior, set sampler.training = False."""
sampler.training = True

"""Training routine."""
for epoch in EPOCHS:
    for pc in trainloader:
        # Sample and predict
        simp_pc, proj_pc = sampler(pc)
        pred = task_model(proj_pc)

        # Compute losses
        simplification_loss = sampler.get_simplification_loss(
                pc, simp_pc, args.num_out_points
        )
        projection_loss = sampler.get_projection_loss()
        samplenet_loss = args.alpha * simplification_loss + args.lmbda * projection_loss

        task_loss = task_model.loss(pred)

        # Equation (1) in SampleNet paper
        loss = task_loss + samplenet_loss

        # Backward + Optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

License

This project is licensed under the terms of the MIT license (see LICENSE for details).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].