Object Detection
mmdet
mmdetection
lung-nodule
medical-imaging
YangC777's picture
Add sanitized Nodule Spotter detection models
f49837b
|
Raw
History Blame Contribute Delete
4.31 kB

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}
}