{
  "id": 362640,
  "title": "18th Place Solution",
  "url": "/competitions/rsna-2022-cervical-spine-fracture-detection/discussion/362640",
  "author_name": "Theo Viel",
  "post_date": "2022-10-28T09:11:30.619000",
  "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": "2022-10-28T09:11:30.620Z",
      "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": 33
    },
    {
      "id": 2011857,
      "postDate": "2022-10-31T21:21:04.063Z",
      "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": 1
    },
    {
      "id": 2007881,
      "postDate": "2022-10-28T15:02:43.293Z",
      "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": 1,
      "replies": [
        {
          "id": 2009845,
          "postDate": "2022-10-30T11:12:19.213Z",
          "content": "<p>Yes, exactly</p>",
          "rawMarkdown": "Yes, exactly"
        }
      ]
    },
    {
      "id": 2007667,
      "postDate": "2022-10-28T12:06:36.670Z",
      "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": 1,
      "replies": [
        {
          "id": 2007709,
          "postDate": "2022-10-28T12:45:13.683Z",
          "content": "<p>Thx ! <br>\nWe got +0.02 CV/LB</p>",
          "rawMarkdown": "Thx ! \nWe got +0.02 CV/LB",
          "votes": 1
        }
      ]
    }
  ],
  "comments": [
    {
      "id": 2011857,
      "author_name": "Allena Venkata Sai Abhishek",
      "author_url": "",
      "post_date": "2022-10-31T21:21:04.063000",
      "content": "<p>A hearty congratulation on 18th place! <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> </p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2007881,
      "author_name": "Pierre Tisseur",
      "author_url": "",
      "post_date": "2022-10-28T15:02:43.293000",
      "content": "<p>Did you fine tune the yolo-v5 with the bounding box?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 2009845,
          "author_name": "Theo Viel",
          "author_url": "",
          "post_date": "2022-10-30T11:12:19.213000",
          "content": "<p>Yes, exactly</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 2007667,
      "author_name": "Yerram Varun",
      "author_url": "",
      "post_date": "2022-10-28T12:06:36.670000",
      "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": 1,
      "replies": [
        {
          "id": 2007709,
          "author_name": "Theo Viel",
          "author_url": "",
          "post_date": "2022-10-28T12:45:13.683000",
          "content": "<p>Thx ! <br>\nWe got +0.02 CV/LB</p>",
          "votes": 1,
          "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 =)",
    "2011857": "A hearty congratulation on 18th place! @theoviel ",
    "2007881": "Did you fine tune the yolo-v5 with the bounding box?",
    "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 "
  }
}