Voxel Set Transformer: A Set-to-Set Approach to 3D Object Detection from Point Clouds (CVPR 2022)

Related tags

Deep Learning VoxSeT
Overview

Voxel Set Transformer: A Set-to-Set Approach to 3D Object Detection from Point Clouds (CVPR2022)[paper]

Authors: Chenhang He, Ruihuang Li, Shuai Li, Lei Zhang.

This project is built on OpenPCDet.

Updates

2022-04-09: Add waymo config and multi-frame input.

The performance of VoxSeT (single-stage, single-frame) on Waymo valdation split are as follows.

% Training Car AP/APH Ped AP/APH Cyc AP/APH Log file
Level 1 20% 72.10/71.59 77.94/69.58 69.88/68.54 Download
Level 2 20% 63.62/63.17 70.20/62.51 67.31/66.02
Level 1 100% 74.50/74.03 80.03/72.42 71.56/70.29 Download
Level 2 100% 65.99/65.56 72.45/65.39 68.95/67.73

Introduction

drawing

Transformer has demonstrated promising performance in many 2D vision tasks. However, it is cumbersome to compute the self-attention on large-scale point cloud data because point cloud is a long sequence and unevenly distributed in 3D space. To solve this issue, existing methods usually compute self-attention locally by grouping the points into clusters of the same size, or perform convolutional self-attention on a discretized representation. However, the former results in stochastic point dropout, while the latter typically has narrow attention fields. In this paper, we propose a novel voxel-based architecture, namely Voxel Set Transformer (VoxSeT), to detect 3D objects from point clouds by means of set-to-set translation. VoxSeT is built upon a voxel-based set attention (VSA) module, which reduces the self-attention in each voxel by two cross attentions and models features in a hidden space induced by a group of latent codes. With the VSA module, VoxSeT can manage voxelized point clusters with arbitrary size in a wide range, and process them in parallel with linear complexity. The proposed VoxSeT integrates the high performance of transformer with the efficiency of voxel-based model, which can be used as a good alternative to the convolutional and point-based backbones.

1. Recommended Environment

  • Linux (tested on Ubuntu 16.04)
  • Python 3.7
  • PyTorch 1.9 or higher (tested on PyTorch 1.10.1)
  • CUDA 9.0 or higher (tested on CUDA 10.2)

2. Set the Environment

pip install -r requirement.txt
python setup.py build_ext --inplace 

The torch_scatter package is required

3. Data Preparation

# Download KITTI and organize it into the following form:
├── data
│   ├── kitti
│   │   │── ImageSets
│   │   │── training
│   │   │   ├──calib & velodyne & label_2 & image_2 & (optional: planes)
│   │   │── testing
│   │   │   ├──calib & velodyne & image_2

# Generatedata infos:
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml

4. Pretrain model

You can download the pretrain model here and the log file here.

The performance (using 11 recall poisitions) on KITTI validation set is as follows:

Car  [email protected], 0.70, 0.70:
bev  AP:90.1572, 88.0972, 86.8397
3d   AP:88.8694, 78.7660, 77.5758

Pedestrian [email protected], 0.50, 0.50:
bev  AP:63.1125, 58.5591, 55.1318
3d   AP:60.2515, 55.5535, 50.1888

Cyclist [email protected], 0.50, 0.50:
bev  AP:85.6768, 71.9008, 67.1551
3d   AP:85.4238, 70.2774, 64.9804

The runtime is about 33 ms per sample.

5. Train

  • Train with a single GPU
python train.py --cfg_file tools/cfgs/kitti_models/voxset.yaml
  • Train with multiple GPUs
cd VoxSeT/tools
bash scripts/dist_train.sh --cfg_file ./cfgs/kitti_models/voxset.yaml

6. Test with a pretrained model

cd VoxSeT/tools
python test.py --cfg_file --cfg_file ./cfgs/kitti_models/voxset.yaml --ckpt ${CKPT_FILE}

Citation

@inproceedings{he2022voxset,
  title={Voxel Set Transformer: A Set-to-Set Approach to 3D Object Detection from Point Clouds},
  author={Chenhang He, Ruihuang Li, Shuai Li and Lei Zhang},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  year={2022}
}
Comments
  • bad_alloc errror when testing on pre-trained model

    bad_alloc errror when testing on pre-trained model

    I encountered an error when testing the pre-trained model when the evaluation was about to start.

    2022-06-15 22:45:06,405   INFO  ==> Loading parameters from checkpoint checkpoint_epoch_100.pth to GPU                                                                                                                                                                               
    2022-06-15 22:45:06,452   INFO  ==> Checkpoint trained from version: pcdet+0.3.0+0000000                                                                                                                                                                                                                                        
    2022-06-15 22:45:06,467   INFO  ==> Done (loaded 299/299)                                                                                                                                                                                                                                                                       
    2022-06-15 22:45:06,479   INFO  *************** EPOCH 100 EVALUATION *****************                                                                                                                                                                                                                                          
    eval:   0%|                                                                                                                                                                                                                                                                                             
    | 0/943 [00:00<?, ?it/s]
    Traceback (most recent call last):                                                                                                                                   
      File "test.py", line 200, in <module>                                                                                                                                                                                                                                                                                                 
        main()                                                                                                                                                                                                                                                                                                                            
      File "test.py", line 196, in main                                                                                                                                                                                                                                                                                                 
        eval_single_ckpt(model, test_loader, args, eval_output_dir, logger, epoch_id, dist_test=dist_test)                                                                                                                                                                                                                            
      File "test.py", line 64, in eval_single_ckpt                                                                                                                                                                                                                                                                                      
        result_dir=eval_output_dir, save_to_file=args.save_to_file                                                                                                                                                                                                                                                                    
      File "/home/llili/lxh/VoxSeT/tools/eval_utils/eval_utils.py", line 54, in eval_one_epoch                                                                                                                                                                                                                                          
        for i, batch_dict in enumerate(dataloader):                                                                                                                                                                                                                                                                                   
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 521, in __next__                                                                                                                                                                                           
        data = self._next_data()                                                                                                                                                                                                                                                                                                      
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 1203, in _next_data                                                                                                                                                                                        
        return self._process_data(data)                                                                                                                                                                                                                                                                                               
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 1229, in _process_data                                                                                                                                                                                     
         data.reraise()                                                                                                                                                                                                                                                                                                                
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/_utils.py", line 434, in reraise                                                                                                                                                                                                           
        raise exception                                                                                                                                                                                                                                                                                                             
    MemoryError: Caught MemoryError in DataLoader worker process 0.                                                                                                                                                                                                                                                                 
    Original Traceback (most recent call last):                                                                                                                                                                                                                                                                                       
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop                                                                                                                                                                                    
        data = fetcher.fetch(index)                                                                                                                                                                                                                                                                                                   
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 49, in fetch
        data = [self.dataset[idx] for idx in possibly_batched_index]                                                                                                                                                                                                                                                                  
      File "/home/llili/tjh/software/anaconda3/envs/voxset/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 49, in <listcomp>                                                                                                                                                                                        
        data = [self.dataset[idx] for idx in possibly_batched_index]                                                                                                                                                                                                                                                                  
      File "../pcdet/datasets/kitti/kitti_dataset.py", line 425, in __getitem__                                                                                                                                                                                                                                                         
        data_dict = self.prepare_data(data_dict=input_dict)                                                                                                                                                                                                                                                                           
      File "../pcdet/datasets/dataset.py", line 149, in prepare_data                                                                                                                                                                                                                                                                    
        data_dict=data_dict                                                                                                                                                                                                                                                                                                           
      File "../pcdet/datasets/processor/data_processor.py", line 217, in forward                                                                                                                                                                                                                                                        
        data_dict = cur_processor(data_dict=data_dict)                                                                                                                                                                                                                                                                                
      File "../pcdet/datasets/processor/data_processor.py", line 130, in transform_points_to_voxels                                                                                                                                                                                                                                     
        max_num_voxels=config.MAX_NUMBER_OF_VOXELS[self.mode],                                                                                                                                                                                                                                                                        
      File "../pcdet/datasets/processor/data_processor.py", line 41, in __init__                                                                                                                                                                                                                                                        
        max_num_voxels=max_num_voxels                                                                                                                                                                                                                                                                                               
    MemoryError: std::bad_alloc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    eval:   0%|          | 0/943 [00:07<?, ?it/s]
    

    I first tried to test it on my desktop and I thought it was because of a lack of memory. But then I test it on an Nvidia a100 cluster server, I still got this error. Any possible solution? Thank you very much.

    opened by ThankPan 9
  • About the new version of the code.

    About the new version of the code.

    First of all, thank you for your work. it seems that you have update the version of pcdet from 0.3 to 0.5, and data_processor.py gets a new version. such as

            # if data_dict is None:
            #     try:
            #         from spconv.utils import VoxelGeneratorV2 as VoxelGenerator
            #     except:
            #         from spconv.utils import VoxelGenerator
    
            #     voxel_generator = VoxelGenerator(
            #         voxel_size=config.VOXEL_SIZE,
            #         point_cloud_range=self.point_cloud_range,
            #         max_num_points=config.MAX_POINTS_PER_VOXEL,
            #         max_voxels=config.MAX_NUMBER_OF_VOXELS[self.mode]
            #     )
            if data_dict is None:
                grid_size = (self.point_cloud_range[3:6] - self.point_cloud_range[0:3]) / np.array(config.VOXEL_SIZE)
                self.grid_size = np.round(grid_size).astype(np.int64)
                self.voxel_size = config.VOXEL_SIZE
                self.max_num_points = config.MAX_POINTS_PER_VOXEL
    
                return partial(
                    self.transform_points_to_voxels, 
                    dynamic = getattr(config, 'DYNAMIC', False)
                )
    
            points = data_dict['points']
            if dynamic:
                pass
            else:
                voxel_output = spconv.utils.VoxelGenerator(
                    voxel_size= self.voxel_size, 
                    point_cloud_range=self.point_cloud_range,
                    max_num_points=self.max_num_points).generate(points)
    
                voxels, coordinates, num_points = voxel_output
            
                if not data_dict['use_lead_xyz']:
                    voxels = voxels[..., 3:]  # remove xyz in voxels(N, 3)
    
                data_dict['voxels'] = voxels
                data_dict['voxel_coords'] = coordinates
                data_dict['voxel_num_points'] = num_points
    
            return data_dict
    

    to

        def transform_points_to_voxels(self, data_dict=None, config=None):
            if data_dict is None:
                grid_size = (self.point_cloud_range[3:6] - self.point_cloud_range[0:3]) / np.array(config.VOXEL_SIZE)
                self.grid_size = np.round(grid_size).astype(np.int64)
                self.voxel_size = config.VOXEL_SIZE
                # just bind the config, we will create the VoxelGeneratorWrapper later,
                # to avoid pickling issues in multiprocess spawn
                return partial(self.transform_points_to_voxels, config=config)
    
    
            if self.voxel_generator is None:
                self.voxel_generator = VoxelGeneratorWrapper(
                    vsize_xyz=config.VOXEL_SIZE,
                    coors_range_xyz=self.point_cloud_range,
                    num_point_features=self.num_point_features,
                    max_num_points_per_voxel=config.MAX_POINTS_PER_VOXEL,
                    max_num_voxels=config.MAX_NUMBER_OF_VOXELS[self.mode],
                )
    
            points = data_dict['points']
    
            if config.MAX_POINTS_PER_VOXEL == -1:
                return data_dict
    
            voxel_output = self.voxel_generator.generate(points)
            voxels, coordinates, num_points = voxel_output
    
            if not data_dict['use_lead_xyz']:
                voxels = voxels[..., 3:]  # remove xyz in voxels(N, 3)
    
            data_dict['voxels'] = voxels
            data_dict['voxel_coords'] = coordinates
            data_dict['voxel_num_points'] = num_points
    
            mask = np.tile(np.arange(config.MAX_POINTS_PER_VOXEL).reshape(1, -1), [len(num_points), 1]) < num_points.reshape(-1, 1)
            data_dict['points'] = voxels[mask, ...]
    
            return data_dict
    

    when I try the latest version, I get a problem, so I change the code to

    if config.MAX_POINTS_PER_VOXEL == -1:
                pass
            else:
                if self.voxel_generator is None:
                    self.voxel_generator = VoxelGeneratorWrapper(
                        vsize_xyz=config.VOXEL_SIZE,
                        coors_range_xyz=self.point_cloud_range,
                        num_point_features=self.num_point_features,
                        max_num_points_per_voxel=config.MAX_POINTS_PER_VOXEL,
                        max_num_voxels=config.MAX_NUMBER_OF_VOXELS[self.mode],
                    )
                voxel_output = self.voxel_generator.generate(points)
                voxels, coordinates, num_points = voxel_output
    

    and it works. Then I got a new bug again.

    /pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:97: operator(): block: [510,0,0], thread: [127,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
    epochs:   0%|                                                                                                                                       | 0/100 [00:03<?, ?it/s]
    Traceback (most recent call last):
      File "./tools/train.py", line 202, in <module>
        main()
      File "./tools/train.py", line 154, in main
        train_model(
      File "/opt/data/private/OpenPCDet/tools/train_utils/train_utils.py", line 111, in train_model
        accumulated_iter = train_one_epoch(
      File "/opt/data/private/OpenPCDet/tools/train_utils/train_utils.py", line 47, in train_one_epoch
        loss, tb_dict, disp_dict = model_func(model, batch)
      File "/opt/data/private/OpenPCDet/pcdet/models/__init__.py", line 42, in model_func
        ret_dict, tb_dict, disp_dict = model(batch_dict)
      File "/usr/local/lib/python3.8/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl
        return forward_call(*input, **kwargs)
      File "/opt/data/private/OpenPCDet/pcdet/models/detectors/pointpillar.py", line 11, in forward
        batch_dict = cur_module(batch_dict)
      File "/usr/local/lib/python3.8/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl
        return forward_call(*input, **kwargs)
      File "/opt/data/private/OpenPCDet/pcdet/models/backbones_3d/vfe/voxset.py", line 117, in forward
        src = self.mlp_vsa_layer_0(src, inverse01x, coords01x, self.grid_size)  # VSA
      File "/usr/local/lib/python3.8/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl
        return forward_call(*input, **kwargs)
      File "/opt/data/private/OpenPCDet/pcdet/models/backbones_3d/vfe/voxset.py", line 196, in forward
        h = spconv.SparseConvTensor(F.relu(x_), coords.int(), bev_shape, batch_size).dense().squeeze(-1) # hr~
      File "/usr/local/lib/python3.8/dist-packages/spconv/pytorch/core.py", line 222, in dense
        res = scatter_nd(
      File "/usr/local/lib/python3.8/dist-packages/spconv/pytorch/core.py", line 118, in scatter_nd
        ret[slices] = updates.view(*output_shape)
    RuntimeError: CUDA error: device-side assert triggered
    

    I have tried my best to solve this problem, but get noting, can you give me some advice? Actually, when i use your code with pcdet 0.3,everything is okay.

    opened by zyrant 4
  •  'batch_first'

    'batch_first'

    1.python train.py --cfg_file cfgs/kitti_models/voxset.yaml File "/OpenPCDet/pcdet/models/backbones_3d/vfe/voxset.py", line 168, in init self.mhsa = nn.MultiheadAttention(dim, num_heads=1, batch_first=True) TypeError: init() got an unexpected keyword argument 'batch_first' 2.python setup.py build_dist --inplace error: invalid command 'build_dist'

    how can i fit it ?

    opened by kuaiqushangzixiba 2
  • codes issue

    codes issue

    Hi, I tried to run your code, but some error occurred: Traceback (most recent call last): File "/media/lizheng/datum/codes/VoxSeT/tools/train.py", line 203, in main() File "/media/lizheng/datum/codes/VoxSeT/tools/train.py", line 117, in main model = build_network(model_cfg=cfg.MODEL, num_class=len(cfg.CLASS_NAMES), dataset=train_set) File "../pcdet/models/init.py", line 18, in build_network model_cfg=model_cfg, num_class=num_class, dataset=dataset File "../pcdet/models/detectors/init.py", line 30, in build_detector model_cfg=model_cfg, num_class=num_class, dataset=dataset File "../pcdet/models/detectors/pointpillar.py", line 7, in init self.module_list = self.build_networks() File "../pcdet/models/detectors/detector3d_template.py", line 47, in build_networks model_info_dict=model_info_dict File "../pcdet/models/detectors/detector3d_template.py", line 62, in build_vfe depth_downsample_factor=model_info_dict['depth_downsample_factor'] File "../pcdet/models/backbones_3d/vfe/voxset.py", line 41, in init self.mlp_vsa_layer_0 = MLP_VSA_Layer(self.input_dim * 1, self.num_latents[0]) File "../pcdet/models/backbones_3d/vfe/voxset.py", line 168, in init self.mhsa = nn.MultiheadAttention(dim, num_heads=1, batch_first=True) TypeError: init() got an unexpected keyword argument 'batch_first'

    my environment : python==3.8, torch=1.7.1 Is the problem caused by the low version of torch or something else?

    opened by Z-Lee-corder 1
  • error: invalid command 'build_dist'

    error: invalid command 'build_dist'

    python setup.py build_dist --inplace /home/libing/anaconda3/envs/yolo3d/lib/python3.6/site-packages/setuptools/dist.py:458: UserWarning: Normalizing '0.5.2+0000000' to '0.5.2+0' warnings.warn(tmpl.format(**locals())) usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] or: setup.py --help [cmd1 cmd2 ...] or: setup.py --help-commands or: setup.py cmd --help

    error: invalid command 'build_dist'

    How can I solve this problem?

    opened by libingDY 1
  • Question about the Lidar

    Question about the Lidar

    On the Kitti website it states that they use the Velodyne HDL-64E. I was wondering if the VLP -16 Puck will work as well with this code or does it not matter? Do we also need the 2 cameras (point Grey Flea 2)?. Any information will help as i am new to this.

    opened by juggeullae 0
  • What is the meaning of the 'latent codes'?

    What is the meaning of the 'latent codes'?

    1. What is the meaning of the 'latent codes'? There is no detailed introduction to its origin and meaning in the paper.

    I try to find it in the code. In pcdet/models/backbones_3d/vfe/voxelset.py, I found that the latent code was omitted with the nn.linear() layer? Why is this possible? The related code show as below.

        # the learnable latent codes can be obsorbed by the linear projection
        self.score = nn.Linear(dim, n_latents)
    
        def forward(self, inp, inverse, coords, bev_shape):
              x = self.pre_mlp(inp)
    
              # encoder
              attn = torch_scatter.scatter_softmax(self.score(x), inverse, dim=0)
              dot = (attn[:, :, None] * x.view(-1, 1, self.dim)).view(-1, self.dim*self.k)
              x_ = torch_scatter.scatter_sum(dot, inverse, dim=0)
    

    2. The ensuing question, since the latent code is omitted, how to visualize the latent code on page 8 of the paper?

    This is really bothering me for a long time, sincerely hope the author guides.

    opened by xibaicai 0
  • subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1

    subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1

    when i building your code with 'python setup.py build_ext --inplace', the CalledProcessError is happened, as

    ninja: build stopped: subcommand failed.
    Traceback (most recent call last):
      File "/home/sl/anaconda3/envs/py3.7/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 1672, in _run_ninja_build
        env=env)
      File "/home/sl/anaconda3/envs/py3.7/lib/python3.7/subprocess.py", line 512, in run
        output=stdout, stderr=stderr)
    subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.
    

    Google's suggestion is that this problem is related to the pytorch version. You need to reduce the pytorch version to below 1.5.0. But your code need PyTorch 1.9 or higher.

    How can I solve this problem? Could you please give me the suggestions? Looking forward to your reply.

    my Environment Linux (tested on Ubuntu 18.04) Python 3.7 PyTorch 1.9 .1 CUDA 10.2

    opened by jiangtao129 0
  • Do you have the plan to release the two-stage's code and config?

    Do you have the plan to release the two-stage's code and config?

    Hello, Thanks for sharing your code!

    I wonder to know whether you have the plan to release the two-stage's code and config of VoxSeT? In the Table 4 of the paper, your two stage VoxSeT gets the best performance. I want to reproduce this pat of result and retrain the two-stage's VoxSeT in my experiments. Looking forward to your reply!

    opened by ideasplus 0
  • some question about VSA encoder code

    some question about VSA encoder code

    Hi, thanks for sharing the worke. In VSA encoder, code is below: x = self.pre_mlp(inp)

    encoder

    attn = torch_scatter.scatter_softmax(self.score(x), inverse, dim=0) dot = (attn[:, :, None] * x.view(-1, 1, self.dim)).view(-1, self.dim*self.k) x_ = torch_scatter.scatter_sum(dot, inverse, dim=0)

    I just wonder why you write like that " dot = (attn[:, :, None] * x.view(-1, 1, self.dim)).view(-1, self.dim*self.k)",according to paper, A's shape is [n,k], and v's shape is [n,d], so A^T * V should be [k, d], why you can get [n,k,d]? just like code result。 I don't know the meaning of the calculation of dot, which is different with set transformer's ISB.

    opened by AndyYuan96 2
  •  CUDA out of memory

    CUDA out of memory

    What GPU do you use? What GPU do I use 2080ti File "/home/libing/anaconda3/envs/HVPR/lib/python3.7/site-packages/torch/nn/modules/activation.py", line 987, in forward attn_mask=attn_mask) File "/home/libing/anaconda3/envs/HVPR/lib/python3.7/site-packages/torch/nn/functional.py", line 4790, in multi_head_attention_forward attn_output_weights = torch.bmm(q, k.transpose(1, 2)) RuntimeError: CUDA out of memory. Tried to allocate 47.58 GiB (GPU 0; 10.76 GiB total capacity; 558.04 MiB already allocated; 8.35 GiB free; 594.00 MiB reserved in total by PyTorch)

    I adjusted 4 to 2

    opened by libingDY 2
