3D sensors generate enormous amounts of point cloud data at high frame rates. For example, a 3D point cloud with 0.7 million points per frame at 30 frames per second needs a bandwidth of approximately 500 MB/s for video. Working with uncompressed point cloud data can lead to congestion and delays in communication networks. Thus, efficient compression coding technologies are indispensable for ensuring the compact storage and transmission of such data.
This repository provides source code for our 2022 ICRA paper titled "Varible Rate Compression for Raw 3D Point Cloud Data." Our model can compress raw point clouds, at a broad range of bitrates, without converting them into a voxelized representation. More specifically, there are two prominent benefits of our approach: (i) there is no loss of information due to voxelization; (ii) the compression and reconstruction performance is not affected by the underlying point cloud density. Additionally, our technique reduces the unnecessary computational burden induced by the processing of unoccupied voxels.
If you find this project useful, then please consider citing our work.
@inproceedings{muzaddid2022variable,
title={Variable Rate Compression for Raw 3D Point Clouds},
author={Al Muzaddid, Md Ahmed and Beksi, William J},
booktitle={Proceedings of the IEEE International Conference on Robotics and Automation (ICRA)},
pages={8748--8755},
year={2022}
}
This software was tested using Python 3.6, TensorFlow 1.14 and 1.15, and TensorFlow Compression 1.3. For the encoder, we utilize source code from the PointNet and PointNet++ GitHub repositories. Please follow the Compile Customized TF Operators section from PointNet++ to compile the custom tf_ops. In addition, we make use of the Fan et al. CUDA implementations of the chamfer and earth mover's distance.
First, install the required Python libraries listed in requirements.txt. Then,
$ cd src/external
and modify the first three lines of the makefile to point to your nvcc, cudalib, and tensorflow library. Finally, to compile the code run
$ make
Before training, please modify the DATA_DIR path in train.py to point to your data directory location. Then, start training
$ python train.py
To compress a point cloud using a trained model, first modify the path variables at the beginning of compressor_decompressor.py. Then, run the following command
$ python compressor_decompressor.py compress
To change the compression rate, the embedding length can be specified as follows
$ python compressor_decompressor.py compress 884
Likewise, with a modified path to the compressed file location, you can decompress a point cloud using the following command
$ python compressor_decompressor.py decompress