{"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/mugs-a-multi-granular-self-supervised","title":"Mugs: A Multi-Granular Self-Supervised Learning Framework","arxiv_id":"2203.14415","date":"2022-03-27","proceeding":null,"authors":["Pan Zhou","Yichen Zhou","Chenyang Si","Weihao Yu","Teck Khim Ng","Shuicheng Yan"],"abstract":"In self-supervised learning, multi-granular features are heavily desired though rarely investigated, as different downstream tasks (e.g., general and fine-grained classification) often require different or multi-granular features, e.g.~fine- or coarse-grained one or their mixture. In this work, for the first time, we propose an effective MUlti-Granular Self-supervised learning (Mugs) framework to explicitly learn multi-granular visual features. Mugs has three complementary granular supervisions: 1) an instance discrimination supervision (IDS), 2) a novel local-group discrimination supervision (LGDS), and 3) a group discrimination supervision (GDS). IDS distinguishes different instances to learn instance-level fine-grained features. LGDS aggregates features of an image and its neighbors into a local-group feature, and pulls local-group features from different crops of the same image together and push them away for others. It provides complementary instance supervision to IDS via an extra alignment on local neighbors, and scatters different local-groups separately to increase discriminability. Accordingly, it helps learn high-level fine-grained features at a local-group level. Finally, to prevent similar local-groups from being scattered randomly or far away, GDS brings similar samples close and thus pulls similar local-groups together, capturing coarse-grained features at a (semantic) group level. Consequently, Mugs can capture three granular features that often enjoy higher generality on diverse downstream tasks over single-granular features, e.g.~instance-level fine-grained features in contrastive learning. By only pretraining on ImageNet-1K, Mugs sets new SoTA linear probing accuracy 82.1$\\%$ on ImageNet-1K and improves previous SoTA by $1.1\\%$. It also surpasses SoTAs on other tasks, e.g. transfer learning, detection and segmentation.","url_abs":"https://arxiv.org/abs/2203.14415v1","url_pdf":"https://arxiv.org/pdf/2203.14415v1.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":"mugs-a-multi-granular-self-supervised","repo_url":"https://github.com/sail-sg/mugs","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"self-supervised-image-classification","task_name":"Self-Supervised Image Classification"},{"task_slug":"self-supervised-learning","task_name":"Self-Supervised Learning"},{"task_slug":"semantic-segmentation","task_name":"Semantic Segmentation"},{"task_slug":"transfer-learning","task_name":"Transfer Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/self-supervised-image-classification-on","task":"Self-Supervised Image Classification","dataset":"ImageNet","model":"Mugs (VIT-L/16)","rank_in_archive_order":13,"of":144,"metrics":{"Number of Params":"307M","Top 1 Accuracy":"82.1%"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on-1","task":"Self-Supervised Image Classification","dataset":"ImageNet (finetuned)","model":"Mugs (ViT-L/16)","rank_in_archive_order":25,"of":65,"metrics":{"Number of Params":"307M","Top 1 Accuracy":"85.2%"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on-1","task":"Self-Supervised Image Classification","dataset":"ImageNet (finetuned)","model":"Mugs (ViT-B/16)","rank_in_archive_order":32,"of":65,"metrics":{"Number of Params":"85M","Top 1 Accuracy":"84.3%"},"uses_additional_data":false},{"leaderboard":"/sota/self-supervised-image-classification-on-1","task":"Self-Supervised Image Classification","dataset":"ImageNet (finetuned)","model":"Mugs (ViT-S/16)","rank_in_archive_order":50,"of":65,"metrics":{"Number of Params":"21M","Top 1 Accuracy":"82.6%"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2203.14415","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2203.14415"}},"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/sail-sg/mugs","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":4,"unverified":17},"by_repo_kind":{"official":{"samples":21,"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":0,"samples":[{"code_sha256_prefix":"c19231378e41dc5a","entry":"bool_flag","repo":"sail-sg/mugs","repo_kind":"official","path":"utils.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c19231378e41dc5a"}},{"code_sha256_prefix":"e866e1196986f728","entry":"shear_x","repo":"sail-sg/mugs","repo_kind":"official","path":"src/RandAugment.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/RandAugment.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e866e1196986f728"}},{"code_sha256_prefix":"7b2503c99c9447fb","entry":"shear_y","repo":"sail-sg/mugs","repo_kind":"official","path":"src/RandAugment.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/RandAugment.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7b2503c99c9447fb"}},{"code_sha256_prefix":"323759f906fbb394","entry":"translate_x_rel","repo":"sail-sg/mugs","repo_kind":"official","path":"src/RandAugment.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/RandAugment.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"323759f906fbb394"}},{"code_sha256_prefix":"961c92c8136b0f58","entry":"build_dataset","repo":"sail-sg/mugs","repo_kind":"official","path":"eval/eval_finetuning/eval_finetuning.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/eval/eval_finetuning/eval_finetuning.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"961c92c8136b0f58"}},{"code_sha256_prefix":"2c33c9d3e647cbf1","entry":"build_transform","repo":"sail-sg/mugs","repo_kind":"official","path":"eval/eval_finetuning/eval_finetuning.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/eval/eval_finetuning/eval_finetuning.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2c33c9d3e647cbf1"}},{"code_sha256_prefix":"3adab9891c1273b6","entry":"clip_gradients","repo":"sail-sg/mugs","repo_kind":"official","path":"src/optimizer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/optimizer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3adab9891c1273b6"}},{"code_sha256_prefix":"73cecca9f3575f09","entry":"concat_all_gather","repo":"sail-sg/mugs","repo_kind":"official","path":"src/model.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"73cecca9f3575f09"}},{"code_sha256_prefix":"990ca4fb0109bfab","entry":"cosine_scheduler","repo":"sail-sg/mugs","repo_kind":"official","path":"src/optimizer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/optimizer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"990ca4fb0109bfab"}},{"code_sha256_prefix":"793f2b6524ba26f0","entry":"drop_path","repo":"sail-sg/mugs","repo_kind":"official","path":"src/vision_transformer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"793f2b6524ba26f0"}},{"code_sha256_prefix":"e8a374d2601aaaa9","entry":"find_classes","repo":"sail-sg/mugs","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/dataset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e8a374d2601aaaa9"}},{"code_sha256_prefix":"67bc6a24e6bba540","entry":"get_logger","repo":"sail-sg/mugs","repo_kind":"official","path":"utils.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"67bc6a24e6bba540"}},{"code_sha256_prefix":"29416043c7035e7c","entry":"get_loss_scale_for_deepspeed","repo":"sail-sg/mugs","repo_kind":"official","path":"eval/eval_finetuning/engine_for_finetuning.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/eval/eval_finetuning/engine_for_finetuning.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"29416043c7035e7c"}},{"code_sha256_prefix":"7a2ce97fc746d0ce","entry":"get_params_groups","repo":"sail-sg/mugs","repo_kind":"official","path":"src/optimizer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/optimizer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7a2ce97fc746d0ce"}},{"code_sha256_prefix":"a45ecd9b366b453e","entry":"get_sinusoid_encoding_table","repo":"sail-sg/mugs","repo_kind":"official","path":"eval/eval_finetuning/model_for_finetuning.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/eval/eval_finetuning/model_for_finetuning.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a45ecd9b366b453e"}},{"code_sha256_prefix":"a35723fa2858c406","entry":"has_batchnorms","repo":"sail-sg/mugs","repo_kind":"official","path":"utils.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a35723fa2858c406"}},{"code_sha256_prefix":"826e35844a00b3a3","entry":"has_file_allowed_extension","repo":"sail-sg/mugs","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/dataset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"826e35844a00b3a3"}},{"code_sha256_prefix":"75aa69b9b8b80e72","entry":"is_image_file","repo":"sail-sg/mugs","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/dataset.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"75aa69b9b8b80e72"}},{"code_sha256_prefix":"c7976ea27edc377a","entry":"train_class_batch","repo":"sail-sg/mugs","repo_kind":"official","path":"eval/eval_finetuning/engine_for_finetuning.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/eval/eval_finetuning/engine_for_finetuning.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c7976ea27edc377a"}},{"code_sha256_prefix":"e6d9582234fb26e6","entry":"trunc_normal_","repo":"sail-sg/mugs","repo_kind":"official","path":"src/vision_transformer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e6d9582234fb26e6"}},{"code_sha256_prefix":"f5479cb822d15445","entry":"vit_tiny","repo":"sail-sg/mugs","repo_kind":"official","path":"src/vision_transformer.py","file_url":"https://github.com/sail-sg/mugs/blob/HEAD/src/vision_transformer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f5479cb822d15445"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}