{"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/rethinking-multiple-instance-learning-for","title":"Rethinking Multiple Instance Learning for Whole Slide Image Classification: A Good Instance Classifier is All You Need","arxiv_id":"2307.02249","date":"2023-07-05","proceeding":null,"authors":["Linhao Qu","Yingfan Ma","Xiaoyuan Luo","Manning Wang","Zhijian Song"],"abstract":"Weakly supervised whole slide image classification is usually formulated as a multiple instance learning (MIL) problem, where each slide is treated as a bag, and the patches cut out of it are treated as instances. Existing methods either train an instance classifier through pseudo-labeling or aggregate instance features into a bag feature through attention mechanisms and then train a bag classifier, where the attention scores can be used for instance-level classification. However, the pseudo instance labels constructed by the former usually contain a lot of noise, and the attention scores constructed by the latter are not accurate enough, both of which affect their performance. In this paper, we propose an instance-level MIL framework based on contrastive learning and prototype learning to effectively accomplish both instance classification and bag classification tasks. To this end, we propose an instance-level weakly supervised contrastive learning algorithm for the first time under the MIL setting to effectively learn instance feature representation. We also propose an accurate pseudo label generation method through prototype learning. We then develop a joint training strategy for weakly supervised contrastive learning, prototype learning, and instance classifier training. Extensive experiments and visualizations on four datasets demonstrate the powerful performance of our method. Codes are available at https://github.com/miccaiif/INS.","url_abs":"https://arxiv.org/abs/2307.02249v2","url_pdf":"https://arxiv.org/pdf/2307.02249v2.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":"rethinking-multiple-instance-learning-for","repo_url":"https://github.com/miccaiif/ins","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"all","task_name":"All"},{"task_slug":"classification-1","task_name":"Classification"},{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"multiple-instance-learning","task_name":"Multiple Instance Learning"},{"task_slug":"pseudo-label","task_name":"Pseudo Label"},{"task_slug":"image-classification","task_name":"image-classification"}],"methods":[{"method_slug":"contrastive-learning","method_name":"Contrastive Learning"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2307.02249","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2307.02249"}},"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/miccaiif/ins","reach":{"status":"ok"}}],"summary":{"ran":5,"unverified":12},"by_repo_kind":{"official":{"samples":17,"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":17,"samples":[{"code_sha256_prefix":"1352df0a3319e2e7","entry":"alexnet","repo":"miccaiif/ins","repo_kind":"official","path":"alexnet.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/alexnet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1352df0a3319e2e7"}},{"code_sha256_prefix":"76bb126e7ce54fba","entry":"alexnet_MNIST","repo":"miccaiif/ins","repo_kind":"official","path":"alexnet.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/alexnet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"76bb126e7ce54fba"}},{"code_sha256_prefix":"71a8b60d245a6336","entry":"make_layers_features","repo":"miccaiif/ins","repo_kind":"official","path":"alexnet.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/alexnet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"71a8b60d245a6336"}},{"code_sha256_prefix":"1bc388dac6546418","entry":"statistics_slide","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_CAMELYON16.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_CAMELYON16.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1bc388dac6546418"}},{"code_sha256_prefix":"3b052dcd80b3f5f9","entry":"statistics_slide","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_CAMELYON16_BasedOnFeat.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_CAMELYON16_BasedOnFeat.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3b052dcd80b3f5f9"}},{"code_sha256_prefix":"73cecca9f3575f09","entry":"concat_all_gather","repo":"miccaiif/ins","repo_kind":"official","path":"model.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"73cecca9f3575f09"}},{"code_sha256_prefix":"bc432178498c4982","entry":"get_bag_feats","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_TCGA_LungCancer_return_bag.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_TCGA_LungCancer_return_bag.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bc432178498c4982"}},{"code_sha256_prefix":"545d4742a1782d41","entry":"load_CAM16_end","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_CAMELYON16.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_CAMELYON16.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"545d4742a1782d41"}},{"code_sha256_prefix":"f605004df6273833","entry":"load_CIFAR10","repo":"miccaiif/ins","repo_kind":"official","path":"cifarm_pos_neg_bag.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/cifarm_pos_neg_bag.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f605004df6273833"}},{"code_sha256_prefix":"bf2f2ad10d09da4c","entry":"load_CIFAR_batch","repo":"miccaiif/ins","repo_kind":"official","path":"cifarm_pos_neg_bag.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/cifarm_pos_neg_bag.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bf2f2ad10d09da4c"}},{"code_sha256_prefix":"b366ddb5e4b6bf5f","entry":"load_TCGA","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_TCGA_LungCancer_return_bag.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_TCGA_LungCancer_return_bag.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b366ddb5e4b6bf5f"}},{"code_sha256_prefix":"074a5d6638b10ac9","entry":"load_cam16_mil","repo":"miccaiif/ins","repo_kind":"official","path":"dataset_CAMELYON16_BasedOnFeat.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/dataset_CAMELYON16_BasedOnFeat.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"074a5d6638b10ac9"}},{"code_sha256_prefix":"c0233f1d95c36390","entry":"load_pickle","repo":"miccaiif/ins","repo_kind":"official","path":"cifarm_pos_neg_bag.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/cifarm_pos_neg_bag.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c0233f1d95c36390"}},{"code_sha256_prefix":"b0d0cf6761cd2020","entry":"t_SNE_vis","repo":"miccaiif/ins","repo_kind":"official","path":"compare_feats.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/compare_feats.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b0d0cf6761cd2020"}},{"code_sha256_prefix":"66b9367750d8eecd","entry":"test","repo":"miccaiif/ins","repo_kind":"official","path":"train_bag_TCGA.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/train_bag_TCGA.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"66b9367750d8eecd"}},{"code_sha256_prefix":"35c1fe27f6550518","entry":"test","repo":"miccaiif/ins","repo_kind":"official","path":"train_onlybag_feat_by_bagcls.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/train_onlybag_feat_by_bagcls.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"35c1fe27f6550518"}},{"code_sha256_prefix":"1da7ac9a76ad965f","entry":"test","repo":"miccaiif/ins","repo_kind":"official","path":"train_onlybag_feat_by_bagcls_KI.py","file_url":"https://github.com/miccaiif/ins/blob/HEAD/train_onlybag_feat_by_bagcls_KI.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1da7ac9a76ad965f"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}