ruizhao26 / STE-FlowNet

Spatio-Temporal Recurrent Networks for Event-Based Optical Flow Estimation (AAAI 2022)
MIT License
33 stars 2 forks source link

[AAAI 2022] Spatio-Temporal Recurrent Networks for Event-Based Optical Flow Estimation

Ziluo Ding, Rui Zhao, Jiyuan Zhang, Tianxiao Gao, Ruiqin Xiong, Zhaofei Yu, Tiejun Huang

Peking University


This repository contains the official source code for our paper: Spatio-Temporal Recurrent Networks for Event-Based Optical Flow Estimation. AAAI 2022 Paper: [AAAI version](https://ojs.aaai.org/index.php/AAAI/article/view/19931) [Arxiv version](https://arxiv.org/pdf/2109.04871.pdf) * [STEFlow](#Spatio--Temporal-Recurrent-Networks-for-Event--Based-Optical-Flow-Estimation.) * [Environments](#Environments) * [Prepare the Data](#Prepare-the-Data) * [Encode the events of MVSEC](#Encode-the-events-of-MVSEC) * [Prepare the ground truth of MVSEC for Testing](#Prepare-the-ground-truth-of-MVSEC-for-Testing) * [Download the pretrained models](#Download-the-pretrained-models) * [Evaluate](#Evaluate) * [Train](#Train) * [Citation](#Citations) * [Acknowledgement](#Acknowledgement) ## Environments You will have to choose cudatoolkit version to match your compute environment. The code is tested on PyTorch 1.10.2+cu113 and spatial-correlation-sampler 0.3.0 but other versions might also work. ```bash conda create -n steflow python==3.9 conda activate steflow conda install pytorch torchvision cudatoolkit=11.3 -c pytorch pip3 install spatial-correlation-sampler matplotlib opencv-python h5py tensorboardX ``` We don't ensure that all the PyTorch versions can work well. For example, some PyTorch versions fail in encoding the flow ground truth since the data precision of the time stamps will be lost during conversion from PyTorch Tensor to Numpy array. ## Prepare the Data ### Encode the events of MVSEC ```bash # Encoding the Events of MVSEC dataset # You can set your data path in flow_gt_encoding.py or through argparser (--data) cd ./encoding # For training data python3 split_encoding_torch.py -sp=5 -se='outdoor_day2' -s # For testing data, you can choose the scenes you want to test # The scenes can be choosen below scenes=(indoor_flying1 indoor_flying2 indoor_flying3 outdoor_day1) for ss in ${scenes[*]}; do python3 split_encoding_torch.py -sp=5 -se=$ss -s done ``` ### Prepare the ground truth of MVSEC for testing. The test code is derived from [Spike-FlowNet](https://github.com/chan8972/Spike-FlowNet). In the original codes, the ```estimate_corresponding_gt_flow``` cost a lot of time. We implement this function before testing and save the estimated gt flow. If you want to plot the visualization of flow results, please refer to the code repository of [Spike-FlowNet](https://github.com/chan8972/Spike-FlowNet). ```bash # Prepare ground truth of flow # You can set your data path in flow_gt_encoding.py or through argparser (--data) # You can choose the type of dt below to generate flow gt dts=(1 4) # You can choose the type of scenes below to generate flow gt scenes=(indoor_flying1 indoor_flying2 indoor_flying3 outdoor_day1) for dt in ${dts[*]}; do for ss in ${scenes[*]}; do python3 flow_gt_encoding.py -dt=$dt -ts=$ss done done ``` ### Download the pretrained models The pretrained models for ```dt=1``` and ```dt=4``` can be download in the Google Drive link below [Link for pretrained models](https://drive.google.com/drive/folders/1EGwlpNZEqNYs23ZBSYUIHKwHJJM3kudu?usp=sharing) You can download the pretrained models to ```./ckpt``` ## Evaluate ```bash ### You can set the data path in the .py files or through argparser (--data) scenes=(indoor_flying1 indoor_flying2 indoor_flying3 outdoor_day1) # for dt=1 case python3 main_steflow_dt1.py -e \ --test-set 'Choose from the scenes' \ --pretrained './ckpt/steflow_dt1.pth.tar' # for dt4 case python3 main_steflow_dt4.py -e \ --test-set 'Choose from the scenes' \ --pretrained './ckpt/steflow_dt4.pth.tar' ``` Note that we have provided a better pretrained model for evaluation, which is slightly different with the original results shown in paper. In more detail, the model achieves better results in all three indoor scenes and demonstrates better generalization. However, the model degrates only in outdoor scene. The following table shows the detailed results. ## Train ### Some Useful Command-line arguments About training paths: ```--data```: your data path ```--savedir```: folder for saving training results About hyperparameter for training: ```--batch-size```: batch size for training ```--lr```: initial learning rate ```--milestones```: milestones for learning rate decay ```--gamma```: factor for learning rate decay About other training settings: ``` --workers```: number of workers to use ```--test-set```: the validation dataset during training ```--evaluate-interval```: how many epochs to evaluate after ```--print-freq```: how many iterations to print training details after All the command line arguments for hyperparameter tuning can be found in the `main_steflow_dt*.py` files. ```bash ### You can set the data path in the .py files or through argparser (--data) # for dt=1 case python3 main_steflow_dt1.py --lr 4e-4 -b 8 # for dt=4 case python3 main_steflow_dt4.py --lr 2e-4 -b 8 ``` ## Citations If you find this code useful in your research, please consider citing our paper. AAAI version: ``` @inproceedings{ding2021spatio, title={Spatio-temporal recurrent networks for event-based optical flow estimation}, author={Ding, Ziluo and Zhao, Rui and Zhang, Jiyuan and Gao, Tianxiao and Xiong, Ruiqin and Yu, Zhaofei and Huang, Tiejun}, booktitle={Proceedings of the AAAI Conference on Artificial Intelligence (AAAI)}, volume={36}, number={01}, pages={525--533}, year={2022} } ``` Arxiv version: ``` @article{ding2021spatio, title={Spatio-temporal recurrent networks for event-based optical flow estimation}, author={Ding, Ziluo and Zhao, Rui and Zhang, Jiyuan and Gao, Tianxiao and Xiong, Ruiqin and Yu, Zhaofei and Huang, Tiejun}, journal={arXiv preprint arXiv:2109.04871}, year={2022} } ``` ## Acknowledgement Parts of this code were derived from [chan8972/Spike-FlowNet](https://github.com/chan8972/Spike-FlowNet). Please also consider to cite [Spike-FlowNet](https://link.springer.com/chapter/10.1007/978-3-030-58526-6_22) if you'd like to cite our paper. We thank [Chankyu Lee](https://github.com/chan8972) for replying our email about the evaluation details about ```outdoor_day1``` scene.