Owner
Billy HE
PhD candidate of The Hong Kong Polytechnic University
Billy HE
Not All Points Are Equal: Learning Highly Efficient Point-based Detectors for 3D LiDAR Point Clouds (CVPR 2022, Oral)

Not All Points Are Equal: Learning Highly Efficient Point-based Detectors for 3D LiDAR Point Clouds (CVPR 2022, Oral) This is the official implementat

Yifan Zhang 259 Dec 25, 2022
BADet: Boundary-Aware 3D Object Detection from Point Clouds (Pattern Recognition 2022)

BADet: Boundary-Aware 3D Object Detection from Point Clouds (Pattern Recognition

Rui Qian 17 Dec 12, 2022
(CVPR 2021) Back-tracing Representative Points for Voting-based 3D Object Detection in Point Clouds

BRNet Introduction This is a release of the code of our paper Back-tracing Representative Points for Voting-based 3D Object Detection in Point Clouds,

null 86 Oct 5, 2022
Voxel Transformer for 3D object detection

Voxel Transformer This is a reproduced repo of Voxel Transformer for 3D object detection. The code is mainly based on OpenPCDet. Introduction We provi

null 173 Dec 25, 2022
(CVPR 2022 Oral) Official implementation for "Surface Representation for Point Clouds"

RepSurf - Surface Representation for Point Clouds [CVPR 2022 Oral] By Haoxi Ran* , Jun Liu, Chengjie Wang ( * : corresponding contact) The pytorch off

Haoxi Ran 264 Dec 23, 2022
Implementation of CVPR'2022:Reconstructing Surfaces for Sparse Point Clouds with On-Surface Priors

Reconstructing Surfaces for Sparse Point Clouds with On-Surface Priors (CVPR 2022) Personal Web Pages | Paper | Project Page This repository contains

null 151 Dec 26, 2022
Implementation of CVPR'2022:Surface Reconstruction from Point Clouds by Learning Predictive Context Priors

Surface Reconstruction from Point Clouds by Learning Predictive Context Priors (CVPR 2022) Personal Web Pages | Paper | Project Page This repository c

null 136 Dec 12, 2022
Fog Simulation on Real LiDAR Point Clouds for 3D Object Detection in Adverse Weather

LiDAR fog simulation Created by Martin Hahner at the Computer Vision Lab of ETH Zurich. This is the official code release of the paper Fog Simulation

Martin Hahner 110 Dec 30, 2022
Code for the paper SphereRPN: Learning Spheres for High-Quality Region Proposals on 3D Point Clouds Object Detection, ICIP 2021.

SphereRPN Code for the paper SphereRPN: Learning Spheres for High-Quality Region Proposals on 3D Point Clouds Object Detection, ICIP 2021. Authors: Th

Thang Vu 15 Dec 2, 2022
Attention-based Transformation from Latent Features to Point Clouds (AAAI 2022)

Attention-based Transformation from Latent Features to Point Clouds This repository contains a PyTorch implementation of the paper: Attention-based Tr

null 12 Nov 11, 2022
Compute descriptors for 3D point cloud registration using a multi scale sparse voxel architecture

MS-SVConv : 3D Point Cloud Registration with Multi-Scale Architecture and Self-supervised Fine-tuning Compute features for 3D point cloud registration

null 42 Jul 25, 2022
(CVPR 2021) PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds

PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds by Mutian Xu*, Runyu Ding*, Hengshuang Zhao, and Xiaojuan Qi. Int

CVMI Lab 228 Dec 25, 2022
[ICCV2021] 3DVG-Transformer: Relation Modeling for Visual Grounding on Point Clouds

3DVG-Transformer This repository is for the ICCV 2021 paper "3DVG-Transformer: Relation Modeling for Visual Grounding on Point Clouds" Our method "3DV

null 22 Dec 11, 2022
Official code of the paper "Expanding Low-Density Latent Regions for Open-Set Object Detection" (CVPR 2022)

OpenDet Expanding Low-Density Latent Regions for Open-Set Object Detection (CVPR2022) Jiaming Han, Yuqiang Ren, Jian Ding, Xingjia Pan, Ke Yan, Gui-So

csuhan 64 Jan 7, 2023
Code for "CloudAAE: Learning 6D Object Pose Regression with On-line Data Synthesis on Point Clouds" @ICRA2021

CloudAAE This is an tensorflow implementation of "CloudAAE: Learning 6D Object Pose Regression with On-line Data Synthesis on Point Clouds" Files log:

Gee 35 Nov 14, 2022
The official implementation of ICCV paper "Box-Aware Feature Enhancement for Single Object Tracking on Point Clouds".

Box-Aware Tracker (BAT) Pytorch-Lightning implementation of the Box-Aware Tracker. Box-Aware Feature Enhancement for Single Object Tracking on Point C

Kangel Zenn 5 Mar 26, 2022
A general python framework for single object tracking in LiDAR point clouds, based on PyTorch Lightning.

Open3DSOT A general python framework for single object tracking in LiDAR point clouds, based on PyTorch Lightning. The official code release of BAT an

Kangel Zenn 172 Dec 23, 2022
Official source code of Fast Point Transformer, CVPR 2022

Fast Point Transformer Project Page | Paper This repository contains the official source code and data for our paper: Fast Point Transformer Chunghyun

null 182 Dec 23, 2022
Stratified Transformer for 3D Point Cloud Segmentation (CVPR 2022)

Stratified Transformer for 3D Point Cloud Segmentation Xin Lai*, Jianhui Liu*, Li Jiang, Liwei Wang, Hengshuang Zhao, Shu Liu, Xiaojuan Qi, Jiaya Jia

DV Lab 195 Jan 1, 2023