Home

Awesome

<p align="center"> <h1 align="center"><strong>MambaMOS: LiDAR-based 3D Moving Object Segmentation with Motion-aware State Space Model</strong></h1> <h3 align="center">ACM MM 2024</h3> <div align="center"> <div> <a href="https://arxiv.org/abs/2404.12794"><img src="http://img.shields.io/badge/paper-arXiv.cs.CV%3A2404.12794-B31B1B.svg"></a> </div> </div> <p align="center"> <img src="./assets/overview.png" width="95%"> </p> <b><p align="center" style="margin-top: -20px;"> MambaMOS </b></p>

Overview

Environment

# pointcept with CUDA=11.6
conda create -n pointcept python=3.8 -y
conda activate pointcept
conda install ninja -y
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
conda install h5py pyyaml -c anaconda -y
conda install sharedarray tensorboard tensorboardx yapf addict einops scipy plyfile termcolor timm -c conda-forge -y
conda install pytorch-cluster pytorch-scatter pytorch-sparse -c pyg -y

pip install torch-geometric
pip install spconv-cu116
pip install open3d

cd libs/pointops
python setup.py install
cd ../../

# mamba install
cd libs/
git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d
git checkout v1.1.3 
CAUSAL_CONV1D_FORCE_BUILD=TRUE pip install .
cd ..
git clone https://github.com/state-spaces/mamba.git
cd mamba
git checkout v1.1.4 
MAMBA_FORCE_BUILD=TRUE pip install .

Dataset preparation

mkdir -p data
ln -s ${SEMANTIC_KITTI_DIR} ${CODEBASE_DIR}/data/semantic_kitti

Data structure:

SEMANTIC_KITTI_DIR
└── sequences
    ├── 00
    │   ├── velodyne
    │   │    ├── 000000.bin
    │   │    ├── 000001.bin
    │   │    └── ...
    │   ├── labels
    │   │    ├── 000000.label
    │   │    ├── 000001.label
    │   │    └── ...
    │   ├── calib.txt
    │   ├── poses.txt
    │   └── times.txt
    ├── 01
    ├── 02
   ...
    └── 21

# sequences for training: 00-07, 09-10
# sequences for validation: 08
# sequences for testing: 11-21

Run

Training

export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}
sh scripts/train.sh -g ${NUM_GPU} -d ${DATASET_NAME} -c ${CONFIG_NAME} -n ${EXP_NAME}

For example:

export CUDA_VISIBLE_DEVICES=0,1,2,3
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg_mambamos -n demo

Testing

In the testing phase, we used the same testing strategy as pointcept, please read its readme for information.

# By script (Based on experiment folder created by training script)
sh scripts/test.sh -g ${NUM_GPU} -d ${DATASET_NAME} -n ${EXP_NAME} -w ${CHECKPOINT_NAME}

For example:

export CUDA_VISIBLE_DEVICES=0
# weight path: ./exp/semantic_kitti/mambamos/model_best.pth
sh scripts/test.sh -g 1 -d semantic_kitti -n mambamos -w model_best

Our pretrained model is public available and can be downloaded from Google Drive.

🤝 Publication:

Please consider referencing this paper if you use the code from our work. Thanks a lot :)

@inproceedings{zeng2024mambamos,
  title={MambaMOS: LiDAR-based 3D Moving Object Segmentation with Motion-aware State Space Model},
  author={Zeng, Kang and Shi, Hao and Lin, Jiacheng and Li, Siyu and Cheng, Jintao and Wang, Kaiwei and Li, Zhiyong and Yang, Kailun},
  booktitle={ACM International Conference on Multimedia (MM)},
  year={2024}
}

Acknowledgement

The code framework of this project is based on pointcept, and the code of MambaMOS and MSSM refers to PTv3 and mamba respectively, thanks to their excellent work.