Git Product home page Git Product logo

ratrack's Introduction

RaTrack: Moving Object Detection and Tracking with 4D Radar Point Cloud

Zhijun Pan†*Fangqiang Ding†Hantao Zhong†Chris Xiaoxuan Lu
†Equal Contribution. *Project Lead.
Royal College of Art University of Edinburgh University of Cambridge  University College London

arXiv GitHub license

📦 Method

pipeline.jpg
Figure 1. Overall network pipeline of RaTrack. Given each 4D radar point cloud from the stream, we first apply a backbone network to encode intra- and inter-frame radar point cloud features. With the extracted features, our point-wise motion estimation module infers point-level scene flow as an explicit complement to augment the latent features of radar point clouds. Our advocated idea of class-agnostic detection without bounding boxes is introduced in the object detection module in which moving points are first identified and then used to detect moving objects via clustering. Finally, our data association module computes the affinity matrix with a learnable distance metric and then optimises the bipartite matching problem. The entire network is end-to-end trainable with a multi-task loss that incorporates three supervised subtasks: motion segmentation, scene flow estimation, and affinity matrix computation.

🔥 News

  • [2024-03-22] We are working on integrating AB3DMOT evaluation scripts into the evaluation run. Stay tuned!
  • [2024-03-13] Our paper demo video can be seen here 👉 video.
  • [2024-03-13] We further improved RaTrack's overall performance. Please check Evaluation.
  • [2024-01-29] Our paper can be read here 👉 arXiv.
  • [2024-01-29] Our paper is accepted by ICRA 2024 🎉.

🔗 Citation

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

@InProceedings{pan2023moving,
    author    = {Pan, Zhijun and Ding, Fangqiang and Zhong, Hantao and Lu, Chris Xiaoxuan},
    title     = {Moving Object Detection and Tracking with 4D Radar Point Cloud},
    booktitle = {Proceedings of the IEEE International Conference on Robotics and Automation (ICRA)},
    year      = {2024},
}

📊 Qualitative results

Here are some GIFs to show our qualitative results on moving object detection and tracking based on 4D radar point clouds. Note that only moving objects with no less than five points. For more qualitative results, please refer to our demo video.

✅ Dataset Preparation

First, please request and download the View of Delft (VoD) dataset from the VoD official website. Unzip into the folder you prefer.

Please also obtain the tracking annotation from VoD Github. Unzip all the .txt tracking annotation files into the path: PATH_TO_VOD_DATASET/view_of_delft_PUBLIC/lidar/training/label_2_tracking/

The dataset folder structure should look like this:

view_of_delft_PUBLIC/
├── lidar
│   ├── ImageSets
│   ├── testing
│   └── training
│       ├── calib
│       ├── image_2
│       ├── label_2
│           ├── 00000.txt
│           ├── 00001.txt
│           ├── ...
│       ├── label_2_tracking
│           ├── 00000.txt
│           ├── 00001.txt
│           ├── ...
│       ├── pose
│       └── velodyne
├── radar
│   ├── testing
│   └── training
│       ├── calib
│       └── velodyne
├── radar_3frames
│   ├── testing
│   └── training
│       └── velodyne
└── radar_5frames
    ├── testing
    └── training
        └── velodyne

🚀 Getting Started

Please ensure you running with an Ubuntu machine with Nvidia GPU (at least 2GB VRAM). The code is tested with Ubuntu 22.04, and CUDA 11.8 with RTX 4090. Any other machine is not guaranteed to work.

To start, please ensure you have miniconda installed by following the official instructions here.

First, clone the repository with the following command and navigate to the root directory of the project:

git clone [email protected]:LJacksonPan/RaTrack.git
cd RaTrack

Create a RaTrack environment with the following command:

conda env create -f environment.yml

This will setup a conda environment named RaTrack with CUDA 11.8, PyTorch2.2.0.

Installing the pointnet2 pytorch dependencies:

cd lib
python setup.py install

To train the model, please run:

python main.py

This will use the configuration file config.yaml to train the model.

To evaluate the model and generate the model predictions, please run:

python main.py --config configs_eval.yaml

🔎 Evaluation

To evaluate with the trained RaTrack model, please open the configs_eval.yaml and change the model_path to the path of the trained model.

model_path: 'checkpoint/track4d_radar/models/model.last.t7'

Then run the following command:

python main.py --config configs_eval.yaml

This will only generate the predictions in the results folder. We are currently working on integrating our point-based version of AB3DMOT evaluation scripts into the evaluation run.

The evaluation results of the provided trained RaTrack model are following:

Method SAMOTA AMOTA AMOTP MOTA MODA MT ML
RaTrack 74.16 31.50 60.17 67.27 77.83 42.65 14.71
RaTrack (Improved) 80.33 34.58 59.37 62.80 77.07 54.41 13.24

If you are interested in evaluating the predictions with our version of AB3DMOT evaluation, please contact us.

👏 Acknowledgements

