{"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/selfreg-self-supervised-contrastive","title":"SelfReg: Self-supervised Contrastive Regularization for Domain Generalization","arxiv_id":"2104.09841","date":"2021-04-20","proceeding":"ICCV 2021 10","authors":["Daehee Kim","Seunghyun Park","Jinkyu Kim","Jaekoo Lee"],"abstract":"In general, an experimental environment for deep learning assumes that the training and the test dataset are sampled from the same distribution. However, in real-world situations, a difference in the distribution between two datasets, domain shift, may occur, which becomes a major factor impeding the generalization performance of the model. The research field to solve this problem is called domain generalization, and it alleviates the domain shift problem by extracting domain-invariant features explicitly or implicitly. In recent studies, contrastive learning-based domain generalization approaches have been proposed and achieved high performance. These approaches require sampling of the negative data pair. However, the performance of contrastive learning fundamentally depends on quality and quantity of negative data pairs. To address this issue, we propose a new regularization method for domain generalization based on contrastive learning, self-supervised contrastive regularization (SelfReg). The proposed approach use only positive data pairs, thus it resolves various problems caused by negative pair sampling. Moreover, we propose a class-specific domain perturbation layer (CDPL), which makes it possible to effectively apply mixup augmentation even when only positive data pairs are used. The experimental results show that the techniques incorporated by SelfReg contributed to the performance in a compatible manner. In the recent benchmark, DomainBed, the proposed method shows comparable performance to the conventional state-of-the-art alternatives. Codes are available at https://github.com/dnap512/SelfReg.","url_abs":"https://arxiv.org/abs/2104.09841v1","url_pdf":"https://arxiv.org/pdf/2104.09841v1.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":"selfreg-self-supervised-contrastive","repo_url":"https://github.com/dnap512/SelfReg","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"selfreg-self-supervised-contrastive","repo_url":"https://github.com/facebookresearch/DomainBed","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"domain-generalization","task_name":"Domain Generalization"},{"task_slug":"image-to-sketch-recognition","task_name":"Image to sketch recognition"},{"task_slug":"single-source-domain-generalization","task_name":"Single-Source Domain Generalization"}],"methods":[{"method_slug":"contrastive-learning","method_name":"Contrastive Learning"},{"method_slug":"mixup","method_name":"Mixup"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/domain-generalization-on-pacs-2","task":"Domain Generalization","dataset":"PACS","model":"SelfReg (Resnet-50)","rank_in_archive_order":67,"of":133,"metrics":{"Average Accuracy":"83.62"},"uses_additional_data":false},{"leaderboard":"/sota/image-to-sketch-recognition-on-pacs","task":"Image to sketch recognition","dataset":"PACS","model":"SelfReg (ResNet18)","rank_in_archive_order":7,"of":7,"metrics":{"Accuracy":"33.71"},"uses_additional_data":false},{"leaderboard":"/sota/single-source-domain-generalization-on-pacs","task":"Single-Source Domain Generalization","dataset":"PACS","model":"SelfReg (ResNet18)","rank_in_archive_order":10,"of":10,"metrics":{"Accuracy":"59.59"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2104.09841","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2104.09841"}},"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/facebookresearch/DomainBed","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/dnap512/SelfReg","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":2,"unverified":5},"by_repo_kind":{"official":{"samples":7,"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":0,"samples":[{"code_sha256_prefix":"d9def42110729a85","entry":"conv1x1","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/model/resnet18_selfreg.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/model/resnet18_selfreg.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":"d9def42110729a85"}},{"code_sha256_prefix":"160bb14bd76201b4","entry":"conv3x3","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/model/resnet18_selfreg.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/model/resnet18_selfreg.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":"160bb14bd76201b4"}},{"code_sha256_prefix":"b0bc80b1655a6802","entry":"get_algorithm_class","repo":"dnap512/SelfReg","repo_kind":"official","path":"domainbed_code/algorithms.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/domainbed_code/algorithms.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":"b0bc80b1655a6802"}},{"code_sha256_prefix":"ba4c0d8c4c8b0a3a","entry":"resnet18","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/model/resnet18_selfreg.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/model/resnet18_selfreg.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":"ba4c0d8c4c8b0a3a"}},{"code_sha256_prefix":"05fbe0e8c174ccb2","entry":"save_route","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/utils.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/utils.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":"05fbe0e8c174ccb2"}},{"code_sha256_prefix":"ec8fc897d0ae3ed2","entry":"test","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/utils.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/utils.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":"ec8fc897d0ae3ed2"}},{"code_sha256_prefix":"7da8bd516ea288eb","entry":"train","repo":"dnap512/SelfReg","repo_kind":"official","path":"codes/utils.py","file_url":"https://github.com/dnap512/SelfReg/blob/HEAD/codes/utils.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":"7da8bd516ea288eb"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}