Skip to content

FilippoAleotti/DWARF-Tensorflow

Repository files navigation

Dwarf-Tensorflow

TensorFlow implementation of Learning end-to-end scene flow by distilling single tasks knowledge.

Paper, Video

Abstract

Scene flow is a challenging task aimed at jointly estimating the 3D structure and motion of the sensed environment. Although deep learning solutions achieve outstanding performance in terms of accuracy, these approaches divide the whole problem into standalone tasks (stereo and optical flow) addressing them with independent networks. Such a strategy dramatically increases the complexity of the training procedure and requires power-hungry GPUs to infer scene flow barely at 1 FPS. Conversely, we propose DWARF, a novel and lightweight architecture able to infer full scene flow jointly reasoning about depth and optical flow easily and elegantly trainable end-to-end from scratch. Moreover, since ground truth images for full scene flow are scarce, we propose to leverage on the knowledge learned by networks specialized in stereo or flow, for which much more data are available, to distill proxy annotations. Exhaustive experiments show that i) DWARF runs at about 10 FPS on a single high-end GPU and about 1 FPS on NVIDIA Jetson TX2 embedded at KITTI resolution, with moderate drop in accuracy compared to 10× deeper models, ii) learning from many distilled samples is more effective than from the few, annotated ones available.

Requirements

The code has been tested with python3 and Tensorflow 1.10. Dependencies may be installed running

pip install -r requirements.txt

In order to use the KITTI evaluation suite, you need to install:

sudo apt-get install libpng++-dev
sudo apt-get install libpng-dev

Note: gcc and g++ version should have version 5

Network

dwarf

Filenames

  • kitti_160: split used for training the Gt model in the ablation
  • kitti_mixed: split used for training the Gt+Px model in the ablation
  • kitti_multiview_partial: split used for training the Px model in the ablation
  • kitti_multiview: split used for first training on PX for the final submission
  • kitti_200: split used for final fine tuning on Gt for the final submission

Pretrained models

Models are available for download

Training Dataset zip
Synthetic pretraining Flying Things 3D weights
Final submission KITTI 2015 weights

Proxy labels generation

Proxy labels have been generated using the network proposed by Ilg et al. in Occlusions, Motion and Depth Boundaries with a Generic Network for Disparity, Optical Flow or Scene Flow Estimation. WE DO NOT make them available for download. You can generate these proxy by your own running their code, available here.

Consider to cite them when using their work:

@inproceedings{ilg2018occlusions,
  title={Occlusions, motion and depth boundaries with a generic network for disparity, optical flow or scene flow estimation},
  author={Ilg, Eddy and Saikia, Tonmoy and Keuper, Margret and Brox, Thomas},
  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
  pages={614--630},
  year={2018}
}

Times

We took inference time using CUDA layers for 1D, 2D and 3D correlations. However, we notice that these layers are unstable and do not guarantee the same results for consecutive inferences, so we suggest to use tensorflow implementations for testing.

Reference:

If you find the code useful, please cite our paper:

@inproceedings{aleotti2020learning,
  title={Learning End-To-End Scene Flow by Distilling Single Tasks Knowledge},
  author={Aleotti, Filippo and Poggi, Matteo and Tosi, Fabio and Mattoccia, Stefano},
  booktitle={Thirty-Fourth AAAI Conference on Artificial Intelligence},
  year={2020}
}

About

TensorFlow implementation of "Learning end-to-end scene flow by distilling single tasks knowledge"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages