Papers › 3DMedAgent: Unified Perception-to-Understanding for 3D Medical Analysis

3DMedAgent: Unified Perception-to-Understanding for 3D Medical Analysis

20 Feb 2026ICMLarXiv:2602.18064added by Syntology

Ziyue Wang, Linghan Cai, Chang Han Low, Haofeng Liu, Junde Wu, Jingyu Wang, Rui Wang, Lei Song, Jiang Bian, Jingjing Fu, Yueming Jin

Title, abstract, authors and date from arXiv's metadata (CC0); this paper is not in the Papers with Code archive (frozen 2025-07-28).

3D CT analysis spans a continuum from low-level perception to high-level clinical understanding. Existing 3D-oriented analysis methods adopt either isolated task-specific modeling or task-agnostic end-to-end paradigms to produce one-hop outputs, impeding the systematic accumulation of perceptual evidence for downstream reasoning. In parallel, recent multimodal large language models (MLLMs) exhibit improved visual perception and can integrate visual and textual information effectively, yet their predominantly 2D-oriented designs fundamentally limit their ability to perceive and analyze volumetric medical data. To bridge this gap, we propose 3DMedAgent, a unified agent that enables 2D MLLMs to perform general 3D CT analysis without 3D-specific fine-tuning. 3DMedAgent coordinates heterogeneous visual and textual tools through a flexible MLLM agent, progressively decomposing complex 3D analysis into tractable subtasks that transition from global to regional views, from 3D volumes to informative 2D slices, and from visual evidence to structured textual representations. Central to this design, 3DMedAgent maintains a long-term structured memory that aggregates intermediate tool outputs and supports query-adaptive, evidence-driven multi-step reasoning. We further introduce the DeepChestVQA benchmark for evaluating unified perception-to-understanding capabilities in 3D thoracic imaging. Experiments across over 40 tasks demonstrate that 3DMedAgent consistently outperforms general, medical, and 3D-specific MLLMs, highlighting a scalable path toward general-purpose 3D clinical assistants.Code and data are available at \href{https://github.com/jinlab-imvr/3DMedAgent}{https://github.com/jinlab-imvr/3DMedAgent}.

PaperPDFCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2602.18064")

Code

Syntology Ran 0 of 27 code samples harvested from 1 repository linked to this paper; 27 have no recorded run.

By repository: found in paper text by Syntology: 27 samples from 1 repository, 0 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

jinlab-imvr/3DMedAgent found in paper text by Syntology report

Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

27 samples harvested; 0 ran; 0 honoured the contract we drafted; 27 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

27unverified

Licence: 27 of the 27 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from jinlab-imvr/3DMedAgent. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: 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. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

apply_text_answer_prompt_overrides jinlab-imvr/3DMedAgent/Final_Test/GPT_memory_t1s.py found in paper text by Syntology unverified no licence file found · pointer only · 0586c9dbb390ceee · report
as_str jinlab-imvr/3DMedAgent/Final_Test/config.py found in paper text by Syntology unverified no licence file found · pointer only · 63afebc93e21a64d · report
build_summary jinlab-imvr/3DMedAgent/CT_Clip/clip_classify.py found in paper text by Syntology unverified no licence file found · pointer only · 365885e2f100694d · report
canonicalize_organ_name jinlab-imvr/3DMedAgent/CT_Clip/clip_utils.py found in paper text by Syntology unverified no licence file found · pointer only · 0830c0921ec03b85 · report
get_report_organ_heading jinlab-imvr/3DMedAgent/CT_Clip/tools.py found in paper text by Syntology unverified no licence file found · pointer only · 2e38cae858dad0a6 · report
iter_unique_cases jinlab-imvr/3DMedAgent/CT_Clip/clip_classify.py found in paper text by Syntology unverified no licence file found · pointer only · 7108ded1ec4567ec · report
load_embedding jinlab-imvr/3DMedAgent/CT_Clip/clip_encode.py found in paper text by Syntology unverified no licence file found · pointer only · 1e081d59c3953a04 · report
load_precomputed_embedding jinlab-imvr/3DMedAgent/CT_Clip/clip_utils.py found in paper text by Syntology unverified no licence file found · pointer only · c1c21c6581e9b402 · report
map_organs_to_backend_prompt jinlab-imvr/3DMedAgent/segmentation.py found in paper text by Syntology unverified no licence file found · pointer only · 824dddaa9fb40981 · report
normalize_lesion_type jinlab-imvr/3DMedAgent/CT_Clip/tools.py found in paper text by Syntology unverified no licence file found · pointer only · ff00826f29795093 · report
normalize_location_label jinlab-imvr/3DMedAgent/Final_Test/runtime_tools.py found in paper text by Syntology unverified no licence file found · pointer only · eef9187da38365af · report
normalize_organ_choice jinlab-imvr/3DMedAgent/Final_Test/memory.py found in paper text by Syntology unverified no licence file found · pointer only · b0825f197a97911b · report
normalize_organ_name jinlab-imvr/3DMedAgent/CT_Clip/tools.py found in paper text by Syntology unverified no licence file found · pointer only · 4ef64ba3b56669c1 · report
parse_lesion_types jinlab-imvr/3DMedAgent/CT_Clip/clip_utils.py found in paper text by Syntology unverified no licence file found · pointer only · d2d53639487fa15a · report
parse_numeric_options jinlab-imvr/3DMedAgent/Final_Test/runtime_tools.py found in paper text by Syntology unverified no licence file found · pointer only · de7cabba3aefdcdc · report
parse_option_texts jinlab-imvr/3DMedAgent/Final_Test/runtime_tools.py found in paper text by Syntology unverified no licence file found · pointer only · 90eed5b261265365 · report
parse_target_subtypes jinlab-imvr/3DMedAgent/Final_Test/pipeline_utils.py found in paper text by Syntology unverified no licence file found · pointer only · 1fce18ef8f9b163e · report
patch_area_grid jinlab-imvr/3DMedAgent/CT_Clip/precompute_organ_scores.py found in paper text by Syntology unverified no licence file found · pointer only · 406c94d59157f847 · report
read_json jinlab-imvr/3DMedAgent/Final_Test/memory.py found in paper text by Syntology unverified no licence file found · pointer only · 038caf67087da5e3 · report
row_get jinlab-imvr/3DMedAgent/Final_Test/memory.py found in paper text by Syntology unverified no licence file found · pointer only · 5b494e2f48c8b101 · report
save_case_json jinlab-imvr/3DMedAgent/CT_Clip/clip_classify.py found in paper text by Syntology unverified no licence file found · pointer only · a9b6d294ce66f64b · report
score_sections jinlab-imvr/3DMedAgent/CT_Clip/precompute_organ_scores.py found in paper text by Syntology unverified no licence file found · pointer only · 399f72c014121f56 · report
score_slices jinlab-imvr/3DMedAgent/CT_Clip/precompute_clip_detail.py found in paper text by Syntology unverified no licence file found · pointer only · 7a78201e746c418b · report
section_ranges jinlab-imvr/3DMedAgent/CT_Clip/precompute_organ_scores.py found in paper text by Syntology unverified no licence file found · pointer only · 2ee53f45d108f2f1 · report
select_target_rows jinlab-imvr/3DMedAgent/Final_Test/pipeline_utils.py found in paper text by Syntology unverified no licence file found · pointer only · 7a4835cc88cfc51b · report
slice_patch_area_grid jinlab-imvr/3DMedAgent/CT_Clip/precompute_clip_detail.py found in paper text by Syntology unverified no licence file found · pointer only · 04d986faa0452e28 · report
slice_percent jinlab-imvr/3DMedAgent/CT_Clip/precompute_clip_detail.py found in paper text by Syntology unverified no licence file found · pointer only · 0a3dd4281a057215 · report

Results from the paper

The Papers with Code archive ends with its 2025-07-28 snapshot. This paper's arXiv identifier, 2602.18064, was issued in February 2026, after that date, so the archive has no leaderboard rows for it.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections