{"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/when-epipolar-constraint-meets-non-local-1","title":"When Epipolar Constraint Meets Non-local Operators in Multi-View Stereo","arxiv_id":"2309.17218","date":"2023-09-29","proceeding":"ICCV 2023 1","authors":["Tianqi Liu","Xinyi Ye","Weiyue Zhao","Zhiyu Pan","Min Shi","Zhiguo Cao"],"abstract":"Learning-based multi-view stereo (MVS) method heavily relies on feature matching, which requires distinctive and descriptive representations. An effective solution is to apply non-local feature aggregation, e.g., Transformer. Albeit useful, these techniques introduce heavy computation overheads for MVS. Each pixel densely attends to the whole image. In contrast, we propose to constrain non-local feature augmentation within a pair of lines: each point only attends the corresponding pair of epipolar lines. Our idea takes inspiration from the classic epipolar geometry, which shows that one point with different depth hypotheses will be projected to the epipolar line on the other view. This constraint reduces the 2D search space into the epipolar line in stereo matching. Similarly, this suggests that the matching of MVS is to distinguish a series of points lying on the same line. Inspired by this point-to-line search, we devise a line-to-point non-local augmentation strategy. We first devise an optimized searching algorithm to split the 2D feature maps into epipolar line pairs. Then, an Epipolar Transformer (ET) performs non-local feature augmentation among epipolar line pairs. We incorporate the ET into a learning-based MVS baseline, named ET-MVSNet. ET-MVSNet achieves state-of-the-art reconstruction performance on both the DTU and Tanks-and-Temples benchmark with high efficiency. Code is available at https://github.com/TQTQliu/ET-MVSNet.","url_abs":"https://arxiv.org/abs/2309.17218v1","url_pdf":"https://arxiv.org/pdf/2309.17218v1.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":"when-epipolar-constraint-meets-non-local-1","repo_url":"https://github.com/tqtqliu/et-mvsnet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"3d-reconstruction","task_name":"3D Reconstruction"},{"task_slug":"descriptive","task_name":"Descriptive"},{"task_slug":"point-clouds","task_name":"Point Clouds"},{"task_slug":"stereo-matching-1","task_name":"Stereo Matching"}],"methods":[{"method_slug":"absolute-position-encodings","method_name":"Absolute Position Encodings"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"label-smoothing","method_name":"Label Smoothing"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"position-wise-feed-forward-layer","method_name":"Position-Wise Feed-Forward Layer"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"transformer","method_name":"Transformer"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/3d-reconstruction-on-dtu","task":"3D Reconstruction","dataset":"DTU","model":"ET-MVSNet","rank_in_archive_order":4,"of":24,"metrics":{"Acc":"0.329","Comp":"0.253","Overall":"0.291"},"uses_additional_data":false},{"leaderboard":"/sota/point-clouds-on-tanks-and-temples","task":"Point Clouds","dataset":"Tanks and Temples","model":"ET-MVSNet","rank_in_archive_order":4,"of":21,"metrics":{"Mean F1 (Advanced)":"40.41","Mean F1 (Intermediate)":"65.49"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2309.17218","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2309.17218"}},"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/tqtqliu/et-mvsnet","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/TQTQliu/ET-MVSNet","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":3,"ran_draft_wrong":2,"unverified":8},"by_repo_kind":{"official":{"samples":13,"ran":5,"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":0,"samples":[{"code_sha256_prefix":"9c73a828f8730bcc","entry":"MVS4net_loss","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/MVS4Net.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/MVS4Net.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9c73a828f8730bcc"}},{"code_sha256_prefix":"9dc0b1027a30eb55","entry":"init_inverse_range","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/module.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/module.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9dc0b1027a30eb55"}},{"code_sha256_prefix":"c72a4a2293997c31","entry":"init_range","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/module.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/module.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c72a4a2293997c31"}},{"code_sha256_prefix":"a76fc7fb6958f97c","entry":"make_nograd_func","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"utils.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a76fc7fb6958f97c"}},{"code_sha256_prefix":"b62bec09ceeaca79","entry":"make_recursive_func","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"utils.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b62bec09ceeaca79"}},{"code_sha256_prefix":"46e1be8739ffd15e","entry":"Blend_loss","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/MVS4Net.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/MVS4Net.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"46e1be8739ffd15e"}},{"code_sha256_prefix":"683e0541c1d070c8","entry":"MVS4net","repo":"TQTQliu/ET-MVSNet","repo_kind":"official","path":"models/MVS4Net.py","file_url":"https://github.com/TQTQliu/ET-MVSNet/blob/HEAD/models/MVS4Net.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"683e0541c1d070c8"}},{"code_sha256_prefix":"41f59aee24980c21","entry":"cross_entropy_loss","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/MVS4Net.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/MVS4Net.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"41f59aee24980c21"}},{"code_sha256_prefix":"2433e10d0340ac47","entry":"homo_warping","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"models/module.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/models/module.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2433e10d0340ac47"}},{"code_sha256_prefix":"6b687b02c05fe850","entry":"read_pfm","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"datasets/data_io.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/datasets/data_io.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6b687b02c05fe850"}},{"code_sha256_prefix":"8e28f96374f1b285","entry":"tensor2float","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"utils.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8e28f96374f1b285"}},{"code_sha256_prefix":"acee5a023ac9e377","entry":"train_sample","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"train_bld.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/train_bld.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"acee5a023ac9e377"}},{"code_sha256_prefix":"b6e60e102b3e750e","entry":"train_sample","repo":"tqtqliu/et-mvsnet","repo_kind":"official","path":"train_dtu.py","file_url":"https://github.com/tqtqliu/et-mvsnet/blob/HEAD/train_dtu.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b6e60e102b3e750e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}