Knee MRI Abnormality Detection

Silver medal in Kaggle’s RSNA 2026 competition: 111th of 6,299 teams, 18th in the Efficiency Track

The RSNA Knee Abnormality Detection competition asked for a probability of twelve findings, from ACL tears to Baker’s cysts, for each knee MRI study. Only 58 of the 4,407 training studies carried expert labels; the rest had a radiology report. This post is the solution I built with my teammate huytngo, also published as a Kaggle Writeup. Its distinctive part is a set of crop readers placed by U-Nets trained on SKM-TEA, a public knee segmentation set. Code: github.com/asaraog/rsna-knee-silver.

Cite as: Saraogee A, huytngo. 111th Place Solution (18th in the Efficiency Track). Kaggle, 2026. doi:10.34740/kaggle/w/124605.

Abstract

Only 58 of the 4,407 training studies carry expert labels. Every training study has a radiology report, and the test set has none. Like most teams, we read the reports into soft labels and trained image models on them.

Our final submission blends two halves per finding. The hybrid half fuses an eight-arm window-MIL stack with two sagittal ConvNeXt readers, then adds a medial/lateral referee and twelve specialist members, most of them reading crops placed by SKM-TEA U-Nets. The public half is two public models, heliosli’s R7 and nartaa’s S6. Alone, the halves score 0.944 and 0.941 on the private set. Together they score 0.947.

Our labels set the ceiling. They came from the reports alone and score 0.909 macro AUC on the 58 expert studies. The 1st-place labels, read from the images as well as the reports, score 0.943 on the same studies.

Thanks to RSNA, the annotating radiologists and Kaggle. Thanks also to @nartaa, @heliosli and @dreaddevelopment, whose public models and recipes carried much of our score.

1. Overview

Every part’s predictions are turned into ranks before they are blended, so no part needs calibrating against another.

Figure 1. Solution overview

PartModelsWeight
Window-MIL stack8 arms: CoAtNet-2, ConvNeXt-V2-B, EfficientNet-B00.7 of the fuse
Sagittal CNN pairConvNeXt-Tiny, 2 × 5 folds0.3 of the fuse
Refereemedial/lateral and patellofemoral correctionsλ 0.1 and 0.2
Specialists12 members, each on its own findings0.2 to 0.5 per finding
Public halfR7 and S6, as published0.5 each
Finalhybrid half and public half, per finding0.5 each

Synovitis and PF OA take only 0.2 and 0.4 from the public half, where the hybrid half was stronger on the expert set. The stack and the CNN pair run in parallel, one per T4, and the public stages follow behind their own deadlines. The kernel finishes about ten minutes inside the 9 h limit. Full model parameters are in the appendix.

2. Labels

Our targets average two LLM reads of every report, a consensus read and a Claude read, for 0.909 macro AUC on the expert set (Appendix A). The reports span nine languages, and the signal sits in polarity, “intact” against “tear”, not in whether a finding is named. Better labels converted to better models almost one for one: a teacher 0.046 better on the expert set gave a student 0.039 better.

After the close, three teams published their labels, and we scored them on the same 58 studies.

Label setHow it was madeMacro AUCSynovitisEffusion
Oursreports only, LLM + Claude0.9090.8020.866
Public frontier blendthree frontier LLMs0.9270.8520.935
1st placeGPT Astra reading report and images0.9430.8810.945

Figure 2. Training-label sets on the 58 expert studies

Image-read labels lead most where reports are least reliable: Synovitis, Effusion and Contusion. The 1st-place guide was tuned on these 58 studies, so part of its lead is in-sample.

3. Models

Every model’s parameters are in the appendix. We set the weights one factor at a time: each moved only on a local gain, and stayed only if the public board held.

  • Window-MIL stack, 0.7 of the fuse. Eight arms on Dread Development’s public Raptor recipe, with CoAtNet-2 [1], ConvNeXt-V2-B [2] and EfficientNet-B0 [3] backbones. Each study becomes 42 windows from a 64-slice stack, and each arm pools its window features by gated attention into one score per finding (Appendix B).
  • Sagittal CNN pair, 0.3 of the fuse. Two ConvNeXt-Tiny [4] readers over 16 sagittal slices, one with top-k pooling and one with a learned medial-to-lateral pooling. The second only worked once slices were sorted by patient geometry: InstanceNumber ran one way in 295 of 633 sagittal series and the other way in 338.
  • Specialists. Three U-Nets [5] trained on SKM-TEA [6] place crops on the compartments, the notch, the patellofemoral joint and the medial edge. Seven ConvNeXt-Tiny crop readers took public from 0.954 to 0.958 (Appendix C). Five more add attention-MIL [7] crops, a multi-view transformer, a 3D CNN [8] and a reader trained on OAI knees with MOAKS [9] grades (Appendix D).
  • Referee. It corrects medial versus lateral for OA and menisci from the U-Net side calls and two crop models (λ 0.1), and PF OA from an anterior crop (λ 0.2).
  • Public half. R7 and S6 ran as published. On the private set, R7 adds about +0.002 beside S6, and S6 about +0.001 beside R7.

