{"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/semi-supervised-medical-image-segmentation-1","title":"Semi-supervised Medical Image Segmentation through Dual-task Consistency","arxiv_id":"2009.04448","date":"2020-09-09","proceeding":null,"authors":["Xiangde Luo","Jieneng Chen","Tao Song","Yinan Chen","Guotai Wang","Shaoting Zhang"],"abstract":"Deep learning-based semi-supervised learning (SSL) algorithms have led to promising results in medical images segmentation and can alleviate doctors' expensive annotations by leveraging unlabeled data. However, most of the existing SSL algorithms in literature tend to regularize the model training by perturbing networks and/or data. Observing that multi/dual-task learning attends to various levels of information which have inherent prediction perturbation, we ask the question in this work: can we explicitly build task-level regularization rather than implicitly constructing networks- and/or data-level perturbation-and-transformation for SSL? To answer this question, we propose a novel dual-task-consistency semi-supervised framework for the first time. Concretely, we use a dual-task deep network that jointly predicts a pixel-wise segmentation map and a geometry-aware level set representation of the target. The level set representation is converted to an approximated segmentation map through a differentiable task transform layer. Simultaneously, we introduce a dual-task consistency regularization between the level set-derived segmentation maps and directly predicted segmentation maps for both labeled and unlabeled data. Extensive experiments on two public datasets show that our method can largely improve the performance by incorporating the unlabeled data. Meanwhile, our framework outperforms the state-of-the-art semi-supervised medical image segmentation methods. Code is available at: https://github.com/Luoxd1996/DTC","url_abs":"https://arxiv.org/abs/2009.04448v3","url_pdf":"https://arxiv.org/pdf/2009.04448v3.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":"semi-supervised-medical-image-segmentation-1","repo_url":"https://github.com/HiLab-git/DTC","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"image-segmentation","task_name":"Image Segmentation"},{"task_slug":"medical-image-segmentation","task_name":"Medical Image Segmentation"},{"task_slug":"segmentation","task_name":"Segmentation"},{"task_slug":"semantic-segmentation","task_name":"Semantic Segmentation"},{"task_slug":"semi-supervised-medical-image-segmentation","task_name":"Semi-supervised Medical Image Segmentation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2009.04448","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2009.04448"}},"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/HiLab-git/DTC","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_honours":2,"ran":6,"unverified":10},"by_repo_kind":{"official":{"samples":18,"ran":8,"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":"3fb68ed6809a8085","entry":"sigmoid_rampup","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/ramps.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/ramps.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":2,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3fb68ed6809a8085"}},{"code_sha256_prefix":"214e4ee9afcfa0e3","entry":"cosine_rampdown","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/ramps.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/ramps.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"214e4ee9afcfa0e3"}},{"code_sha256_prefix":"271f6a7053a24e6c","entry":"dice","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/metrics.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/metrics.py","link_basis":"plan_row","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":"271f6a7053a24e6c"}},{"code_sha256_prefix":"9f3489c005e0165d","entry":"dice_loss","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses.py","link_basis":"harvester_set","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":"9f3489c005e0165d"}},{"code_sha256_prefix":"4953e4d45e6de492","entry":"dice_loss1","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses.py","link_basis":"harvester_set","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":"4953e4d45e6de492"}},{"code_sha256_prefix":"75e298e708abee58","entry":"encode_segmap","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/utils.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/utils.py","link_basis":"harvester_set","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":"75e298e708abee58"}},{"code_sha256_prefix":"f8c429b95e4ae707","entry":"entropy_loss","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses.py","link_basis":"harvester_set","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":"f8c429b95e4ae707"}},{"code_sha256_prefix":"f1e67bfcea91df50","entry":"recursive_glob","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/utils.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/utils.py","link_basis":"harvester_set","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":"f1e67bfcea91df50"}},{"code_sha256_prefix":"ca40feece5ce04cb","entry":"cal_dice","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/metrics.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/metrics.py","link_basis":"plan_row","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":"ca40feece5ce04cb"}},{"code_sha256_prefix":"133472fc12305a9c","entry":"compute_dtm","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses_2.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses_2.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":"133472fc12305a9c"}},{"code_sha256_prefix":"3b9f66ea3c6c5f9c","entry":"compute_sdf","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses_2.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses_2.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":"3b9f66ea3c6c5f9c"}},{"code_sha256_prefix":"37fd4aff70632850","entry":"decode_seg_map_sequence","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/utils.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/utils.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":"37fd4aff70632850"}},{"code_sha256_prefix":"c7ba8abbb7422762","entry":"grouper","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/la_heart.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/la_heart.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":"c7ba8abbb7422762"}},{"code_sha256_prefix":"57c0f850206bf646","entry":"hd_loss","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/losses_2.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/losses_2.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":"57c0f850206bf646"}},{"code_sha256_prefix":"842cf7025c8045b6","entry":"iterate_eternally","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/la_heart.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/la_heart.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":"842cf7025c8045b6"}},{"code_sha256_prefix":"4232c309adddf9e4","entry":"iterate_once","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/dataloaders/la_heart.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/dataloaders/la_heart.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":"4232c309adddf9e4"}},{"code_sha256_prefix":"069122bd5268cc56","entry":"linear_rampup","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/ramps.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/ramps.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":"069122bd5268cc56"}},{"code_sha256_prefix":"ad6309e2c80e2b00","entry":"load_model","repo":"HiLab-git/DTC","repo_kind":"official","path":"code/utils/util.py","file_url":"https://github.com/HiLab-git/DTC/blob/HEAD/code/utils/util.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":"ad6309e2c80e2b00"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}