Nodule Spotter detection models
This directory contains the inference weights used by the LungNoduleAgent Nodule Spotter release for the private Shenzhen cohort.
Released checkpoints
| ID | Architecture | Source epoch | Checkpoint | Config |
|---|---|---|---|---|
retinanet |
RetinaNet, ResNet-18 + FPN | 100 | retinanet_r18_fpn_shenzhen.pth |
retinanet_r18_fpn_shenzhen.py |
faster_rcnn |
Faster R-CNN, ResNet-50 + FPN | 26 | faster_rcnn_r50_fpn_shenzhen.pth |
faster_rcnn_r50_fpn_shenzhen.py |
dino |
DINO, ResNet-50, four-scale | 12 | dino_r50_4scale_shenzhen.pth |
dino_r50_4scale_shenzhen.py |
Machine-readable paths, hashes, and compatibility details are recorded in
manifest.yaml. File hashes are also listed in
checksums.sha256.
Sanitization
The public checkpoints are inference-only artifacts. Compared with the original MMEngine training checkpoints, this release removes:
- optimizer and training-loop state;
- MMEngine message/history objects;
- the embedded training configuration;
- experiment names, timestamps, seeds, and internal filesystem paths.
Each public file contains only the CPU state_dict plus minimal metadata:
the nodule class, display palette, source epoch, and format version. Every
checkpoint was reloaded with torch.load(..., weights_only=True) and compared
tensor-by-tensor with its source state_dict.
The reproducible conversion utility is available at
tools/sanitize_checkpoint.py. It must only
be used with trusted source checkpoints.
Download
hf download YangC777/LungNoduleAgent \
--include "DetectionModel/**" \
--local-dir ./LungNoduleAgent-models
Compatibility
The original training environment used:
- MMDetection 3.3.0
- MMEngine 0.10.7
- MMCV 2.1.0
- PyTorch 1.13 / CUDA 11.7
The configs have been scrubbed of private server paths. Dataset paths are
portable placeholders and are not required by mmdet.apis.init_detector for
single-image inference.
MMDetection inference
from mmdet.apis import inference_detector, init_detector
config = "DetectionModel/dino/dino_r50_4scale_shenzhen.py"
checkpoint = "DetectionModel/dino/dino_r50_4scale_shenzhen.pth"
model = init_detector(config, checkpoint, device="cuda:0")
result = inference_detector(model, "slice.png")
# Class index 0 is the released lung-nodule class.
instances = result.pred_instances
instances = instances[instances.labels == 0]
The legacy RetinaNet and Faster R-CNN checkpoints retain their original
80-output detection heads so that their tensors load without modification.
Only class index 0 represents nodule; consumers must discard predictions
with other labels. DINO was trained with num_classes=1.
Data and evaluation
The private clinical images and annotations are not released. The configs document the expected COCO annotation filenames and preprocessing structure, but do not contain patient data.
Per-checkpoint test metrics and a public-dataset reproduction protocol are not yet included. Results should not be compared or reported without documenting the data split, score threshold, and post-processing settings.
Intended use and limitations
These checkpoints are provided for research reproducibility and method development. They have not been validated as medical devices, may not generalize across scanners, acquisition protocols, populations, or institutions, and must not be used for clinical diagnosis or treatment.
See NOTICE.md before redistributing or using the weights.
Citation
@article{yang2025lungnoduleagent,
title = {LungNoduleAgent: A Collaborative Multi-Agent System for Precision Diagnosis of Lung Nodules},
author = {Yang, Cheng and Jin, Hui and Yu, Xinlei and Wang, Zhipeng and Liu, Yaoqun and Fan, Fenglei and Lei, Dajiang and Jia, Gangyong and Wang, Changmiao and Ge, Ruiquan},
journal = {arXiv preprint arXiv:2511.21042},
year = {2025}
}