Design Archive
中EN

(1) Choosing a base model

National Medical Insurance Imaging AI Contest, preliminary round, part 1: Over the three days before the contest, we compared backbones, random seeds and ensembles on public chest X-ray data. Chest-specific RAD-DINO came out ahead, seed 41 had a slightly higher composite, and retraining on all the pre-contest data gave us RAD41.

L.01 / 14
CATEGORY
Study
YEAR
2026
STATUS
Note
TOOLS
pytorch / rad-dino / efficientnet

entryWrite-up

This five-part series records our model development for Track 8 of the National Medical Insurance Imaging AI Contest (全国医保影像 AI 识图大赛), multi-disease detection on chest X-rays, in the “in-house model” group: the first part covers the backbone and seeds, the second the ROI baseline, the third the new detection head, the fourth the recipes we did not keep, and the fifth fusion. This first part covers the three days before we entered the organizer environment: choosing a base model on public chest X-ray data, checking the effect of the random seed, trying ensembles, and finally retraining RAD41 on all the pre-contest data. The 41 in the name is random seed 41.

We first compared off-the-shelf base models for chest X-ray classification and localization on VinBigData, a chest X-ray dataset on Kaggle. There were three candidates: RAD-DINO, a ViT model built for chest X-rays; DINOv2, a general-purpose vision model; and a CNN, DenseNet-121. A comparison that uses public data in place of the contest task is called proxy validation, and its scores are not contest scores. Classification is measured by AUPRC, the area under the precision-recall curve, computed for each class and then averaged. Localization is measured by mAP: first an AP is computed for each class, the area under the precision-recall curve with predicted boxes ranked by confidence, where a predicted box counts as a detection only if its intersection over union (IoU) with an annotated box is high enough; the APs are then averaged across classes. Both metrics run from 0 to 1, and higher is better. The comparison had two rounds: all three candidates took part in the first, and DINOv2 was eliminated; in the second, RAD-DINO scored 0.489151 AUPRC and 0.068586 mAP, against 0.444539 and 0.010581 for DenseNet. The rule set in advance was that DenseNet had to lead on at least one of classification or localization to go through; RAD-DINO led on both, so DenseNet was eliminated. We adopted RAD-DINO and kept its native 518 input. We took only the fixed pretrained weights, without downloading or mixing in any upstream pretraining data, and recorded the upstream data sources separately from the data we actually trained on.

Next we checked how sensitive the results were to the random seed, and compared them with a general-purpose detection baseline. The data was split into 10,500 training and 2,250 validation images; RAD-DINO was trained with seeds 17, 29 and 41 for 3 epochs each, and we also tried FCOS, a general-purpose detection model. From this point on, runs were ranked by the mean of classification AUPRC and localization mAP, called the composite. The three seeds’ composites fell between 0.328686 and 0.330335; seed 41 was highest, but only slightly. FCOS was trained for two epochs with an mAP of 0 after both, and in this configuration it was stopped under the rule set in advance.

Ensembling here means averaging the probabilities output by several models, with weights. This step was to see whether the gain from ensembling justified a more complex pre-contest model. The top two seeds, 41 and 29, were first ensembled with equal weights, then seed 17 was added for a three-seed ensemble, and then 41 and 29 were each trained on to epoch 4. The two-seed composite was 0.348009 and the three-seed one 0.347998, so the third seed added nothing; after the extra epoch the two-seed ensemble reached 0.351650, a gain above the preset +0.003 adoption threshold, and the two-seed recipe was fixed. We then ran it once on the 2,250 held-out test images, only to confirm the result: the run was not used to pick models, and the configuration was not changed afterwards.

To find a model that could complement RAD, we first compared three CNNs, EfficientNetV2-M, ConvNeXt and DenseNet; none beat RAD on its own, and EfficientNet was the best of them. We then tried two ways of raising resolution: one raised the RAD input from 518 to 1036; the other combined the full image with tiles, cutting the original image into small patches and localizing on each. Last, we tried a classification ensemble of RAD 518 and EfficientNet 1024. RAD 1036 scored a composite of 0.323505, below the 518 reference of 0.351650; full image plus tiles reached only 0.284590; RAD 518 plus EfficientNet 1024 reached 0.361273, with the gain coming from classification while localization stayed the same. In this round of experiments, a classification ensemble with EfficientNet did better than simply raising RAD’s resolution. The resulting plan B weights RAD41, RAD29 and the seed 41 EfficientNet at 0.4, 0.4 and 0.2 for classification, and keeps localization as an equal-weight ensemble of the two RAD models.