4. Testing

Figure 3. How the solution developed

CheckWhat it isHow we read it
Expert setthe 58 RSNA studies with expert labelsAUC per finding
OAI replica1,497 OAI knees run through the full kernel, 1,244 with expert MOAKS gradespaired bootstrap by participant
RSNA holdout217 RSNA studies kept out of training, report labelspaired bootstrap, 2,000 draws
Public boardKaggle’s public splitthe final call

Private ran about 0.013 below public throughout, and the order held (Spearman 0.95), so the public board was an honest gate.

5. Efficiency Track

Our second final pick, LITE V29, placed 18th on the Efficiency Track leaderboard. It is a reduced window-MIL stack that runs in about 50 minutes and scores 0.939 private, 0.950 public.

6. Conclusion

The two halves complement each other. On the private set the hybrid half alone scores 0.944 and the public half 0.941, and the blend reaches 0.947.

Variants on the final blend landed between 0.944 and 0.947, and a few ideas lost outright (Appendix E). What we would do differently:

  1. Read the images when making labels. 1st place labeled with GPT Astra reading the scans as well as the reports. In their matched comparison, those labels alone lifted the same CoAtNet from 0.922 to 0.935 public. Ours came from the reports alone.
  2. Build one strong student before blending. 7th place won gold with a single 2.5D network at 0.958 private. Our hybrid half has fourteen parts and scores 0.944 alone.
  3. Put anatomy into the main model. 1st place trained pooling and attention on anatomical and lesion boxes, and 5th place cut its main readers’ crops from a bone segmentation. Our SKM-TEA crops arrived late, as add-ons.
  4. Validate on more than 58 studies. 1st place selected models by a probability-weighted AUC on its continuous labels, and 6th place checked every label release against its own past board scores.
  5. Sort slices by patient geometry, never by InstanceNumber.

Code

Training and inference code for the sagittal CNN pair, the SKM-TEA U-Nets and the seven crop readers, with the exact run for each model: github.com/asaraog/rsna-knee-silver.

Credits

Team huytngo and apoorvsara. @nartaa for S6, @heliosli for R7, @dreaddevelopment for the Raptor recipe and its CC0 labels. The SKM-TEA team at Stanford for the segmentations, and the OAI for the MOAKS grades.

References

  1. Dai Z, Liu H, Le QV, Tan M. CoAtNet: Marrying Convolution and Attention for All Data Sizes. NeurIPS, 2021. arXiv:2106.04803
  2. Woo S, et al. ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders. CVPR, 2023. arXiv:2301.00808
  3. Tan M, Le QV. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. ICML, 2019. arXiv:1905.11946
  4. Liu Z, et al. A ConvNet for the 2020s. CVPR, 2022. arXiv:2201.03545
  5. Ronneberger O, Fischer P, Brox T. U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI, 2015. arXiv:1505.04597
  6. Desai AD, et al. SKM-TEA: A Dataset for Accelerated MRI Reconstruction with Dense Image Labels for Quantitative Clinical Evaluation. NeurIPS Datasets and Benchmarks, 2021. arXiv:2203.06823
  7. Ilse M, Tomczak JM, Welling M. Attention-based Deep Multiple Instance Learning. ICML, 2018. arXiv:1802.04712
  8. Tran D, et al. A Closer Look at Spatiotemporal Convolutions for Action Recognition. CVPR, 2018. arXiv:1711.11248
  9. Hunter DJ, et al. Evolution of semi-quantitative whole joint assessment of knee OA: MOAKS (MRI Osteoarthritis Knee Score). Osteoarthritis and Cartilage 19(8):990-1002, 2011. doi:10.1016/j.joca.2011.05.004
  10. Zbontar J, et al. fastMRI: An Open Dataset and Benchmarks for Accelerated MRI. 2018. arXiv:1811.08839
  11. Bien N, et al. Deep-learning-assisted diagnosis for knee magnetic resonance imaging: Development and retrospective validation of MRNet. PLOS Medicine 15(11):e1002699, 2018. doi:10.1371/journal.pmed.1002699
  12. Štajduhar I, et al. Semi-automated detection of anterior cruciate ligament injury from MRI. Computer Methods and Programs in Biomedicine 140:151-164, 2017. doi:10.1016/j.cmpb.2016.12.006
  13. Mei X, et al. RadImageNet: An Open Radiologic Deep Learning Research Dataset for Effective Transfer Learning. Radiology: Artificial Intelligence 4(5):e210315, 2022. doi:10.1148/ryai.210315

Appendix

A. Label sets on the 58 expert studies

Label setMacro AUC
community regex labeler0.812
regex + local Qwen2.5-7B, rank-averaged (on the 52 expert studies released by then)0.853
a public LLM label table (llm_labels_v4_blend)0.893
Claude, finding-by-finding read0.897
Claude, whole-report-first read0.904
labels_v4, LLM read re-adjudicated on 1,041 image- or consensus-disputed reports0.906
final: 0.5 labels_v4 + 0.5 Claude whole-report read0.909

Moving to the public LLM table lifted our public score from 0.862 to 0.903, our largest single jump.

