{"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/iomatch-simplifying-open-set-semi-supervised","title":"IOMatch: Simplifying Open-Set Semi-Supervised Learning with Joint Inliers and Outliers Utilization","arxiv_id":"2308.13168","date":"2023-08-25","proceeding":"ICCV 2023 1","authors":["Zekun Li","Lei Qi","Yinghuan Shi","Yang Gao"],"abstract":"Semi-supervised learning (SSL) aims to leverage massive unlabeled data when labels are expensive to obtain. Unfortunately, in many real-world applications, the collected unlabeled data will inevitably contain unseen-class outliers not belonging to any of the labeled classes. To deal with the challenging open-set SSL task, the mainstream methods tend to first detect outliers and then filter them out. However, we observe a surprising fact that such approach could result in more severe performance degradation when labels are extremely scarce, as the unreliable outlier detector may wrongly exclude a considerable portion of valuable inliers. To tackle with this issue, we introduce a novel open-set SSL framework, IOMatch, which can jointly utilize inliers and outliers, even when it is difficult to distinguish exactly between them. Specifically, we propose to employ a multi-binary classifier in combination with the standard closed-set classifier for producing unified open-set classification targets, which regard all outliers as a single new class. By adopting these targets as open-set pseudo-labels, we optimize an open-set classifier with all unlabeled samples including both inliers and outliers. Extensive experiments have shown that IOMatch significantly outperforms the baseline methods across different benchmark datasets and different settings despite its remarkable simplicity. Our code and models are available at https://github.com/nukezil/IOMatch.","url_abs":"https://arxiv.org/abs/2308.13168v1","url_pdf":"https://arxiv.org/pdf/2308.13168v1.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":"iomatch-simplifying-open-set-semi-supervised","repo_url":"https://github.com/nukezil/iomatch","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"iomatch-simplifying-open-set-semi-supervised","repo_url":"https://github.com/daniyanaj/openltr","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"open-set-classification","task_name":"open-set classification"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2308.13168","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2308.13168"}},"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/daniyanaj/openltr","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/nukezil/iomatch","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/nukezil/IOMatch","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":6,"ran_draft_wrong":2,"ran_honours":1,"unverified":3},"by_repo_kind":{"official":{"samples":12,"ran":9,"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":"c2e202cd61888d8e","entry":"ce_loss","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/utils/loss.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/utils/loss.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c2e202cd61888d8e"}},{"code_sha256_prefix":"9db92459be6a39f2","entry":"consistency_loss","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/utils/loss.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/utils/loss.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":"9db92459be6a39f2"}},{"code_sha256_prefix":"c3efb74e3d8bf8f3","entry":"em_loss_func","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/openmatch/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/openmatch/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c3efb74e3d8bf8f3"}},{"code_sha256_prefix":"7e70f65666cc9e56","entry":"mb_sup_loss","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/iomatch/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/iomatch/utils.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":"7e70f65666cc9e56"}},{"code_sha256_prefix":"0bc828082031b11c","entry":"ova_loss_func","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/openmatch/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/openmatch/utils.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":"0bc828082031b11c"}},{"code_sha256_prefix":"88f4962784e09b88","entry":"param_groups_weight_decay","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/nets/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/nets/utils.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":"88f4962784e09b88"}},{"code_sha256_prefix":"f321f54723433661","entry":"pil_loader","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/openmatch/openmatch.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/openmatch/openmatch.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f321f54723433661"}},{"code_sha256_prefix":"90f8ce204153de70","entry":"smooth_targets","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/utils/loss.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/utils/loss.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"90f8ce204153de70"}},{"code_sha256_prefix":"e03f22da7466f079","entry":"socr_loss_func","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/openmatch/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/openmatch/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e03f22da7466f079"}},{"code_sha256_prefix":"9f81b5759307e67f","entry":"group_parameters","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/nets/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/nets/utils.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":"9f81b5759307e67f"}},{"code_sha256_prefix":"641c72db6fa25923","entry":"load_checkpoint","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/nets/utils.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/nets/utils.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":"641c72db6fa25923"}},{"code_sha256_prefix":"8d9acf594cf19c23","entry":"str2bool","repo":"nukezil/IOMatch","repo_kind":"official","path":"semilearn/algorithms/utils/misc.py","file_url":"https://github.com/nukezil/IOMatch/blob/HEAD/semilearn/algorithms/utils/misc.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":"8d9acf594cf19c23"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}