{"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/active-generalized-category-discovery","title":"Active Generalized Category Discovery","arxiv_id":"2403.04272","date":"2024-03-07","proceeding":"CVPR 2024 1","authors":["Shijie Ma","Fei Zhu","Zhun Zhong","Xu-Yao Zhang","Cheng-Lin Liu"],"abstract":"Generalized Category Discovery (GCD) is a pragmatic and challenging open-world task, which endeavors to cluster unlabeled samples from both novel and old classes, leveraging some labeled data of old classes. Given that knowledge learned from old classes is not fully transferable to new classes, and that novel categories are fully unlabeled, GCD inherently faces intractable problems, including imbalanced classification performance and inconsistent confidence between old and new classes, especially in the low-labeling regime. Hence, some annotations of new classes are deemed necessary. However, labeling new classes is extremely costly. To address this issue, we take the spirit of active learning and propose a new setting called Active Generalized Category Discovery (AGCD). The goal is to improve the performance of GCD by actively selecting a limited amount of valuable samples for labeling from the oracle. To solve this problem, we devise an adaptive sampling strategy, which jointly considers novelty, informativeness and diversity to adaptively select novel samples with proper uncertainty. However, owing to the varied orderings of label indices caused by the clustering of novel classes, the queried labels are not directly applicable to subsequent training. To overcome this issue, we further propose a stable label mapping algorithm that transforms ground truth labels to the label space of the classifier, thereby ensuring consistent training across different active selection stages. Our method achieves state-of-the-art performance on both generic and fine-grained datasets. Our code is available at https://github.com/mashijie1028/ActiveGCD","url_abs":"https://arxiv.org/abs/2403.04272v1","url_pdf":"https://arxiv.org/pdf/2403.04272v1.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":"active-generalized-category-discovery","repo_url":"https://github.com/mashijie1028/activegcd","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"active-learning","task_name":"Active Learning"},{"task_slug":"informativeness","task_name":"Informativeness"},{"task_slug":"imbalanced-classification","task_name":"imbalanced classification"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2403.04272","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2403.04272"}},"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/mashijie1028/activegcd","reach":null}],"summary":{"ran":3,"ran_draft_wrong":1,"ran_fixture":2,"unverified":3},"by_repo_kind":{"official":{"samples":9,"ran":6,"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":"300b0f6e28f50218","entry":"SupConLoss","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.py","link_basis":"first_harvest_node","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":"300b0f6e28f50218"}},{"code_sha256_prefix":"20a7085020118ffa","entry":"get_labeled_mapping","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.py","link_basis":"first_harvest_node","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":"20a7085020118ffa"}},{"code_sha256_prefix":"bb888e18889d0163","entry":"log_accs_from_preds","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.py","link_basis":"first_harvest_node","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":"bb888e18889d0163"}},{"code_sha256_prefix":"ec7d8c7bbd17eaa8","entry":"map_labels","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.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":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ec7d8c7bbd17eaa8"}},{"code_sha256_prefix":"21b51b923477b0ce","entry":"split_cluster_acc_v2","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"21b51b923477b0ce"}},{"code_sha256_prefix":"70bddc068d650d19","entry":"split_cluster_acc_v2_balanced","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"70bddc068d650d19"}},{"code_sha256_prefix":"603c48d8426e38b8","entry":"test_al","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.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":"603c48d8426e38b8"}},{"code_sha256_prefix":"75381d9269f22be2","entry":"train_al_ema","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.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":"75381d9269f22be2"}},{"code_sha256_prefix":"e253169eb9c23d84","entry":"update_ema_variables","repo":"mashijie1028/activegcd","repo_kind":"official","path":"utils_al/train_recipes_ema.py","file_url":"https://github.com/mashijie1028/activegcd/blob/HEAD/utils_al/train_recipes_ema.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":"e253169eb9c23d84"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}