← Open Source
tinghuiz

SfMLearner

An unsupervised learning framework for depth and ego-motion estimation from monocular videos.

Model DevelopmentArchitectureJupyter Notebook
Open on GitHub
Momentum
+-2stars in 24 hours-0.1%
2.01k
Stars
553
Forks
+-2
This week
2
Contributors
Created 2017-04-25 · Updated 2026-10-16 · #19310 today
Top developers
tinghuizFxxk-2FA

tinghuiz/SfMLearner is ranked 19,310 with 2,014 stars.

Same-category comparison

tinghuiz/SfMLearner is ranked 19,310 among these 8 peers; openai/weak-to-strong is ranked 19,304.

Same-category comparison
NameRankMetrics
PaddlePaddle/Paddle19,247
Language:
C++
Stars:
24,125
Forks:
6,019
openai/parameter-golf19,287
Language:
Python
Stars:
5,198
Forks:
3,248
Description:
Train the smallest LM you can that fits in 16MB. Best model wins.
Cartucho/mAP19,301
Language:
Python
Stars:
2,969
Forks:
916
Description:
mean Average Precision - This code evaluates the performance of your neural net for object recognition.
openai/weak-to-strong19,304
Language:
Python
Stars:
2,545
Forks:
314
Ewenwan/ORB_SLAM2_SSD_Semantic19,317
Language:
C++
Stars:
1,575
Forks:
434
arpitbansal297/Cold-Diffusion-Models19,322
Language:
Python
Stars:
1,136
Forks:
83
Description:
Official implementation of Cold-Diffusion for different transformations in pytorch.
bubbliiiing/yolov8-pytorch19,327
Language:
Python
Stars:
1,012
Forks:
111
huangwl18/VoxPoser19,329
Language:
Python
Stars:
836
Forks:
112
Description:
VoxPoser: Composable 3D Value Maps for Robotic Manipulation with Language Models.
Key parameters and specifications
Key parameters and specifications
ParameterValue
LanguageJupyter Notebook
CategoryModel Development
SubcategoryArchitecture
KeywordsComputer vision
Stars2,014
Forks553
Contributors2
Created date2017-04-25
Updated date2026-10-16
Stars in 1 day-2
Stars in 7 days-2
Rank19,310
Previous rank9,136
Rank change-10,174
7-day stars rank18,252
Previous 7-day stars rank12,240
7-day stars rank change-6,012
Total stars rank6,314
Previous total stars rank6,304
Total stars rank change-10
CountryUSA
README summary

SfMLearner This codebase implements the system described in the paper: Unsupervised Learning of Depth and Ego-Motion from Video Tinghui Zhou, Matthew Brown, Noah Snavely, David G. See the project webpage for more details. Please contact Tinghui Zhou (tinghuiz@berkeley. Prerequisites This codebase was developed and tested with Tensorflow 1. Running the single-view depth demo We provide the demo code for running our single-view depth prediction model. First, download the pre-trained model from this Google Drive, and

put the model files under . Then you can use the provided ipython-notebook to run the demo. Preparing training data In order to train the model using the provided code, the data needs to be formatted in a certain manner. For KITTI, first download the dataset using this script provided on the official website, and then run the following command For the pose experiments, we used the KITTI odometry split, which can be downloaded here. Then you can change option

to when preparing the data. For Cityscapes, download the following packages: 1) , 2) . Then run the following command Notice that for Cityscapes the is set to 171 because we crop out the bottom part of the image that contains the car logo, and the resulting image will have height 128. Training Once the data are formatted following the above instructions, you should be able to train the model by running the following command You can then start a session by

and visualize the training progress by opening on your browser. If everything is set up properly, you should start seeing reasonable depth prediction after ~100K iterations when training on KITTI. Notes After adding data augmentation and removing batch normalization (along with some other minor tweaks), we have been able to train depth models better than what was originally reported in the paper even without using additional Cityscapes data or the explainability regularization. The provided pre-trained model was trained on

KITTI only with smooth weight set to 0. 5, and achieved the following performance on the Eigen test split (Table 1 of the paper): | Abs Rel | Sq Rel | RMSE | RMSE(log) | Acc. 959 | When trained on 5-frame snippets, the pose model obtains the following performanace on the KITTI odometry split (Table 3 of the paper): | Seq. 009) | Evaluation on KITTI Depth We provide evaluation code for the single-view depth experiment on KITTI. First, download our predictions (~140MB) from

this Google Drive and put them into . Then run If everything runs properly, you should get the numbers for in Table 1 of the paper. To get the numbers for , set an additional flag when executing the above command. Pose We provide evaluation code for the pose estimation experiment on KITTI. First, download the predictions and ground-truth pose data from this Google Drive. Notice that all the predictions and ground-truth are 5-frame snippets with the format of

consistent with the TUM evaluation toolkit. Then you could run to obtain the results reported in Table 3 of the

Frequently asked questions

How many stars and forks are recorded?

tinghuiz/SfMLearner has 2,014 stars and 553 forks.

What is the repository rank?

tinghuiz/SfMLearner is ranked 19,310.

What language and category are recorded?

tinghuiz/SfMLearner has 2,014 stars, uses Jupyter Notebook and belongs to Model Development.

Which repository is closest in rank?

tinghuiz/SfMLearner is compared with openai/weak-to-strong, ranked 19,304 with 2,545 stars.

README

SfMLearner

This codebase implements the system described in the paper:

