{
  "id": 297985,
  "title": "9 Place solution: pretrain & semi-supervised & postprocessing & Trust both cv and lb",
  "url": "/competitions/sartorius-cell-instance-segmentation/writeups/xiuqi-moon-pw-guo-shj-9-place-solution-pretrain-se",
  "author_name": "",
  "post_date": "2021-12-31T00:10:43.725150900Z",
  "votes": 44,
  "comment_count": 26,
  "views": 0,
  "content": "<p>Thanks all my teammates @ xiuqi0 <a href=\"https://www.kaggle.com/guohey\" target=\"_blank\">@guohey</a> <a href=\"https://www.kaggle.com/kevin1742064161\" target=\"_blank\">@kevin1742064161</a>  <a href=\"https://www.kaggle.com/gmhost\" target=\"_blank\">@gmhost</a>! We did it! We are masters! </p>\n<p>Here I represent my teammates to introduce out strategy, most of which are their effort.</p>\n<p><strong>Training</strong></p>\n<ol>\n<li><p>Pretraining: We take LIVECell as 1 class. In our experiment 1 class is better than 8 classes. In the early time of this competition, pretraining an R50 can boost up to gold zone. </p></li>\n<li><p>Semi supervised training: After pretraining, we got 2 models scores 0.332 in LB. Using NMS we reached 0.334. We used that pipeline to generate pseudo lables of semi-supervised-train data provided. After training a cascade rcnn with resnext152 as backbone. We reached 0.338.</p></li>\n</ol>\n<p><strong>Submission pipeline</strong></p>\n<p><strong>Preprocessing</strong></p>\n<p>Classify first. Our submission pipeline predicted instances in 2 classes in some images in our local validation set (in gt there was only one type of cell in one image). So we applied 5 folds resnet34 for classification before segmentation.</p>\n<p><strong>Postprocessing</strong></p>\n<p>We stuck in 338 for about 20 days. It’s pretty weird that no matter how we ensembled other models with 338 models, it scored worse. After applying a lot of post-processing, we finally edged past 338 in LB</p>\n<ol>\n<li><p>Handle with broken mask: As in the label of Train and Test, astro cells have a large amount of Broken Mask. Therefore, the results of model training are also easy to predict broken Mask (mask has contour, but there is a part of space-time in the middle of contour). When we use the classification model to determine whether an image is astro or Shsy5y, we use cv2.findContours. Broken Mask is generated by cv2.fillconvexpoly () according to the outer contour.</p></li>\n<li><p>NMS and NMW works for us, Soft-NMS and WBF not. NMW is a bit better than NMS. </p></li>\n<li><p>Mask Weight: <br>\n1)    If the maximum IOU between a box and all other boxes exceeds a certain threshold, its Mask is weighted, and if the weighted value of the Mask is greater than another threshold, the corresponding pixel is set to 1.<br>\n2)    Compared with NMW, the motivation of mask weight is that some mask information is utilized too little (although NMW is not discarded directly but weighted, the information of those integrated boxes must be weakened). Mask weight makes bboxes with high overlap are merged before the NMW, so that less information is lost. However, setting this threshold too low may lead to redundancy of information. This parameter is another one we need to adjust through our local validation dataset.</p></li>\n<li><p>Discard the misclassified classes. There is usually only one kind of cells in a map, and we have used the classification network to do the classification in advance. we discarded the mis-classified instances directly.</p></li>\n<li><p>We modified the source code of NMW, the original code returned some duplicate Bbox and masks. We additionally returned a indices to do slice to weight</p></li>\n<li><p>Weighted NMW, the score of the auxiliary model was multiplied by a coefficient less than 1.</p></li>\n<li><p>Weighted NMW by category (because there is no effect between classes). Since we use classification model first, we can get class of each image. Than we use grid search to get the weight of each class mentioned by 7.</p></li>\n</ol>\n<p>In our final submission, We chose the highest lb one ane another one with more model, not-bad lb and good cv.</p>",
  "messages": [
    {
      "id": "1633610",
      "postDate": "12/31/2021 00:10:43",
      "content": "<p>Thanks all my teammates @ xiuqi0 <a href=\"https://www.kaggle.com/guohey\" target=\"_blank\">@guohey</a> <a href=\"https://www.kaggle.com/kevin1742064161\" target=\"_blank\">@kevin1742064161</a>  <a href=\"https://www.kaggle.com/gmhost\" target=\"_blank\">@gmhost</a>! We did it! We are masters! </p>\n<p>Here I represent my teammates to introduce out strategy, most of which are their effort.</p>\n<p><strong>Training</strong></p>\n<ol>\n<li><p>Pretraining: We take LIVECell as 1 class. In our experiment 1 class is better than 8 classes. In the early time of this competition, pretraining an R50 can boost up to gold zone. </p></li>\n<li><p>Semi supervised training: After pretraining, we got 2 models scores 0.332 in LB. Using NMS we reached 0.334. We used that pipeline to generate pseudo lables of semi-supervised-train data provided. After training a cascade rcnn with resnext152 as backbone. We reached 0.338.</p></li>\n</ol>\n<p><strong>Submission pipeline</strong></p>\n<p><strong>Preprocessing</strong></p>\n<p>Classify first. Our submission pipeline predicted instances in 2 classes in some images in our local validation set (in gt there was only one type of cell in one image). So we applied 5 folds resnet34 for classification before segmentation.</p>\n<p><strong>Postprocessing</strong></p>\n<p>We stuck in 338 for about 20 days. It’s pretty weird that no matter how we ensembled other models with 338 models, it scored worse. After applying a lot of post-processing, we finally edged past 338 in LB</p>\n<ol>\n<li><p>Handle with broken mask: As in the label of Train and Test, astro cells have a large amount of Broken Mask. Therefore, the results of model training are also easy to predict broken Mask (mask has contour, but there is a part of space-time in the middle of contour). When we use the classification model to determine whether an image is astro or Shsy5y, we use cv2.findContours. Broken Mask is generated by cv2.fillconvexpoly () according to the outer contour.</p></li>\n<li><p>NMS and NMW works for us, Soft-NMS and WBF not. NMW is a bit better than NMS. </p></li>\n<li><p>Mask Weight: <br>\n1)    If the maximum IOU between a box and all other boxes exceeds a certain threshold, its Mask is weighted, and if the weighted value of the Mask is greater than another threshold, the corresponding pixel is set to 1.<br>\n2)    Compared with NMW, the motivation of mask weight is that some mask information is utilized too little (although NMW is not discarded directly but weighted, the information of those integrated boxes must be weakened). Mask weight makes bboxes with high overlap are merged before the NMW, so that less information is lost. However, setting this threshold too low may lead to redundancy of information. This parameter is another one we need to adjust through our local validation dataset.</p></li>\n<li><p>Discard the misclassified classes. There is usually only one kind of cells in a map, and we have used the classification network to do the classification in advance. we discarded the mis-classified instances directly.</p></li>\n<li><p>We modified the source code of NMW, the original code returned some duplicate Bbox and masks. We additionally returned a indices to do slice to weight</p></li>\n<li><p>Weighted NMW, the score of the auxiliary model was multiplied by a coefficient less than 1.</p></li>\n<li><p>Weighted NMW by category (because there is no effect between classes). Since we use classification model first, we can get class of each image. Than we use grid search to get the weight of each class mentioned by 7.</p></li>\n</ol>\n<p>In our final submission, We chose the highest lb one ane another one with more model, not-bad lb and good cv.</p>",
      "rawMarkdown": "Thanks all my teammates @ xiuqi0 @guohey @kevin1742064161  @gmhost! We did it! We are masters! \n\nHere I represent my teammates to introduce out strategy, most of which are their effort.\n\n**Training**\n\n1.\tPretraining: We take LIVECell as 1 class. In our experiment 1 class is better than 8 classes. In the early time of this competition, pretraining an R50 can boost up to gold zone. \n\n2.\tSemi supervised training: After pretraining, we got 2 models scores 0.332 in LB. Using NMS we reached 0.334. We used that pipeline to generate pseudo lables of semi-supervised-train data provided. After training a cascade rcnn with resnext152 as backbone. We reached 0.338.\n\n**Submission pipeline**\n\n**Preprocessing**\n\nClassify first. Our submission pipeline predicted instances in 2 classes in some images in our local validation set (in gt there was only one type of cell in one image). So we applied 5 folds resnet34 for classification before segmentation.\n\n**Postprocessing**\n\nWe stuck in 338 for about 20 days. It’s pretty weird that no matter how we ensembled other models with 338 models, it scored worse. After applying a lot of post-processing, we finally edged past 338 in LB\n\n1.\tHandle with broken mask: As in the label of Train and Test, astro cells have a large amount of Broken Mask. Therefore, the results of model training are also easy to predict broken Mask (mask has contour, but there is a part of space-time in the middle of contour). When we use the classification model to determine whether an image is astro or Shsy5y, we use cv2.findContours. Broken Mask is generated by cv2.fillconvexpoly () according to the outer contour.\n\n2.\tNMS and NMW works for us, Soft-NMS and WBF not. NMW is a bit better than NMS. \n\n3.\tMask Weight: \n1)\tIf the maximum IOU between a box and all other boxes exceeds a certain threshold, its Mask is weighted, and if the weighted value of the Mask is greater than another threshold, the corresponding pixel is set to 1.\n2)\tCompared with NMW, the motivation of mask weight is that some mask information is utilized too little (although NMW is not discarded directly but weighted, the information of those integrated boxes must be weakened). Mask weight makes bboxes with high overlap are merged before the NMW, so that less information is lost. However, setting this threshold too low may lead to redundancy of information. This parameter is another one we need to adjust through our local validation dataset.\n\n4.\tDiscard the misclassified classes. There is usually only one kind of cells in a map, and we have used the classification network to do the classification in advance. we discarded the mis-classified instances directly.\n\n5.\tWe modified the source code of NMW, the original code returned some duplicate Bbox and masks. We additionally returned a indices to do slice to weight\n\n6.\tWeighted NMW, the score of the auxiliary model was multiplied by a coefficient less than 1.\n\n7.\tWeighted NMW by category (because there is no effect between classes). Since we use classification model first, we can get class of each image. Than we use grid search to get the weight of each class mentioned by 7.\n\nIn our final submission, We chose the highest lb one ane another one with more model, not-bad lb and good cv.",
      "votes": null
    },
    {
      "id": "1633614",
      "postDate": "12/31/2021 00:20:07",
      "content": "<p>Nice work! Congrats on becoming a truly master!</p>",
      "rawMarkdown": "Nice work! Congrats on becoming a truly master!",
      "votes": null
    },
    {
      "id": "1633637",
      "postDate": "12/31/2021 00:38:15",
      "content": "<p>Thank you!</p>",
      "rawMarkdown": "Thank you!",
      "votes": null
    },
    {
      "id": "1633719",
      "postDate": "12/31/2021 02:10:06",
      "content": "<p>666， 你们队这次一下3个master了。</p>",
      "rawMarkdown": "666， 你们队这次一下3个master了。",
      "votes": null
    },
    {
      "id": "1633725",
      "postDate": "12/31/2021 02:16:41",
      "content": "<p>不ban猛犸效果可以啊</p>",
      "rawMarkdown": "不ban猛犸效果可以啊",
      "votes": null
    },
    {
      "id": "1633729",
      "postDate": "12/31/2021 02:25:10",
      "content": "<p>sheep哥 绝活！</p>",
      "rawMarkdown": "sheep哥 绝活！",
      "votes": null
    },
    {
      "id": "1633735",
      "postDate": "12/31/2021 02:34:27",
      "content": "<p>哈哈，我们狼人小小也没输过！</p>",
      "rawMarkdown": "哈哈，我们狼人小小也没输过！",
      "votes": null
    },
    {
      "id": "1633782",
      "postDate": "12/31/2021 04:06:14",
      "content": "<p>Congrats on gold and becoming master <a href=\"https://www.kaggle.com/forcewithme\" target=\"_blank\">@forcewithme</a> and team!</p>",
      "rawMarkdown": "Congrats on gold and becoming master @forcewithme and team!",
      "votes": null
    },
    {
      "id": "1633787",
      "postDate": "12/31/2021 04:09:15",
      "content": "<p>congrats…</p>",
      "rawMarkdown": "congrats...",
      "votes": null
    },
    {
      "id": "1633852",
      "postDate": "12/31/2021 05:32:00",
      "content": "<p>Brilliant!<br>\nalthough I am new to semi-supervised learning, can you give a brief on how did you trained your semi-supervised model?</p>",
      "rawMarkdown": "Brilliant!\nalthough I am new to semi-supervised learning, can you give a brief on how did you trained your semi-supervised model?",
      "votes": null
    },
    {
      "id": "1633857",
      "postDate": "12/31/2021 05:45:08",
      "content": "<p>Congrats to you <a href=\"https://www.kaggle.com/duykhanh99\" target=\"_blank\">@duykhanh99</a> and your team. It seems that me, your team and odede are so stable in both LB and PB👀</p>",
      "rawMarkdown": "Congrats to you @duykhanh99 and your team. It seems that me, your team and odede are so stable in both LB and PB👀",
      "votes": null
    },
    {
      "id": "1633858",
      "postDate": "12/31/2021 05:45:24",
      "content": "<p>Thank you!</p>",
      "rawMarkdown": "Thank you!",
      "votes": null
    },
    {
      "id": "1633859",
      "postDate": "12/31/2021 05:46:25",
      "content": "<p>sheep 哥太猛了👍</p>",
      "rawMarkdown": "sheep 哥太猛了👍",
      "votes": null
    },
    {
      "id": "1633863",
      "postDate": "12/31/2021 05:49:15",
      "content": "<p>嘻嘻嘻😄😃😏😊😁😍</p>",
      "rawMarkdown": "嘻嘻嘻😄😃😏😊😁😍",
      "votes": null
    },
    {
      "id": "1633865",
      "postDate": "12/31/2021 05:52:10",
      "content": "<p><a href=\"https://www.kaggle.com/mrinath\" target=\"_blank\">@mrinath</a> I think our semi-supervised is pretty simple. Just use our submission pipeline run on the unlabeled data and saved its prediction as ground truth. </p>",
      "rawMarkdown": "mrinath I think our semi-supervised is pretty simple. Just use our submission pipeline run on the unlabeled data and saved its prediction as ground truth.",
      "votes": null
    },
    {
      "id": "1633873",
      "postDate": "12/31/2021 05:58:19",
      "content": "<p>good！！！！！！！！！！</p>",
      "rawMarkdown": "good！！！！！！！！！！",
      "votes": null
    },
    {
      "id": "1633878",
      "postDate": "12/31/2021 06:01:32",
      "content": "<p>isnt this also pseudo labelling?<br>\nsorry I may be confused between terms</p>",
      "rawMarkdown": "isnt this also pseudo labelling?\nsorry I may be confused between terms",
      "votes": null
    },
    {
      "id": "1633886",
      "postDate": "12/31/2021 06:08:43",
      "content": "<p>Thank you！</p>",
      "rawMarkdown": "Thank you！",
      "votes": null
    },
    {
      "id": "1633887",
      "postDate": "12/31/2021 06:09:09",
      "content": "<p>Yes, I think pseudo label is a kind of semi-supervised</p>",
      "rawMarkdown": "Yes, I think pseudo label is a kind of semi-supervised",
      "votes": null
    },
    {
      "id": "1633892",
      "postDate": "12/31/2021 06:19:36",
      "content": "<p>Good job👍 </p>",
      "rawMarkdown": "Good job👍",
      "votes": null
    },
    {
      "id": "1633895",
      "postDate": "12/31/2021 06:27:31",
      "content": "<p>Thank you!</p>",
      "rawMarkdown": "Thank you!",
      "votes": null
    },
    {
      "id": "1633919",
      "postDate": "12/31/2021 06:53:58",
      "content": "<p>Many congrats on gold and becoming master <a href=\"https://www.kaggle.com/forcewithme\" target=\"_blank\">@forcewithme</a> and team! Very well deserved!</p>",
      "rawMarkdown": "Many congrats on gold and becoming master @forcewithme and team! Very well deserved!",
      "votes": null
    },
    {
      "id": "1633920",
      "postDate": "12/31/2021 06:55:40",
      "content": "<p>Thank you！</p>",
      "rawMarkdown": "Thank you！",
      "votes": null
    },
    {
      "id": "1634004",
      "postDate": "12/31/2021 08:51:03",
      "content": "<p>good job! quick quick biu biu biu~👍👋💯</p>",
      "rawMarkdown": "good job! quick quick biu biu biu~👍👋💯",
      "votes": null
    },
    {
      "id": "1634037",
      "postDate": "12/31/2021 09:50:15",
      "content": "<p>Congratulations on becoming a Master and for your gold result on this competition! To trust both LB and CV is often the good choice in competitions!</p>",
      "rawMarkdown": "Congratulations on becoming a Master and for your gold result on this competition! To trust both LB and CV is often the good choice in competitions!",
      "votes": null
    },
    {
      "id": "1634294",
      "postDate": "12/31/2021 14:46:04",
      "content": "<p>Congrats on becoming a master and getting gold in the competition …keep working you can achieve more.</p>",
      "rawMarkdown": "Congrats on becoming a master and getting gold in the competition ...keep working you can achieve more.",
      "votes": null
    },
    {
      "id": "3307667",
      "postDate": "10/27/2025 14:24:30",
      "content": "<p>Brilliant!</p>",
      "rawMarkdown": "Brilliant!",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1633614,
      "author_name": "charonwangg",
      "author_url": "",
      "post_date": "12/31/2021 00:20:07",
      "content": "<p>Nice work! Congrats on becoming a truly master!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633637,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 00:38:15",
          "content": "<p>Thank you!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633719,
      "author_name": "tiandaye",
      "author_url": "",
      "post_date": "12/31/2021 02:10:06",
      "content": "<p>666， 你们队这次一下3个master了。</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633863,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 05:49:15",
          "content": "<p>嘻嘻嘻😄😃😏😊😁😍</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633725,
      "author_name": "steamedsheep",
      "author_url": "",
      "post_date": "12/31/2021 02:16:41",
      "content": "<p>不ban猛犸效果可以啊</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633729,
          "author_name": "tiandaye",
          "author_url": "",
          "post_date": "12/31/2021 02:25:10",
          "content": "<p>sheep哥 绝活！</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1633735,
          "author_name": "gmhost",
          "author_url": "",
          "post_date": "12/31/2021 02:34:27",
          "content": "<p>哈哈，我们狼人小小也没输过！</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1633859,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 05:46:25",
          "content": "<p>sheep 哥太猛了👍</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633782,
      "author_name": "duykhanh99",
      "author_url": "",
      "post_date": "12/31/2021 04:06:14",
      "content": "<p>Congrats on gold and becoming master <a href=\"https://www.kaggle.com/forcewithme\" target=\"_blank\">@forcewithme</a> and team!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633857,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 05:45:08",
          "content": "<p>Congrats to you <a href=\"https://www.kaggle.com/duykhanh99\" target=\"_blank\">@duykhanh99</a> and your team. It seems that me, your team and odede are so stable in both LB and PB👀</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633787,
      "author_name": "raghaw",
      "author_url": "",
      "post_date": "12/31/2021 04:09:15",
      "content": "<p>congrats…</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633858,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 05:45:24",
          "content": "<p>Thank you!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633852,
      "author_name": "mrinath",
      "author_url": "",
      "post_date": "12/31/2021 05:32:00",
      "content": "<p>Brilliant!<br>\nalthough I am new to semi-supervised learning, can you give a brief on how did you trained your semi-supervised model?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633865,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 05:52:10",
          "content": "<p><a href=\"https://www.kaggle.com/mrinath\" target=\"_blank\">@mrinath</a> I think our semi-supervised is pretty simple. Just use our submission pipeline run on the unlabeled data and saved its prediction as ground truth. </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1633878,
          "author_name": "mrinath",
          "author_url": "",
          "post_date": "12/31/2021 06:01:32",
          "content": "<p>isnt this also pseudo labelling?<br>\nsorry I may be confused between terms</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1633887,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 06:09:09",
          "content": "<p>Yes, I think pseudo label is a kind of semi-supervised</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633873,
      "author_name": "doonut",
      "author_url": "",
      "post_date": "12/31/2021 05:58:19",
      "content": "<p>good！！！！！！！！！！</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633886,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 06:08:43",
          "content": "<p>Thank you！</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1634004,
          "author_name": "guohey",
          "author_url": "",
          "post_date": "12/31/2021 08:51:03",
          "content": "<p>good job! quick quick biu biu biu~👍👋💯</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633892,
      "author_name": "xinjiali",
      "author_url": "",
      "post_date": "12/31/2021 06:19:36",
      "content": "<p>Good job👍 </p>",
      "votes": null,
      "replies": [
        {
          "id": 1633895,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 06:27:31",
          "content": "<p>Thank you!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1633919,
      "author_name": "saurabhbagchi",
      "author_url": "",
      "post_date": "12/31/2021 06:53:58",
      "content": "<p>Many congrats on gold and becoming master <a href=\"https://www.kaggle.com/forcewithme\" target=\"_blank\">@forcewithme</a> and team! Very well deserved!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1633920,
          "author_name": "forcewithme",
          "author_url": "",
          "post_date": "12/31/2021 06:55:40",
          "content": "<p>Thank you！</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1634037,
      "author_name": "lucamassaron",
      "author_url": "",
      "post_date": "12/31/2021 09:50:15",
      "content": "<p>Congratulations on becoming a Master and for your gold result on this competition! To trust both LB and CV is often the good choice in competitions!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1634294,
      "author_name": "balavashan",
      "author_url": "",
      "post_date": "12/31/2021 14:46:04",
      "content": "<p>Congrats on becoming a master and getting gold in the competition …keep working you can achieve more.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3307667,
      "author_name": "nauvidscience",
      "author_url": "",
      "post_date": "10/27/2025 14:24:30",
      "content": "<p>Brilliant!</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1633610": "Thanks all my teammates @ xiuqi0 @guohey @kevin1742064161  @gmhost! We did it! We are masters! \n\nHere I represent my teammates to introduce out strategy, most of which are their effort.\n\n**Training**\n\n1.\tPretraining: We take LIVECell as 1 class. In our experiment 1 class is better than 8 classes. In the early time of this competition, pretraining an R50 can boost up to gold zone. \n\n2.\tSemi supervised training: After pretraining, we got 2 models scores 0.332 in LB. Using NMS we reached 0.334. We used that pipeline to generate pseudo lables of semi-supervised-train data provided. After training a cascade rcnn with resnext152 as backbone. We reached 0.338.\n\n**Submission pipeline**\n\n**Preprocessing**\n\nClassify first. Our submission pipeline predicted instances in 2 classes in some images in our local validation set (in gt there was only one type of cell in one image). So we applied 5 folds resnet34 for classification before segmentation.\n\n**Postprocessing**\n\nWe stuck in 338 for about 20 days. It’s pretty weird that no matter how we ensembled other models with 338 models, it scored worse. After applying a lot of post-processing, we finally edged past 338 in LB\n\n1.\tHandle with broken mask: As in the label of Train and Test, astro cells have a large amount of Broken Mask. Therefore, the results of model training are also easy to predict broken Mask (mask has contour, but there is a part of space-time in the middle of contour). When we use the classification model to determine whether an image is astro or Shsy5y, we use cv2.findContours. Broken Mask is generated by cv2.fillconvexpoly () according to the outer contour.\n\n2.\tNMS and NMW works for us, Soft-NMS and WBF not. NMW is a bit better than NMS. \n\n3.\tMask Weight: \n1)\tIf the maximum IOU between a box and all other boxes exceeds a certain threshold, its Mask is weighted, and if the weighted value of the Mask is greater than another threshold, the corresponding pixel is set to 1.\n2)\tCompared with NMW, the motivation of mask weight is that some mask information is utilized too little (although NMW is not discarded directly but weighted, the information of those integrated boxes must be weakened). Mask weight makes bboxes with high overlap are merged before the NMW, so that less information is lost. However, setting this threshold too low may lead to redundancy of information. This parameter is another one we need to adjust through our local validation dataset.\n\n4.\tDiscard the misclassified classes. There is usually only one kind of cells in a map, and we have used the classification network to do the classification in advance. we discarded the mis-classified instances directly.\n\n5.\tWe modified the source code of NMW, the original code returned some duplicate Bbox and masks. We additionally returned a indices to do slice to weight\n\n6.\tWeighted NMW, the score of the auxiliary model was multiplied by a coefficient less than 1.\n\n7.\tWeighted NMW by category (because there is no effect between classes). Since we use classification model first, we can get class of each image. Than we use grid search to get the weight of each class mentioned by 7.\n\nIn our final submission, We chose the highest lb one ane another one with more model, not-bad lb and good cv.",
    "1633614": "Nice work! Congrats on becoming a truly master!",
    "1633637": "Thank you!",
    "1633719": "666， 你们队这次一下3个master了。",
    "1633725": "不ban猛犸效果可以啊",
    "1633729": "sheep哥 绝活！",
    "1633735": "哈哈，我们狼人小小也没输过！",
    "1633782": "Congrats on gold and becoming master @forcewithme and team!",
    "1633787": "congrats...",
    "1633852": "Brilliant!\nalthough I am new to semi-supervised learning, can you give a brief on how did you trained your semi-supervised model?",
    "1633857": "Congrats to you @duykhanh99 and your team. It seems that me, your team and odede are so stable in both LB and PB👀",
    "1633858": "Thank you!",
    "1633859": "sheep 哥太猛了👍",
    "1633863": "嘻嘻嘻😄😃😏😊😁😍",
    "1633865": "mrinath I think our semi-supervised is pretty simple. Just use our submission pipeline run on the unlabeled data and saved its prediction as ground truth.",
    "1633873": "good！！！！！！！！！！",
    "1633878": "isnt this also pseudo labelling?\nsorry I may be confused between terms",
    "1633886": "Thank you！",
    "1633887": "Yes, I think pseudo label is a kind of semi-supervised",
    "1633892": "Good job👍",
    "1633895": "Thank you!",
    "1633919": "Many congrats on gold and becoming master @forcewithme and team! Very well deserved!",
    "1633920": "Thank you！",
    "1634004": "good job! quick quick biu biu biu~👍👋💯",
    "1634037": "Congratulations on becoming a Master and for your gold result on this competition! To trust both LB and CV is often the good choice in competitions!",
    "1634294": "Congrats on becoming a master and getting gold in the competition ...keep working you can achieve more.",
    "3307667": "Brilliant!"
  },
  "source": "meta"
}