{"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/arxiv-2601-11161","title":"GMM-COMET: Continual Source-Free Universal Domain Adaptation via a Mean Teacher and Gaussian Mixture Model-Based Pseudo-Labeling","arxiv_id":"2601.11161","date":"2026-01-16","proceeding":null,"authors":["Pascal Schlachter","Bin Yang"],"abstract":"Unsupervised domain adaptation tackles the problem that domain shifts between training and test data impair the performance of neural networks in many real-world applications. Thereby, in realistic scenarios, the source data may no longer be available during adaptation, and the label space of the target domain may differ from the source label space. This setting, known as source-free universal domain adaptation (SF-UniDA), has recently gained attention, but all existing approaches only assume a single domain shift from source to target. In this work, we present the first study on continual SF-UniDA, where the model must adapt sequentially to a stream of multiple different unlabeled target domains. Building upon our previous methods for online SF-UniDA, we combine their key ideas by integrating Gaussian mixture model-based pseudo-labeling within a mean teacher framework for improved stability over long adaptation sequences. Additionally, we introduce consistency losses for further robustness. The resulting method GMM-COMET provides a strong first baseline for continual SF-UniDA and is the only approach in our experiments to consistently improve upon the source-only model across all evaluated scenarios. Our code is available at https://github.com/pascalschlachter/GMM-COMET.","url_abs":"https://arxiv.org/abs/2601.11161","url_pdf":"https://arxiv.org/pdf/2601.11161","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":null,"mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2601.11161"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/pascalschlachter/GMM-COMET","reach":null}],"summary":{"ran":8,"ran_honours":2,"ran_violates":1,"ran_fixture":1,"ran_draft_wrong":1,"unverified":5},"by_repo_kind":{"found_in_text":{"samples":18,"ran":13,"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":18,"samples":[{"code_sha256_prefix":"04701d6379d85b46","entry":"Classifier","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"04701d6379d85b46"}},{"code_sha256_prefix":"f611b91f6dc1d3c0","entry":"Clip","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f611b91f6dc1d3c0"}},{"code_sha256_prefix":"613104b878d26591","entry":"ColorJitterPro","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"613104b878d26591"}},{"code_sha256_prefix":"9e7bad2ff9264a11","entry":"FeatureExtractor","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9e7bad2ff9264a11"}},{"code_sha256_prefix":"33add3294ac1bf82","entry":"GaussianMixtureModel","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"33add3294ac1bf82"}},{"code_sha256_prefix":"8d0788e9468dc56a","entry":"GaussianNoise","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8d0788e9468dc56a"}},{"code_sha256_prefix":"5547c979fcf3b1d9","entry":"HScore","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5547c979fcf3b1d9"}},{"code_sha256_prefix":"887b390277e82962","entry":"calculate_cosine_similarity","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"887b390277e82962"}},{"code_sha256_prefix":"3a14e072b8171e33","entry":"calculate_entropy","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3a14e072b8171e33"}},{"code_sha256_prefix":"0f26586bbc818cfd","entry":"calculate_euclidean_distance","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0f26586bbc818cfd"}},{"code_sha256_prefix":"773570170ea07842","entry":"calculate_gmm_mahalanobis_distances","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"773570170ea07842"}},{"code_sha256_prefix":"b13ce7897fb5f663","entry":"get_tta_transforms","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b13ce7897fb5f663"}},{"code_sha256_prefix":"0e08dd56789d9dbf","entry":"mask","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"0e08dd56789d9dbf"}},{"code_sha256_prefix":"18c7e044059b010b","entry":"BaseModule","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"18c7e044059b010b"}},{"code_sha256_prefix":"c9bf669e4e2bec44","entry":"GmmBaAdaptationModule","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"c9bf669e4e2bec44"}},{"code_sha256_prefix":"fc32f0ba2d6817cf","entry":"ResNetBackbone","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"fc32f0ba2d6817cf"}},{"code_sha256_prefix":"11bfcf209c94289f","entry":"calculate_grad_norm","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"11bfcf209c94289f"}},{"code_sha256_prefix":"7babf7ea472eba97","entry":"init_weights","repo":"pascalschlachter/GMM-COMET","repo_kind":"found_in_text","path":"adaptation.py","file_url":"https://github.com/pascalschlachter/GMM-COMET/blob/HEAD/adaptation.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":"7babf7ea472eba97"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}