Unsupervised Learning of Depth and Ego-Motion from Video

Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe

In CVPR 2017 (Oral).

See the project webpage for more details. Please contact Tinghui Zhou (tinghuiz@berkeley.edu) if you have any questions.

Prerequisites

This codebase was developed and tested with Tensorflow 1.0, CUDA 8.0 and Ubuntu 16.04.

Running the single-view depth demo

We provide the demo code for running our single-view depth prediction model. First, download the pre-trained model from this Google Drive, and put the model files under models/. Then you can use the provided ipython-notebook demo.ipynb to run the demo.

Preparing training data

In order to train the model using the provided code, the data needs to be formatted in a certain manner.

For KITTI, first download the dataset using this script provided on the official website, and then run the following command

python data/prepare_train_data.py --dataset_dir=/path/to/raw/kitti/dataset/ --dataset_name='kitti_raw_eigen' --dump_root=/path/to/resulting/formatted/data/ --seq_length=3 --img_width=416 --img_height=128 --num_threads=4

For the pose experiments, we used the KITTI odometry split, which can be downloaded here. Then you can change --dataset_name option to kitti_odom when preparing the data.

For Cityscapes, download the following packages: 1) leftImg8bit_sequence_trainvaltest.zip, 2) camera_trainvaltest.zip. Then run the following command

python data/prepare_train_data.py --dataset_dir=/path/to/cityscapes/dataset/ --dataset_name='cityscapes' --dump_root=/path/to/resulting/formatted/data/ --seq_length=3 --img_width=416 --img_height=171 --num_threads=4

Notice that for Cityscapes the img_height is set to 171 because we crop out the bottom part of the image that contains the car logo, and the resulting image will have height 128.

Training

Once the data are formatted following the above instructions, you should be able to train the model by running the following command

python train.py --dataset_dir=/path/to/the/formatted/data/ --checkpoint_dir=/where/to/store/checkpoints/ --img_width=416 --img_height=128 --batch_size=4

You can then start a tensorboard session by

tensorboard --logdir=/path/to/tensorflow/log/files --port=8888

and visualize the training progress by opening https://localhost:8888 on your browser. If everything is set up properly, you should start seeing reasonable depth prediction after ~100K iterations when training on KITTI.

Notes

After adding data augmentation and removing batch normalization (along with some other minor tweaks), we have been able to train depth models better than what was originally reported in the paper even without using additional Cityscapes data or the explainability regularization. The provided pre-trained model was trained on KITTI only with smooth weight set to 0.5, and achieved the following performance on the Eigen test split (Table 1 of the paper):

Abs Rel Sq Rel RMSE RMSE(log) Acc.1 Acc.2 Acc.3
0.183 1.595 6.709 0.270 0.734 0.902 0.959

When trained on 5-frame snippets, the pose model obtains the following performanace on the KITTI odometry split (Table 3 of the paper):

Seq. 09 Seq. 10
0.016 (std. 0.009) 0.013 (std. 0.009)

Evaluation on KITTI

Depth

We provide evaluation code for the single-view depth experiment on KITTI. First, download our predictions (~140MB) from this Google Drive and put them into kitti_eval/.

Then run

python kitti_eval/eval_depth.py --kitti_dir=/path/to/raw/kitti/dataset/ --pred_file=kitti_eval/kitti_eigen_depth_predictions.npy

If everything runs properly, you should get the numbers for Ours(CS+K) in Table 1 of the paper. To get the numbers for Ours cap 50m (CS+K), set an additional flag --max_depth=50 when executing the above command.

Pose

We provide evaluation code for the pose estimation experiment on KITTI. First, download the predictions and ground-truth pose data from this Google Drive.

Notice that all the predictions and ground-truth are 5-frame snippets with the format of timestamp tx ty tz qx qy qz qw consistent with the TUM evaluation toolkit. Then you could run

python kitti_eval/eval_pose.py --gtruth_dir=/directory/of/groundtruth/trajectory/files/ --pred_dir=/directory/of/predicted/trajectory/files/

to obtain the results reported in Table 3 of the paper. For instance, to get the results of Ours for Seq. 10 you could run

python kitti_eval/eval_pose.py --gtruth_dir=kitti_eval/pose_data/ground_truth/10/ --pred_dir=kitti_eval/pose_data/ours_results/10/

KITTI Testing code

Depth

Once you have model trained, you can obtain the single-view depth predictions on the KITTI eigen test split formatted properly for evaluation by running

python test_kitti_depth.py --dataset_dir /path/to/raw/kitti/dataset/ --output_dir /path/to/output/directory --ckpt_file /path/to/pre-trained/model/file/

Pose

We also provide sample testing code for obtaining pose predictions on the KITTI dataset with a pre-trained model. You can obtain the predictions formatted as above for pose evaluation by running

python test_kitti_pose.py --test_seq [sequence_id] --dataset_dir /path/to/KITTI/odometry/set/ --output_dir /path/to/output/directory/ --ckpt_file /path/to/pre-trained/model/file/

A sample model trained on 5-frame snippets can be downloaded at this Google Drive.

Then you can obtain predictions on, say Seq. 9, by running

python test_kitti_pose.py --test_seq 9 --dataset_dir /path/to/KITTI/odometry/set/ --output_dir /path/to/output/directory/ --ckpt_file models/model-100280

Other implementations

Pytorch (by Clement Pinard)

Disclaimer

This is the authors' implementation of the system described in the paper and not an official Google product.

Nearby in the ranking
Similar items