B. Window-MIL stack

64 slices per study from up to five series roles (18, 14, 12, 8, 12), 42 shared windows, arms rank-averaged with equal weights. CoAtNet arms start from ImageNet weights, not the Raptor checkpoint.

ArmBackboneInputTraining data and targets
H6CoAtNet-2384 pxRSNA + a 65k-study external knee corpus (OAI, fastMRI [10], MRNet [11], SKM-TEA, KMAR-50K, Rijeka KneeMRI [12]), 4 epochs, stack-prediction targets
H6, seed 2CoAtNet-2384 pxas H6, second seed
CCoAtNet-2384 pxthe Raptor author’s CC0 LLM labels
CNXConvNeXt-V2-B384 pxa consensus of three label sets
CNXbigConvNeXt-V2-B384 pxRSNA + the external corpus, 4 epochs, stack-prediction targets
EB1EfficientNet-B0288 pxa consensus of three label sets
slot41, 2 seedsCoAtNet-2384 pxstack-prediction targets on a second slice allocation (14, 10, 16, 10, 14), kept as decorrelated members

C. SKM-TEA U-Nets and crop readers

smp U-Nets with a ResNet-34 encoder, trained on SKM-TEA’s 155 DESS knees [6] with six labels: four cartilage plates and two menisci. The side call comes from anatomy and matches the DICOM laterality tag in 98.8% of tagged RSNA studies.

U-NetTraining dataHeld-out Dice
sagittalDESS echoes mixed, gamma and noise, 384 px at 0.417 mm/px0.845
coronalthe same volumes resliced, random left-right flips0.806
axialthe same volumes resliced0.819

Crop readers: ConvNeXt-Tiny (ImageNet-22k) on the 8 slices with the most label area, 224 px, mean + max pooled, 5 folds × 12 epochs on the public label table, loss on visible findings only.

MemberPlaneWindowFindingsWeight
crop v1sagittal56 mm on each compartmentboth menisci, Medial and Lateral OA0.3
crop v2sagittal64 mm notch; 64 mm patellofemoralACL; PF OA0.5
crop v3sagittal80 mm, medial edge, shifted posteriorBaker’s0.3
coronalcoronal56 mm on each compartmentboth menisci, Medial and Lateral OA0.5
coronal MCLcoronalthe coronal crops, MCL headMCL0.3
two-planeboth8 sagittal + 8 coronal crops per compartment, one networkboth menisci, Medial and Lateral OA0.2
axialaxial8 × 80 mm on the patellar cartilagePF OA, Effusion, Synovitis0.3

D. Other specialists, referee and sagittal CNN pair

MemberModelInputFindingsWeight
ZC-PConvNeXt-V2-Tiny + attention MIL, 3 seeds × 5 foldssagittal posterior cropSynovitis0.3
ZC-XConvNeXt-V2-Tiny + attention MIL, 5 foldsaxial patellofemoral crop, 224 × 320Synovitis0.3
MV-ARMConvNeXt-V2-Tiny per region crop, region and slice embeddings, 2-layer transformer, 3 seedscrops planned by SKM-TEA segmenters on all three planesboth menisci, Synovitis, Contusion0.3
BIG-3Dtorchvision r3d_18 shared over three whole stacks, 2-layer transformer, 2 seedssagittal, coronal and axial stacks at 32 × 224 × 224Lateral Meniscus, PF OA, Baker’s, Contusion0.3
Hoffa (OAI)the sagittal ConvNeXt recipe16 sagittal slicesSynovitis0.3
M/L refereeU-Net side calls, a position-aware sagittal reader, ConvNeXt-V2-Tiny + attention MIL, 3 seedscompartment cropsMedial and Lateral OA, both menisciλ 0.1
PF refereeConvNeXt-V2-Tiny + attention MILanterior cropPF OAλ 0.2
wCNXConvNeXt-Tiny, top-k per finding (3 Baker’s, Contusion, Fracture; 6 ligaments, menisci; 12 Effusion, Synovitis; 16 OA), 5 folds16 sagittal slices, 384 px, 130 mm windowall0.3 of the fuse, with wPW16
wPW16ConvNeXt-Tiny, learned medial-to-lateral pooling, 5 folds, retrained on the blended labelsas wCNXall0.3 of the fuse, with wCNX

E. What did not help

Each change is against the same model without it. The private rows are late submissions against the final pick’s 0.947; a range means several submissions.

IdeaMeasured onChange in score
RadImageNet [13] instead of ImageNet weightsexpert set-0.062
suprapatellar pouch crops instead of the axial crop, Synovitisexpert set-0.029
distilling a teacher into the expert folds it had already seen (+0.016 on the expert set)public-0.006
warping knees into an atlas space instead of cropping each kneeout-of-fold-0.004
3D members trained on OAI MOAKS gradesprivate-0.003 to 0.000
a 9-model 3D ensembleprivate-0.002 to 0.000

The 3D ensemble lost only when spread to 9 to 12 findings or when a member ran out of memory. On its original findings it scored 0.000 private and +0.001 public.

0%