{"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/arxiv-2601-18222","title":"HomoFM: Deep Homography Estimation with Flow Matching","arxiv_id":"2601.18222","date":"2026-01-26","proceeding":null,"authors":["Mengfan He","Liangzheng Sun","Chunyu Li","Ziyang Meng"],"abstract":"Deep homography estimation has broad applications in computer vision and robotics. Remarkable progresses have been achieved while the existing methods typically treat it as a direct regression or iterative refinement problem and often struggling to capture complex geometric transformations or generalize across different domains. In this work, we propose HomoFM, a new framework that introduces the flow matching technique from generative modeling into the homography estimation task for the first time. Unlike the existing methods, we formulate homography estimation problem as a velocity field learning problem. By modeling a continuous and point-wise velocity field that transforms noisy distributions into registered coordinates, the proposed network recovers high-precision transformations through a conditional flow trajectory. Furthermore, to address the challenge of domain shifts issue, e.g., the cases of multimodal matching or varying illumination scenarios, we integrate a gradient reversal layer (GRL) into the feature extraction backbone. This domain adaptation strategy explicitly constrains the encoder to learn domain-invariant representations, significantly enhancing the network's robustness. Extensive experiments demonstrate the effectiveness of the proposed method, showing that HomoFM outperforms state-of-the-art methods in both estimation accuracy and robustness on standard benchmarks. Code and data resource are available at https://github.com/hmf21/HomoFM.","url_abs":"https://arxiv.org/abs/2601.18222","url_pdf":"https://arxiv.org/pdf/2601.18222","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2601.18222","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2601.18222"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/hmf21/HomoFM","reach":null}],"summary":{"ran_violates":2,"unverified":6},"by_repo_kind":{"found_in_text":{"samples":8,"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":8,"samples":[{"code_sha256_prefix":"b8e95809ca2c17c9","entry":"sigmoid","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"model/depthfm.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/model/depthfm.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":2,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b8e95809ca2c17c9"}},{"code_sha256_prefix":"aa5486a3650902d8","entry":"exists","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"model/depthfm.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/model/depthfm.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"aa5486a3650902d8"}},{"code_sha256_prefix":"b04b32c6a45e63eb","entry":"auc","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"estimation.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/estimation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b04b32c6a45e63eb"}},{"code_sha256_prefix":"681d9663ebfb2791","entry":"convert_coordinates","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"estimation.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/estimation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"681d9663ebfb2791"}},{"code_sha256_prefix":"25639460ed14a327","entry":"cosine_log_snr","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"model/depthfm.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/model/depthfm.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"25639460ed14a327"}},{"code_sha256_prefix":"c1c8c384b3104d23","entry":"get_gt_warp_homography","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"losses/robust_loss.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/losses/robust_loss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c1c8c384b3104d23"}},{"code_sha256_prefix":"697531742d8cff62","entry":"grad_reverse","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"model/CANN_GRL.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/model/CANN_GRL.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"697531742d8cff62"}},{"code_sha256_prefix":"d743926d4be6b797","entry":"vis_warp_img_tensor","repo":"hmf21/HomoFM","repo_kind":"found_in_text","path":"estimation.py","file_url":"https://github.com/hmf21/HomoFM/blob/HEAD/estimation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d743926d4be6b797"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CV","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}