Taurus: LLM-in-the-Loop CT Annotation Matches Coding Agents at Half the Cost
Organizations: David R. Cheriton School of Computer Science, University of Waterloo, Waterloo, Ontario, Canada
Abstract
Dense labels of the aorta in CT are slow to draw, and the public aortic CT datasets that could stand in for them each label different structures under their own conventions. Large language model (LLM) agents can now write code and read images. We asked whether such a model labels these scans better as a free-form agent that writes its own segmentation code, or inside a harness, where an automated pass labels the scan and the model reviews the result. We built a harness, Taurus, and compared it with free-form agents by blind label recovery: we withheld the human labels of six public datasets (939 volumes) and scored every approach against each dataset's own classes. In the first version of Taurus, the model's review raised the primary metric on only two of six datasets, by less than the noise between two reviews of the same case. A free-form agent running Claude Opus 5.5 scored higher on most datasets. Moving what the free-form agents did well into the automated pass then carried most of the gain on 38 held-out cases. The final version smooths the label surfaces with a fixed rule and checks for the large errors the automated pass tends to make, such as an aneurysm drawn to half its size. Each check that fires puts a multiple-choice question to the model, with candidate corrections drawn on the scan. It matched the surface smoothness of the human references, and in the primary metric we found no difference from the free-form Opus agent, at under half its cost, 2.71 per case. Most of what made Taurus competitive came from the harness and its automation rather than from the language model itself. Taurus shows that this kind of annotation can be automated, so that expert time can move from drawing labels to checking them.
Figures & tables
| Reference | Dataset | Human label (type) | Field of view | Contrast | Volumes / reviewed / free-form / held-out | Primary metric |
| AortaSeg24 [ 1 ] | 23 vessel ids (zones 0–9, branches) (voxel label map) | whole body; type-B dissections | CTA | 100 / 100 / 5 / 4 | abdominal vessel macro Dice | |
| Siriapisith AAA/EVAR [ 3 ] | envelope a (voxel label map) | 80 mm abdominal crops, 256 256 64; incl. EVAR | CTA; 10 NC | 520 / 160 / 6 / 12 | outer Dice | |
| AVT [ 2 ] | one binary arterial-tree lumen (voxel segmentation) | thorax–pelvis arterial tree | CTA; 1 NC | 55 / 24 / 5 / 4 | tree Dice | |
| VMR [ 6 ] | lumen per named vessel (lofted surface models, voxelized) | abdomen ( chest); 16 AAA, 1 healthy | CTA | 17 / 17 / 4 / 4 | per-vessel macro Dice | |
| Jamshidian 4D-CTA [ 5 ] | thrombus, sac and wall meshes (finite-element surface meshes, voxelized) | aneurysm-sac crops | CTA | 149 b / 39 / 5 / 6 | thrombus Dice | |
| not shown: ND licence c | MosMedData AAA [ 4 , 12 ] | lumen, calcium (thrombus on 4) (voxel label map) | abdominal aortic segment (104–209 mm) | CTA | 98 / 98 / 5 / 8 | lumen + calcium mean Dice |
| Tool | What it does | Taurus-base | Taurus-tuned | Taurus-hybrid |
| Automated pass | ||||
| Proposal | AI segmentation models (vessel model, whole-body organ model) or a bright core propose the aorta and branches | |||
| Trunk and sac growth | grows the trunk and sac; Taurus-tuned and Taurus-hybrid add a trunk tracker and a contour out to the aneurysm’s outer surface, where its wall meets the surrounding fat; Taurus-hybrid re-seeds the trunk when the labeled lumen is implausibly small or a brighter tube is left unlabeled, and checks the sac against a polar edge finder | |||
| Tissue classes | lumen, calcium, thrombus and wall from thresholds, which are fixed in Taurus-base and measured on the case in Taurus-tuned and Taurus-hybrid; Taurus-hybrid drops calcium that lies on the vertebral cortex | |||
| Branches, zones, flags | traces branches from the wall, names them and the aortic zones, raises quality warnings; Taurus-hybrid adds warnings for a rebuilt trunk, an under-sized sac, calcium specks and a header orientation that contradicts the anatomy | |||
| What the reviewer sees | ||||
| Primary metric per dataset | All | Per case | |||||||
| Approach | AortaSeg24 (4) | Siriapisith AAA/EVAR (12) | MosMedData AAA (8) | AVT (4) | VMR (4) | Jamshidian 4D-CTA (6) | all (38) | $ | min |
| Taurus-base (auto) | 0.572 | 0.496 | 0.021 | 0.027 | 0.490 | 0.002 | 0.321 | – | 0.7 |
| Taurus-base | 0.579 | 0.496 | 0.024 | 0.432 | 0.492 | 0.004 | 0.410 | 0.20 | 1.5 |
| Taurus-tuned (auto) | 0.732 | 0.783 | 0.462 | 0.437 | 0.464 | 0.534 | 0.620 | – | 1.0 |
| Taurus-tuned | 0.732 | 0.871 | 0.462 | 0.437 | 0.466 | 0.572 | 0.704 | 0.75 | 6.4 |
| Taurus-hybrid (auto) | 0.734 | 0.791 | 0.468 | 0.454 | 0.468 | 0.587 | 0.647 | – | 1.1 |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Comparison | Cases | Metric | Median | 95 % CI | Better/ worse | |
| Main experiment | ||||||
| base base (auto) | Siriapisith AAA/EVAR, 160 | outer Dice | 0.000 to 0.025 | 92/15 | ||
| base base (auto) | AVT, 24 | tree Dice | 0.001 to 0.049 | 21/1 | 0.0024 | |
| hybrid Free-form Opus | free-form, 30 | primary metric | – | 21/6 | 0.001 | |
| NSD at 1 mm | – | 23/6 | 0.0003 | |||
| MSD (mm) | – | 24/5 | 0.001 | |||
| Comparison | Dataset | median | 95 % CI | (Holm) | better/worse | ||
| Taurus-base Taurus-base (auto) | AortaSeg24 | 100 | +0.000 | [+0.000, +0.000] | 4.83e-05 | 0.00246 | 45/15 |
| Taurus-base Taurus-base (auto) | Siriapisith AAA/EVAR | 160 | +0.013 | [+0.000, +0.025] | 2.62e-16 | 1.49e-14 | 92/15 |
| Taurus-base Taurus-base (auto) | MosMedData AAA | 98 | +0.000 | [+0.000, +0.000] | 0.817 | 1 | 18/16 |
| Taurus-base Taurus-base (auto) | AVT | 24 | +0.022 | [+0.001, +0.049] | 4.61e-05 | 0.0024 | 21/1 |
| Taurus-base Taurus-base (auto) | VMR | 17 | +0.000 | [+0.000, +0.002] | 0.0754 | 1 | 8/3 |
| Taurus-base Taurus-base (auto) | Jamshidian 4D-CTA | 39 | +0.000 | [+0.000, +0.000] | 0.291 | 1 | 10/12 |
| Primary metric per dataset | All held-out cases / stratum | Cost per case | ||||||||||
| Approach | AortaSeg24 (4) | Siriapisith AAA/EVAR (12) | MosMedData AAA (8) | AVT (4) | VMR (4) | Jamshidian 4D-CTA (6) | all (38) | hard (26) | typical (12) | $ | min | turns |
| Taurus- base (auto) | 0.572 0.072 | 0.496 0.096 | 0.021 0.071 | 0.027 0.108 | 0.490 0.043 | 0.002 0.005 | 0.321 0.259 | 0.109 0.225 | 0.573 0.151 | – | 0.7 1.1 | – |
| Taurus- base | 0.579 0.076 | 0.496 0.096 | 0.024 0.076 | 0.432 0.405 | 0.492 0.037 | 0.004 0.004 | 0.410 0.260 | 0.144 0.222 | 0.640 0.146 | 0.20 0.44 | 1.5 4.2 | 8 8 |
| Taurus- tuned (auto) | 0.732 0.031 | 0.783 0.130 | 0.462 0.089 | 0.437 0.406 | 0.464 0.048 | 0.534 0.186 | 0.620 0.159 | 0.598 0.145 | 0.716 0.195 | – | 1.0 1.1 | – |
| Taurus- tuned | 0.732 0.032 | 0.871 0.037 | 0.462 0.104 | 0.437 0.406 | 0.466 0.064 | 0.572 0.222 | 0.704 0.202 | 0.698 0.199 | 0.716 0.196 | 0.75 0.23 | 6.4 4.7 | 16 5 |
| Taurus- hybrid (auto) | 0.734 0.031 | 0.791 0.135 | 0.468 0.105 | 0.454 0.428 | 0.468 0.047 | 0.587 0.180 | 0.647 0.154 | 0.619 0.137 | 0.725 0.202 | – | 1.1 1.3 | – |
| Approach (cases) | Dice | NSD 1 mm | NSD 2 mm | MSD (mm) | HD95 (mm) |
| Taurus- base (auto) (38) | 0.321 [0.018, 0.536] | 0.118 [0.014, 0.366] | 0.233 [0.040, 0.490] | 12.73 [6.79, 18.68] (37) | 29.9 [22.0, 54.5] (37) |
| Taurus- base (38) | 0.410 [0.021, 0.542] | 0.153 [0.026, 0.432] | 0.290 [0.044, 0.575] | 11.43 [5.84, 18.51] (37) | 29.2 [19.8, 44.5] (37) |
| Taurus- tuned (auto) (38) | 0.620 [0.451, 0.769] | 0.393 [0.254, 0.560] | 0.588 [0.458, 0.747] | 2.59 [1.67, 6.51] (37) | 14.4 [6.3, 23.5] (37) |
| Taurus- tuned (38) | 0.704 [0.450, 0.854] | 0.431 [0.276, 0.566] | 0.662 [0.477, 0.768] | 2.00 [1.43, 5.61] (37) | 9.8 [5.5, 20.2] (37) |
| Taurus- hybrid (auto) (38) | 0.647 [0.466, 0.773] | 0.402 [0.255, 0.577] | 0.582 [0.457, 0.756] | 2.42 [1.64, 6.26] (37) | 14.1 [7.1, 24.1] (37) |
| Taurus- hybrid (38) | 0.805 [0.670, 0.899] | 0.494 [0.371, 0.702] | 0.761 [0.629, 0.860] | 1.58 [1.07, 3.20] | 8.0 [5.0, 14.0] |
| # | Found in | Problem | Status |
| 66 | pilot, Siriapisith AAA/EVAR and Jamshidian 4D-CTA | blood value contaminated by calcium on a 4D phase; end slices refused by interp-outer ; card coordinates on the down-sampled grid; broad outer tools overshoot where no fat plane separates the aorta; false branches in crops | fixed (robust blood, end slices, coordinates) |
| 67 | pilot, whole-body | card coordinates relative to the working box; outer-trimming tools strip the wall ring; false arch-branch specks; working box too narrow; coverage warning on by-design lumen-only iliacs | fixed (wall ring, branch cleanup, box report) |
| 68 | pilot, chest scans | root recipes did nothing; card options computed before the regularization; branch-lumen pieces not removable; edits on the largest volume over 10 min | fixed (root tracker, options as differences, branch-remove ); latency on the largest volume open |
| 69 | held-out, Siriapisith AAA/EVAR and Jamshidian 4D-CTA | missing or collapsed sac runs; growth tools cap giant sacs, key-slice polygons needed; coverage check reported a gap as complete; vertebral branches survive the cleanup; a very bright phase left the lumen empty; guard rails refused calcium hysteresis and the regularization with an endoleak | open |
| 70 | held-out, Siriapisith AAA/EVAR and Jamshidian 4D-CTA | flat-cut sac ends and truncated trunks; growth over 30 % refused without forcing; new trunk voxels without a vessel id; tracker recipe crashed on its slice range; giant sac or hematoma undecidable | open; id and crash fixed during the run |
| 71 | held-out, MosMedData AAA | collar needs more than 10 % outer removal; side names reversed on header-flipped volumes; lumen on the vertebral body; branch tools refuse clicks inside the trunk; stent graft in a case listed without one | open |
| Model | Input | Output | Cache read | Cache write (5 min) | Cache write (1 h) |
| Claude Opus 5.5 ( claude-opus-5-5 ) | 4.00 | 20.00 | 0.20 | 5.00 | 8.00 |
| Claude Sonnet 5.5 ( claude-sonnet-5-5 ) | 2.00 | 10.00 | 0.20 | 2.50 | 4.00 |
| Claude Sonnet 5 ( claude-sonnet-5 ) | 2.00 | 10.00 | 0.20 | 2.50 | 4.00 |
| Dataset (held-out cases) | L0 human | L1 Taurus-base (auto) | L2 Taurus-base | L2-noedit | L3 reference-seeded |
| MosMedData AAA (20) | 0.804 0.039 | 0.507 0.006 | 0.522 0.005 | 0.679 0.025 | 0.723 0.004 |
| Siriapisith AAA/EVAR (40) | 0.975 0.005 | 0.583 0.008 | 0.699 0.014 | 0.555 0.020 | 0.977 0.000 a |