{"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/tartanvo-a-generalizable-learning-based-vo","title":"TartanVO: A Generalizable Learning-based VO","arxiv_id":"2011.00359","date":"2020-10-31","proceeding":null,"authors":["Wenshan Wang","Yaoyu Hu","Sebastian Scherer"],"abstract":"We present the first learning-based visual odometry (VO) model, which generalizes to multiple datasets and real-world scenarios and outperforms geometry-based methods in challenging scenes. We achieve this by leveraging the SLAM dataset TartanAir, which provides a large amount of diverse synthetic data in challenging environments. Furthermore, to make our VO model generalize across datasets, we propose an up-to-scale loss function and incorporate the camera intrinsic parameters into the model. Experiments show that a single model, TartanVO, trained only on synthetic data, without any finetuning, can be generalized to real-world datasets such as KITTI and EuRoC, demonstrating significant advantages over the geometry-based methods on challenging trajectories. Our code is available at https://github.com/castacks/tartanvo.","url_abs":"https://arxiv.org/abs/2011.00359v1","url_pdf":"https://arxiv.org/pdf/2011.00359v1.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":"tartanvo-a-generalizable-learning-based-vo","repo_url":"https://github.com/castacks/tartanair_tools","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"paper_slug":"tartanvo-a-generalizable-learning-based-vo","repo_url":"https://github.com/castacks/tartanvo","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":"visual-odometry","task_name":"Visual Odometry"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2011.00359","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2011.00359"}},"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/castacks/tartanvo","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/castacks/tartanair_tools","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"ran_draft_wrong":3,"unverified":20},"by_repo_kind":{"official":{"samples":23,"ran":3,"repositories":2}},"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":0,"samples":[{"code_sha256_prefix":"2d0cae2c772e2af4","entry":"conv","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/PWC/PWCNet.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/PWC/PWCNet.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2d0cae2c772e2af4"}},{"code_sha256_prefix":"dc4fb7628379691e","entry":"deconv","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/PWC/PWCNet.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/PWC/PWCNet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"dc4fb7628379691e"}},{"code_sha256_prefix":"c3f23a008d953af5","entry":"predict_flow","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/PWC/PWCNet.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/PWC/PWCNet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c3f23a008d953af5"}},{"code_sha256_prefix":"731c410a68896921","entry":"align","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_ate_scale.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_ate_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"731c410a68896921"}},{"code_sha256_prefix":"eac7cea00909cdb1","entry":"bilinear_interpolate","repo":"castacks/tartanvo","repo_kind":"official","path":"Datasets/utils.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Datasets/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"eac7cea00909cdb1"}},{"code_sha256_prefix":"2e8164dab6d3aaa3","entry":"calculate_angle_distance_from_du_dv","repo":"castacks/tartanvo","repo_kind":"official","path":"Datasets/utils.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Datasets/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2e8164dab6d3aaa3"}},{"code_sha256_prefix":"3adee239c7da8370","entry":"compute_angle","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_rpe.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_rpe.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"3adee239c7da8370"}},{"code_sha256_prefix":"1f2de08785e4af82","entry":"compute_distance","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_rpe.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_rpe.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1f2de08785e4af82"}},{"code_sha256_prefix":"7f98f965fb7b7664","entry":"conv","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/VOFlowNet.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/VOFlowNet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7f98f965fb7b7664"}},{"code_sha256_prefix":"679ea21d9a01d383","entry":"cupy_kernel","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/PWC/correlation.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/PWC/correlation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"679ea21d9a01d383"}},{"code_sha256_prefix":"2bafbea784f3d986","entry":"get_size","repo":"castacks/tartanair_tools","repo_kind":"official","path":"download_training.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/download_training.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2bafbea784f3d986"}},{"code_sha256_prefix":"6de4f7e0c4739c9c","entry":"last_frame_from_segment_length","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_kitti.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_kitti.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6de4f7e0c4739c9c"}},{"code_sha256_prefix":"7c02f2abdeab429b","entry":"line2mat","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/transformation.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7c02f2abdeab429b"}},{"code_sha256_prefix":"76b6b373246b70ce","entry":"linear","repo":"castacks/tartanvo","repo_kind":"official","path":"Network/VOFlowNet.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Network/VOFlowNet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"76b6b373246b70ce"}},{"code_sha256_prefix":"0f39a0ae95e9c377","entry":"motion2pose","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/transformation.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"0f39a0ae95e9c377"}},{"code_sha256_prefix":"7f8f0e531f9cecda","entry":"motion2pose","repo":"castacks/tartanvo","repo_kind":"official","path":"Datasets/transformation.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Datasets/transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7f8f0e531f9cecda"}},{"code_sha256_prefix":"1b3c8daf237e4c34","entry":"ominus","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_rpe.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_rpe.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1b3c8daf237e4c34"}},{"code_sha256_prefix":"00b41498aff0bef8","entry":"pose2motion","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/transformation.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"00b41498aff0bef8"}},{"code_sha256_prefix":"cd36a7255d76e6ff","entry":"pose2motion","repo":"castacks/tartanvo","repo_kind":"official","path":"Datasets/transformation.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Datasets/transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"cd36a7255d76e6ff"}},{"code_sha256_prefix":"50c7b86684c061ac","entry":"rotation_error","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_kitti.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_kitti.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"50c7b86684c061ac"}},{"code_sha256_prefix":"88f43b983cf1477b","entry":"tensor2img","repo":"castacks/tartanvo","repo_kind":"official","path":"Datasets/utils.py","file_url":"https://github.com/castacks/tartanvo/blob/HEAD/Datasets/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"88f43b983cf1477b"}},{"code_sha256_prefix":"6b22114faf75278d","entry":"trajectory_distances","repo":"castacks/tartanair_tools","repo_kind":"official","path":"evaluation/evaluate_kitti.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/evaluation/evaluate_kitti.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6b22114faf75278d"}},{"code_sha256_prefix":"b0b54d1cf707c54e","entry":"unzip_files","repo":"castacks/tartanair_tools","repo_kind":"official","path":"download_training.py","file_url":"https://github.com/castacks/tartanair_tools/blob/HEAD/download_training.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"b0b54d1cf707c54e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}