|
# RAFT |
|
This repository contains the source code for our paper: |
|
|
|
[RAFT: Recurrent All Pairs Field Transforms for Optical Flow](https://arxiv.org/pdf/2003.12039.pdf)<br/> |
|
ECCV 2020 <br/> |
|
Zachary Teed and Jia Deng<br/> |
|
|
|
<img src="RAFT.png"> |
|
|
|
## Requirements |
|
The code has been tested with PyTorch 1.6 and Cuda 10.1. |
|
```Shell |
|
conda create --name raft |
|
conda activate raft |
|
conda install pytorch=1.6.0 torchvision=0.7.0 cudatoolkit=10.1 matplotlib tensorboard scipy opencv -c pytorch |
|
``` |
|
|
|
## Demos |
|
Pretrained models can be downloaded by running |
|
```Shell |
|
./download_models.sh |
|
``` |
|
or downloaded from [google drive](https://drive.google.com/drive/folders/1sWDsfuZ3Up38EUQt7-JDTT1HcGHuJgvT?usp=sharing) |
|
|
|
You can demo a trained model on a sequence of frames |
|
```Shell |
|
python demo.py --model=models/raft-things.pth --path=demo-frames |
|
``` |
|
|
|
## Required Data |
|
To evaluate/train RAFT, you will need to download the required datasets. |
|
* [FlyingChairs](https://lmb.informatik.uni-freiburg.de/resources/datasets/FlyingChairs.en.html#flyingchairs) |
|
* [FlyingThings3D](https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html) |
|
* [Sintel](http://sintel.is.tue.mpg.de/) |
|
* [KITTI](http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=flow) |
|
* [HD1K](http://hci-benchmark.iwr.uni-heidelberg.de/) (optional) |
|
|
|
|
|
By default `datasets.py` will search for the datasets in these locations. You can create symbolic links to wherever the datasets were downloaded in the `datasets` folder |
|
|
|
```Shell |
|
βββ datasets |
|
βββ Sintel |
|
βββ test |
|
βββ training |
|
βββ KITTI |
|
βββ testing |
|
βββ training |
|
βββ devkit |
|
βββ FlyingChairs_release |
|
βββ data |
|
βββ FlyingThings3D |
|
βββ frames_cleanpass |
|
βββ frames_finalpass |
|
βββ optical_flow |
|
``` |
|
|
|
## Evaluation |
|
You can evaluate a trained model using `evaluate.py` |
|
```Shell |
|
python evaluate.py --model=models/raft-things.pth --dataset=sintel --mixed_precision |
|
``` |
|
|
|
## Training |
|
We used the following training schedule in our paper (2 GPUs). Training logs will be written to the `runs` which can be visualized using tensorboard |
|
```Shell |
|
./train_standard.sh |
|
``` |
|
|
|
If you have a RTX GPU, training can be accelerated using mixed precision. You can expect similiar results in this setting (1 GPU) |
|
```Shell |
|
./train_mixed.sh |
|
``` |
|
|
|
## (Optional) Efficent Implementation |
|
You can optionally use our alternate (efficent) implementation by compiling the provided cuda extension |
|
```Shell |
|
cd alt_cuda_corr && python setup.py install && cd .. |
|
``` |
|
and running `demo.py` and `evaluate.py` with the `--alternate_corr` flag Note, this implementation is somewhat slower than all-pairs, but uses significantly less GPU memory during the forward pass. |
|
|