After plan B we tried adding one more member. An equal-weight ensemble of EfficientNet seeds 41 and 29 gave a CNN-only backup; the two EfficientNet seeds and the two RAD seeds were then combined into a four-member ensemble. Its localization was identical to plan B’s; the only difference was that EfficientNet’s share of the classification weight was split between two seeds. The four-member ensemble came out only 0.000185 above plan B, under the preset 0.003 cut-off. We stayed with plan B and kept the CNN-only ensemble as a backup.

Once the recipe was fixed, the delivered weights had to be trained on all the allowed pre-contest data. The retrain started from the initializer, the RAD-DINO checkpoint kept from the second round of the backbone comparison, and was deterministic. The training data was all 15,000 chest X-rays: the earlier 10,500 training, 2,250 validation and 2,250 held-out test images combined, with the held-out images used only as labeled training samples. RAD41 was trained for a fixed 4 epochs, taking the weights at the end of epoch 4; the other plan B members were retrained alongside it, each for its own fixed number of epochs. Training stopped once partway through because the number of parallel data-loading workers did not match the earlier baseline; it resumed from the checkpoint of the last complete epoch, the model recipe was not changed, and the records of the interruption and the resumption were kept. RAD41’s configuration is fixed at a 518 input, seed 41, batch 32, last-encoder-layer adaptation (fine-tuning unfreezes only the final encoder block), a 15-class classification head and a 14-class localization heatmap head.

Finally, we evaluated performance outside VinBigData on a fixed set of 1,161 images from ChestDR, another public chest X-ray dataset, and checked what was still missing against the contest requirements. The evaluation covered only the 8 labels the two datasets share; labels that did not match were left out. ChestDR is not in the training data of any model source we declared, but that holds only relative to the declared sources and does not guarantee that these models never encountered it. Plan B scored an AUPRC of 0.368690 and RAD41 on its own 0.363970; the external results were not used to change ensemble members, weights or thresholds. The contest tests five tasks, T1 to T5: non-human image detection, spliced and duplicate image detection, finding detection, attribute quantification and explanatory localization. The pre-contest model had only 15-class classification and 14-class localization, so not all five tasks were in place yet. We decided to keep the pre-contest model and build T1 to T5 one by one after entering the organizer environment.

The pre-contest stage left two models: plan B and the CNN-only backup. RAD41 is a member of plan B, and the models in the next four parts all start from RAD41. Every score in this part comes from the pre-contest proxy task and cannot be converted to the 17-class finding detection score or the total score on the evaluation platform after entering the organizer environment. Each step’s threshold was set before the scores were seen: the +0.003 adoption threshold, the 0.003 cut-off and the FCOS stopping rule. Members or recipes whose gain did not clear the threshold were not added, because each extra member makes the model more complex. The held-out test was run only once, to confirm results, not to pick models.

processBefore & after

Backbone comparison

RAD-DINO
AUPRC 0.489151 · mAP 0.068586
DenseNet
AUPRC 0.444539 · mAP 0.010581

Proxy validation composite

seed 17
0.328686
seed 29
0.329670
seed 41
0.330335
41 + 29
0.348009
41 + 29 · 4 epochs
0.351650
RAD 1036
0.323505 · dropped
Full image + tiles
0.284590 · dropped
Plan B
0.361273 · adopted
CNN-only backup
0.298519 · kept as backup
Four members
0.361458 · dropped

resultTakeaways

Finding
RAD-DINO reached 0.489151 classification AUPRC and 0.068586 localization mAP, both above DenseNet at 0.444539 and 0.010581. The two-seed ensemble trained on to epoch 4 had a composite of 0.351650; adding EfficientNet to the classification ensemble gave plan B, with a composite of 0.361273.
Parameters
RAD-DINO · 518 input · seed 41 · batch 32 · last encoder layer adapted · all 15,000 images · 4 epochs
Open
These are all scores on the pre-contest proxy task and cannot be converted to the later 17-class finding detection score or total score on the platform. In the ChestDR external evaluation, plan B scored an AUPRC of 0.368690 and RAD41 on its own 0.363970.

logChangelog

2026-07-30
Compared backbones; settled on RAD-DINO
2026-07-30
Trained seeds 17, 29 and 41 for 3 epochs each; seed 41 slightly higher
2026-07-30
Extended the two-seed ensemble to epoch 4 and locked in plan B
2026-07-31
Finished RAD41 full retrain (15,000 images · 4 epochs)
2026-07-31
Ran ChestDR external check across 1,161 images and 8 shared labels

Related experiments

note
L.02(STUDY)2026

(2) A first working build

chest-xraypytorchrad-dino
note
L.03(STUDY)2026

(3) A new detection head

chest-xraypytorchrad-dino+1
note
L.04(STUDY)2026

(4) Recipes that missed the adoption bar

chest-xraypytorchretinanet
← LabL.01 / 14
1 / 1

100%