{"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/self-labelling-via-simultaneous-clustering-1","title":"Self-labelling via simultaneous clustering and representation learning","arxiv_id":"1911.05371","date":"2019-11-13","proceeding":"ICLR 2020 1","authors":["Yuki Markus Asano","Christian Rupprecht","Andrea Vedaldi"],"abstract":"Combining clustering and representation learning is one of the most promising approaches for unsupervised learning of deep neural networks. However, doing so naively leads to ill posed learning problems with degenerate solutions. In this paper, we propose a novel and principled learning formulation that addresses these issues. The method is obtained by maximizing the information between labels and input data indices. We show that this criterion extends standard crossentropy minimization to an optimal transport problem, which we solve efficiently for millions of input images and thousands of labels using a fast variant of the Sinkhorn-Knopp algorithm. The resulting method is able to self-label visual data so as to train highly competitive image representations without manual labels. Our method achieves state of the art representation learning performance for AlexNet and ResNet-50 on SVHN, CIFAR-10, CIFAR-100 and ImageNet and yields the first self-supervised AlexNet that outperforms the supervised Pascal VOC detection baseline. Code and models are available.","url_abs":"https://arxiv.org/abs/1911.05371v3","url_pdf":"https://arxiv.org/pdf/1911.05371v3.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":"self-labelling-via-simultaneous-clustering-1","repo_url":"https://github.com/yukimasano/self-label","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"self-labelling-via-simultaneous-clustering-1","repo_url":"https://github.com/ananyahjha93/swav","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}},{"paper_slug":"self-labelling-via-simultaneous-clustering-1","repo_url":"https://github.com/hsfzxjy/swavx","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"self-labelling-via-simultaneous-clustering-1","repo_url":"https://github.com/mingu6/action_seg_ot","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"self-labelling-via-simultaneous-clustering-1","repo_url":"https://github.com/vinhdv1628/image_classification_task","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"clustering","task_name":"Clustering"},{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"image-clustering","task_name":"Image Clustering"},{"task_slug":"representation-learning","task_name":"Representation Learning"},{"task_slug":"self-supervised-image-classification","task_name":"Self-Supervised Image Classification"},{"task_slug":"self-supervised-learning","task_name":"Self-Supervised Learning"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"grouped-convolution","method_name":"Grouped Convolution"},{"method_slug":"local-response-normalization","method_name":"Local Response Normalization"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"softmax","method_name":"Softmax"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/contrastive-learning-on-imagenet-1k","task":"Contrastive Learning","dataset":"imagenet-1k","model":"ResNet50","rank_in_archive_order":9,"of":14,"metrics":{"ImageNet Top-1 Accuracy":"61.5"},"uses_additional_data":false},{"leaderboard":"/sota/image-clustering-on-imagenet","task":"Image Clustering","dataset":"ImageNet","model":"SeLa","rank_in_archive_order":12,"of":12,"metrics":{"Accuracy":"-","NMI":"66.4"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on","task":"Self-Supervised Image Classification","dataset":"ImageNet","model":"SeLa (ResNet50) (arxiv 3)","rank_in_archive_order":119,"of":144,"metrics":{"Number of Params":"24M","Top 1 Accuracy":"61.5%","Top 5 Accuracy":"84.0%"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on","task":"Self-Supervised Image Classification","dataset":"ImageNet","model":"SeLa (ResNet50)","rank_in_archive_order":129,"of":144,"metrics":{"Number of Params":"24M","Top 1 Accuracy":"55.7%","Top 5 Accuracy":"79.5%"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on","task":"Self-Supervised Image Classification","dataset":"ImageNet","model":"SeLa (AlexNet) (arxiv v3)","rank_in_archive_order":133,"of":144,"metrics":{"Number of Params":"61M","Top 1 Accuracy":"50.0%"},"uses_additional_data":false}],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=1911.05371","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1911.05371"}},"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/vinhdv1628/image_classification_task","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ananyahjha93/swav","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mingu6/action_seg_ot","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/yukimasano/self-label","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/hsfzxjy/swavx","reach":null}],"summary":{"ran_draft_wrong":4,"ran":3,"unverified":11},"by_repo_kind":{"official":{"samples":15,"ran":4,"repositories":1},"listed":{"samples":1,"ran":1,"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":3,"samples":[{"code_sha256_prefix":"d9def42110729a85","entry":"conv1x1","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"d9def42110729a85"}},{"code_sha256_prefix":"160bb14bd76201b4","entry":"conv3x3","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"160bb14bd76201b4"}},{"code_sha256_prefix":"fac5364e2f53c6db","entry":"conv3x3","repo":"yukimasano/self-label","repo_kind":"official","path":"models/resnetv1.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/resnetv1.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":"fac5364e2f53c6db"}},{"code_sha256_prefix":"103cb98c938400f1","entry":"distributed_sinkhorn","repo":"hsfzxjy/swavx","repo_kind":"listed","path":"main_swav.py","file_url":"https://github.com/hsfzxjy/swavx/blob/HEAD/main_swav.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"103cb98c938400f1"}},{"code_sha256_prefix":"5a0beb315ee2d6b3","entry":"get_model_device","repo":"yukimasano/self-label","repo_kind":"official","path":"files.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/files.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5a0beb315ee2d6b3"}},{"code_sha256_prefix":"b073ea484dc3837e","entry":"resnet18","repo":"yukimasano/self-label","repo_kind":"official","path":"models/resnetv1.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/resnetv1.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b073ea484dc3837e"}},{"code_sha256_prefix":"5edd587f0ca09bf9","entry":"resnet34","repo":"yukimasano/self-label","repo_kind":"official","path":"models/resnetv1.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/resnetv1.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5edd587f0ca09bf9"}},{"code_sha256_prefix":"e43df98524d81ee5","entry":"PreActResNet50","repo":"yukimasano/self-label","repo_kind":"official","path":"models/resnetv2.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/resnetv2.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":"e43df98524d81ee5"}},{"code_sha256_prefix":"eab58619dff18322","entry":"alexnet","repo":"yukimasano/self-label","repo_kind":"official","path":"models/alexnet.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/alexnet.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":"eab58619dff18322"}},{"code_sha256_prefix":"3a5443dcfa195e32","entry":"get_aug_dataloader","repo":"yukimasano/self-label","repo_kind":"official","path":"data.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/data.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":"3a5443dcfa195e32"}},{"code_sha256_prefix":"225a04812784e2fd","entry":"get_standard_data_loader","repo":"yukimasano/self-label","repo_kind":"official","path":"data.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/data.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":"225a04812784e2fd"}},{"code_sha256_prefix":"33bc9402815412a2","entry":"gpu_mul_AB","repo":"yukimasano/self-label","repo_kind":"official","path":"multigpu.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/multigpu.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":"33bc9402815412a2"}},{"code_sha256_prefix":"7fea308d010604cb","entry":"gpu_mul_Ax","repo":"yukimasano/self-label","repo_kind":"official","path":"multigpu.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/multigpu.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":"7fea308d010604cb"}},{"code_sha256_prefix":"d7bf5b70dddf2c9d","entry":"kNN","repo":"yukimasano/self-label","repo_kind":"official","path":"cifar_utils.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/cifar_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":"d7bf5b70dddf2c9d"}},{"code_sha256_prefix":"28ef548cecab7d06","entry":"load_checkpoint","repo":"yukimasano/self-label","repo_kind":"official","path":"files.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/files.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":"28ef548cecab7d06"}},{"code_sha256_prefix":"b6f4e798c35df8ff","entry":"load_checkpoint_all","repo":"yukimasano/self-label","repo_kind":"official","path":"files.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/files.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":"b6f4e798c35df8ff"}},{"code_sha256_prefix":"68d8bd2d7e4d0e88","entry":"make_layers_features","repo":"yukimasano/self-label","repo_kind":"official","path":"models/alexnet.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/alexnet.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":"68d8bd2d7e4d0e88"}},{"code_sha256_prefix":"aa7ecec21e8b6217","entry":"resnetv2","repo":"yukimasano/self-label","repo_kind":"official","path":"models/resnetv2.py","file_url":"https://github.com/yukimasano/self-label/blob/HEAD/models/resnetv2.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":"aa7ecec21e8b6217"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}