{
  "id": 741618,
  "ownerSlug": "ruicompany",
  "slug": "rsna-knee-a5-rad",
  "title": "rsna-knee-a5-rad",
  "subtitle": "",
  "isPrivate": false,
  "description": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F33637499%2Fa503ca0a0f5f0e786f77ed83eab2fb5e%2Frsna-knee-a5-rad.png?generation=1786866542541073&alt=media)\n\n---\n\n## \u26a0\ufe0f \u062a\u062d\u0630\u064a\u0631 \u0642\u0627\u0646\u0648\u0646\u064a \u0648\u0633\u0631\u064a\u0631\u064a\n\n> **\u0647\u0630\u0627 \u0627\u0644\u0646\u0638\u0627\u0645 \u0647\u0648 \u0646\u0645\u0648\u0630\u062c \u0628\u062d\u062b\u064a / \u062a\u0646\u0627\u0641\u0633\u064a \u2014 \u0644\u064a\u0633 \u062c\u0647\u0627\u0632\u064b\u0627 \u0637\u0628\u064a\u064b\u0627.**  \n> \u0644\u0645 \u064a\u062a\u0645 \u0627\u0639\u062a\u0645\u0627\u062f\u0647 \u0623\u0648 \u062a\u0635\u0631\u064a\u062d\u0647 \u0645\u0646 \u0642\u0628\u0644 \u0623\u064a \u062c\u0647\u0629 \u062a\u0646\u0638\u064a\u0645\u064a\u0629 (FDA, CE \u0623\u0648 \u063a\u064a\u0631\u0647\u0627)\u060c \u0648\u0644\u0645 \u064a\u062e\u0636\u0639 \u0644\u0644\u062a\u062d\u0642\u0642 \u0627\u0644\u0633\u0631\u064a\u0631\u064a \u0627\u0644\u0627\u0633\u062a\u0628\u0627\u0642\u064a.  \n> **\u064a\u062c\u0628 \u0639\u062f\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0643\u0623\u0633\u0627\u0633 \u0648\u062d\u064a\u062f \u0644\u0644\u062a\u0634\u062e\u064a\u0635 \u0623\u0648 \u0627\u0644\u0639\u0644\u0627\u062c.**  \n> \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u062e\u0631\u062c\u0627\u062a \u062a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0645\u0646 \u0642\u0628\u0644 \u0623\u062e\u0635\u0627\u0626\u064a \u0623\u0634\u0639\u0629 \u0645\u0639\u062a\u0645\u062f.\n\n---\n\n## 1. \u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629\n\n**RSNA Knee Abnormality Detection** \u0647\u0648 \u062e\u0637 \u0623\u0646\u0627\u0628\u064a\u0628 \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0645\u064f\u0624\u062a\u0645\u062a \u0628\u0627\u0644\u0643\u0627\u0645\u0644 \u0644\u0641\u062d\u0635 \u062f\u0631\u0627\u0633\u0627\u062a **MRI \u0644\u0644\u0631\u0643\u0628\u0629** \u0648\u0627\u0643\u062a\u0634\u0627\u0641 12 \u0646\u0648\u0639\u064b\u0627 \u0645\u0646 \u0627\u0644\u0634\u0630\u0648\u0630\u0627\u062a (Abnormalities) \u0644\u0643\u0644 \u062f\u0631\u0627\u0633\u0629.\n\n| \u0627\u0644\u0628\u064f\u0639\u062f | \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 |\n|--------|----------|\n| **\u0639\u062f\u062f \u0627\u0644\u062a\u0635\u0646\u064a\u0641\u0627\u062a** | 12 \u0634\u0630\u0648\u0630\u064b\u0627 \u0644\u0643\u0644 \u062f\u0631\u0627\u0633\u0629 |\n| **\u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a** | \u0633\u0644\u0627\u0633\u0644 DICOM \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u0648\u064a\u0627\u062a (Sagittal, Coronal, Axial) |\n| **\u0627\u0644\u0645\u062e\u0631\u062c\u0627\u062a** | \u0645\u062a\u062c\u0647 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u062a 12 \u0628\u064f\u0639\u062f\u064b\u0627 (0\u20131) \u0644\u0643\u0644 \u062f\u0631\u0627\u0633\u0629 |\n| **\u0627\u0644\u0628\u0646\u064a\u0629** | Ensemble \u0645\u0632\u062f\u0648\u062c: DINOv3 ViT + RadImageNet ResNet-50 |\n| **\u0627\u0644\u062d\u062c\u0645** | ~700 MB (10 \u0646\u0645\u0627\u0630\u062c + Encoder + \u0633\u0643\u0631\u0628\u062a \u0627\u0644\u0627\u0633\u062a\u062f\u0644\u0627\u0644) |\n| **\u0627\u0644\u062a\u0631\u062e\u064a\u0635** | \u0646\u0645\u0648\u0630\u062c \u0628\u062d\u062b\u064a \u2014 \u063a\u064a\u0631 \u0633\u0631\u064a\u0631\u064a |\n\n### \u0627\u0644\u062a\u0635\u0646\u064a\u0641\u0627\u062a \u0627\u0644\u0640 12\n\n1. **ACL** \u2014 \u062a\u0645\u0632\u0642 \u0627\u0644\u0631\u0628\u0627\u0637 \u0627\u0644\u0635\u0644\u064a\u0628\u064a \u0627\u0644\u0623\u0645\u0627\u0645\u064a\n2. **MCL** \u2014 \u062a\u0645\u0632\u0642 \u0627\u0644\u0631\u0628\u0627\u0637 \u0627\u0644\u062c\u0627\u0646\u0628\u064a \u0627\u0644\u0625\u0646\u0633\u064a\n3. **Medial Meniscus** \u2014 \u062a\u0645\u0632\u0642 \u0627\u0644\u063a\u0636\u0631\u0648\u0641 \u0627\u0644\u0647\u0644\u0627\u0644\u064a \u0627\u0644\u0625\u0646\u0633\u064a\n4. **Lateral Meniscus** \u2014 \u062a\u0645\u0632\u0642 \u0627\u0644\u063a\u0636\u0631\u0648\u0641 \u0627\u0644\u0647\u0644\u0627\u0644\u064a \u0627\u0644\u062c\u0627\u0646\u0628\u064a\n5. **Medial OA** \u2014 \u0627\u0644\u062a\u0647\u0627\u0628 \u0627\u0644\u0645\u0641\u0627\u0635\u0644 \u0627\u0644\u0625\u0646\u0633\u064a\n6. **Lateral OA** \u2014 \u0627\u0644\u062a\u0647\u0627\u0628 \u0627\u0644\u0645\u0641\u0627\u0635\u0644 \u0627\u0644\u062c\u0627\u0646\u0628\u064a\n7. **PF OA** \u2014 \u0627\u0644\u062a\u0647\u0627\u0628 \u0627\u0644\u0645\u0641\u0627\u0635\u0644 \u0627\u0644\u0631\u0636\u0641\u064a\n8. **Effusion** \u2014 \u0627\u0646\u0635\u0628\u0627\u0628 \u0645\u0641\u0635\u0644\u064a\n9. **Synovitis** \u2014 \u0627\u0644\u062a\u0647\u0627\u0628 \u0627\u0644\u063a\u0634\u0627\u0621 \u0627\u0644\u0632\u0644\u064a\u0644\u064a\n10. **Baker's Cyst** \u2014 \u0643\u064a\u0633 \u0628\u064a\u0643\u0631\n11. **Contusion** \u2014 \u0643\u062f\u0645\u0629 \u0639\u0638\u0645\u064a\u0629\n12. **Fracture** \u2014 \u0643\u0633\u0631\n\n---\n\n## 2. \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u0645\u0639\u0645\u0627\u0631\u064a\u0629\n\n\u0627\u0644\u0646\u0638\u0627\u0645 \u064a\u0639\u062a\u0645\u062f \u0639\u0644\u0649 **\u0641\u0631\u0639\u064a\u0646 \u0645\u0633\u062a\u0642\u0644\u064a\u0646** \u064a\u062a\u0645 \u062f\u0645\u062c \u0645\u062e\u0631\u062c\u0627\u062a\u0647\u0645\u0627 \u0639\u0628\u0631 **Ensemble \u0642\u0627\u0626\u0645 \u0639\u0644\u0649 \u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0645\u0626\u0648\u064a (Percentile-Rank Ensemble)**.\n\n### 2.1 \u0627\u0644\u0641\u0631\u0639 \u0627\u0644\u0623\u0648\u0644 \u2014 \"A5\": DINOv3 Vision Transformer Ensemble\n\n| \u0627\u0644\u0645\u0643\u0648\u0646 | \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 |\n|--------|----------|\n| **Backbone** | `vit_small_patch16_dinov3` (\u0639\u0628\u0631 \u0645\u0643\u062a\u0628\u0629 `timm`) |\n| **\u0627\u0644\u062a\u062c\u0645\u064a\u0639** | 5 \u0646\u0645\u0627\u0630\u062c (m_f0 ... m_f4) \u0645\u062f\u0631\u0628\u0629 \u0628\u0634\u0643\u0644 \u0645\u0633\u062a\u0642\u0644 |\n| **\u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a** | 6 \"\u0641\u062a\u062d\u0627\u062a\" (Slots): Sagittal-FS, Sagittal, Coronal-FS, Coronal, Axial-FS, Axial |\n| **\u0627\u0644\u0634\u0631\u0627\u0626\u062d** | \u062d\u062a\u0649 16 \u0634\u0631\u064a\u062d\u0629 \u0644\u0643\u0644 \u0641\u062a\u062d\u0629\u060c 336\u00d7336 \u0628\u0643\u0633\u0644 |\n| **\u0627\u0644\u0639\u064a\u0646\u0629** | \u0627\u0644\u0639\u064a\u0646\u0627\u062a \u0645\u0646 12% \u0625\u0644\u0649 88% \u0645\u0646 \u0627\u0644\u0633\u0644\u0633\u0644\u0629 (\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u0645\u0631\u0643\u0632\u064a 76%) |\n\n#### \u0622\u0644\u064a\u0629 Slot Conditioning\n- \u064a\u062a\u0645 \u0625\u062f\u062e\u0627\u0644 **\u0631\u0645\u0632 \u062a\u0636\u0645\u064a\u0646 \u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u0644\u0645** (ViTSlotToken) \u0644\u0643\u0644 \u0641\u062a\u062d\u0629 \u0636\u0645\u0646 \u062a\u0633\u0644\u0633\u0644 \u0627\u0644\u0631\u0645\u0648\u0632 \u0642\u0628\u0644 \u0637\u0628\u0642\u0627\u062a \u0627\u0644\u0645\u062d\u0648\u0644.\n- \u0647\u0630\u0627 \u064a\u0633\u0645\u062d \u0644\u0644\u0646\u0645\u0648\u0630\u062c \u0628\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u062a\u0634\u0631\u064a\u062d\u064a \u0648\u0646\u0648\u0639 \u0627\u0644\u062a\u0633\u0644\u0633\u0644 (\u0645\u0639/\u0628\u062f\u0648\u0646 \u0642\u0645\u0639 \u0627\u0644\u062f\u0647\u0646) \u0644\u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0634\u0631\u0627\u0626\u062d.\n- \u0627\u0644\u0641\u062a\u062d\u0627\u062a \u0627\u0644\u0645\u0641\u0642\u0648\u062f\u0629 \u064a\u062a\u0645 **\u062a\u0635\u0641\u064a\u0631\u0647\u0627** (Zero-masked) \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0627\u0644\u0641\u0634\u0644 \u2014 \u064a\u062a\u062f\u0647\u0648\u0631 \u0627\u0644\u0623\u062f\u0627\u0621 \u0628\u0633\u0644\u0627\u0633\u0629 \u0639\u0644\u0649 \u0627\u0644\u062f\u0631\u0627\u0633\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0643\u062a\u0645\u0644\u0629.\n\n#### \u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u062a\u0627\u0646 \u0644\u0644\u062a\u062c\u0645\u064a\u0639 (Pooling)\n\n**\u0623) MeanMaxPool (\u0627\u0644\u0628\u0633\u064a\u0637\u0629):**\n- \u062a\u062c\u0645\u064a\u0639 \u0645\u062a\u0648\u0633\u0637 + \u0623\u0642\u0635\u0649 \u0642\u064a\u0645\u0629 \u0639\u0628\u0631 \u062c\u0645\u064a\u0639 \u0627\u0644\u0634\u0631\u0627\u0626\u062d \u0627\u0644\u0635\u0627\u0644\u062d\u0629.\n- \u062a\u0636\u0645\u064a\u0646 \u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u0644\u0645 \u0644\u0648\u062c\u0648\u062f \u0627\u0644\u0641\u062a\u062d\u0629 (Slot-presence).\n- \u0631\u0623\u0633 \u062a\u0635\u0646\u064a\u0641: LayerNorm \u2192 Dropout \u2192 Linear \u2192 12 Logit.\n\n**\u0628) TokenXAttnPool (\u0627\u0644\u063a\u0646\u064a\u0629):**\n- 12 \u0645\u062a\u062c\u0647 \u0627\u0633\u062a\u0639\u0644\u0627\u0645 \u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u0644\u0645 (Query vector) \u2014 \u0648\u0627\u062d\u062f \u0644\u0643\u0644 \u0634\u0630\u0648\u0630.\n- **Cross-Attention** \u0645\u062a\u0639\u062f\u062f \u0627\u0644\u0631\u0624\u0648\u0633 \u0641\u0648\u0642 \u062c\u0645\u064a\u0639 \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u0635\u0627\u0644\u062d\u0629 (\u0645\u0639 \u0642\u0646\u0627\u0639 \u0644\u0644\u0641\u062a\u062d\u0627\u062a \u0627\u0644\u0645\u0641\u0642\u0648\u062f\u0629).\n- \u064a\u064f\u0645\u0643\u0651\u0646 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0645\u0646 \"\u062a\u0639\u0644\u0645\" \u0623\u0646 \u062f\u0644\u0627\u0626\u0644 ACL \u062a\u0623\u062a\u064a \u063a\u0627\u0644\u0628\u064b\u0627 \u0645\u0646 \u0627\u0644\u0634\u0631\u0627\u0626\u062d \u0627\u0644\u0633\u0647\u0645\u064a\u0629\u060c \u0628\u064a\u0646\u0645\u0627 \u062f\u0644\u0627\u0626\u0644 \u0627\u0644\u063a\u0636\u0631\u0648\u0641 \u0627\u0644\u0647\u0644\u0627\u0644\u064a \u062a\u0623\u062a\u064a \u0645\u0646 \u0645\u0632\u064a\u062c \u0645\u062e\u062a\u0644\u0641.\n- \u064a\u062a\u0645 \u062a\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u062e\u0631\u062c \u0645\u0639 Mean/Max Pool + Slot-presence embedding \u2192 Linear \u0644\u0643\u0644 \u062a\u0635\u0646\u064a\u0641.\n\n#### \u0636\u063a\u0637 \u0627\u0644\u0639\u0645\u0642 (DepthCompress \u2014 \u0627\u062e\u062a\u064a\u0627\u0631\u064a)\n- \u064a\u0636\u063a\u0637 16 \u0634\u0631\u064a\u062d\u0629 \u0625\u0644\u0649 3 \u0642\u0646\u0648\u0627\u062a (Pseudo-RGB) \u0639\u0628\u0631 \u0628\u0642\u0627\u064a\u0627 1\u00d71 Convolutions \u0645\u0639 \u0628\u0648\u0627\u0628\u0627\u062a SiLU.\n- \u064a\u062a\u0628\u0639\u0647 ImageNet normalization \u0642\u0628\u0644 \u062f\u062e\u0648\u0644 \u0627\u0644\u0645\u062d\u0648\u0644.\n\n---\n\n### 2.2 \u0627\u0644\u0641\u0631\u0639 \u0627\u0644\u062b\u0627\u0646\u064a \u2014 \"Rad\": RadImageNet ResNet-50 Cross-Attention Ensemble\n\n| \u0627\u0644\u0645\u0643\u0648\u0646 | \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 |\n|--------|----------|\n| **Backbone** | ResNet-50 \u0645\u064f\u062f\u0631\u0628 \u0645\u0633\u0628\u0642\u064b\u0627 \u0639\u0644\u0649 **RadImageNet** (~6.5 \u0645\u0644\u064a\u0648\u0646 \u0635\u0648\u0631\u0629 CT/MR/Ultrasound) |\n| **\u0627\u0644\u062d\u0627\u0644\u0629** | **\u0645\u062c\u0645\u062f** (Frozen) \u2014 \u064a\u064f\u0633\u062a\u062e\u062f\u0645 \u0643\u0645\u0633\u062a\u062e\u0631\u062c \u0645\u064a\u0632\u0627\u062a \u0641\u0642\u0637 |\n| **\u0627\u0644\u0645\u064a\u0632\u0627\u062a** | 2048 \u0628\u064f\u0639\u062f\u064b\u0627 \u0644\u0643\u0644 \u0634\u0631\u064a\u062d\u0629 (Global Average Pooling) |\n| **\u0627\u0644\u062a\u062c\u0645\u064a\u0639** | 5 \u0631\u0624\u0648\u0633 \u062a\u0635\u0646\u064a\u0641 (Classification Heads) \u062e\u0641\u064a\u0641\u0629 \u0627\u0644\u0648\u0632\u0646 |\n| **\u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a** | 3 \u0645\u0633\u062a\u0648\u064a\u0627\u062a \u00d7 8 \u0634\u0631\u0627\u0626\u062d \u00d7 224\u00d7224 (\u064a\u0641\u0636\u0644 \u0627\u0644\u062a\u0633\u0644\u0633\u0644\u0627\u062a \u0645\u0639 \u0642\u0645\u0639 \u0627\u0644\u062f\u0647\u0646) |\n\n#### \u0622\u0644\u064a\u0629 \u0627\u0644\u0631\u0623\u0633 (Head Architecture)\n1. **\u0625\u0633\u0642\u0627\u0637** \u0627\u0644\u0645\u064a\u0632\u0627\u062a \u0645\u0646 2048 \u0625\u0644\u0649 512 \u0628\u064f\u0639\u062f\u064b\u0627.\n2. **\u0625\u0636\u0627\u0641\u0629 \u062a\u0636\u0645\u064a\u0646\u0627\u062a** \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u062a\u0639\u0644\u0645 \u0644\u0643\u0644 \u0645\u0633\u062a\u0648\u0649 \u0648\u0644\u0643\u0644 \u0645\u0648\u0636\u0639 \u0634\u0631\u064a\u062d\u0629 (3\u00d78 = 24 \u0631\u0645\u0632\u064b\u0627).\n3. **Cross-Attention** \u0645\u062a\u0639\u062f\u062f \u0627\u0644\u0631\u0624\u0648\u0633: 12 \u0645\u062a\u062c\u0647 \u0627\u0633\u062a\u0639\u0644\u0627\u0645 (Query) \u0644\u0643\u0644 \u0634\u0630\u0648\u0630 \u2192 \u064a\u062a\u0641\u0627\u0639\u0644 \u0645\u0639 24 \u0631\u0645\u0632\u064b\u0627.\n4. **\u0627\u0644\u062f\u0645\u062c**: Concatenate [Attended Vector, Mean Pool, Abs Diff, Element-wise Product].\n5. **MLP \u0635\u063a\u064a\u0631** + Linear \u0644\u0643\u0644 \u062a\u0635\u0646\u064a\u0641 \u2192 12 Logit.\n\n---\n\n### 2.3 \u0645\u0639\u0627\u0644\u062c\u0629 \u0645\u0627 \u0642\u0628\u0644 \u0627\u0644\u062a\u0634\u063a\u064a\u0644 (Preprocessing)\n\n\u064a\u0639\u0627\u0644\u062c \u0643\u0644\u0627 \u0627\u0644\u0641\u0631\u0639\u064a\u0646 \u0646\u0641\u0633 \u0645\u0633\u0627\u0631 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0645\u0634\u062a\u0631\u0643:\n\n| \u0627\u0644\u062e\u0637\u0648\u0629 | \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644 |\n|--------|----------|\n| **\u0627\u0644\u062a\u0631\u062a\u064a\u0628** | \u062a\u0631\u062a\u064a\u0628 \u062d\u0627\u0644\u0627\u062a DICOM \u062d\u0633\u0628 `InstanceNumber` |\n| **\u0627\u0644\u0627\u0642\u062a\u0635\u0627\u0635** | \u0627\u0642\u062a\u0635\u0627\u0635 \u0645\u0631\u0643\u0632\u064a \u0644\u062d\u0642\u0644 \u0631\u0624\u064a\u0629 ~130 \u0645\u0645 (\u0645\u0646 `PixelSpacing`) \u2014 \u064a\u064f\u0648\u062d\u0651\u062f \u0627\u0644\u0645\u0642\u064a\u0627\u0633 \u0627\u0644\u062a\u0634\u0631\u064a\u062d\u064a |\n| **\u0627\u0644\u0646\u0648\u0627\u0641\u0630\u0629** | Windowing \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 1\u201399 (\u0645\u0642\u0627\u0648\u0645 \u0644\u0644\u0642\u064a\u0645 \u0627\u0644\u0634\u0627\u0630\u0629) |\n| **\u0627\u0644\u062d\u062c\u0645** | \u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u062d\u062c\u0645 \u0625\u0644\u0649 336\u00d7336 (A5) \u0623\u0648 224\u00d7224 (Rad) |\n| **\u0627\u0644\u0627\u0646\u0639\u0643\u0627\u0633** | \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 `ImagePositionPatient` \u0644\u0627\u0643\u062a\u0634\u0627\u0641 \u0627\u0644\u0627\u0646\u0639\u0643\u0627\u0633 \u0627\u0644\u0623\u0641\u0642\u064a \u0648\u062a\u0635\u062d\u064a\u062d\u0647 |\n| **\u0627\u0644\u062a\u062e\u0635\u064a\u0635** | \u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u0633\u0644\u0627\u0633\u0644 \u0645\u0639 \u0627\u0644\u0641\u062a\u062d\u0627\u062a \u0639\u0628\u0631 `Anatomical_Plane` \u0648 `Fat_Suppression` |\n| **\u0627\u0644\u062a\u0639\u0627\u0645\u0644 \u0645\u0639 \u0627\u0644\u0646\u0642\u0635** | \u0627\u0644\u0641\u062a\u062d\u0627\u062a \u0627\u0644\u0645\u0641\u0642\u0648\u062f\u0629 = Zero-masked\u060c \u0648\u0627\u0644\u062a\u062c\u0645\u064a\u0639\u0627\u062a \u062a\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0645\u0648\u0627\u0636\u0639 \u0627\u0644\u0645\u0642\u0646\u0651\u0639\u0629 |\n\n---\n\n### 2.4 \u062f\u0645\u062c \u0627\u0644\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u0645\u0626\u0648\u064a (Rank-Based Ensemble)\n\n\u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u062f\u0645\u062c \u0627\u0644\u0627\u062d\u062a\u0645\u0627\u0644\u0627\u062a \u0627\u0644\u062e\u0627\u0645 (\u063a\u064a\u0631 \u0645\u0648\u062b\u0648\u0642\u0629 \u0639\u0646\u062f \u0627\u062e\u062a\u0644\u0627\u0641 \u0627\u0644\u0645\u0639\u0627\u064a\u0631\u0629 \u0628\u064a\u0646 \u0627\u0644\u0639\u0627\u0626\u0644\u0627\u062a):\n\n```\nfinal_score = 0.60 \u00d7 rank(A5_ensemble) + 0.40 \u00d7 rank(Rad_ensemble)\n```\n\n| \u0627\u0644\u0641\u0631\u0639 | \u0627\u0644\u0639\u0645\u0644\u064a\u0629 |\n|-------|---------|\n| **A5** | \u062a\u062d\u0648\u064a\u0644 Sigmoid \u0643\u0644 Fold \u0625\u0644\u0649 \u062a\u0631\u062a\u064a\u0628 \u0645\u0626\u0648\u064a \u2192 \u0645\u062a\u0648\u0633\u0637 5 \u062a\u0631\u062a\u064a\u0628\u0627\u062a |\n| **Rad** | \u0645\u062a\u0648\u0633\u0637 Sigmoid \u0627\u0644\u0640 5 Heads \u2192 \u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0646\u0627\u062a\u062c \u0625\u0644\u0649 \u062a\u0631\u062a\u064a\u0628 \u0645\u0626\u0648\u064a |\n| **\u0627\u0644\u0646\u0647\u0627\u0626\u064a** | 60% A5 + 40% Rad |\n\n> **\u0627\u0644\u062a\u0631\u062c\u064a\u062d:** \u064a\u064f\u0639\u0637\u0649 \u0627\u0644\u0641\u0631\u0639 A5 (DINOv3) \u0648\u0632\u0646\u064b\u0627 \u0623\u0643\u0628\u0631 (60%) \u0628\u064a\u0646\u0645\u0627 \u064a\u0633\u0645\u062d \u0627\u0644\u0641\u0631\u0639 Rad \u0628\u062a\u0635\u062d\u064a\u062d \u0623\u0648 \u062a\u0639\u0632\u064a\u0632 \u0627\u0644\u062a\u0646\u0628\u0624\u0627\u062a \u0627\u0644\u0641\u0631\u062f\u064a\u0629.\n\n---\n\n## 3. \u0645\u062d\u062a\u0648\u064a\u0627\u062a \u062d\u0632\u0645\u0629 Kaggle Model\n\n| \u0627\u0644\u0645\u0644\u0641 | \u0627\u0644\u0648\u0635\u0641 | \u0627\u0644\u062d\u062c\u0645 |\n|-------|-------|-------|\n| `a5/m_f0.pt` \u2026 `m_f4.pt` | 5 \u0646\u0645\u0627\u0630\u062c DINOv3 ViT-Small (\u0641\u0631\u0639 A5) | ~5 \u00d7 90 MB |\n| `rad/ResNet50.pt` | Encoder ResNet-50 \u0645\u064f\u062f\u0631\u0628 \u0639\u0644\u0649 RadImageNet (\u0645\u062c\u0645\u062f) | ~90 MB |\n| `rad/v52_radimagenet_heads.pt` | 5 \u0631\u0624\u0648\u0633 Cross-Attention (\u0641\u0631\u0639 Rad) | ~61 MB |\n| `inference.py` | \u0633\u0643\u0631\u0628\u062a \u0627\u0644\u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0627\u0644\u0643\u0627\u0645\u0644 \u0645\u0646 DICOM \u0625\u0644\u0649 Score | ~24 KB |\n| `requirements.txt` / `metadata.json` | \u0645\u0648\u0627\u0635\u0641\u0627\u062a \u0627\u0644\u0628\u064a\u0626\u0629 \u0648\u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0646\u0645\u0648\u0630\u062c | < 1 KB |\n\n**\u0627\u0644\u062d\u062c\u0645 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a:** ~700 MB\n\n---\n\n## 4. \u0643\u064a\u0641\u064a\u0629 \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645\n\n### 4.1 \u0627\u0644\u062a\u062b\u0628\u064a\u062a \u0648\u0627\u0644\u062a\u062d\u0645\u064a\u0644\n\n```python\nimport kagglehub\nimport sys\nfrom pathlib import Path\nimport importlib.util\n\n# 1. \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c\nMODEL_PATH = kagglehub.model_download(\"ruicompany/rsna-knee-a5-rad/pytorch/pytorch\")\nprint(f\"\u2705 \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0645\u062d\u0645\u0644 \u0639\u0646\u062f: {MODEL_PATH}\")\n\n# 2. \u0627\u0633\u062a\u064a\u0631\u0627\u062f \u062e\u0637 \u0627\u0644\u0623\u0646\u0627\u0628\u064a\u0628\nsys.path.insert(0, str(MODEL_PATH))\nspec = importlib.util.spec_from_file_location(\n    \"inference_pipeline\", \n    Path(MODEL_PATH) / \"inference.py\"\n)\npipe = importlib.util.module_from_spec(spec)\nspec.loader.exec_module(pipe)\n\nLABELS = pipe.LABELS\n```\n\n### 4.2 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0641\u0631\u0639 Rad (\u0644\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a \u0627\u0644\u0633\u0631\u064a\u0639)\n\n```python\nimport torch\nimport numpy as np\nfrom pathlib import Path\n\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n# --- Encoder ---\nencoder = pipe._RadEncoder()\nenc_path = Path(MODEL_PATH) / \"rad\" / \"ResNet50.pt\"\nencoder.load_state_dict(\n    torch.load(enc_path, map_location=\"cpu\", weights_only=True), \n    strict=True\n)\nencoder = encoder.to(device).eval()\nfor p in encoder.parameters():\n    p.requires_grad_(False)\n\n# --- 5 Heads ---\nheads = []\nheads_path = Path(MODEL_PATH) / \"rad\" / \"v52_radimagenet_heads.pt\"\npayload = torch.load(heads_path, map_location=\"cpu\", weights_only=True)\n\nfor rec in payload[\"folds\"]:\n    h = pipe._RadHead().to(device).eval()\n    h.load_state_dict(rec[\"state_dict\"), strict=True)\n    heads.append(h)\n\nprint(f\"\u2705 \u062a\u062d\u0645\u0651\u0644\u062a {len(heads)} RadImageNet heads \u0639\u0644\u0649 {device}\")\n```\n\n### 4.3 \u0627\u0644\u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0639\u0644\u0649 \u0635\u0648\u0631\u0629 \u0648\u0627\u062d\u062f\u0629 (Single-Image Demo)\n\n> \u26a0\ufe0f \u0647\u0630\u0627 \u0644\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a \u0627\u0644\u0633\u0631\u064a\u0639 \u0641\u0642\u0637. \u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u0623\u0635\u0644\u064a \u0645\u062f\u0631\u0628 \u0639\u0644\u0649 **\u062f\u0631\u0627\u0633\u0627\u062a DICOM \u0643\u0627\u0645\u0644\u0629** (3D \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u0648\u064a\u0627\u062a).\n\n```python\nfrom PIL import Image\nimport pydicom\nimport io\n\ndef dicom_to_pil(content):\n    \"\"\"\u062a\u062d\u0648\u064a\u0644 DICOM bytes \u0625\u0644\u0649 PIL Image \u0631\u0645\u0627\u062f\u064a\"\"\"\n    ds = pydicom.dcmread(io.BytesIO(content))\n    arr = ds.pixel_array.astype(np.float32)\n    slope = float(getattr(ds, 'RescaleSlope', 1))\n    intercept = float(getattr(ds, 'RescaleIntercept', 0))\n    arr = arr * slope + intercept\n    lo, hi = np.percentile(arr, [1, 99])\n    arr = np.clip((arr - lo) / max(hi - lo, 1e-6), 0, 1) * 255\n    return Image.fromarray(arr.astype(np.uint8)).convert('L')\n\n# --- \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0635\u0648\u0631\u0629 ---\n# img = Image.open(\"slice.png\").convert('L')          # PNG/JPG\n# img = dicom_to_pil(open(\"slice.dcm\", \"rb\").read())  # DICOM\n\n# --- \u062a\u062c\u0647\u064a\u0632 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a ---\nimg224 = img.resize((224, 224))\narr = np.array(img224, dtype=np.uint8)\n\n# 1 \u062f\u0631\u0627\u0633\u0629 \u00d7 3 \u0645\u0633\u062a\u0648\u064a\u0627\u062a \u00d7 8 \u0634\u0631\u0627\u0626\u062d \u00d7 224\u00d7224\nimages = np.zeros((1, 3, 8, 224, 224), dtype=np.uint8)\nimages[0] = arr  # broadcast \u0646\u0641\u0633 \u0627\u0644\u0634\u0631\u064a\u062d\u0629 \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0648\u0627\u0636\u0639\n\n# \u0642\u0646\u0627\u0639: 3 \u0645\u0633\u062a\u0648\u064a\u0627\u062a \u00d7 8 \u0634\u0631\u0627\u0626\u062d \u0635\u0627\u0644\u062d\u0629\nmasks = np.full((1, 3), 8, dtype=np.uint8)\n\n# --- \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0644\u0645\u064a\u0632\u0627\u062a ---\nn = 1\nfeatures = np.zeros((n, 24, 2048), np.float16)\ntoken_mask = np.repeat(masks[:, :, None], 8, axis=2).reshape(n, -1)\nvalid = np.flatnonzero(token_mask.reshape(-1) > 0)\nflat = images.reshape(-1, 224, 224)\n\nbatch = 96 if device.type == \"cuda\" else 8\nfor start in range(0, len(valid), batch):\n    indices = valid[start:start + batch]\n    image_t = torch.from_numpy(flat[indices]).to(device).float()\n    image_t = image_t.div(127.5).sub(1.0)  # Normalization: [-1, 1]\n    image_t = image_t.unsqueeze(1).expand(-1, 3, -1, -1).contiguous()\n    \n    amp = torch.float16 if device.type == \"cuda\" else torch.float32\n    with torch.autocast(\"cuda\" if device.type == \"cuda\" else \"cpu\", \n                        dtype=amp, enabled=device.type == \"cuda\"):\n        feat = encoder(image_t)\n    \n    features.reshape(-1, 2048)[indices] = feat.float().cpu().numpy()\n\n# --- \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0639\u0628\u0631 5 Heads ---\npreds = []\nfor head in heads:\n    p = []\n    for start in range(0, n, 64):\n        f = torch.from_numpy(features[start:start + 64]).to(device)\n        m = torch.from_numpy(token_mask[start:start + 64]).to(device)\n        \n        amp = torch.float16 if device.type == \"cuda\" else torch.float32\n        with torch.autocast(\"cuda\" if device.type == \"cuda\" else \"cpu\", \n                            dtype=amp, enabled=device.type == \"cuda\"):\n            out = torch.sigmoid(head(f, m)).float().detach().cpu().numpy()\n        p.append(out)\n    preds.append(np.concatenate(p))\n\n# --- \u0627\u0644\u0627\u062d\u062a\u0645\u0627\u0644\u0627\u062a \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629 (\u0645\u062a\u0648\u0633\u0637 5 Heads) ---\nprobs = np.stack(preds).mean(axis=0)[0]\n\n# --- \u0639\u0631\u0636 \u0627\u0644\u0646\u062a\u0627\u0626\u062c ---\nfor idx in np.argsort(probs)[::-1]:\n    print(f\"{LABELS[idx]:20s}: {probs[idx]:.4f}\")\n```\n\n### 4.4 \u0646\u0642\u0627\u0637 \u0645\u0647\u0645\u0629 \u0641\u064a \u0627\u0644\u0643\u0648\u062f\n\n| \u0627\u0644\u0646\u0642\u0637\u0629 | \u0627\u0644\u0634\u0631\u062d |\n|--------|-------|\n| **`.clone()` / `.contiguous()`** | \u0628\u0639\u062f `expand()` \u064a\u062c\u0628 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 `contiguous()` \u0644\u062a\u062c\u0646\u0628 \u0623\u062e\u0637\u0627\u0621 in-place |\n| **`.detach()`** | \u0642\u0628\u0644 `.numpy()` \u064a\u062c\u0628 \u0641\u0635\u0644 \u0627\u0644\u062a\u062f\u0631\u062c |\n| **Autocast** | \u064a\u064f\u0633\u062a\u062e\u062f\u0645 `float16` \u0639\u0644\u0649 CUDA \u0648 `float32` \u0639\u0644\u0649 CPU |\n| **Batch Size** | 96 \u0639\u0644\u0649 GPU\u060c 8 \u0639\u0644\u0649 CPU (\u0644\u0644\u062a\u0643\u064a\u0641 \u0645\u0639 \u0627\u0644\u0630\u0627\u0643\u0631\u0629) |\n| **Normalization** | `div(127.5).sub(1.0)` \u0644\u062a\u062d\u0648\u064a\u0644 [0,255] \u0625\u0644\u0649 [-1,1] |\n\n---\n\n## 5. \u0641\u0647\u0645 \u0627\u0644\u0645\u062e\u0631\u062c\u0627\u062a\n\n### 5.1 \u0641\u0626\u0627\u062a \u0627\u0644\u062e\u0637\u0631 (Risk Bands)\n\n| \u0627\u0644\u0644\u0648\u0646 | \u0627\u0644\u0646\u0637\u0627\u0642 | \u0627\u0644\u0645\u0633\u062a\u0648\u0649 |\n|-------|--------|---------|\n| \ud83d\udfe2 \u0623\u062e\u0636\u0631 | < 50% | **Low** \u2014 \u0645\u0646\u062e\u0641\u0636 |\n| \ud83d\udfe1 \u0623\u0635\u0641\u0631 | 50\u201365% | **Borderline** \u2014 \u0639\u0644\u0649 \u0627\u0644\u062d\u062f\u0648\u062f |\n| \ud83d\udfe0 \u0628\u0631\u062a\u0642\u0627\u0644\u064a | 65\u201380% | **Elevated** \u2014 \u0645\u0631\u062a\u0641\u0639 |\n| \ud83d\udd34 \u0623\u062d\u0645\u0631 | \u2265 80% | **High** \u2014 \u0645\u0631\u062a\u0641\u0639 \u062c\u062f\u064b\u0627 |\n\n### 5.2 \u0645\u062b\u0627\u0644 \u0639\u0644\u0649 \u0645\u062e\u0631\u062c\u0627\u062a\n\n| \u0627\u0644\u0634\u0630\u0648\u0630 | \u0627\u0644\u062f\u0631\u0627\u0633\u0629 1 | \u0627\u0644\u062f\u0631\u0627\u0633\u0629 2 | \u0627\u0644\u062f\u0631\u0627\u0633\u0629 3 |\n|--------|-----------|-----------|-----------|\n| ACL | 53.3% | 84.0% | 62.7% |\n| MCL | 57.3% | 64.0% | 78.7% |\n| Medial Meniscus | 45.3% | 80.0% | 74.7% |\n| Lateral Meniscus | 66.7% | 80.0% | 53.3% |\n| Medial OA | 53.3% | 58.7% | 88.0% |\n| Lateral OA | 49.3% | 76.0% | 74.7% |\n| PF OA | 49.3% | 74.7% | 76.0% |\n| Effusion | 80.0% | 61.3% | 58.7% |\n| Synovitis | 66.7% | 80.0% | 53.3% |\n| Baker's Cyst | 80.0% | 58.7% | 61.3% |\n| Contusion | 53.3% | 88.0% | 58.7% |\n| Fracture | 57.3% | 92.0% | 50.7% |\n\n> \u0627\u0644\u0642\u064a\u0645 \u0647\u064a **\u062a\u0631\u062a\u064a\u0628\u0627\u062a \u0645\u0626\u0648\u064a\u0629 \u0645\u064f\u062f\u0645\u062c\u0629** (Rank-blended) \u0648\u0644\u064a\u0633\u062a \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u062a \u0645\u0637\u0644\u0642\u0629.\n\n---\n\n## 6. \u0627\u0644\u0623\u062f\u0627\u0621 \u0648\u0627\u0644\u0645\u0648\u0627\u0631\u062f\n\n**\u0627\u062e\u062a\u0628\u0627\u0631 \u0639\u0644\u0649 Kaggle CPU-Only (3 \u062f\u0631\u0627\u0633\u0627\u062a):**\n\n| \u0627\u0644\u0645\u0648\u0631\u062f | \u0627\u0644\u0642\u064a\u0645\u0629 |\n|--------|--------|\n| **\u0646\u0648\u0639 \u0627\u0644\u062c\u0644\u0633\u0629** | CPU \u0641\u0642\u0637 (\u0628\u062f\u0648\u0646 GPU) |\n| **\u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a** | ~7 \u062f\u0642\u0627\u0626\u0642 |\n| **\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0642\u0631\u0635** | 378.5 MiB / 57.6 GiB |\n| **\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0630\u0627\u0643\u0631\u0629** | ~2 GiB / 30 GiB |\n| **\u0627\u0633\u062a\u062e\u062f\u0627\u0645 CPU (\u062e\u0627\u0645\u0644)** | 0.00% |\n\n> \u0627\u0644\u0646\u0638\u0627\u0645 \u064a\u0639\u0645\u0644 \u0628\u0643\u0641\u0627\u0621\u0629 \u0639\u0644\u0649 CPU \u0644\u0644\u062f\u0641\u0639\u0627\u062a \u0627\u0644\u0635\u063a\u064a\u0631\u0629\u060c \u0644\u0643\u0646 **\u064a\u064f\u0646\u0635\u062d \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 GPU** \u0644\u0623\u0639\u0628\u0627\u0621 \u0627\u0644\u0625\u0646\u062a\u0627\u062c.\n\n---\n\n## 7. \u0627\u0644\u0642\u064a\u0648\u062f \u0648\u0627\u0644\u0641\u062c\u0648\u0627\u062a\n\n| # | \u0627\u0644\u0642\u064a\u062f | \u0627\u0644\u0648\u0635\u0641 |\n|---|-------|-------|\n| 1 | **\u0639\u062f\u0645 \u0627\u0644\u062a\u062d\u0642\u0642 \u0627\u0644\u0633\u0631\u064a\u0631\u064a** | \u0644\u0645 \u064a\u062a\u0645 \u062a\u0642\u064a\u064a\u0645 \u0627\u0644\u0623\u062f\u0627\u0621 \u0645\u0642\u0627\u0628\u0644 \u0645\u0639\u064a\u0627\u0631 \u0645\u0631\u062c\u0639\u064a (\u062a\u0646\u0638\u064a\u0631 / \u0625\u062c\u0645\u0627\u0639 \u0623\u062e\u0635\u0627\u0626\u064a\u064a\u0646) |\n| 2 | **\u0645\u0639\u0627\u064a\u0631\u0629 \u0627\u0644\u0631\u062a\u0628** | \u0627\u0644\u062a\u0631\u062a\u064a\u0628\u0627\u062a \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0646\u0633\u0628\u064a\u0629 \u0644\u062f\u0641\u0639\u0629 \u0627\u0644\u062f\u0631\u0627\u0633\u0627\u062a \u2014 \u063a\u064a\u0631 \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u0645\u0642\u0627\u0631\u0646\u0629 \u0639\u0628\u0631 \u062f\u0641\u0639\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u0629 |\n| 3 | **\u0627\u0644\u062a\u062d\u0645\u0644 \u0639\u0628\u0631 \u0627\u0644\u0645\u0627\u0633\u062d\u0627\u062a** | \u0644\u0645 \u064a\u062a\u0645 \u0627\u062e\u062a\u0628\u0627\u0631\u0647 \u0639\u0644\u0649 \u0623\u062c\u0647\u0632\u0629 MRI \u0628\u0642\u0648\u0629 \u0645\u062c\u0627\u0644 \u0623\u0648 \u0628\u0631\u0648\u062a\u0648\u0643\u0648\u0644\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u0629 |\n| 4 | **\u062f\u0631\u0627\u0633\u0629 \u0627\u0644\u0642\u0631\u0627\u0621** | \u0644\u0645 \u064a\u062a\u0645 \u0625\u062b\u0628\u0627\u062a \u062a\u062d\u0633\u064a\u0646 \u0623\u062f\u0627\u0621 \u0623\u062e\u0635\u0627\u0626\u064a \u0627\u0644\u0623\u0634\u0639\u0629 (\u0639\u0644\u0649 \u0639\u0643\u0633 Astuto et al. 2021) |\n| 5 | **\u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a \u0644\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0648\u0627\u062d\u062f\u0629** | \u064a\u0633\u062a\u062e\u062f\u0645 Encoder \u062d\u0642\u064a\u0642\u064a \u0644\u0643\u0646\u0647 **\u0644\u0627 \u064a\u062d\u0644 \u0645\u062d\u0644** \u0627\u0644\u062f\u0631\u0627\u0633\u0629 \u0627\u0644\u0643\u0627\u0645\u0644\u0629 \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u0648\u064a\u0627\u062a |\n\n---\n\n## 8. \u0627\u0644\u0645\u0631\u0627\u062c\u0639\n\n1. **Liu F, et al.** (2019). *Fully Automated Diagnosis of Anterior Cruciate Ligament Tears on Knee MR Images by Using Deep Learning.* Radiol Artif Intell. 1(3):e180091. [PubMed](https://pubmed.ncbi.nlm.nih.gov/32076658/)\n\n2. **Astuto B, et al.** (2021). *Automatic Deep Learning-assisted Detection and Grading of Abnormalities in Knee MRI Studies.* Radiol Artif Intell. 3(3):e200165. [PubMed](https://pubmed.ncbi.nlm.nih.gov/34142088/)\n\n3. **Onyx AI.** (2024). *RSNA Knee A5 + RadImageNet Ensemble.* Kaggle Model. [kaggle.com/models/ruicompany/rsna-knee-a5-rad](https://www.kaggle.com/models/ruicompany/rsna-knee-a5-rad)\n\n---\n\n## 9. \u0627\u0644\u062e\u0644\u0627\u0635\u0629\n\n\u0646\u0645\u0648\u0630\u062c **RSNA Knee A5 + RadImageNet** \u0647\u0648 Ensemble \u0645\u0632\u062f\u0648\u062c \u064a\u062c\u0645\u0639 \u0628\u064a\u0646:\n- \ud83e\udde0 **DINOv3 Vision Transformer** \u0645\u0639 Slot Conditioning (\u0641\u0631\u0639 A5)\n- \ud83c\udfe5 **RadImageNet ResNet-50** \u0645\u0639 Cross-Attention (\u0641\u0631\u0639 Rad)\n\n\u064a\u064f\u0646\u062a\u062c 12 \u062f\u0631\u062c\u0629 \u0634\u0630\u0648\u0630 \u0644\u0643\u0644 \u062f\u0631\u0627\u0633\u0629 MRI \u0644\u0644\u0631\u0643\u0628\u0629\u060c \u0645\u0639 \u0648\u0627\u062c\u0647\u0629 \u0645\u0631\u0627\u062c\u0639\u0629 \u0645\u0644\u0648\u0646\u0629 \u062a\u062f\u0639\u0645 \u2014 \u0644\u0627 \u062a\u0633\u062a\u0628\u062f\u0644 \u2014 \u0642\u0631\u0627\u0621\u0629 \u0623\u062e\u0635\u0627\u0626\u064a \u0627\u0644\u0623\u0634\u0639\u0629.\n\n> **\u0641\u064a \u0627\u0644\u0645\u0631\u062d\u0644\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629: \u0646\u0645\u0648\u0630\u062c \u0628\u062d\u062b\u064a \u0648\u062a\u0646\u0627\u0641\u0633\u064a. \u0644\u0627 \u064a\u064f\u0633\u062a\u062e\u062f\u0645 \u0633\u0631\u064a\u0631\u064a\u064b\u0627.**\n\"\"\"",
  "publishTime": null
}