We use the following open-source projects in our work:

  • Pointnet2.Pytorch: We use the pytorch cuda implmentation of pointnet2 module.
  • view-of-delft-dataset: We the documentation and development kit of the View of Delft (VoD) dataset to develop the model.
  • AB3DMOT: we use AB3DMOT for evaluation metrics.
  • OpenPCDet: we use OpenPCDet for baseline detetion model training and evaluating.

ratrack's People

Contributors

mrtooolddriver avatar ljacksonpan avatar marcocrowe avatar

Stargazers

 avatar Xingyun-yao avatar Sergei Iakhnitskii avatar Zhiheng Li avatar Huang Yiyan avatar  avatar Malaz Tamim avatar Michael Sun avatar Chun Yu Hou avatar Wang Z.Y. avatar  avatar Shanliang Yao avatar Yulong Xie avatar  avatar  avatar  avatar gavin fang avatar  avatar Jonghwan Shin avatar sheey avatar Haoyu Shi avatar 齐下无贰 avatar  avatar Abanob Soliman avatar Bruno Santos avatar  avatar Eren Aydemir avatar Yannik Motzet avatar Bjarne Johannsen avatar  avatar  avatar Soyeong Kim avatar  avatar samwang avatar  avatar bugubird avatar  avatar Fangqiang Ding avatar  avatar

Watchers

 avatar Kostas Georgiou avatar  avatar

ratrack's Issues

Is there any code that can input the detection result and get the tracking result of AB3DMOT model directly?

Hello, I want to use the val detection result of vod dataset as input to get the tracking result of AB3DMOT model. But due to the differences between the vod and kitti datasets, I'm not sure how the pose in the vod dataset fits into the oxts in the kitti dataset. Is there any code in your model RaTrack that can directly view AB3DMOT model results?

Looking forward to your reply, thank you

Can not reproduce the provided result and some bug in eval

Hello, your work is very good, but I cannot reproduce your results, and I think there is something wrong with the code of your evaluation indicator.

1.I followed your steps to reproduce and found that the MOTA indicator was greater than 0.9. After careful inspection, I found that it was because you annotated FP in the code, but it was still greater than 0.9 after uncommenting it.

def mismatches(mappings_prev, mappings_curr, aff_mat, objs, gt_objs): fp = 0 mismat = 0 if mappings_prev == None: return 0 # for m in mappings_prev.keys(): for gt, mapped in mappings_curr.items(): if gt in mappings_prev and gt in gt_objs: # skip low confidence objects aff_idx_prev = list(mappings_prev.keys()).index(gt) aff_idx_curr = list(mappings_curr.keys()).index(gt) if aff_mat[0, aff_idx_prev, aff_idx_curr] < 0.5: # fp += 1 continue if mapped != mappings_prev[gt]: mismat += 1 return mismat, fp

2.I found that in your evaluation index, miss is directly compared with the size between the true value and the detection. This should be incorrect. The correct thing should be to use the true value minus the tracking value to judge the missed detection after the tracking result comes out. Because there are a large number of false detections in your test results, this will result in no missed detections at all during the evaluation.
`def eval_tracking(args, objs, gt_objs, mappings_prev, mappings_curr, aff_mat):
# matched but affinity < thres, false positive
# gt can't find object, miss
gt_objs_ = dict()
for key, gt_obj in gt_objs.items():
if gt_obj.size(2) < args.min_obj_points:
continue
gt_objs_[key] = gt_obj
gt_objs = gt_objs_

misses = 0
if len(gt_objs) > len(objs):
    misses = len(gt_objs) - len(objs)
mismat, fp = mismatches(mappings_prev, mappings_curr, aff_mat, objs, gt_objs)
if len(gt_objs) == 0:
    return {'na': 1}

`

3.I gave a modified judgment criterion, but under this judgment criterion there were a large number of missed detections, so that MOTA<0, I don’t know if there is something wrong with the writing.

`def mismatches(mappings_prev, mappings_curr, aff_mat, objs, gt_objs):
fp = 0 # 误检
fn = 0 # 漏检
mismat = 0 # 身份切换
tracked = 0 # 成功跟踪到的真实目标数量

if mappings_prev is None:
    # 如果没有前一帧的映射,假设所有真实目标都未被跟踪到,因此都是漏检
    fn = len(gt_objs)
    return mismat, fp, fn

for gt, mapped in mappings_curr.items():
    if gt in mappings_prev and gt in gt_objs:
        aff_idx_prev = list(mappings_prev.keys()).index(gt)
        aff_idx_curr = list(mappings_curr.keys()).index(gt)
        if aff_mat[0, aff_idx_prev, aff_idx_curr] >= 0.25:
            # 置信度高,认为目标被成功跟踪
            tracked += 1
            if mapped != mappings_prev[gt]:
                # 如果映射的目标ID在前后帧不一致,则认为发生了身份切换
                mismat += 1
        else:
            # 置信度低,认为发生了一次误检
            fp += 1

print("gt:",len(gt_objs))
fn = len(gt_objs) - tracked
print("GT:",len(gt_objs),"FP:",fp,"FN:",fn)
# fp = fp+fn
return mismat, fp

`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.