{"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/a-self-supervised-descriptor-for-image-copy","title":"A Self-Supervised Descriptor for Image Copy Detection","arxiv_id":"2202.10261","date":"2022-02-21","proceeding":"CVPR 2022 1","authors":["Ed Pizzi","Sreya Dutta Roy","Sugosh Nagavara Ravindra","Priya Goyal","Matthijs Douze"],"abstract":"Image copy detection is an important task for content moderation. We introduce SSCD, a model that builds on a recent self-supervised contrastive training objective. We adapt this method to the copy detection task by changing the architecture and training objective, including a pooling operator from the instance matching literature, and adapting contrastive learning to augmentations that combine images. Our approach relies on an entropy regularization term, promoting consistent separation between descriptor vectors, and we demonstrate that this significantly improves copy detection accuracy. Our method produces a compact descriptor vector, suitable for real-world web scale applications. Statistical information from a background image distribution can be incorporated into the descriptor. On the recent DISC2021 benchmark, SSCD is shown to outperform both baseline copy detection models and self-supervised architectures designed for image classification by huge margins, in all settings. For example, SSCD out-performs SimCLR descriptors by 48% absolute. Code is available at https://github.com/facebookresearch/sscd-copy-detection.","url_abs":"https://arxiv.org/abs/2202.10261v2","url_pdf":"https://arxiv.org/pdf/2202.10261v2.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":"a-self-supervised-descriptor-for-image-copy","repo_url":"https://github.com/facebookresearch/sscd-copy-detection","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"a-self-supervised-descriptor-for-image-copy","repo_url":"https://github.com/claserken/SISS","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":"copy-detection","task_name":"Copy Detection"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"image-classification","task_name":"image-classification"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"bottleneck-residual-block","method_name":"Bottleneck Residual Block"},{"method_slug":"colorjitter","method_name":"ColorJitter"},{"method_slug":"contrastive-learning","method_name":"Contrastive Learning"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"entropy-regularization","method_name":"Entropy Regularization"},{"method_slug":"feedforward-network","method_name":"Feedforward Network"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"nt-xent","method_name":"NT-Xent"},{"method_slug":"random-gaussian-blur","method_name":"Random Gaussian Blur"},{"method_slug":"random-resized-crop","method_name":"Random Resized Crop"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"residual-block","method_name":"Residual Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"simclr","method_name":"SimCLR"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2202.10261","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2202.10261"}},"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/sscd-copy-detection","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/claserken/SISS","reach":null}],"summary":{"unverified":9},"by_repo_kind":{"official":{"samples":9,"ran":0,"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":9,"samples":[{"code_sha256_prefix":"2f540d9f03c030f7","entry":"blocks_from_directories","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/datasets/copydays.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/datasets/copydays.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":false,"mcp_get_code":{"code_sha256":"2f540d9f03c030f7"}},{"code_sha256_prefix":"cf395356094aa302","entry":"call_using_args","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/lib/util.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/lib/util.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":false,"mcp_get_code":{"code_sha256":"cf395356094aa302"}},{"code_sha256_prefix":"6a76269cf741376b","entry":"coalesce_outputs","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/lib/inference.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/lib/inference.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":false,"mcp_get_code":{"code_sha256":"6a76269cf741376b"}},{"code_sha256_prefix":"9dc49fcf121100bb","entry":"dataset_split","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/disc_eval.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/disc_eval.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":false,"mcp_get_code":{"code_sha256":"9dc49fcf121100bb"}},{"code_sha256_prefix":"5f38bf55430d5065","entry":"get_codecs","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/disc_eval.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/disc_eval.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":false,"mcp_get_code":{"code_sha256":"5f38bf55430d5065"}},{"code_sha256_prefix":"22815c23b0f2a541","entry":"is_l2_normalized","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/disc_eval.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/disc_eval.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":false,"mcp_get_code":{"code_sha256":"22815c23b0f2a541"}},{"code_sha256_prefix":"b78a605710379f86","entry":"parse_bool","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/lib/util.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/lib/util.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":false,"mcp_get_code":{"code_sha256":"b78a605710379f86"}},{"code_sha256_prefix":"25e5e19c61be203b","entry":"score_ap_from_ranks_1","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/datasets/copydays.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/datasets/copydays.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":false,"mcp_get_code":{"code_sha256":"25e5e19c61be203b"}},{"code_sha256_prefix":"9d2777b83a097bde","entry":"score_macro_AP","repo":"facebookresearch/sscd-copy-detection","repo_kind":"official","path":"sscd/datasets/copydays.py","file_url":"https://github.com/facebookresearch/sscd-copy-detection/blob/HEAD/sscd/datasets/copydays.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":false,"mcp_get_code":{"code_sha256":"9d2777b83a097bde"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}