{
  "id": 362640,
  "title": "18th Place Solution",
  "url": "/competitions/rsna-2022-cervical-spine-fracture-detection/writeups/18th-place-solution",
  "author_name": "",
  "post_date": "2022-10-28T09:11:30.619711100Z",
  "votes": 33,
  "comment_count": 5,
  "views": 0,
  "content": "<h4>Intro</h4>\n<p>This was a really interesting competition, thanks to the hosts for organizing another cool medical challenge.<br>\nThanks also to my teammates <a href=\"https://www.kaggle.com/optimo\" target=\"_blank\">@optimo</a> and <a href=\"https://www.kaggle.com/tivfrvqhs5\" target=\"_blank\">@tivfrvqhs5</a> for the awesome competition. David and I joined <a href=\"https://www.kaggle.com/optimo\" target=\"_blank\">@optimo</a>'s team shortly before the team-merge deadline when he was already at LB 0.4, which gave gave us a week to improve his already great pipeline.</p>\n<p>I will keep the write-up short but feel free to ask any question in the comments.</p>\n<h4>Solution</h4>\n<p><a href=\"https://ibb.co/DDpJSM1\"><img src=\"https://i.ibb.co/RpyFV6g/rsna.png\" alt=\"rsna\"></a></p>\n<p>Our overall solution is a 3 stage pipeline with additional stuff on the side, illustrated above.</p>\n<ol>\n<li>Predict fractures the same way as the public kernel. We use a custom 3D-CNN model for sampling frames in the right vertebra, as well as available fractures bounding boxes.</li>\n<li>Re-use the same pipeline in 2.5D feeding 5 frames and adding a LSTM head</li>\n<li>Switch to study level feeding predicted probabilities for all the slices to a small RNN or 1D-CNN. We also add the probability of the highest confident fracture box of a yolo-v5-l. </li>\n</ol>\n<h4>Comments</h4>\n<ul>\n<li>The 2nd model was quite tricky to make work, and we did not have the time to use a better cropping than the 384 center crop, but we had the csv with vertebrae centered crops ready. Joining late is tough.</li>\n<li>3D models did not really work for us, but probably because they required a lot of tricks to function optimally.</li>\n<li>Our models don't even look great at detecting fractures, but the study-level model does a good job exploiting the signal</li>\n<li>I was optimizing the wrong metric (because of normalization) until the last day, switching to the correct implementation helped quite a lot </li>\n</ul>\n<p>Thanks for reading, hope to see you all on the next medical imaging comp =)</p>",
  "messages": [
    {
      "id": "2007491",
      "postDate": "10/28/2022 09:11:30",
      "content": "<h4>Intro</h4>\n<p>This was a really interesting competition, thanks to the hosts for organizing another cool medical challenge.<br>\nThanks also to my teammates <a href=\"https://www.kaggle.com/optimo\" target=\"_blank\">@optimo</a> and <a href=\"https://www.kaggle.com/tivfrvqhs5\" target=\"_blank\">@tivfrvqhs5</a> for the awesome competition. David and I joined <a href=\"https://www.kaggle.com/optimo\" target=\"_blank\">@optimo</a>'s team shortly before the team-merge deadline when he was already at LB 0.4, which gave gave us a week to improve his already great pipeline.</p>\n<p>I will keep the write-up short but feel free to ask any question in the comments.</p>\n<h4>Solution</h4>\n<p><a href=\"https://ibb.co/DDpJSM1\"><img src=\"https://i.ibb.co/RpyFV6g/rsna.png\" alt=\"rsna\"></a></p>\n<p>Our overall solution is a 3 stage pipeline with additional stuff on the side, illustrated above.</p>\n<ol>\n<li>Predict fractures the same way as the public kernel. We use a custom 3D-CNN model for sampling frames in the right vertebra, as well as available fractures bounding boxes.</li>\n<li>Re-use the same pipeline in 2.5D feeding 5 frames and adding a LSTM head</li>\n<li>Switch to study level feeding predicted probabilities for all the slices to a small RNN or 1D-CNN. We also add the probability of the highest confident fracture box of a yolo-v5-l. </li>\n</ol>\n<h4>Comments</h4>\n<ul>\n<li>The 2nd model was quite tricky to make work, and we did not have the time to use a better cropping than the 384 center crop, but we had the csv with vertebrae centered crops ready. Joining late is tough.</li>\n<li>3D models did not really work for us, but probably because they required a lot of tricks to function optimally.</li>\n<li>Our models don't even look great at detecting fractures, but the study-level model does a good job exploiting the signal</li>\n<li>I was optimizing the wrong metric (because of normalization) until the last day, switching to the correct implementation helped quite a lot </li>\n</ul>\n<p>Thanks for reading, hope to see you all on the next medical imaging comp =)</p>",
      "rawMarkdown": "#### Intro\n\nThis was a really interesting competition, thanks to the hosts for organizing another cool medical challenge.\nThanks also to my teammates @optimo and @tivfrvqhs5 for the awesome competition. David and I joined @optimo's team shortly before the team-merge deadline when he was already at LB 0.4, which gave gave us a week to improve his already great pipeline.\n\nI will keep the write-up short but feel free to ask any question in the comments.\n\n#### Solution\n\n<a href=\"https://ibb.co/DDpJSM1\"><img src=\"https://i.ibb.co/RpyFV6g/rsna.png\" alt=\"rsna\" border=\"0\"></a>\n\nOur overall solution is a 3 stage pipeline with additional stuff on the side, illustrated above.\n1. Predict fractures the same way as the public kernel. We use a custom 3D-CNN model for sampling frames in the right vertebra, as well as available fractures bounding boxes.\n2. Re-use the same pipeline in 2.5D feeding 5 frames and adding a LSTM head\n3. Switch to study level feeding predicted probabilities for all the slices to a small RNN or 1D-CNN. We also add the probability of the highest confident fracture box of a yolo-v5-l. \n\n\n#### Comments\n\n- The 2nd model was quite tricky to make work, and we did not have the time to use a better cropping than the 384 center crop, but we had the csv with vertebrae centered crops ready. Joining late is tough.\n- 3D models did not really work for us, but probably because they required a lot of tricks to function optimally.\n- Our models don't even look great at detecting fractures, but the study-level model does a good job exploiting the signal\n- I was optimizing the wrong metric (because of normalization) until the last day, switching to the correct implementation helped quite a lot \n\nThanks for reading, hope to see you all on the next medical imaging comp =)",
      "votes": null
    },
    {
      "id": "2007667",
      "postDate": "10/28/2022 12:06:36",
      "content": "<p>Congrats on 18th place! <br>\nI tried a similar pipeline but couldn't make it work, can you comment on how much performance improvement you got by adding the yolov5-l probability? <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> </p>",
      "rawMarkdown": "Congrats on 18th place! \nI tried a similar pipeline but couldn't make it work, can you comment on how much performance improvement you got by adding the yolov5-l probability? @theoviel",
      "votes": null
    },
    {
      "id": "2007709",
      "postDate": "10/28/2022 12:45:13",
      "content": "<p>Thx ! <br>\nWe got +0.02 CV/LB</p>",
      "rawMarkdown": "Thx ! \nWe got +0.02 CV/LB",
      "votes": null
    },
    {
      "id": "2007881",
      "postDate": "10/28/2022 15:02:43",
      "content": "<p>Did you fine tune the yolo-v5 with the bounding box?</p>",
      "rawMarkdown": "Did you fine tune the yolo-v5 with the bounding box?",
      "votes": null
    },
    {
      "id": "2009845",
      "postDate": "10/30/2022 11:12:19",
      "content": "<p>Yes, exactly</p>",
      "rawMarkdown": "Yes, exactly",
      "votes": null
    },
    {
      "id": "2011857",
      "postDate": "10/31/2022 21:21:04",
      "content": "<p>A hearty congratulation on 18th place! <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> </p>",
      "rawMarkdown": "A hearty congratulation on 18th place! @theoviel",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2007667,
      "author_name": "yerramvarun",
      "author_url": "",
      "post_date": "10/28/2022 12:06:36",
      "content": "<p>Congrats on 18th place! <br>\nI tried a similar pipeline but couldn't make it work, can you comment on how much performance improvement you got by adding the yolov5-l probability? <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> </p>",
      "votes": null,
      "replies": [
        {
          "id": 2007709,
          "author_name": "theoviel",
          "author_url": "",
          "post_date": "10/28/2022 12:45:13",
          "content": "<p>Thx ! <br>\nWe got +0.02 CV/LB</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 2007881,
      "author_name": "pierretisseur",
      "author_url": "",
      "post_date": "10/28/2022 15:02:43",
      "content": "<p>Did you fine tune the yolo-v5 with the bounding box?</p>",
      "votes": null,
      "replies": [
        {
          "id": 2009845,
          "author_name": "theoviel",
          "author_url": "",
          "post_date": "10/30/2022 11:12:19",
          "content": "<p>Yes, exactly</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 2011857,
      "author_name": "abhishek14398",
      "author_url": "",
      "post_date": "10/31/2022 21:21:04",
      "content": "<p>A hearty congratulation on 18th place! <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> </p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "2007491": "#### Intro\n\nThis was a really interesting competition, thanks to the hosts for organizing another cool medical challenge.\nThanks also to my teammates @optimo and @tivfrvqhs5 for the awesome competition. David and I joined @optimo's team shortly before the team-merge deadline when he was already at LB 0.4, which gave gave us a week to improve his already great pipeline.\n\nI will keep the write-up short but feel free to ask any question in the comments.\n\n#### Solution\n\n<a href=\"https://ibb.co/DDpJSM1\"><img src=\"https://i.ibb.co/RpyFV6g/rsna.png\" alt=\"rsna\" border=\"0\"></a>\n\nOur overall solution is a 3 stage pipeline with additional stuff on the side, illustrated above.\n1. Predict fractures the same way as the public kernel. We use a custom 3D-CNN model for sampling frames in the right vertebra, as well as available fractures bounding boxes.\n2. Re-use the same pipeline in 2.5D feeding 5 frames and adding a LSTM head\n3. Switch to study level feeding predicted probabilities for all the slices to a small RNN or 1D-CNN. We also add the probability of the highest confident fracture box of a yolo-v5-l. \n\n\n#### Comments\n\n- The 2nd model was quite tricky to make work, and we did not have the time to use a better cropping than the 384 center crop, but we had the csv with vertebrae centered crops ready. Joining late is tough.\n- 3D models did not really work for us, but probably because they required a lot of tricks to function optimally.\n- Our models don't even look great at detecting fractures, but the study-level model does a good job exploiting the signal\n- I was optimizing the wrong metric (because of normalization) until the last day, switching to the correct implementation helped quite a lot \n\nThanks for reading, hope to see you all on the next medical imaging comp =)",
    "2007667": "Congrats on 18th place! \nI tried a similar pipeline but couldn't make it work, can you comment on how much performance improvement you got by adding the yolov5-l probability? @theoviel",
    "2007709": "Thx ! \nWe got +0.02 CV/LB",
    "2007881": "Did you fine tune the yolo-v5 with the bounding box?",
    "2009845": "Yes, exactly",
    "2011857": "A hearty congratulation on 18th place! @theoviel"
  },
  "source": "meta"
}