{
  "id": 263895,
  "title": "26th Place Solution : Brief Writeup",
  "url": "/competitions/siim-covid19-detection/writeups/hungry-for-gold-26th-place-solution-brief-writeup",
  "author_name": "",
  "post_date": "2021-08-10T14:41:17.590Z",
  "votes": 34,
  "comment_count": 16,
  "views": 0,
  "content": "<p>Hi all, <br>\nIt was a very interesting and challenging competition, congratulations to all the winners and a big thank you to the organizers for the competition !</p>\n<h2>Introduction</h2>\n<p>We started this competition quite late, it was my first Object detection competition hence a great opportunity to learn. Teaming up with <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> , <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> ,and <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a> was a great experience for me. </p>\n<h2>Overview</h2>\n<p>Our Final solution is fairly simple, even though we tried a lot of different things without success, that other top teams managed to make work. In this write-up we’ll focus a bit more on what differentiate our solution from others, as most of the stuff is really similar. </p>\n<h2>Solution</h2>\n<h3>4-class Classification</h3>\n<p>Our architecture is similar to heng’s idea, as it includes an auxiliary segmentation head on the two last layers. We trained a bunch of models (and image sizes) for diversity, in the end the following ones were used in the final ensembles, with horizontal flip tta :</p>\n<ul>\n<li><a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> : v2m (512), b5 (512), b5 (640), v2m (768), v2m + pl (512)</li>\n<li><a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> : v2s (512), v2m (512)</li>\n</ul>\n<p>While Pheadrus used normal preprocessing that is used by most in the competition.<br>\nTheo’s model used a different preprocessing technique (automated padding removal &amp; clipping to the 1st and 99th percentiles before normalizing), as well as an auxiliary binary classification head for the none class.</p>\n<p><a href=\"https://ibb.co/m56LM4n\"><img src=\"https://i.ibb.co/CKhkTQj/proc.png\" alt=\"proc\"></a><br>\nTheo’s preprocessing : windowing &amp; padding removal</p>\n<p><a href=\"https://ibb.co/FVQjjNj\"><img src=\"https://i.ibb.co/bJ488q8/model.png\" alt=\"model\"></a><br>\nClassification models overview. Phaedrus’ models don’t use the opacity head.</p>\n<h3>2-class classification</h3>\n<p>In addition to Theo’s model, I trained a b4, b5 and b6. They helped CV a bit.</p>\n<h3>Detection</h3>\n<p><a href=\"https://www.kaggle.com/onodonera\" target=\"_blank\">@onodonera</a> built a bunch of yolov5 (384) whereas <a href=\"https://www.kaggle.com/phaedrus\" target=\"_blank\">@phaedrus</a> used yolov5 (768). One of our two subs used the former and the other one the latter, along with some other modifications. We probably should’ve spent more time training a bigger variety of detection models. </p>\n<h3>Final sub</h3>\n<p>Our 0.619 sub uses <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> models for detection, <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> model for both classification tasks and <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> models for the study target. <br>\nOur other sub - which we thought would perform better - also included my models for the binary classification and uses <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a>'s detection model.</p>\n<p>We used power ensembling for classification models (p=2), and calibrated predictions of the detection model by multiplying them by the binary model prediction^0.1. This gave a &lt;0.001 boost though.</p>\n<h3>What didn’t work for us</h3>\n<ul>\n<li>Pretraining on the CovidX data for classification</li>\n<li>Pseudo-labelling the public test set for classification</li>\n<li>Using a lung detection model for preprocessing helped some of the models but not the overall blend</li>\n<li>Separate classifiers for the atypical and indeterminate classes</li>\n<li>We built and pseudo-labeled a dataset of 25k (covid positive and negative) images from the BimCV, Ricord and CovidX datasets, but couldn’t managed to get any improvement from that either</li>\n</ul>\n<p><em>Thanks for reading !</em></p>",
  "messages": [
    {
      "id": "1464283",
      "postDate": "08/10/2021 14:17:10",
      "content": "<p>Hi all, <br>\nIt was a very interesting and challenging competition, congratulations to all the winners and a big thank you to the organizers for the competition !</p>\n<h2>Introduction</h2>\n<p>We started this competition quite late, it was my first Object detection competition hence a great opportunity to learn. Teaming up with <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> , <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> ,and <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a> was a great experience for me. </p>\n<h2>Overview</h2>\n<p>Our Final solution is fairly simple, even though we tried a lot of different things without success, that other top teams managed to make work. In this write-up we’ll focus a bit more on what differentiate our solution from others, as most of the stuff is really similar. </p>\n<h2>Solution</h2>\n<h3>4-class Classification</h3>\n<p>Our architecture is similar to heng’s idea, as it includes an auxiliary segmentation head on the two last layers. We trained a bunch of models (and image sizes) for diversity, in the end the following ones were used in the final ensembles, with horizontal flip tta :</p>\n<ul>\n<li><a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> : v2m (512), b5 (512), b5 (640), v2m (768), v2m + pl (512)</li>\n<li><a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> : v2s (512), v2m (512)</li>\n</ul>\n<p>While Pheadrus used normal preprocessing that is used by most in the competition.<br>\nTheo’s model used a different preprocessing technique (automated padding removal &amp; clipping to the 1st and 99th percentiles before normalizing), as well as an auxiliary binary classification head for the none class.</p>\n<p><a href=\"https://ibb.co/m56LM4n\"><img src=\"https://i.ibb.co/CKhkTQj/proc.png\" alt=\"proc\"></a><br>\nTheo’s preprocessing : windowing &amp; padding removal</p>\n<p><a href=\"https://ibb.co/FVQjjNj\"><img src=\"https://i.ibb.co/bJ488q8/model.png\" alt=\"model\"></a><br>\nClassification models overview. Phaedrus’ models don’t use the opacity head.</p>\n<h3>2-class classification</h3>\n<p>In addition to Theo’s model, I trained a b4, b5 and b6. They helped CV a bit.</p>\n<h3>Detection</h3>\n<p><a href=\"https://www.kaggle.com/onodonera\" target=\"_blank\">@onodonera</a> built a bunch of yolov5 (384) whereas <a href=\"https://www.kaggle.com/phaedrus\" target=\"_blank\">@phaedrus</a> used yolov5 (768). One of our two subs used the former and the other one the latter, along with some other modifications. We probably should’ve spent more time training a bigger variety of detection models. </p>\n<h3>Final sub</h3>\n<p>Our 0.619 sub uses <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> models for detection, <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> model for both classification tasks and <a href=\"https://www.kaggle.com/pheadrus\" target=\"_blank\">@pheadrus</a> models for the study target. <br>\nOur other sub - which we thought would perform better - also included my models for the binary classification and uses <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a>'s detection model.</p>\n<p>We used power ensembling for classification models (p=2), and calibrated predictions of the detection model by multiplying them by the binary model prediction^0.1. This gave a &lt;0.001 boost though.</p>\n<h3>What didn’t work for us</h3>\n<ul>\n<li>Pretraining on the CovidX data for classification</li>\n<li>Pseudo-labelling the public test set for classification</li>\n<li>Using a lung detection model for preprocessing helped some of the models but not the overall blend</li>\n<li>Separate classifiers for the atypical and indeterminate classes</li>\n<li>We built and pseudo-labeled a dataset of 25k (covid positive and negative) images from the BimCV, Ricord and CovidX datasets, but couldn’t managed to get any improvement from that either</li>\n</ul>\n<p><em>Thanks for reading !</em></p>",
      "rawMarkdown": "Hi all, \nIt was a very interesting and challenging competition, congratulations to all the winners and a big thank you to the organizers for the competition !\n\n\n## Introduction \n\nWe started this competition quite late, it was my first Object detection competition hence a great opportunity to learn. Teaming up with @pheadrus , @theoviel ,and @onodera was a great experience for me. \n\n## Overview\n\nOur Final solution is fairly simple, even though we tried a lot of different things without success, that other top teams managed to make work. In this write-up we’ll focus a bit more on what differentiate our solution from others, as most of the stuff is really similar. \n\n## Solution\n\n### 4-class Classification\n\nOur architecture is similar to heng’s idea, as it includes an auxiliary segmentation head on the two last layers. We trained a bunch of models (and image sizes) for diversity, in the end the following ones were used in the final ensembles, with horizontal flip tta :\n\n- @pheadrus : v2m (512), b5 (512), b5 (640), v2m (768), v2m + pl (512)\n- @theoviel : v2s (512), v2m (512)\n\nWhile Pheadrus used normal preprocessing that is used by most in the competition.\nTheo’s model used a different preprocessing technique (automated padding removal & clipping to the 1st and 99th percentiles before normalizing), as well as an auxiliary binary classification head for the none class.\n\n<a href=\"https://ibb.co/m56LM4n\"><img src=\"https://i.ibb.co/CKhkTQj/proc.png\" alt=\"proc\" border=\"0\"></a>\nTheo’s preprocessing : windowing & padding removal\n\n<a href=\"https://ibb.co/FVQjjNj\"><img src=\"https://i.ibb.co/bJ488q8/model.png\" alt=\"model\" border=\"0\"></a>\nClassification models overview. Phaedrus’ models don’t use the opacity head.\n\n### 2-class classification\n\nIn addition to Theo’s model, I trained a b4, b5 and b6. They helped CV a bit.\n\n### Detection\n\n@onodonera built a bunch of yolov5 (384) whereas @phaedrus used yolov5 (768). One of our two subs used the former and the other one the latter, along with some other modifications. We probably should’ve spent more time training a bigger variety of detection models. \n\n### Final sub\n\nOur 0.619 sub uses @pheadrus models for detection, @theoviel model for both classification tasks and @pheadrus models for the study target. \nOur other sub - which we thought would perform better - also included my models for the binary classification and uses @onodera's detection model.\n\nWe used power ensembling for classification models (p=2), and calibrated predictions of the detection model by multiplying them by the binary model prediction^0.1. This gave a <0.001 boost though.\n\n\n### What didn’t work for us\n\n- Pretraining on the CovidX data for classification\n- Pseudo-labelling the public test set for classification\n- Using a lung detection model for preprocessing helped some of the models but not the overall blend\n- Separate classifiers for the atypical and indeterminate classes\n- We built and pseudo-labeled a dataset of 25k (covid positive and negative) images from the BimCV, Ricord and CovidX datasets, but couldn’t managed to get any improvement from that either\n\n\n\n*Thanks for reading !*",
      "votes": null
    },
    {
      "id": "1464290",
      "postDate": "08/10/2021 14:20:34",
      "content": "<p>Congratulations team! Well done. I like your 4-class classification model design and clean image preprocessing.</p>",
      "rawMarkdown": "Congratulations team! Well done. I like your 4-class classification model design and clean image preprocessing.",
      "votes": null
    },
    {
      "id": "1464298",
      "postDate": "08/10/2021 14:22:40",
      "content": "<p>Thanks a lot <a href=\"https://www.kaggle.com/tanulsingh077\" target=\"_blank\">@tanulsingh077</a> <a href=\"https://www.kaggle.com/onodonera\" target=\"_blank\">@onodonera</a> <a href=\"https://www.kaggle.com/phaedrus\" target=\"_blank\">@phaedrus</a> for the competition, it was nice working with you ! </p>",
      "rawMarkdown": "Thanks a lot @tanulsingh077 @onodonera @phaedrus for the competition, it was nice working with you !",
      "votes": null
    },
    {
      "id": "1464322",
      "postDate": "08/10/2021 14:31:47",
      "content": "<p>Thanks Chris ! You're too fast to reply we weren't even done fixing the post ! </p>",
      "rawMarkdown": "Thanks Chris ! You're too fast to reply we weren't even done fixing the post !",
      "votes": null
    },
    {
      "id": "1464324",
      "postDate": "08/10/2021 14:32:41",
      "content": "<p>It was such a nice experience for me personally to team up with you guys <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a> <a href=\"https://www.kaggle.com/tanulsingh077\" target=\"_blank\">@tanulsingh077</a>  </p>\n<p>Great learning experience for me!</p>",
      "rawMarkdown": "It was such a nice experience for me personally to team up with you guys @theoviel @onodera @tanulsingh077  \n\nGreat learning experience for me!",
      "votes": null
    },
    {
      "id": "1464335",
      "postDate": "08/10/2021 14:36:08",
      "content": "<p>Thanks chris , congrats on a strong finish once again , looking forward to read your solution 😉</p>",
      "rawMarkdown": "Thanks chris , congrats on a strong finish once again , looking forward to read your solution 😉",
      "votes": null
    },
    {
      "id": "1464346",
      "postDate": "08/10/2021 14:41:32",
      "content": "<p>haha, i see you changed your image host so that Kaggle displays the image in the post. That's better. (It's annoying how Kaggle changed their image policies. Many of my old posts lost their images 🙁 )</p>",
      "rawMarkdown": "haha, i see you changed your image host so that Kaggle displays the image in the post. That's better. (It's annoying how Kaggle changed their image policies. Many of my old posts lost their images 🙁 )",
      "votes": null
    },
    {
      "id": "1465993",
      "postDate": "08/11/2021 09:00:20",
      "content": "<p><strong>Update :</strong> My part of the solution is available on GitHub -&gt; <a href=\"https://github.com/TheoViel/kaggle_siim_covid\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid</a><br>\nAs usual, code is documented &amp; cleaned :)</p>",
      "rawMarkdown": "**Update :** My part of the solution is available on GitHub -> https://github.com/TheoViel/kaggle_siim_covid\nAs usual, code is documented & cleaned :)",
      "votes": null
    },
    {
      "id": "1467342",
      "postDate": "08/11/2021 23:58:29",
      "content": "<p>Good work team, congratulations 🙏</p>",
      "rawMarkdown": "Good work team, congratulations 🙏",
      "votes": null
    },
    {
      "id": "1467512",
      "postDate": "08/12/2021 03:09:09",
      "content": "<p>Great write up ,helped me to understand the approach much better. </p>",
      "rawMarkdown": "Great write up ,helped me to understand the approach much better.",
      "votes": null
    },
    {
      "id": "1468551",
      "postDate": "08/12/2021 13:21:11",
      "content": "<p>Very nice work. Thank you</p>",
      "rawMarkdown": "Very nice work. Thank you",
      "votes": null
    },
    {
      "id": "1468805",
      "postDate": "08/12/2021 15:19:11",
      "content": "<p>Great works! Amazing experience , thanks.</p>",
      "rawMarkdown": "Great works! Amazing experience , thanks.",
      "votes": null
    },
    {
      "id": "1474712",
      "postDate": "08/16/2021 08:39:05",
      "content": "<p>Congrats guy. Excellent effort.</p>",
      "rawMarkdown": "Congrats guy. Excellent effort.",
      "votes": null
    },
    {
      "id": "1475277",
      "postDate": "08/16/2021 14:48:30",
      "content": "<p>Congratulations, Could you please tell me in which file we have done the preprocessing part as said in the post.<br>\nI actually didn't understand the part :\"clipping to the 1st and 99th percentiles before normalizing\"<br>\nThanks</p>",
      "rawMarkdown": "Congratulations, Could you please tell me in which file we have done the preprocessing part as said in the post.\nI actually didn't understand the part :\"clipping to the 1st and 99th percentiles before normalizing\"\nThanks",
      "votes": null
    },
    {
      "id": "1475439",
      "postDate": "08/16/2021 16:15:12",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/mrinath\" target=\"_blank\">@mrinath</a> you can find the code here <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py</a></p>\n<p>Please let me know if you need anything else</p>",
      "rawMarkdown": "Hi @mrinath you can find the code here https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py\n\nPlease let me know if you need anything else",
      "votes": null
    },
    {
      "id": "1488201",
      "postDate": "08/24/2021 06:50:23",
      "content": "<p>Hey, I am confused about one thing, after this preprocessing step, I have seen you have used Mean and std as None in your <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py</a> code.<br>\nSo does it mean you have given the image in the model without normalizing it?</p>",
      "rawMarkdown": "Hey, I am confused about one thing, after this preprocessing step, I have seen you have used Mean and std as None in your https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py code.\nSo does it mean you have given the image in the model without normalizing it?",
      "votes": null
    },
    {
      "id": "1488253",
      "postDate": "08/24/2021 07:17:01",
      "content": "<p>Mean and std are chosen according to the model :</p>\n<p>In <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/training/main.py\" target=\"_blank\">training/main.py</a> :</p>\n<pre><code>transforms=get_transfos_cls(augment=True, mean=model.mean, std=model.std)\n</code></pre>",
      "rawMarkdown": "Mean and std are chosen according to the model :\n\nIn [training/main.py](https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/training/main.py) :\n```\ntransforms=get_transfos_cls(augment=True, mean=model.mean, std=model.std)\n```",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1464290,
      "author_name": "cdeotte",
      "author_url": "",
      "post_date": "08/10/2021 14:20:34",
      "content": "<p>Congratulations team! Well done. I like your 4-class classification model design and clean image preprocessing.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1464322,
          "author_name": "theoviel",
          "author_url": "",
          "post_date": "08/10/2021 14:31:47",
          "content": "<p>Thanks Chris ! You're too fast to reply we weren't even done fixing the post ! </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1464335,
          "author_name": "tanulsingh077",
          "author_url": "",
          "post_date": "08/10/2021 14:36:08",
          "content": "<p>Thanks chris , congrats on a strong finish once again , looking forward to read your solution 😉</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1464346,
          "author_name": "cdeotte",
          "author_url": "",
          "post_date": "08/10/2021 14:41:32",
          "content": "<p>haha, i see you changed your image host so that Kaggle displays the image in the post. That's better. (It's annoying how Kaggle changed their image policies. Many of my old posts lost their images 🙁 )</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1464298,
      "author_name": "theoviel",
      "author_url": "",
      "post_date": "08/10/2021 14:22:40",
      "content": "<p>Thanks a lot <a href=\"https://www.kaggle.com/tanulsingh077\" target=\"_blank\">@tanulsingh077</a> <a href=\"https://www.kaggle.com/onodonera\" target=\"_blank\">@onodonera</a> <a href=\"https://www.kaggle.com/phaedrus\" target=\"_blank\">@phaedrus</a> for the competition, it was nice working with you ! </p>",
      "votes": null,
      "replies": [
        {
          "id": 1464324,
          "author_name": "pheadrus",
          "author_url": "",
          "post_date": "08/10/2021 14:32:41",
          "content": "<p>It was such a nice experience for me personally to team up with you guys <a href=\"https://www.kaggle.com/theoviel\" target=\"_blank\">@theoviel</a> <a href=\"https://www.kaggle.com/onodera\" target=\"_blank\">@onodera</a> <a href=\"https://www.kaggle.com/tanulsingh077\" target=\"_blank\">@tanulsingh077</a>  </p>\n<p>Great learning experience for me!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1465993,
      "author_name": "theoviel",
      "author_url": "",
      "post_date": "08/11/2021 09:00:20",
      "content": "<p><strong>Update :</strong> My part of the solution is available on GitHub -&gt; <a href=\"https://github.com/TheoViel/kaggle_siim_covid\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid</a><br>\nAs usual, code is documented &amp; cleaned :)</p>",
      "votes": null,
      "replies": [
        {
          "id": 1475277,
          "author_name": "mrinath",
          "author_url": "",
          "post_date": "08/16/2021 14:48:30",
          "content": "<p>Congratulations, Could you please tell me in which file we have done the preprocessing part as said in the post.<br>\nI actually didn't understand the part :\"clipping to the 1st and 99th percentiles before normalizing\"<br>\nThanks</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1475439,
          "author_name": "tanulsingh077",
          "author_url": "",
          "post_date": "08/16/2021 16:15:12",
          "content": "<p>Hi <a href=\"https://www.kaggle.com/mrinath\" target=\"_blank\">@mrinath</a> you can find the code here <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py</a></p>\n<p>Please let me know if you need anything else</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1488201,
          "author_name": "mrinath",
          "author_url": "",
          "post_date": "08/24/2021 06:50:23",
          "content": "<p>Hey, I am confused about one thing, after this preprocessing step, I have seen you have used Mean and std as None in your <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py\" target=\"_blank\">https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py</a> code.<br>\nSo does it mean you have given the image in the model without normalizing it?</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1488253,
          "author_name": "theoviel",
          "author_url": "",
          "post_date": "08/24/2021 07:17:01",
          "content": "<p>Mean and std are chosen according to the model :</p>\n<p>In <a href=\"https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/training/main.py\" target=\"_blank\">training/main.py</a> :</p>\n<pre><code>transforms=get_transfos_cls(augment=True, mean=model.mean, std=model.std)\n</code></pre>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1467342,
      "author_name": "iniestamoh",
      "author_url": "",
      "post_date": "08/11/2021 23:58:29",
      "content": "<p>Good work team, congratulations 🙏</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1467512,
      "author_name": "shub99",
      "author_url": "",
      "post_date": "08/12/2021 03:09:09",
      "content": "<p>Great write up ,helped me to understand the approach much better. </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1468551,
      "author_name": "vip30service",
      "author_url": "",
      "post_date": "08/12/2021 13:21:11",
      "content": "<p>Very nice work. Thank you</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1468805,
      "author_name": "mdsumonhossain",
      "author_url": "",
      "post_date": "08/12/2021 15:19:11",
      "content": "<p>Great works! Amazing experience , thanks.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1474712,
      "author_name": "msg4wale",
      "author_url": "",
      "post_date": "08/16/2021 08:39:05",
      "content": "<p>Congrats guy. Excellent effort.</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1464283": "Hi all, \nIt was a very interesting and challenging competition, congratulations to all the winners and a big thank you to the organizers for the competition !\n\n\n## Introduction \n\nWe started this competition quite late, it was my first Object detection competition hence a great opportunity to learn. Teaming up with @pheadrus , @theoviel ,and @onodera was a great experience for me. \n\n## Overview\n\nOur Final solution is fairly simple, even though we tried a lot of different things without success, that other top teams managed to make work. In this write-up we’ll focus a bit more on what differentiate our solution from others, as most of the stuff is really similar. \n\n## Solution\n\n### 4-class Classification\n\nOur architecture is similar to heng’s idea, as it includes an auxiliary segmentation head on the two last layers. We trained a bunch of models (and image sizes) for diversity, in the end the following ones were used in the final ensembles, with horizontal flip tta :\n\n- @pheadrus : v2m (512), b5 (512), b5 (640), v2m (768), v2m + pl (512)\n- @theoviel : v2s (512), v2m (512)\n\nWhile Pheadrus used normal preprocessing that is used by most in the competition.\nTheo’s model used a different preprocessing technique (automated padding removal & clipping to the 1st and 99th percentiles before normalizing), as well as an auxiliary binary classification head for the none class.\n\n<a href=\"https://ibb.co/m56LM4n\"><img src=\"https://i.ibb.co/CKhkTQj/proc.png\" alt=\"proc\" border=\"0\"></a>\nTheo’s preprocessing : windowing & padding removal\n\n<a href=\"https://ibb.co/FVQjjNj\"><img src=\"https://i.ibb.co/bJ488q8/model.png\" alt=\"model\" border=\"0\"></a>\nClassification models overview. Phaedrus’ models don’t use the opacity head.\n\n### 2-class classification\n\nIn addition to Theo’s model, I trained a b4, b5 and b6. They helped CV a bit.\n\n### Detection\n\n@onodonera built a bunch of yolov5 (384) whereas @phaedrus used yolov5 (768). One of our two subs used the former and the other one the latter, along with some other modifications. We probably should’ve spent more time training a bigger variety of detection models. \n\n### Final sub\n\nOur 0.619 sub uses @pheadrus models for detection, @theoviel model for both classification tasks and @pheadrus models for the study target. \nOur other sub - which we thought would perform better - also included my models for the binary classification and uses @onodera's detection model.\n\nWe used power ensembling for classification models (p=2), and calibrated predictions of the detection model by multiplying them by the binary model prediction^0.1. This gave a <0.001 boost though.\n\n\n### What didn’t work for us\n\n- Pretraining on the CovidX data for classification\n- Pseudo-labelling the public test set for classification\n- Using a lung detection model for preprocessing helped some of the models but not the overall blend\n- Separate classifiers for the atypical and indeterminate classes\n- We built and pseudo-labeled a dataset of 25k (covid positive and negative) images from the BimCV, Ricord and CovidX datasets, but couldn’t managed to get any improvement from that either\n\n\n\n*Thanks for reading !*",
    "1464290": "Congratulations team! Well done. I like your 4-class classification model design and clean image preprocessing.",
    "1464298": "Thanks a lot @tanulsingh077 @onodonera @phaedrus for the competition, it was nice working with you !",
    "1464322": "Thanks Chris ! You're too fast to reply we weren't even done fixing the post !",
    "1464324": "It was such a nice experience for me personally to team up with you guys @theoviel @onodera @tanulsingh077  \n\nGreat learning experience for me!",
    "1464335": "Thanks chris , congrats on a strong finish once again , looking forward to read your solution 😉",
    "1464346": "haha, i see you changed your image host so that Kaggle displays the image in the post. That's better. (It's annoying how Kaggle changed their image policies. Many of my old posts lost their images 🙁 )",
    "1465993": "**Update :** My part of the solution is available on GitHub -> https://github.com/TheoViel/kaggle_siim_covid\nAs usual, code is documented & cleaned :)",
    "1467342": "Good work team, congratulations 🙏",
    "1467512": "Great write up ,helped me to understand the approach much better.",
    "1468551": "Very nice work. Thank you",
    "1468805": "Great works! Amazing experience , thanks.",
    "1474712": "Congrats guy. Excellent effort.",
    "1475277": "Congratulations, Could you please tell me in which file we have done the preprocessing part as said in the post.\nI actually didn't understand the part :\"clipping to the 1st and 99th percentiles before normalizing\"\nThanks",
    "1475439": "Hi @mrinath you can find the code here https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/extraction.py\n\nPlease let me know if you need anything else",
    "1488201": "Hey, I am confused about one thing, after this preprocessing step, I have seen you have used Mean and std as None in your https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/data/transforms.py code.\nSo does it mean you have given the image in the model without normalizing it?",
    "1488253": "Mean and std are chosen according to the model :\n\nIn [training/main.py](https://github.com/TheoViel/kaggle_siim_covid/blob/main/src/training/main.py) :\n```\ntransforms=get_transfos_cls(augment=True, mean=model.mean, std=model.std)\n```"
  },
  "source": "meta"
}