Deep Equilibrium Optical Flow Estimation
This is the official repo for the paper Deep Equilibrium Optical Flow Estimation (CVPR 2022), by Shaojie Bai*, Zhengyang Geng*, Yash Savani and J. Zico Kolter.
A deep equilibrium (DEQ) flow estimator directly models the flow as a path-independent, “infinite-level” fixed-point solving process. We propose to use this implicit framework to replace the existing recurrent approach to optical flow estimation. The DEQ flows converge faster, require less memory, are often more accurate, and are compatible with prior model designs (e.g., RAFT and GMA).
Demo
We provide a demo video of the DEQ flow results below.
demo.mp4
Requirements
The code in this repo has been tested on PyTorch v1.10.0. Install required environments through the following commands.
conda create --name deq python==3.6.10
conda activate deq
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge
conda install tensorboard scipy opencv matplotlib einops termcolor -c conda-forge
Download the following datasets into the datasets
directory.
Inference
Download the pretrained checkpoints into the checkpoints
directory. Run the following command to infer over the Sintel train set and the KITTI train set.
bash val.sh
You may expect the following performance statistics of given checkpoints. This is a reference log.
Checkpoint Name | Sintel (clean) | Sintel (final) | KITTI AEPE | KITTI F1-all |
---|---|---|---|---|
DEQ-Flow-B | 1.43 | 2.79 | 5.43 | 16.67 |
DEQ-Flow-H-1 | 1.45 | 2.58 | 3.97 | 13.41 |
DEQ-Flow-H-2 | 1.37 | 2.62 | 3.97 | 13.62 |
DEQ-Flow-H-3 | 1.36 | 2.62 | 4.02 | 13.92 |
Visualization
Download the pretrained checkpoints into the checkpoints
directory. Run the following command to visualize the optical flow estimation over the KITTI test set.
bash viz.sh
Training
Download FlyingChairs-pretrained checkpoints into the checkpoints
directory.
For the efficiency mode, you can run 1-step gradient to train DEQ-Flow-B via the following command. Memory overhead per GPU is about 5800 MB.
You may expect best results of about 1.46 (AEPE) on Sintel (clean), 2.85 (AEPE) on Sintel (final), 5.29 (AEPE) and 16.24 (F1-all) on KITTI. This is a reference log.
bash train_B_demo.sh
For training a demo of DEQ-Flow-H, you can run this command. Memory overhead per GPU is about 6300 MB. It can be further reduced to about 4200 MB per GPU when combined with --mixed-precision
. You can further reduce the memory cost if you employ the CUDA implementation of cost volumn by RAFT.
You may expect best results of about 1.41 (AEPE) on Sintel (clean), 2.76 (AEPE) on Sintel (final), 4.44 (AEPE) and 14.81 (F1-all) on KITTI. This is a reference log.
bash train_H_demo.sh
To train DEQ-Flow-B on Chairs and Things, use the following command.
bash train_B.sh
For the performance mode, you can run this command to train DEQ-Flow-H using the C+T
and C+T+S+K+H
schedule. You may expect the performance of <1.40 (AEPE) on Sintel (clean), around 2.60 (AEPE) on Sintel (final), around 4.00 (AEPE) and 13.6 (F1-all) on KITTI. DEQ-Flow-H-1,2,3 are checkpoints from three runs.
Currently, this training protocol could entail resources slightly more than two 11 GB GPUs. In the near future, we will upload an implementation revision (of the DEQ models) that shall further reduce this overhead to less than two 11 GB GPUs.
bash train_H_full.sh
Code Usage
Under construction. We will provide more detailed instructions on the code usage (e.g., argparse flags, fixed-point solvers, backward IFT modes) in the coming days.
A Tutorial on DEQ
If you hope to learn more about DEQ models, here is an official NeurIPS tutorial on implicit deep learning. Enjoy yourself!
Reference
If you find our work helpful to your research, please consider citing this paper. :)
@inproceedings{deq-flow,
author = {Bai, Shaojie and Geng, Zhengyang and Savani, Yash and Kolter, J. Zico},
title = {Deep Equilibrium Optical Flow Estimation},
booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2022}
}
Credit
A lot of the utility code in this repo were adapted from the RAFT repo and the DEQ repo.
Contact
Feel free to contact us if you have additional questions. Please drop an email through [email protected] (or Twitter).