Home

Awesome

monodepth-cpp

Tensorflow C++ implementation for single image depth estimation

<p align="center"> <img src="https://github.com/yan99033/monodepth-cpp/blob/master/preview/monodepth_preview.gif" width="612" height="370"> </p>

The original work is implemented in Python, click here to go to their repo. Please cite their work if your find it helpful.

It is using pointer-to-implementation technique, so that you can use it in your project without worrying the actual implementation. Refer to src/inference_monodepth.cpp for more information

The C++ version is about 28fps, in comparison with Python's 13fps, tested with i7 processor and NVidia 1070 graphics laptop.

Related repo

If you are looking for single-image relative depth prediction, feel free to check out my other repo, MiDaS-cpp, a PyTorch C++ implementation of MiDaS.

Requirements

Option 1

Run the Docker container

chmod +x run_tf_docker.sh
./run_tf_docker.sh

Note: You may have a better graphics card, and if that's so, go to tf.Dockerfile line 55 and change the value of TF_CUDA_COMPUTE_CAPABILITIES (check out Nvidia cuda-gpus ).

Option 2

Build Tensorflow library from source, see here

Freeze TF graph

Either way, you will need to Freeze a Tensorflow graph (with known input and output names), or download a converted graph here.

Configure CMake project

Build (static/shared) library

NOTE: If you use the Docker container, this github repo will be mounted in /monodepth. Therefore, run cd monodepth in the container first.

mkdir build && mkdir install
cd build
cmake -DCMAKE_INSTALL_PREFIX=../install ..
make && make install

You will be seeing 'include' and 'lib' folders in the 'install' folder, import them in your project

To test if Monodepth C++ is working properly,

cd build
./inference_monodepth

NOTE: Select either static or shared library in CMakeLists.txt, unless you want both of them

Use (static/shared) library

In your own CMakeLists.txt project, do the following:

set(monodepth_INCLUDE_DIRS /path/to/monodepth-cpp/install/include)
INCLUDE_DIRECTORIES(
  ...
  monodepth_INCLUDE_DIRS
  ...
)

TARGET_LINK_LIBRARIES(awesome_exe /path/to/tensorflow/library/libtensorflow_cc.so) # Only if you are using the provided instructions
TARGET_LINK_LIBRARIES(awesome_exe /path/to/monodepth-cpp/install/lib/libmonodepth_static.a) # if you are using static library

Personal projects that use monodepth-cpp

  1. CNN-SVO
<p align="center"> <img src="https://github.com/yan99033/monodepth-cpp/blob/master/preview/kitti_preview.gif" width="723" height="224"> <img src="https://github.com/yan99033/monodepth-cpp/blob/master/preview/robotcar_preview.gif" width="723" height="224"> </p>
  1. Reproducing Deep virtual stereo odometry
<p align="center"> <img src="https://github.com/yan99033/monodepth-cpp/blob/master/preview/dvso_kitti_preview.gif" width="723" height="281"> <img src="https://github.com/yan99033/monodepth-cpp/blob/master/preview/dvso_final_map.gif" width="723" height="334"> </p>

NOTE: Because DVSO uses both the left disparity and the right disparity outputs (for left-right consistency check), it requires some modifications in the source code to enable the disparities outputs.