{"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/curricularface-adaptive-curriculum-learning","title":"CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition","arxiv_id":"2004.00288","date":"2020-04-01","proceeding":"CVPR 2020 6","authors":["Yuge Huang","YuHan Wang","Ying Tai","Xiaoming Liu","Pengcheng Shen","Shaoxin Li","Jilin Li","Feiyue Huang"],"abstract":"As an emerging topic in face recognition, designing margin-based loss functions can increase the feature margin between different classes for enhanced discriminability. More recently, the idea of mining-based strategies is adopted to emphasize the misclassified samples, achieving promising results. However, during the entire training process, the prior methods either do not explicitly emphasize the sample based on its importance that renders the hard samples not fully exploited; or explicitly emphasize the effects of semi-hard/hard samples even at the early training stage that may lead to convergence issue. In this work, we propose a novel Adaptive Curriculum Learning loss (CurricularFace) that embeds the idea of curriculum learning into the loss function to achieve a novel training strategy for deep face recognition, which mainly addresses easy samples in the early training stage and hard ones in the later stage. Specifically, our CurricularFace adaptively adjusts the relative importance of easy and hard samples during different training stages. In each stage, different samples are assigned with different importance according to their corresponding difficultness. Extensive experimental results on popular benchmarks demonstrate the superiority of our CurricularFace over the state-of-the-art competitors.","url_abs":"https://arxiv.org/abs/2004.00288v1","url_pdf":"https://arxiv.org/pdf/2004.00288v1.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":"curricularface-adaptive-curriculum-learning","repo_url":"https://github.com/HuangYG123/CurricularFace","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"curricularface-adaptive-curriculum-learning","repo_url":"https://github.com/RocketFlash/easy_metric_learning/tree/master/tools","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"face-recognition","task_name":"Face Recognition"},{"task_slug":"face-verification","task_name":"Face Verification"}],"methods":[{"method_slug":"curricularface","method_name":"CurricularFace"}],"datasets_introduced":[],"methods_introduced":[{"slug":"curricularface","name":"CurricularFace","full_name":"CurricularFace"}],"results":[{"leaderboard":"/sota/face-verification-on-ijb-c","task":"Face Verification","dataset":"IJB-C","model":"CurricularFace","rank_in_archive_order":21,"of":26,"metrics":{"TAR @ FAR=1e-4":"96.1%"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2004.00288","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.00288"}},"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/HuangYG123/CurricularFace","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/RocketFlash/easy_metric_learning/tree/master/tools","reach":null}],"summary":{"ran_honours":2,"ran_fixture":1,"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":"f975336b5d5f1a80","entry":"calculate_accuracy","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/verification.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/verification.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f975336b5d5f1a80"}},{"code_sha256_prefix":"f67f5f081381cc8a","entry":"calculate_val","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/verification.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/verification.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f67f5f081381cc8a"}},{"code_sha256_prefix":"ad5dbf57f3ea2633","entry":"get_block","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_irse.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_irse.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ad5dbf57f3ea2633"}},{"code_sha256_prefix":"ea7941eb1ea8ffb2","entry":"get_blocks","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_irse.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_irse.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":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ea7941eb1ea8ffb2"}},{"code_sha256_prefix":"c54fea429589425d","entry":"l2_norm","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_irse.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_irse.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c54fea429589425d"}},{"code_sha256_prefix":"c386cdbee6b83849","entry":"ROC","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/metrics.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/metrics.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":"c386cdbee6b83849"}},{"code_sha256_prefix":"71fd1b339eccf3b5","entry":"ROC_by_mat","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/metrics.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/metrics.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":"71fd1b339eccf3b5"}},{"code_sha256_prefix":"de52f82c3df44b76","entry":"ResNet_50","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_resnet.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_resnet.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":"de52f82c3df44b76"}},{"code_sha256_prefix":"5f5160da896b0198","entry":"calculate_roc","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/verification.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/verification.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":"5f5160da896b0198"}},{"code_sha256_prefix":"bfd3aee914279f48","entry":"conv1x1","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_resnet.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_resnet.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":"bfd3aee914279f48"}},{"code_sha256_prefix":"999e0ea90670a179","entry":"conv3x3","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"backbone/model_resnet.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/backbone/model_resnet.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":"999e0ea90670a179"}},{"code_sha256_prefix":"ffdd627e5c14a111","entry":"find_thresholds_by_FAR","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"util/metrics.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/util/metrics.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":"ffdd627e5c14a111"}},{"code_sha256_prefix":"ea06a508974b1a38","entry":"read_samples_from_record","repo":"HuangYG123/CurricularFace","repo_kind":"official","path":"dataset/datasets.py","file_url":"https://github.com/HuangYG123/CurricularFace/blob/HEAD/dataset/datasets.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":"ea06a508974b1a38"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}