{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/unsupervised-scale-consistent-depth-and-ego","title":"Unsupervised Scale-consistent Depth and Ego-motion Learning from Monocular Video","arxiv_id":"1908.10553","date":"2019-08-28","proceeding":"NeurIPS 2019 12","authors":["Jia-Wang Bian","Zhichao Li","Naiyan Wang","Huangying Zhan","Chunhua Shen","Ming-Ming Cheng","Ian Reid"],"abstract":"Recent work has shown that CNN-based depth and ego-motion estimators can be learned using unlabelled monocular videos. However, the performance is limited by unidentified moving objects that violate the underlying static scene assumption in geometric image reconstruction. More significantly, due to lack of proper constraints, networks output scale-inconsistent results over different samples, i.e., the ego-motion network cannot provide full camera trajectories over a long video sequence because of the per-frame scale ambiguity. This paper tackles these challenges by proposing a geometry consistency loss for scale-consistent predictions and an induced self-discovered mask for handling moving objects and occlusions. Since we do not leverage multi-task learning like recent works, our framework is much simpler and more efficient. Comprehensive evaluation results demonstrate that our depth estimator achieves the state-of-the-art performance on the KITTI dataset. Moreover, we show that our ego-motion network is able to predict a globally scale-consistent camera trajectory for long video sequences, and the resulting visual odometry accuracy is competitive with the recent model that is trained using stereo videos. To the best of our knowledge, this is the first work to show that deep networks trained using unlabelled monocular videos can predict globally scale-consistent camera trajectories over a long video sequence.","url_abs":"https://arxiv.org/abs/1908.10553v2","url_pdf":"https://arxiv.org/pdf/1908.10553v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"unsupervised-scale-consistent-depth-and-ego","repo_url":"https://github.com/JiawangBian/sc_depth_pl","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"GPL-3.0"}},{"paper_slug":"unsupervised-scale-consistent-depth-and-ego","repo_url":"https://github.com/JiawangBian/SC-SfMLearner-Release","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"camera-pose-estimation","task_name":"Camera Pose Estimation"},{"task_slug":"depth-and-camera-motion","task_name":"Depth And Camera Motion"},{"task_slug":"depth-estimation","task_name":"Depth Estimation"},{"task_slug":"monocular-depth-estimation","task_name":"Monocular Depth Estimation"},{"task_slug":"visual-odometry","task_name":"Visual Odometry"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/camera-pose-estimation-on-kitti-odometry","task":"Camera Pose Estimation","dataset":"KITTI Odometry Benchmark","model":"SC-Depth","rank_in_archive_order":4,"of":7,"metrics":{"Absolute Trajectory Error [m]":"37.61","Average Rotational Error er[%]":"5.11","Average Translational Error et[%]":"12.20"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-depth-estimation-on-kitti-eigen","task":"Monocular Depth Estimation","dataset":"KITTI Eigen split","model":"SC-SfMLearner_CS+K","rank_in_archive_order":70,"of":79,"metrics":{"absolute relative error":"0.128"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-depth-estimation-on-kitti-eigen","task":"Monocular Depth Estimation","dataset":"KITTI Eigen split","model":"SC-SfMLearner","rank_in_archive_order":74,"of":79,"metrics":{"absolute relative error":"0.137"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1908.10553","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1908.10553"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/JiawangBian/sc_depth_pl","reach":{"status":"ok","spdx":"GPL-3.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/JiawangBian/SC-SfMLearner-Release","reach":null}],"summary":{"ran_honours":2,"unverified":1},"by_repo_kind":{"listed":{"samples":3,"ran":2,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":3,"samples":[{"code_sha256_prefix":"a6e120a8b303966b","entry":"depth_pair_visualizer","repo":"JiawangBian/SC-SfMLearner-Release","repo_kind":"listed","path":"eval_depth.py","file_url":"https://github.com/JiawangBian/SC-SfMLearner-Release/blob/HEAD/eval_depth.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"a6e120a8b303966b"}},{"code_sha256_prefix":"6d3e18a96b2c4d2e","entry":"depth_visualizer","repo":"JiawangBian/SC-SfMLearner-Release","repo_kind":"listed","path":"eval_depth.py","file_url":"https://github.com/JiawangBian/SC-SfMLearner-Release/blob/HEAD/eval_depth.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"6d3e18a96b2c4d2e"}},{"code_sha256_prefix":"e3d26605dd049993","entry":"compute_depth_errors","repo":"JiawangBian/SC-SfMLearner-Release","repo_kind":"listed","path":"eval_depth.py","file_url":"https://github.com/JiawangBian/SC-SfMLearner-Release/blob/HEAD/eval_depth.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"e3d26605dd049993"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}