{
  "id": 298021,
  "title": "3rd place solution",
  "url": "/competitions/sartorius-cell-instance-segmentation/discussion/298021",
  "author_name": "Alexandre Cadrin-Chênevert",
  "post_date": "2021-12-31T06:07:41.621000",
  "votes": 54,
  "comment_count": 13,
  "views": 0,
  "content": "<p>Thank you very much to Kaggle and the organizers of this competition and more specifically to <a href=\"https://www.kaggle.com/christoffersartorius\" target=\"_blank\">@christoffersartorius</a>, the entire Sartorius team and the brave data annotators that allow us to do countless tensor multiplications on GPUs with their training data.</p>\n<p>Congratulations also to all the participating teams and to the 1st and 2nd place teams for their great achievement.</p>\n<p>I also thank my teammates <a href=\"https://www.kaggle.com/slawekbiel\" target=\"_blank\">@slawekbiel</a>  <a href=\"https://www.kaggle.com/rytisva88\" target=\"_blank\">@rytisva88</a> and <a href=\"https://www.kaggle.com/cpmp\" target=\"_blank\">@cpmp</a> that were absolutely amazing during this competition. I learned a lot from all of you in the past intense weeks.</p>\n<p><strong>Here is the general schema of our ensemble solution:</strong><br>\n<img src=\"https://i.postimg.cc/wMK8KkcS/Ensemble-chart.png\"></p>\n<p>The two Mask-RCNN approaches are extended versions of <a href=\"https://www.kaggle.com/slawekbiel\" target=\"_blank\">@slawekbiel</a> great serie of notebooks using Detectron2:<br>\n<a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-1-3-input-data\">1) Inputs</a> ==&gt; <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-2-3-training\">2) Training</a> ==&gt; <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-3-3-inference\">3) Inference</a></p>\n<p><strong>1) Mask-RCNN models:</strong></p>\n<ul>\n<li>Resnest200-Mask-RCNN (<a href=\"https://github.com/chongruo/detectron2-ResNeSt\" target=\"_blank\">https://github.com/chongruo/detectron2-ResNeSt</a>)</li>\n<li>Weight initialization from Livecell pretraining (<a href=\"https://github.com/sartorius-research/LIVECell\" target=\"_blank\">https://github.com/sartorius-research/LIVECell</a>)</li>\n<li>Multiple size + hflip training augmentations</li>\n</ul>\n<p><strong>A) 3 classes models</strong></p>\n<ul>\n<li>5 folds</li>\n<li>Multiple size inference</li>\n</ul>\n<p><strong>B) Class specific models</strong></p>\n<ul>\n<li>5 folds +- full data \"fold\" for each class</li>\n<li>TTA + WBF + NMS + Mask averaging</li>\n<li>TTA (box inference): Multiple size, Hflip + Vflip</li>\n<li>TTA (mask inference): Multiple size, Hflip </li>\n<li>Class specific parameters and hyperparameters (anchors size, image sizes, amount of TTA, wbf IOU)</li>\n</ul>\n<p><img src=\"https://i.ibb.co/NtP7DK5/Mask-RCNN-class-specific.jpg\"></p>\n<p><strong>2) Cellpose</strong><br>\nSlawek detailed his great Cellpose approach <a href=\"https://www.kaggle.com/c/sartorius-cell-instance-segmentation/discussion/297984\">here </a> which was blending very well with the Mask-RCNN models.</p>\n<p><strong>Final week experiments:</strong></p>\n<p><strong>Pseudolabels</strong></p>\n<ul>\n<li>Labels generated from the ensemble of models for the unsupervised data</li>\n<li>Models trained on merged pseudolabels + training data</li>\n<li>These models had quite variable results both on public LB and private LB</li>\n</ul>\n<p><strong>Ensemble variations</strong></p>\n<ul>\n<li>Variable experiments in adding/removing number of models in ensemble, with the allowed 9h runtime, gave +- 0.002 variation both on public LB and private LB depending on configurations.</li>\n</ul>\n<p><strong>Submission selection</strong></p>\n<ul>\n<li>To decrease correlation of final submissions, we choose one ensemble with some pseudolabels models and one ensemble without any pseudolabels models. Both submissions scored 0.354 on private LB.</li>\n</ul>",
  "messages": [
    {
      "id": 1633884,
      "postDate": "2021-12-31T06:07:41.623Z",
      "content": "<p>Thank you very much to Kaggle and the organizers of this competition and more specifically to <a href=\"https://www.kaggle.com/christoffersartorius\" target=\"_blank\">@christoffersartorius</a>, the entire Sartorius team and the brave data annotators that allow us to do countless tensor multiplications on GPUs with their training data.</p>\n<p>Congratulations also to all the participating teams and to the 1st and 2nd place teams for their great achievement.</p>\n<p>I also thank my teammates <a href=\"https://www.kaggle.com/slawekbiel\" target=\"_blank\">@slawekbiel</a>  <a href=\"https://www.kaggle.com/rytisva88\" target=\"_blank\">@rytisva88</a> and <a href=\"https://www.kaggle.com/cpmp\" target=\"_blank\">@cpmp</a> that were absolutely amazing during this competition. I learned a lot from all of you in the past intense weeks.</p>\n<p><strong>Here is the general schema of our ensemble solution:</strong><br>\n<img src=\"https://i.postimg.cc/wMK8KkcS/Ensemble-chart.png\"></p>\n<p>The two Mask-RCNN approaches are extended versions of <a href=\"https://www.kaggle.com/slawekbiel\" target=\"_blank\">@slawekbiel</a> great serie of notebooks using Detectron2:<br>\n<a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-1-3-input-data\">1) Inputs</a> ==&gt; <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-2-3-training\">2) Training</a> ==&gt; <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-3-3-inference\">3) Inference</a></p>\n<p><strong>1) Mask-RCNN models:</strong></p>\n<ul>\n<li>Resnest200-Mask-RCNN (<a href=\"https://github.com/chongruo/detectron2-ResNeSt\" target=\"_blank\">https://github.com/chongruo/detectron2-ResNeSt</a>)</li>\n<li>Weight initialization from Livecell pretraining (<a href=\"https://github.com/sartorius-research/LIVECell\" target=\"_blank\">https://github.com/sartorius-research/LIVECell</a>)</li>\n<li>Multiple size + hflip training augmentations</li>\n</ul>\n<p><strong>A) 3 classes models</strong></p>\n<ul>\n<li>5 folds</li>\n<li>Multiple size inference</li>\n</ul>\n<p><strong>B) Class specific models</strong></p>\n<ul>\n<li>5 folds +- full data \"fold\" for each class</li>\n<li>TTA + WBF + NMS + Mask averaging</li>\n<li>TTA (box inference): Multiple size, Hflip + Vflip</li>\n<li>TTA (mask inference): Multiple size, Hflip </li>\n<li>Class specific parameters and hyperparameters (anchors size, image sizes, amount of TTA, wbf IOU)</li>\n</ul>\n<p><img src=\"https://i.ibb.co/NtP7DK5/Mask-RCNN-class-specific.jpg\"></p>\n<p><strong>2) Cellpose</strong><br>\nSlawek detailed his great Cellpose approach <a href=\"https://www.kaggle.com/c/sartorius-cell-instance-segmentation/discussion/297984\">here </a> which was blending very well with the Mask-RCNN models.</p>\n<p><strong>Final week experiments:</strong></p>\n<p><strong>Pseudolabels</strong></p>\n<ul>\n<li>Labels generated from the ensemble of models for the unsupervised data</li>\n<li>Models trained on merged pseudolabels + training data</li>\n<li>These models had quite variable results both on public LB and private LB</li>\n</ul>\n<p><strong>Ensemble variations</strong></p>\n<ul>\n<li>Variable experiments in adding/removing number of models in ensemble, with the allowed 9h runtime, gave +- 0.002 variation both on public LB and private LB depending on configurations.</li>\n</ul>\n<p><strong>Submission selection</strong></p>\n<ul>\n<li>To decrease correlation of final submissions, we choose one ensemble with some pseudolabels models and one ensemble without any pseudolabels models. Both submissions scored 0.354 on private LB.</li>\n</ul>",
      "rawMarkdown": "Thank you very much to Kaggle and the organizers of this competition and more specifically to @christoffersartorius, the entire Sartorius team and the brave data annotators that allow us to do countless tensor multiplications on GPUs with their training data.\n\nCongratulations also to all the participating teams and to the 1st and 2nd place teams for their great achievement.\n\nI also thank my teammates @slawekbiel  @rytisva88 and @cpmp that were absolutely amazing during this competition. I learned a lot from all of you in the past intense weeks.\n\n**Here is the general schema of our ensemble solution:**\n<img src=\"https://i.postimg.cc/wMK8KkcS/Ensemble-chart.png\">\n\nThe two Mask-RCNN approaches are extended versions of @slawekbiel great serie of notebooks using Detectron2:\n<a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-1-3-input-data\">1) Inputs</a> ==> <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-2-3-training\">2) Training</a> ==> <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-3-3-inference\">3) Inference</a>\n \n**1) Mask-RCNN models:**\n- Resnest200-Mask-RCNN (https://github.com/chongruo/detectron2-ResNeSt)\n- Weight initialization from Livecell pretraining (https://github.com/sartorius-research/LIVECell)\n- Multiple size + hflip training augmentations\n\n**A) 3 classes models**\n- 5 folds\n- Multiple size inference\n\n**B) Class specific models**\n- 5 folds +- full data \"fold\" for each class\n- TTA + WBF + NMS + Mask averaging\n- TTA (box inference): Multiple size, Hflip + Vflip\n- TTA (mask inference): Multiple size, Hflip \n- Class specific parameters and hyperparameters (anchors size, image sizes, amount of TTA, wbf IOU)\n\n<img src=\"https://i.ibb.co/NtP7DK5/Mask-RCNN-class-specific.jpg\">\n\n\n**2) Cellpose**\nSlawek detailed his great Cellpose approach <a href=\"https://www.kaggle.com/c/sartorius-cell-instance-segmentation/discussion/297984\" >here </a> which was blending very well with the Mask-RCNN models.\n\n**Final week experiments:**\n\n**Pseudolabels**\n- Labels generated from the ensemble of models for the unsupervised data\n- Models trained on merged pseudolabels + training data\n- These models had quite variable results both on public LB and private LB\n\n**Ensemble variations**\n- Variable experiments in adding/removing number of models in ensemble, with the allowed 9h runtime, gave +- 0.002 variation both on public LB and private LB depending on configurations.\n\n**Submission selection**\n- To decrease correlation of final submissions, we choose one ensemble with some pseudolabels models and one ensemble without any pseudolabels models. Both submissions scored 0.354 on private LB.",
      "votes": 54
    },
    {
      "id": 1634040,
      "postDate": "2021-12-31T09:56:09.913Z",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> and to all your team for your remarkable result and thank you for sharing your solution!</p>",
      "rawMarkdown": "Congratulations @alexandrecc and to all your team for your remarkable result and thank you for sharing your solution!",
      "votes": 1
    },
    {
      "id": 1635369,
      "postDate": "2022-01-01T17:47:14.743Z",
      "content": "<p>Congratulations !great work</p>",
      "rawMarkdown": "Congratulations !great work"
    },
    {
      "id": 2008212,
      "postDate": "2022-10-28T20:33:56.503Z",
      "content": "<p>Félicitations et merci pour partager votre solution.</p>",
      "rawMarkdown": "Félicitations et merci pour partager votre solution."
    },
    {
      "id": 2007062,
      "postDate": "2022-10-28T01:59:01.030Z",
      "content": "<p>First, congratulations! Did you guys make a simple or weighted average for final subs? Thanks in advance</p>",
      "rawMarkdown": "First, congratulations! Did you guys make a simple or weighted average for final subs? Thanks in advance"
    },
    {
      "id": 1664868,
      "postDate": "2022-01-26T10:50:57.097Z",
      "content": "<p>Congratulations !!!</p>",
      "rawMarkdown": "Congratulations !!!"
    },
    {
      "id": 1648125,
      "postDate": "2022-01-13T07:13:48.533Z",
      "content": "<p>I want to know the specific operation of WSF+NMS.</p>",
      "rawMarkdown": "I want to know the specific operation of WSF+NMS.",
      "replies": [
        {
          "id": 1654875,
          "postDate": "2022-01-18T22:32:57.850Z",
          "content": "<p>Applying a modified version of weighted box fusion (<a href=\"https://github.com/ZFTurbo/Weighted-Boxes-Fusion\" target=\"_blank\">https://github.com/ZFTurbo/Weighted-Boxes-Fusion</a>) with summed score of fused boxes instead of averaged score. Then normal non-max suppresion is applied after weighted box fusion. Optimal IOU thresholds were tuned for each class.</p>",
          "rawMarkdown": "Applying a modified version of weighted box fusion (https://github.com/ZFTurbo/Weighted-Boxes-Fusion) with summed score of fused boxes instead of averaged score. Then normal non-max suppresion is applied after weighted box fusion. Optimal IOU thresholds were tuned for each class.",
          "votes": 1
        }
      ]
    },
    {
      "id": 1647919,
      "postDate": "2022-01-13T02:10:42.180Z",
      "content": "<p>congratulate! I learned a lot of useful skills！👍</p>",
      "rawMarkdown": "congratulate! I learned a lot of useful skills！👍"
    },
    {
      "id": 1635403,
      "postDate": "2022-01-01T18:16:23.933Z",
      "content": "<p>Congrats ! your work made you  to achieve a gold ,keep working  <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> </p>",
      "rawMarkdown": "Congrats ! your work made you  to achieve a gold ,keep working  @alexandrecc "
    },
    {
      "id": 1634756,
      "postDate": "2022-01-01T06:10:09.207Z",
      "content": "<p>Amazing solution! Learned a lot👍 <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> <br>\nDo class specific models mean that you train one model for each class respectively? A bit confused with that part</p>",
      "rawMarkdown": "Amazing solution! Learned a lot👍 @alexandrecc \nDo class specific models mean that you train one model for each class respectively? A bit confused with that part"
    },
    {
      "id": 1649381,
      "postDate": "2022-01-14T08:33:56.403Z",
      "rawMarkdown": "",
      "isDeleted": true,
      "replies": [
        {
          "id": 1654878,
          "postDate": "2022-01-18T22:37:22.910Z",
          "content": "<p>Mask-RCNN has a segmentation head so it's needed to output segmentation compared to all the object detection architectures. The backbone (Resnest 200) was initially selected because the pretraining weights were already available in the Livecell github repo.</p>",
          "rawMarkdown": "Mask-RCNN has a segmentation head so it's needed to output segmentation compared to all the object detection architectures. The backbone (Resnest 200) was initially selected because the pretraining weights were already available in the Livecell github repo.",
          "votes": 1
        }
      ]
    },
    {
      "id": 1634356,
      "postDate": "2021-12-31T16:12:33.617Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 1634040,
      "author_name": "Luca Massaron",
      "author_url": "",
      "post_date": "2021-12-31T09:56:09.913000",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> and to all your team for your remarkable result and thank you for sharing your solution!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 1635369,
      "author_name": "Aiswarya Sivakumar",
      "author_url": "",
      "post_date": "2022-01-01T17:47:14.743000",
      "content": "<p>Congratulations !great work</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2008212,
      "author_name": "Marília Prata",
      "author_url": "",
      "post_date": "2022-10-28T20:33:56.503000",
      "content": "<p>Félicitations et merci pour partager votre solution.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2007062,
      "author_name": "Paulo Loyola",
      "author_url": "",
      "post_date": "2022-10-28T01:59:01.030000",
      "content": "<p>First, congratulations! Did you guys make a simple or weighted average for final subs? Thanks in advance</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1664868,
      "author_name": "Fahad Syed",
      "author_url": "",
      "post_date": "2022-01-26T10:50:57.097000",
      "content": "<p>Congratulations !!!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1648125,
      "author_name": "yerongg",
      "author_url": "",
      "post_date": "2022-01-13T07:13:48.533000",
      "content": "<p>I want to know the specific operation of WSF+NMS.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1654875,
          "author_name": "Alexandre Cadrin-Chênevert",
          "author_url": "",
          "post_date": "2022-01-18T22:32:57.850000",
          "content": "<p>Applying a modified version of weighted box fusion (<a href=\"https://github.com/ZFTurbo/Weighted-Boxes-Fusion\" target=\"_blank\">https://github.com/ZFTurbo/Weighted-Boxes-Fusion</a>) with summed score of fused boxes instead of averaged score. Then normal non-max suppresion is applied after weighted box fusion. Optimal IOU thresholds were tuned for each class.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1647919,
      "author_name": "AIhouhaoxiong",
      "author_url": "",
      "post_date": "2022-01-13T02:10:42.180000",
      "content": "<p>congratulate! I learned a lot of useful skills！👍</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1635403,
      "author_name": "Bala Vashan",
      "author_url": "",
      "post_date": "2022-01-01T18:16:23.933000",
      "content": "<p>Congrats ! your work made you  to achieve a gold ,keep working  <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1634756,
      "author_name": "ForcewithMe",
      "author_url": "",
      "post_date": "2022-01-01T06:10:09.207000",
      "content": "<p>Amazing solution! Learned a lot👍 <a href=\"https://www.kaggle.com/alexandrecc\" target=\"_blank\">@alexandrecc</a> <br>\nDo class specific models mean that you train one model for each class respectively? A bit confused with that part</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1649381,
      "author_name": "",
      "author_url": "",
      "post_date": "2022-01-14T08:33:56.403000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 1654878,
          "author_name": "Alexandre Cadrin-Chênevert",
          "author_url": "",
          "post_date": "2022-01-18T22:37:22.910000",
          "content": "<p>Mask-RCNN has a segmentation head so it's needed to output segmentation compared to all the object detection architectures. The backbone (Resnest 200) was initially selected because the pretraining weights were already available in the Livecell github repo.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1634356,
      "author_name": "",
      "author_url": "",
      "post_date": "2021-12-31T16:12:33.617000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1633884": "Thank you very much to Kaggle and the organizers of this competition and more specifically to @christoffersartorius, the entire Sartorius team and the brave data annotators that allow us to do countless tensor multiplications on GPUs with their training data.\n\nCongratulations also to all the participating teams and to the 1st and 2nd place teams for their great achievement.\n\nI also thank my teammates @slawekbiel  @rytisva88 and @cpmp that were absolutely amazing during this competition. I learned a lot from all of you in the past intense weeks.\n\n**Here is the general schema of our ensemble solution:**\n<img src=\"https://i.postimg.cc/wMK8KkcS/Ensemble-chart.png\">\n\nThe two Mask-RCNN approaches are extended versions of @slawekbiel great serie of notebooks using Detectron2:\n<a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-1-3-input-data\">1) Inputs</a> ==> <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-2-3-training\">2) Training</a> ==> <a href=\"https://www.kaggle.com/slawekbiel/positive-score-with-detectron-3-3-inference\">3) Inference</a>\n \n**1) Mask-RCNN models:**\n- Resnest200-Mask-RCNN (https://github.com/chongruo/detectron2-ResNeSt)\n- Weight initialization from Livecell pretraining (https://github.com/sartorius-research/LIVECell)\n- Multiple size + hflip training augmentations\n\n**A) 3 classes models**\n- 5 folds\n- Multiple size inference\n\n**B) Class specific models**\n- 5 folds +- full data \"fold\" for each class\n- TTA + WBF + NMS + Mask averaging\n- TTA (box inference): Multiple size, Hflip + Vflip\n- TTA (mask inference): Multiple size, Hflip \n- Class specific parameters and hyperparameters (anchors size, image sizes, amount of TTA, wbf IOU)\n\n<img src=\"https://i.ibb.co/NtP7DK5/Mask-RCNN-class-specific.jpg\">\n\n\n**2) Cellpose**\nSlawek detailed his great Cellpose approach <a href=\"https://www.kaggle.com/c/sartorius-cell-instance-segmentation/discussion/297984\" >here </a> which was blending very well with the Mask-RCNN models.\n\n**Final week experiments:**\n\n**Pseudolabels**\n- Labels generated from the ensemble of models for the unsupervised data\n- Models trained on merged pseudolabels + training data\n- These models had quite variable results both on public LB and private LB\n\n**Ensemble variations**\n- Variable experiments in adding/removing number of models in ensemble, with the allowed 9h runtime, gave +- 0.002 variation both on public LB and private LB depending on configurations.\n\n**Submission selection**\n- To decrease correlation of final submissions, we choose one ensemble with some pseudolabels models and one ensemble without any pseudolabels models. Both submissions scored 0.354 on private LB.",
    "1634040": "Congratulations @alexandrecc and to all your team for your remarkable result and thank you for sharing your solution!",
    "1635369": "Congratulations !great work",
    "2008212": "Félicitations et merci pour partager votre solution.",
    "2007062": "First, congratulations! Did you guys make a simple or weighted average for final subs? Thanks in advance",
    "1664868": "Congratulations !!!",
    "1648125": "I want to know the specific operation of WSF+NMS.",
    "1647919": "congratulate! I learned a lot of useful skills！👍",
    "1635403": "Congrats ! your work made you  to achieve a gold ,keep working  @alexandrecc ",
    "1634756": "Amazing solution! Learned a lot👍 @alexandrecc \nDo class specific models mean that you train one model for each class respectively? A bit confused with that part",
    "1649381": "",
    "1634356": ""
  }
}