{
  "id": 364848,
  "title": "7th place solution, segmentation for detection tasks",
  "url": "/competitions/rsna-2022-cervical-spine-fracture-detection/discussion/364848",
  "author_name": "Shuolin Liu",
  "post_date": "2022-11-08T15:57:08.944000",
  "votes": 15,
  "comment_count": 2,
  "views": 0,
  "content": "<p>Thanks to the organizers for holding this  interesting competition and congrats to all  those who worked hard to develop solutions for the competition. </p>\n<h2>Summary</h2>\n<p>In our solution, 3D segmentation methods are utilized for fracture detection task. Since host do not provide segmentation label for fracture region, we use data-augmentations and bounding box GT to generate Pseudo segmentation masks. Our final framework consist of 3 stages:</p>\n<ul>\n<li>Stage 1: Segment C1-C7 using 3D-UNet</li>\n<li>Stage 2: Segment bone fracture region using 3D-UNet</li>\n<li>Stage 3: Predict final score using outputs from Stage 1 and Stage 2</li>\n</ul>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F9f121f7059058523df7cbc6cecf6e4dc%2Foverview.png?generation=1667922758651944&amp;alt=media\" alt=\"\"></p>\n<h2>Stage 1: Segment C1-C7 using 3D-UNet</h2>\n<ul>\n<li><p>Data:</p>\n<ul>\n<li>Competition data: 87 cases</li>\n<li>TotalSegmentator (CC-BY-4.0): 160 cases (<a href=\"https://zenodo.org/record/6802614#.Y2nkrHYzZPY\" target=\"_blank\">https://zenodo.org/record/6802614#.Y2nkrHYzZPY</a>)</li>\n<li>Verse2020(CC-BY-SA-4.0): 42 cases (<a href=\"https://github.com/anjany/verse\" target=\"_blank\">https://github.com/anjany/verse</a>)</li></ul>\n<p>External data may not be necessary. Compared to fracture detection,  segmenting C1-C7 is a  kind easy task,  using only competition data can also get accurate results. </p></li>\n<li><p>Model: 3D-UNet (32, 64, 128, 256, 320, 320)</p></li>\n<li><p>Loss: DICE + BCE</p></li>\n<li><p>Input size: (160, 128, 128)</p></li>\n<li><p>Image resolution: (1.5, 1.5, 1.5)mm</p></li>\n<li><p>Batch size: 2</p></li>\n<li><p>Training iterations: 250k, ~2days on 3090</p></li>\n<li><p>Post-processing: keep largest connected component for C1-C7</p></li>\n</ul>\n<h2>Stage 2: Segment bone fracture region using 3D-UNet</h2>\n<p>There are 2019 CT images and 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we use Pseudo-labeling techniques to generate fracture segmentation mask</p>\n<ul>\n<li><p>Step1: Initial Pseudo fracture segmentation mask generation <br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F600fed9cd3a252ce1f126f3cacd21b4f%2Ffig2.png?generation=1667922802526478&amp;alt=media\" alt=\"\"></p>\n<ul>\n<li>Type1: generated using data augmentations </li>\n<li>Type2: generated using  235 bounding box labels (remove bounding box out out bone)</li></ul></li>\n<li><p>Step2: training models using the 235 Initial Pseudo fracture segmentation mask </p>\n<ul>\n<li>Model: 3D-UNet (32, 64, 128, 256, 320, 320)<ul>\n<li>Loss: DICE + BCE</li>\n<li>Input size: (96, 192, 192)</li>\n<li>Image resolution: (0.8, 0.4, 0.4)mm</li>\n<li>Batch size: 2</li>\n<li>Training iterations: 250k, ~2days on 3090</li></ul></li></ul></li>\n<li><p>Step3: Pseudo mask refinement (finally we got  Pseudo masks of 823 cases )<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F933217791478093bad656e253f904fb5%2Ffig3.png?generation=1667922829959202&amp;alt=media\" alt=\"\"><br>\nThere are 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we can firstly using models to get predictions of all 2019 cases and then using patient-level GT to refine these results.  We can modify Pseudo mask where model predictions are inconsistent with patient level information. For example, if patient-level GT point out C1 is normal, we can directly remove all predicted fracture masks on C1.</p></li>\n</ul>\n<h2>Stage 3: Predict final score using outputs from Stage 1 and Stage 2</h2>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F869f095e6dabd72e650457b752d2828f%2Ffig4.png?generation=1667922959405919&amp;alt=media\" alt=\"\"><br>\nAfter getting predictions from stage 1 and stage 2, we resize all predictions to (96, 96, 96) and train a very tiny 3D-CNN to get final score. (only new few minutes to train a single model) </p>\n<ul>\n<li>Loss: BCE</li>\n<li>Input size: (96, 96, 96)</li>\n<li>Batch size: 4</li>\n<li>Training iterations: 20k, ~1 hour on 3090</li>\n<li>Post-processing: Since competition evaluation metrics are sensitive to 0 and 1, we clip all predicted     scores to a range, here are the best parameters for CV (C1-C7):<ul>\n<li>'min_score': [0.01, 0.015, 0.015, 0.01, 0.02, 0.032, 0.048],</li>\n<li>'max_score': [0.999, 0.993, 0.99, 1.0, 0.943, 0.997, 0.999]</li></ul></li>\n</ul>\n<h2>Final submission</h2>\n<ul>\n<li>Final Results: 3<em>stage1 + 4</em>stage2 + 5*stage3, it takes around 7 hours to finish inference. (Single model can get similar results, my ensemble do not really work)</li>\n<li>Private Leaderboard Score: 0.2634</li>\n<li>Public Leaderboard Score: 0.2127</li>\n</ul>\n<h2>Code</h2>\n<p>This solution is mainly based on nnUNet(<a href=\"https://github.com/MIC-DKFZ/nnUNet\" target=\"_blank\">https://github.com/MIC-DKFZ/nnUNet</a>, Apache-2.0 license) and batchgenerators (<a href=\"https://github.com/MIC-DKFZ/batchgenerators\" target=\"_blank\">https://github.com/MIC-DKFZ/batchgenerators</a>, Apache-2.0 license)</p>\n<ul>\n<li>Training: <a href=\"https://github.com/LSL000UD/RSNA2022-7th-Place\" target=\"_blank\">https://github.com/LSL000UD/RSNA2022-7th-Place</a></li>\n<li>Inference:  <a href=\"https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference\" target=\"_blank\">https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference</a></li>\n</ul>",
  "messages": [
    {
      "id": 2021994,
      "postDate": "2022-11-08T15:57:08.943Z",
      "content": "<p>Thanks to the organizers for holding this  interesting competition and congrats to all  those who worked hard to develop solutions for the competition. </p>\n<h2>Summary</h2>\n<p>In our solution, 3D segmentation methods are utilized for fracture detection task. Since host do not provide segmentation label for fracture region, we use data-augmentations and bounding box GT to generate Pseudo segmentation masks. Our final framework consist of 3 stages:</p>\n<ul>\n<li>Stage 1: Segment C1-C7 using 3D-UNet</li>\n<li>Stage 2: Segment bone fracture region using 3D-UNet</li>\n<li>Stage 3: Predict final score using outputs from Stage 1 and Stage 2</li>\n</ul>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F9f121f7059058523df7cbc6cecf6e4dc%2Foverview.png?generation=1667922758651944&amp;alt=media\" alt=\"\"></p>\n<h2>Stage 1: Segment C1-C7 using 3D-UNet</h2>\n<ul>\n<li><p>Data:</p>\n<ul>\n<li>Competition data: 87 cases</li>\n<li>TotalSegmentator (CC-BY-4.0): 160 cases (<a href=\"https://zenodo.org/record/6802614#.Y2nkrHYzZPY\" target=\"_blank\">https://zenodo.org/record/6802614#.Y2nkrHYzZPY</a>)</li>\n<li>Verse2020(CC-BY-SA-4.0): 42 cases (<a href=\"https://github.com/anjany/verse\" target=\"_blank\">https://github.com/anjany/verse</a>)</li></ul>\n<p>External data may not be necessary. Compared to fracture detection,  segmenting C1-C7 is a  kind easy task,  using only competition data can also get accurate results. </p></li>\n<li><p>Model: 3D-UNet (32, 64, 128, 256, 320, 320)</p></li>\n<li><p>Loss: DICE + BCE</p></li>\n<li><p>Input size: (160, 128, 128)</p></li>\n<li><p>Image resolution: (1.5, 1.5, 1.5)mm</p></li>\n<li><p>Batch size: 2</p></li>\n<li><p>Training iterations: 250k, ~2days on 3090</p></li>\n<li><p>Post-processing: keep largest connected component for C1-C7</p></li>\n</ul>\n<h2>Stage 2: Segment bone fracture region using 3D-UNet</h2>\n<p>There are 2019 CT images and 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we use Pseudo-labeling techniques to generate fracture segmentation mask</p>\n<ul>\n<li><p>Step1: Initial Pseudo fracture segmentation mask generation <br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F600fed9cd3a252ce1f126f3cacd21b4f%2Ffig2.png?generation=1667922802526478&amp;alt=media\" alt=\"\"></p>\n<ul>\n<li>Type1: generated using data augmentations </li>\n<li>Type2: generated using  235 bounding box labels (remove bounding box out out bone)</li></ul></li>\n<li><p>Step2: training models using the 235 Initial Pseudo fracture segmentation mask </p>\n<ul>\n<li>Model: 3D-UNet (32, 64, 128, 256, 320, 320)<ul>\n<li>Loss: DICE + BCE</li>\n<li>Input size: (96, 192, 192)</li>\n<li>Image resolution: (0.8, 0.4, 0.4)mm</li>\n<li>Batch size: 2</li>\n<li>Training iterations: 250k, ~2days on 3090</li></ul></li></ul></li>\n<li><p>Step3: Pseudo mask refinement (finally we got  Pseudo masks of 823 cases )<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F933217791478093bad656e253f904fb5%2Ffig3.png?generation=1667922829959202&amp;alt=media\" alt=\"\"><br>\nThere are 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we can firstly using models to get predictions of all 2019 cases and then using patient-level GT to refine these results.  We can modify Pseudo mask where model predictions are inconsistent with patient level information. For example, if patient-level GT point out C1 is normal, we can directly remove all predicted fracture masks on C1.</p></li>\n</ul>\n<h2>Stage 3: Predict final score using outputs from Stage 1 and Stage 2</h2>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F869f095e6dabd72e650457b752d2828f%2Ffig4.png?generation=1667922959405919&amp;alt=media\" alt=\"\"><br>\nAfter getting predictions from stage 1 and stage 2, we resize all predictions to (96, 96, 96) and train a very tiny 3D-CNN to get final score. (only new few minutes to train a single model) </p>\n<ul>\n<li>Loss: BCE</li>\n<li>Input size: (96, 96, 96)</li>\n<li>Batch size: 4</li>\n<li>Training iterations: 20k, ~1 hour on 3090</li>\n<li>Post-processing: Since competition evaluation metrics are sensitive to 0 and 1, we clip all predicted     scores to a range, here are the best parameters for CV (C1-C7):<ul>\n<li>'min_score': [0.01, 0.015, 0.015, 0.01, 0.02, 0.032, 0.048],</li>\n<li>'max_score': [0.999, 0.993, 0.99, 1.0, 0.943, 0.997, 0.999]</li></ul></li>\n</ul>\n<h2>Final submission</h2>\n<ul>\n<li>Final Results: 3<em>stage1 + 4</em>stage2 + 5*stage3, it takes around 7 hours to finish inference. (Single model can get similar results, my ensemble do not really work)</li>\n<li>Private Leaderboard Score: 0.2634</li>\n<li>Public Leaderboard Score: 0.2127</li>\n</ul>\n<h2>Code</h2>\n<p>This solution is mainly based on nnUNet(<a href=\"https://github.com/MIC-DKFZ/nnUNet\" target=\"_blank\">https://github.com/MIC-DKFZ/nnUNet</a>, Apache-2.0 license) and batchgenerators (<a href=\"https://github.com/MIC-DKFZ/batchgenerators\" target=\"_blank\">https://github.com/MIC-DKFZ/batchgenerators</a>, Apache-2.0 license)</p>\n<ul>\n<li>Training: <a href=\"https://github.com/LSL000UD/RSNA2022-7th-Place\" target=\"_blank\">https://github.com/LSL000UD/RSNA2022-7th-Place</a></li>\n<li>Inference:  <a href=\"https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference\" target=\"_blank\">https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference</a></li>\n</ul>",
      "rawMarkdown": "Thanks to the organizers for holding this  interesting competition and congrats to all  those who worked hard to develop solutions for the competition. \n\n## Summary\nIn our solution, 3D segmentation methods are utilized for fracture detection task. Since host do not provide segmentation label for fracture region, we use data-augmentations and bounding box GT to generate Pseudo segmentation masks. Our final framework consist of 3 stages:\n\n- Stage 1: Segment C1-C7 using 3D-UNet\n- Stage 2: Segment bone fracture region using 3D-UNet\n- Stage 3: Predict final score using outputs from Stage 1 and Stage 2\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F9f121f7059058523df7cbc6cecf6e4dc%2Foverview.png?generation=1667922758651944&alt=media)\n## Stage 1: Segment C1-C7 using 3D-UNet\n\n\n\n- Data:\n\t- Competition data: 87 cases\n\t- TotalSegmentator (CC-BY-4.0): 160 cases (https://zenodo.org/record/6802614#.Y2nkrHYzZPY)\n\t- Verse2020(CC-BY-SA-4.0): 42 cases (https://github.com/anjany/verse)\n\n\tExternal data may not be necessary. Compared to fracture detection,  segmenting C1-C7 is a \tkind easy task,  using only competition data can also get accurate results. \n\n- Model: 3D-UNet (32, 64, 128, 256, 320, 320)\n- Loss: DICE + BCE\n- Input size: (160, 128, 128)\n- Image resolution: (1.5, 1.5, 1.5)mm\n- Batch size: 2\n- Training iterations: 250k, ~2days on 3090\n- Post-processing: keep largest connected component for C1-C7\n\n## Stage 2: Segment bone fracture region using 3D-UNet\n\nThere are 2019 CT images and 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we use Pseudo-labeling techniques to generate fracture segmentation mask\n\n- Step1: Initial Pseudo fracture segmentation mask generation \n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F600fed9cd3a252ce1f126f3cacd21b4f%2Ffig2.png?generation=1667922802526478&alt=media)\n\t- Type1: generated using data augmentations \n   - Type2: generated using  235 bounding box labels (remove bounding box out out bone)\n\n- Step2: training models using the 235 Initial Pseudo fracture segmentation mask \n \n \t- Model: 3D-UNet (32, 64, 128, 256, 320, 320)\n\t- Loss: DICE + BCE\n\t- Input size: (96, 192, 192)\n\t- Image resolution: (0.8, 0.4, 0.4)mm\n\t- Batch size: 2\n\t- Training iterations: 250k, ~2days on 3090\n- Step3: Pseudo mask refinement (finally we got  Pseudo masks of 823 cases )\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F933217791478093bad656e253f904fb5%2Ffig3.png?generation=1667922829959202&alt=media)\n\tThere are 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we can firstly using models to get predictions of all 2019 cases and then using patient-level GT to refine these results.  We can modify Pseudo mask where model predictions are inconsistent with patient level information. For example, if patient-level GT point out C1 is normal, we can directly remove all predicted fracture masks on C1.\n \n## Stage 3: Predict final score using outputs from Stage 1 and Stage 2\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F869f095e6dabd72e650457b752d2828f%2Ffig4.png?generation=1667922959405919&alt=media)\nAfter getting predictions from stage 1 and stage 2, we resize all predictions to (96, 96, 96) and train a very tiny 3D-CNN to get final score. (only new few minutes to train a single model) \n\n- Loss: BCE\n- Input size: (96, 96, 96)\n- Batch size: 4\n- Training iterations: 20k, ~1 hour on 3090\n- Post-processing: Since competition evaluation metrics are sensitive to 0 and 1, we clip all predicted \tscores to a range, here are the best parameters for CV (C1-C7):\n\t- 'min_score': [0.01, 0.015, 0.015, 0.01, 0.02, 0.032, 0.048],\n\t-  'max_score': [0.999, 0.993, 0.99, 1.0, 0.943, 0.997, 0.999]\n\n\n## Final submission\n- Final Results: 3*stage1 + 4*stage2 + 5*stage3, it takes around 7 hours to finish inference. (Single model can get similar results, my ensemble do not really work)\n- Private Leaderboard Score: 0.2634\n- Public Leaderboard Score: 0.2127\n\n## Code\nThis solution is mainly based on nnUNet(https://github.com/MIC-DKFZ/nnUNet, Apache-2.0 license) and batchgenerators (https://github.com/MIC-DKFZ/batchgenerators, Apache-2.0 license)\n\n- Training: https://github.com/LSL000UD/RSNA2022-7th-Place\n- Inference:  https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference\n",
      "votes": 15
    },
    {
      "id": 2929743,
      "postDate": "2024-07-20T10:20:06.810Z",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/lsl000ud\" target=\"_blank\">@lsl000ud</a> <br>\nWhat is the local machine configuration, where you train the model?</p>",
      "rawMarkdown": "Hi @lsl000ud \nWhat is the local machine configuration, where you train the model?"
    },
    {
      "id": 2022167,
      "postDate": "2022-11-08T19:15:06.200Z",
      "content": "<p>Hearty congratulations <a href=\"https://www.kaggle.com/lsl000ud\" target=\"_blank\">@lsl000ud</a> for the result! Great approach note too, I appreciate the work!<br>\nBest regards and all the best!</p>",
      "rawMarkdown": "Hearty congratulations @lsl000ud for the result! Great approach note too, I appreciate the work!\nBest regards and all the best!"
    }
  ],
  "comments": [
    {
      "id": 2929743,
      "author_name": "Srikant Nayak",
      "author_url": "",
      "post_date": "2024-07-20T10:20:06.810000",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/lsl000ud\" target=\"_blank\">@lsl000ud</a> <br>\nWhat is the local machine configuration, where you train the model?</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2022167,
      "author_name": "Ravi Ramakrishnan",
      "author_url": "",
      "post_date": "2022-11-08T19:15:06.200000",
      "content": "<p>Hearty congratulations <a href=\"https://www.kaggle.com/lsl000ud\" target=\"_blank\">@lsl000ud</a> for the result! Great approach note too, I appreciate the work!<br>\nBest regards and all the best!</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "2021994": "Thanks to the organizers for holding this  interesting competition and congrats to all  those who worked hard to develop solutions for the competition. \n\n## Summary\nIn our solution, 3D segmentation methods are utilized for fracture detection task. Since host do not provide segmentation label for fracture region, we use data-augmentations and bounding box GT to generate Pseudo segmentation masks. Our final framework consist of 3 stages:\n\n- Stage 1: Segment C1-C7 using 3D-UNet\n- Stage 2: Segment bone fracture region using 3D-UNet\n- Stage 3: Predict final score using outputs from Stage 1 and Stage 2\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F9f121f7059058523df7cbc6cecf6e4dc%2Foverview.png?generation=1667922758651944&alt=media)\n## Stage 1: Segment C1-C7 using 3D-UNet\n\n\n\n- Data:\n\t- Competition data: 87 cases\n\t- TotalSegmentator (CC-BY-4.0): 160 cases (https://zenodo.org/record/6802614#.Y2nkrHYzZPY)\n\t- Verse2020(CC-BY-SA-4.0): 42 cases (https://github.com/anjany/verse)\n\n\tExternal data may not be necessary. Compared to fracture detection,  segmenting C1-C7 is a \tkind easy task,  using only competition data can also get accurate results. \n\n- Model: 3D-UNet (32, 64, 128, 256, 320, 320)\n- Loss: DICE + BCE\n- Input size: (160, 128, 128)\n- Image resolution: (1.5, 1.5, 1.5)mm\n- Batch size: 2\n- Training iterations: 250k, ~2days on 3090\n- Post-processing: keep largest connected component for C1-C7\n\n## Stage 2: Segment bone fracture region using 3D-UNet\n\nThere are 2019 CT images and 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we use Pseudo-labeling techniques to generate fracture segmentation mask\n\n- Step1: Initial Pseudo fracture segmentation mask generation \n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F600fed9cd3a252ce1f126f3cacd21b4f%2Ffig2.png?generation=1667922802526478&alt=media)\n\t- Type1: generated using data augmentations \n   - Type2: generated using  235 bounding box labels (remove bounding box out out bone)\n\n- Step2: training models using the 235 Initial Pseudo fracture segmentation mask \n \n \t- Model: 3D-UNet (32, 64, 128, 256, 320, 320)\n\t- Loss: DICE + BCE\n\t- Input size: (96, 192, 192)\n\t- Image resolution: (0.8, 0.4, 0.4)mm\n\t- Batch size: 2\n\t- Training iterations: 250k, ~2days on 3090\n- Step3: Pseudo mask refinement (finally we got  Pseudo masks of 823 cases )\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F933217791478093bad656e253f904fb5%2Ffig3.png?generation=1667922829959202&alt=media)\n\tThere are 2019 patient-level GT but only 235 patients’ fracture bounding boxes are provided， so we can firstly using models to get predictions of all 2019 cases and then using patient-level GT to refine these results.  We can modify Pseudo mask where model predictions are inconsistent with patient level information. For example, if patient-level GT point out C1 is normal, we can directly remove all predicted fracture masks on C1.\n \n## Stage 3: Predict final score using outputs from Stage 1 and Stage 2\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2727680%2F869f095e6dabd72e650457b752d2828f%2Ffig4.png?generation=1667922959405919&alt=media)\nAfter getting predictions from stage 1 and stage 2, we resize all predictions to (96, 96, 96) and train a very tiny 3D-CNN to get final score. (only new few minutes to train a single model) \n\n- Loss: BCE\n- Input size: (96, 96, 96)\n- Batch size: 4\n- Training iterations: 20k, ~1 hour on 3090\n- Post-processing: Since competition evaluation metrics are sensitive to 0 and 1, we clip all predicted \tscores to a range, here are the best parameters for CV (C1-C7):\n\t- 'min_score': [0.01, 0.015, 0.015, 0.01, 0.02, 0.032, 0.048],\n\t-  'max_score': [0.999, 0.993, 0.99, 1.0, 0.943, 0.997, 0.999]\n\n\n## Final submission\n- Final Results: 3*stage1 + 4*stage2 + 5*stage3, it takes around 7 hours to finish inference. (Single model can get similar results, my ensemble do not really work)\n- Private Leaderboard Score: 0.2634\n- Public Leaderboard Score: 0.2127\n\n## Code\nThis solution is mainly based on nnUNet(https://github.com/MIC-DKFZ/nnUNet, Apache-2.0 license) and batchgenerators (https://github.com/MIC-DKFZ/batchgenerators, Apache-2.0 license)\n\n- Training: https://github.com/LSL000UD/RSNA2022-7th-Place\n- Inference:  https://www.kaggle.com/code/lsl000ud/rsna2022-7th-place-inference\n",
    "2929743": "Hi @lsl000ud \nWhat is the local machine configuration, where you train the model?",
    "2022167": "Hearty congratulations @lsl000ud for the result! Great approach note too, I appreciate the work!\nBest regards and all the best!"
  }
}