{"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/suppress-and-rebalance-towards-generalized","title":"Suppress and Rebalance: Towards Generalized Multi-Modal Face Anti-Spoofing","arxiv_id":"2402.19298","date":"2024-02-29","proceeding":"CVPR 2024 1","authors":["Xun Lin","Shuai Wang","Rizhao Cai","Yizhong Liu","Ying Fu","Zitong Yu","Wenzhong Tang","Alex Kot"],"abstract":"Face Anti-Spoofing (FAS) is crucial for securing face recognition systems against presentation attacks. With advancements in sensor manufacture and multi-modal learning techniques, many multi-modal FAS approaches have emerged. However, they face challenges in generalizing to unseen attacks and deployment conditions. These challenges arise from (1) modality unreliability, where some modality sensors like depth and infrared undergo significant domain shifts in varying environments, leading to the spread of unreliable information during cross-modal feature fusion, and (2) modality imbalance, where training overly relies on a dominant modality hinders the convergence of others, reducing effectiveness against attack types that are indistinguishable sorely using the dominant modality. To address modality unreliability, we propose the Uncertainty-Guided Cross-Adapter (U-Adapter) to recognize unreliably detected regions within each modality and suppress the impact of unreliable regions on other modalities. For modality imbalance, we propose a Rebalanced Modality Gradient Modulation (ReGrad) strategy to rebalance the convergence speed of all modalities by adaptively adjusting their gradients. Besides, we provide the first large-scale benchmark for evaluating multi-modal FAS performance under domain generalization scenarios. Extensive experiments demonstrate that our method outperforms state-of-the-art methods. Source code and protocols will be released on https://github.com/OMGGGGG/mmdg.","url_abs":"https://arxiv.org/abs/2402.19298v2","url_pdf":"https://arxiv.org/pdf/2402.19298v2.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":"suppress-and-rebalance-towards-generalized","repo_url":"https://github.com/omggggg/mmdg","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}},{"paper_slug":"suppress-and-rebalance-towards-generalized","repo_url":"https://github.com/olgi9911/MMDG","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"domain-generalization","task_name":"Domain Generalization"},{"task_slug":"face-anti-spoofing","task_name":"Face Anti-Spoofing"},{"task_slug":"face-recognition","task_name":"Face Recognition"}],"methods":[{"method_slug":"speed","method_name":"SPEED"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2402.19298","atlas_url":"https://app.syntology.ai/?focus=2402.19298","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2402.19298"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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":"deterministic:regex_extraction","url":"https://github.com/OMGGGGG/mmdg","reach":{"status":"ok"}}],"summary":{"ran":4,"unverified":1},"by_repo_kind":{"official":{"samples":5,"ran":4,"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":5,"samples":[{"code_sha256_prefix":"59759632e344f30f","entry":"EU_dist","repo":"OMGGGGG/mmdg","repo_kind":"official","path":"models/regrad.py","file_url":"https://github.com/OMGGGGG/mmdg/blob/HEAD/models/regrad.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"59759632e344f30f"}},{"code_sha256_prefix":"3d5ad154cdc3c5ac","entry":"cal_uncertainty","repo":"OMGGGGG/mmdg","repo_kind":"official","path":"models/u_adapter.py","file_url":"https://github.com/OMGGGGG/mmdg/blob/HEAD/models/u_adapter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3d5ad154cdc3c5ac"}},{"code_sha256_prefix":"b342950be8b742e6","entry":"forward_model","repo":"OMGGGGG/mmdg","repo_kind":"official","path":"utils/common_util.py","file_url":"https://github.com/OMGGGGG/mmdg/blob/HEAD/utils/common_util.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b342950be8b742e6"}},{"code_sha256_prefix":"794249d6d669af7a","entry":"get_layer_id","repo":"OMGGGGG/mmdg","repo_kind":"official","path":"models/regrad.py","file_url":"https://github.com/OMGGGGG/mmdg/blob/HEAD/models/regrad.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"794249d6d669af7a"}},{"code_sha256_prefix":"1106e20f4d0efefa","entry":"forward_model_with_domain","repo":"OMGGGGG/mmdg","repo_kind":"official","path":"utils/common_util.py","file_url":"https://github.com/OMGGGGG/mmdg/blob/HEAD/utils/common_util.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":"1106e20f4d0efefa"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}