{
  "id": 117974,
  "title": "Finally GM & 7th place solution",
  "url": "/competitions/understanding_cloud_organization/discussion/117974",
  "author_name": "Gary",
  "post_date": "2019-11-19T02:37:09.349000",
  "votes": 39,
  "comment_count": 29,
  "views": 0,
  "content": "<p>congratulations for all kagglers.</p>\n\n<h1>Small talk</h1>\n\n<p>After the failure of steel, I had no time to feel sad, so I immediately went to this competition, made efforts for my GM. One of my former teammates <a href=\"https://www.kaggle.com/naivelamb\">Xuan Cao</a> choose solo. Of course, he made the right choice because he win a  solo gold and became GM. Congratulations to him. \nAnd then I choose my friends who had been suffered from steel like me, <a href=\"https://www.kaggle.com/mdlszhengli\">Zheng Li</a>, <a href=\"https://www.kaggle.com/lanjunyelan\">yelan</a>, <a href=\"https://www.kaggle.com/hesene\">Jhui He</a> and <a href=\"https://www.kaggle.com/strideradu\">Strideradu</a>  to team up.</p>\n\n<h1>Solution</h1>\n\n<p>&gt; Our solution is very simple, just ensemble.</p>\n\n<h2>Segmentation v1：</h2>\n\n<p>Model: efficientnet e5/7-FPN，se101-FPN, se101-linket\nLoss: dice loss</p>\n\n<h2>Segmentation v2:</h2>\n\n<p>Model: efficientnet e5-FPN\nLoss: SymmetricLovaszLoss+dice loss</p>\n\n<h2>Classification:</h2>\n\n<p>&gt; We have tried some pure classifiers, but the dice improvement of oof of our segmentation is limited, so we turn to multi-task learning, a segmentation model with fc head.</p>\n\n<p>Model: efficientnet e5-fpn, se50-unet, se50-fpn\nLoss: 0.1 * bce (classification) +(bce + lovasz + dice)(segmentation)</p>\n\n<h2>Ensemble:</h2>\n\n<h3>v1:</h3>\n\n<p>Averaged probability from classification model for removing fp, and Segmentation v1 for tp, then we can got the around 0.670 oof cv, and the threshold for classfication is [0.65, 0.65, 0.65 ,0.65], then remove the small size mask(the threshold is [21000, 21000, 21000, 10000]), finally got the 0.6783 lb.</p>\n\n<h3>v2:.</h3>\n\n<p>we  averaged probability from classification and the max pixel probability from Segmentation v2 for removing fp, but the lb was bad, and the threshold is low(0.55, the low threshold is not good in steel), so we abandoned this.</p>\n\n<h2>Post processing:</h2>\n\n<ol>\n<li>From training set, each image has at least one label. Then, I extracted 4 channels with empty samples From my 6783 sub above, and extracted the maximum prediction probability of the classifier on this sample, and then restore the pixel mask if the prediction probability for a category &gt; 0.55</li>\n<li>I did a mask union of the samples that both Segmentation v2 and 6783sub predicted as postive.\nCombined with the above post-treatment, we can get 0.6800 lb.</li>\n</ol>\n\n<h1>Conclusion</h1>\n\n<ol>\n<li>Unfortunately, we did not select the best submission(0.67254), which was from ensemble v2.  but the public lb was 0.67360, so we did not select this submission, and of course we had a lot of submissions in the top3. Fortunately, Our submission which we choose, still allows us to go into the gold zone.</li>\n<li>Thanks to my teammates for their efforts and I congratulate myself on becoming GM.</li>\n</ol>",
  "messages": [
    {
      "id": 676197,
      "postDate": "2019-11-19T02:37:09.350Z",
      "content": "<p>congratulations for all kagglers.</p>\n\n<h1>Small talk</h1>\n\n<p>After the failure of steel, I had no time to feel sad, so I immediately went to this competition, made efforts for my GM. One of my former teammates <a href=\"https://www.kaggle.com/naivelamb\">Xuan Cao</a> choose solo. Of course, he made the right choice because he win a  solo gold and became GM. Congratulations to him. \nAnd then I choose my friends who had been suffered from steel like me, <a href=\"https://www.kaggle.com/mdlszhengli\">Zheng Li</a>, <a href=\"https://www.kaggle.com/lanjunyelan\">yelan</a>, <a href=\"https://www.kaggle.com/hesene\">Jhui He</a> and <a href=\"https://www.kaggle.com/strideradu\">Strideradu</a>  to team up.</p>\n\n<h1>Solution</h1>\n\n<p>&gt; Our solution is very simple, just ensemble.</p>\n\n<h2>Segmentation v1：</h2>\n\n<p>Model: efficientnet e5/7-FPN，se101-FPN, se101-linket\nLoss: dice loss</p>\n\n<h2>Segmentation v2:</h2>\n\n<p>Model: efficientnet e5-FPN\nLoss: SymmetricLovaszLoss+dice loss</p>\n\n<h2>Classification:</h2>\n\n<p>&gt; We have tried some pure classifiers, but the dice improvement of oof of our segmentation is limited, so we turn to multi-task learning, a segmentation model with fc head.</p>\n\n<p>Model: efficientnet e5-fpn, se50-unet, se50-fpn\nLoss: 0.1 * bce (classification) +(bce + lovasz + dice)(segmentation)</p>\n\n<h2>Ensemble:</h2>\n\n<h3>v1:</h3>\n\n<p>Averaged probability from classification model for removing fp, and Segmentation v1 for tp, then we can got the around 0.670 oof cv, and the threshold for classfication is [0.65, 0.65, 0.65 ,0.65], then remove the small size mask(the threshold is [21000, 21000, 21000, 10000]), finally got the 0.6783 lb.</p>\n\n<h3>v2:.</h3>\n\n<p>we  averaged probability from classification and the max pixel probability from Segmentation v2 for removing fp, but the lb was bad, and the threshold is low(0.55, the low threshold is not good in steel), so we abandoned this.</p>\n\n<h2>Post processing:</h2>\n\n<ol>\n<li>From training set, each image has at least one label. Then, I extracted 4 channels with empty samples From my 6783 sub above, and extracted the maximum prediction probability of the classifier on this sample, and then restore the pixel mask if the prediction probability for a category &gt; 0.55</li>\n<li>I did a mask union of the samples that both Segmentation v2 and 6783sub predicted as postive.\nCombined with the above post-treatment, we can get 0.6800 lb.</li>\n</ol>\n\n<h1>Conclusion</h1>\n\n<ol>\n<li>Unfortunately, we did not select the best submission(0.67254), which was from ensemble v2.  but the public lb was 0.67360, so we did not select this submission, and of course we had a lot of submissions in the top3. Fortunately, Our submission which we choose, still allows us to go into the gold zone.</li>\n<li>Thanks to my teammates for their efforts and I congratulate myself on becoming GM.</li>\n</ol>",
      "rawMarkdown": "congratulations for all kagglers.\n# Small talk\nAfter the failure of steel, I had no time to feel sad, so I immediately went to this competition, made efforts for my GM. One of my former teammates [Xuan Cao](https://www.kaggle.com/naivelamb) choose solo. Of course, he made the right choice because he win a  solo gold and became GM. Congratulations to him. \nAnd then I choose my friends who had been suffered from steel like me, [Zheng Li](https://www.kaggle.com/mdlszhengli), [yelan](https://www.kaggle.com/lanjunyelan), [Jhui He](https://www.kaggle.com/hesene) and [Strideradu](https://www.kaggle.com/strideradu)  to team up.\n\n# Solution\n&gt; Our solution is very simple, just ensemble.\n\n## Segmentation v1：\nModel: efficientnet e5/7-FPN，se101-FPN, se101-linket\nLoss: dice loss\n\n## Segmentation v2:\nModel: efficientnet e5-FPN\nLoss: SymmetricLovaszLoss+dice loss\n\n## Classification:\n&gt; We have tried some pure classifiers, but the dice improvement of oof of our segmentation is limited, so we turn to multi-task learning, a segmentation model with fc head.\n\nModel: efficientnet e5-fpn, se50-unet, se50-fpn\nLoss: 0.1 * bce (classification) +(bce + lovasz + dice)(segmentation)\n\n## Ensemble:\n### v1: \nAveraged probability from classification model for removing fp, and Segmentation v1 for tp, then we can got the around 0.670 oof cv, and the threshold for classfication is [0.65, 0.65, 0.65 ,0.65], then remove the small size mask(the threshold is [21000, 21000, 21000, 10000]), finally got the 0.6783 lb.\n### v2:.\nwe  averaged probability from classification and the max pixel probability from Segmentation v2 for removing fp, but the lb was bad, and the threshold is low(0.55, the low threshold is not good in steel), so we abandoned this.\n\n## Post processing:\n1. From training set, each image has at least one label. Then, I extracted 4 channels with empty samples From my 6783 sub above, and extracted the maximum prediction probability of the classifier on this sample, and then restore the pixel mask if the prediction probability for a category &gt; 0.55\n2. I did a mask union of the samples that both Segmentation v2 and 6783sub predicted as postive.\nCombined with the above post-treatment, we can get 0.6800 lb.\n\n# Conclusion\n1. Unfortunately, we did not select the best submission(0.67254), which was from ensemble v2.  but the public lb was 0.67360, so we did not select this submission, and of course we had a lot of submissions in the top3. Fortunately, Our submission which we choose, still allows us to go into the gold zone.\n2. Thanks to my teammates for their efforts and I congratulate myself on becoming GM.\n",
      "votes": 39
    },
    {
      "id": 676684,
      "postDate": "2019-11-19T12:22:20.920Z",
      "content": "<p>Double congrats Gary and thanks for sharing.</p>",
      "rawMarkdown": "Double congrats Gary and thanks for sharing.",
      "votes": 1,
      "replies": [
        {
          "id": 676692,
          "postDate": "2019-11-19T12:35:36.807Z",
          "content": "<p>thank you, Giba.</p>",
          "rawMarkdown": "thank you, Giba."
        }
      ]
    },
    {
      "id": 676296,
      "postDate": "2019-11-19T04:33:59.187Z",
      "content": "<p>Congratulations and thank you for sharing your solution, Gary!</p>\n\n<p>If I understood correctly, the pipeline of your team to get public score of 0.6783 is as follows;\n1. Train segmentation models and ensemble them.\n2. Train classification models and ensemble them.\n3. Postprocess: remove fp masks from segmentation results with classification results and remove small sized masks.</p>\n\n<p>I think this pipeline is actually the same as that has been shared and has been used by many competitors. Majority of us couldn't get pass 0.67 lb. but apparently you guys did!</p>\n\n<p>What do you think that made the difference? Did the improvement came from large backbones? Custom loss functions? Classification from FPN/Unet branch?</p>\n\n<p>Thanks again for sharing your solution!</p>",
      "rawMarkdown": "Congratulations and thank you for sharing your solution, Gary!\n\nIf I understood correctly, the pipeline of your team to get public score of 0.6783 is as follows;\n1. Train segmentation models and ensemble them.\n2. Train classification models and ensemble them.\n3. Postprocess: remove fp masks from segmentation results with classification results and remove small sized masks.\n\nI think this pipeline is actually the same as that has been shared and has been used by many competitors. Majority of us couldn't get pass 0.67 lb. but apparently you guys did!\n\nWhat do you think that made the difference? Did the improvement came from large backbones? Custom loss functions? Classification from FPN/Unet branch?\n\nThanks again for sharing your solution!",
      "votes": 1,
      "replies": [
        {
          "id": 676301,
          "postDate": "2019-11-19T04:38:22.147Z",
          "content": "<p>the most import part is classfication.</p>",
          "rawMarkdown": "the most import part is classfication.",
          "votes": 1
        },
        {
          "id": 676352,
          "postDate": "2019-11-19T05:26:45.877Z",
          "content": "<p>Congratulations, Gary! <br>\nThe difference between seg v1 and v2 is loss?</p>",
          "rawMarkdown": "Congratulations, Gary!  \nThe difference between seg v1 and v2 is loss?"
        },
        {
          "id": 676355,
          "postDate": "2019-11-19T05:30:04.087Z",
          "content": "<p>yep, it is loss</p>",
          "rawMarkdown": "yep, it is loss"
        }
      ]
    },
    {
      "id": 676287,
      "postDate": "2019-11-19T04:21:52.103Z",
      "content": "<p>Congratulations <a href=\"/garybios\">@garybios</a> for the GM title , well deserved :)</p>",
      "rawMarkdown": "Congratulations @garybios for the GM title , well deserved :)",
      "votes": 1,
      "replies": [
        {
          "id": 676293,
          "postDate": "2019-11-19T04:30:38.370Z",
          "content": "<p>thank you.</p>",
          "rawMarkdown": "thank you."
        }
      ]
    },
    {
      "id": 676275,
      "postDate": "2019-11-19T04:12:30.990Z",
      "content": "<p>congratulations, late gold, but not so much:)</p>\n\n<p>I tried efficientnet, but not as good as resnet-34, and I found efficientnet-b5 is worse than efficientnet-b3, I think maybe the image is too simple, so I'm curious about your solution, do you just use qubvel/segmentation_models.pytorch?</p>",
      "rawMarkdown": "congratulations, late gold, but not so much:)\n\nI tried efficientnet, but not as good as resnet-34, and I found efficientnet-b5 is worse than efficientnet-b3, I think maybe the image is too simple, so I'm curious about your solution, do you just use qubvel/segmentation_models.pytorch?",
      "votes": 1,
      "replies": [
        {
          "id": 676282,
          "postDate": "2019-11-19T04:19:17.620Z",
          "content": "<p>yes, I use qubvel/segmentation_models.pytorch.</p>",
          "rawMarkdown": "yes, I use qubvel/segmentation_models.pytorch.",
          "votes": 1
        },
        {
          "id": 676718,
          "postDate": "2019-11-19T13:08:23.973Z",
          "rawMarkdown": "",
          "isDeleted": true
        },
        {
          "id": 676806,
          "postDate": "2019-11-19T14:16:56.637Z",
          "content": "<p>更新一下版本试试。</p>",
          "rawMarkdown": "更新一下版本试试。",
          "votes": 1
        },
        {
          "id": 677256,
          "postDate": "2019-11-20T01:01:15Z",
          "rawMarkdown": "",
          "isDeleted": true
        }
      ]
    },
    {
      "id": 676238,
      "postDate": "2019-11-19T03:25:36.093Z",
      "content": "<p>Congrats! Gary is so NiuBi. </p>",
      "rawMarkdown": "Congrats! Gary is so NiuBi. ",
      "votes": 1,
      "replies": [
        {
          "id": 676276,
          "postDate": "2019-11-19T04:13:16.570Z",
          "content": "<p>sad steel, happy cloud :)</p>",
          "rawMarkdown": "sad steel, happy cloud :)"
        },
        {
          "id": 676283,
          "postDate": "2019-11-19T04:20:10.183Z",
          "content": "<p><a href=\"/naivelamb\">@naivelamb</a> 曹老师最🐄🍺</p>",
          "rawMarkdown": "@naivelamb 曹老师最🐄🍺"
        }
      ]
    },
    {
      "id": 676224,
      "postDate": "2019-11-19T03:13:38.537Z",
      "content": "<p>Congrats to u. Grand master is amazing!! Im still fight for my first Gold to be a master.</p>",
      "rawMarkdown": "Congrats to u. Grand master is amazing!! Im still fight for my first Gold to be a master.",
      "votes": 1,
      "replies": [
        {
          "id": 676236,
          "postDate": "2019-11-19T03:25:03.273Z",
          "content": "<p>thank you. The gold medal will come soon💪 </p>",
          "rawMarkdown": "thank you. The gold medal will come soon💪 "
        }
      ]
    },
    {
      "id": 676201,
      "postDate": "2019-11-19T02:40:16.267Z",
      "content": "<p>Congrat for you GM title Gary!!!  (I prefer Corgi than a cat though)</p>",
      "rawMarkdown": "Congrat for you GM title Gary!!!  (I prefer Corgi than a cat though)",
      "votes": 2,
      "replies": [
        {
          "id": 676203,
          "postDate": "2019-11-19T02:46:14.893Z",
          "content": "<p>hah.. thank you so much, you remember my old head sculpture, I like both Corgi and cats. </p>",
          "rawMarkdown": "hah.. thank you so much, you remember my old head sculpture, I like both Corgi and cats. ",
          "votes": 1
        }
      ]
    },
    {
      "id": 677326,
      "postDate": "2019-11-20T03:43:20.390Z",
      "content": "<p>Wow! Congratulations for the GM! \nI want to be a GM too! 😂 </p>",
      "rawMarkdown": "Wow! Congratulations for the GM! \nI want to be a GM too! 😂 ",
      "replies": [
        {
          "id": 677489,
          "postDate": "2019-11-20T08:24:36.867Z",
          "content": "<p>oh, thanks, <a href=\"/limerobot\">@limerobot</a>, When the ASHRAE is finished, you will become a GM👍 </p>",
          "rawMarkdown": "oh, thanks, @limerobot, When the ASHRAE is finished, you will become a GM👍 ",
          "votes": 1
        }
      ]
    },
    {
      "id": 677212,
      "postDate": "2019-11-19T23:25:58.033Z",
      "content": "<p>Congrats for becoming Grand Master!</p>",
      "rawMarkdown": "Congrats for becoming Grand Master!"
    },
    {
      "id": 677034,
      "postDate": "2019-11-19T18:12:48.450Z",
      "content": "<p>Congrats Gary and team on Gold and becoming Grand Master. Your solution is simple and scores very well. Did any of your models train on positive masks only? If not, that's impressive because most of the top models did to increase the accuracy of mask shapes.</p>",
      "rawMarkdown": "Congrats Gary and team on Gold and becoming Grand Master. Your solution is simple and scores very well. Did any of your models train on positive masks only? If not, that's impressive because most of the top models did to increase the accuracy of mask shapes.",
      "replies": [
        {
          "id": 677266,
          "postDate": "2019-11-20T01:26:13.663Z",
          "content": "<p>thanks chris. for Segmentation v2, I just used positive masks, but our best score did not use that.</p>",
          "rawMarkdown": "thanks chris. for Segmentation v2, I just used positive masks, but our best score did not use that.",
          "votes": 1
        }
      ]
    },
    {
      "id": 676363,
      "postDate": "2019-11-19T05:46:38.193Z",
      "content": "<p>congratulations\ndid you use segmentation pytorch repo?</p>",
      "rawMarkdown": "congratulations\ndid you use segmentation pytorch repo?",
      "replies": [
        {
          "id": 676377,
          "postDate": "2019-11-19T06:02:42Z",
          "content": "<p>yep, I used it.</p>",
          "rawMarkdown": "yep, I used it.",
          "votes": 1
        }
      ]
    },
    {
      "id": 676339,
      "postDate": "2019-11-19T05:15:27.573Z",
      "rawMarkdown": "",
      "isDeleted": true
    },
    {
      "id": 676368,
      "postDate": "2019-11-19T05:51:34.430Z",
      "content": "<p>Congrats Gary and thanks for sharing!</p>",
      "rawMarkdown": "Congrats Gary and thanks for sharing!",
      "votes": 2
    }
  ],
  "comments": [
    {
      "id": 676684,
      "author_name": "Giba",
      "author_url": "",
      "post_date": "2019-11-19T12:22:20.920000",
      "content": "<p>Double congrats Gary and thanks for sharing.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 676692,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T12:35:36.807000",
          "content": "<p>thank you, Giba.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676296,
      "author_name": "YoonSoo",
      "author_url": "",
      "post_date": "2019-11-19T04:33:59.187000",
      "content": "<p>Congratulations and thank you for sharing your solution, Gary!</p>\n\n<p>If I understood correctly, the pipeline of your team to get public score of 0.6783 is as follows;\n1. Train segmentation models and ensemble them.\n2. Train classification models and ensemble them.\n3. Postprocess: remove fp masks from segmentation results with classification results and remove small sized masks.</p>\n\n<p>I think this pipeline is actually the same as that has been shared and has been used by many competitors. Majority of us couldn't get pass 0.67 lb. but apparently you guys did!</p>\n\n<p>What do you think that made the difference? Did the improvement came from large backbones? Custom loss functions? Classification from FPN/Unet branch?</p>\n\n<p>Thanks again for sharing your solution!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 676301,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T04:38:22.147000",
          "content": "<p>the most import part is classfication.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 676352,
          "author_name": "kevin",
          "author_url": "",
          "post_date": "2019-11-19T05:26:45.877000",
          "content": "<p>Congratulations, Gary! <br>\nThe difference between seg v1 and v2 is loss?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 676355,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T05:30:04.087000",
          "content": "<p>yep, it is loss</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676287,
      "author_name": "Ram Ramrakhya",
      "author_url": "",
      "post_date": "2019-11-19T04:21:52.103000",
      "content": "<p>Congratulations <a href=\"/garybios\">@garybios</a> for the GM title , well deserved :)</p>",
      "votes": 1,
      "replies": [
        {
          "id": 676293,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T04:30:38.370000",
          "content": "<p>thank you.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676275,
      "author_name": "liuze",
      "author_url": "",
      "post_date": "2019-11-19T04:12:30.990000",
      "content": "<p>congratulations, late gold, but not so much:)</p>\n\n<p>I tried efficientnet, but not as good as resnet-34, and I found efficientnet-b5 is worse than efficientnet-b3, I think maybe the image is too simple, so I'm curious about your solution, do you just use qubvel/segmentation_models.pytorch?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 676282,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T04:19:17.620000",
          "content": "<p>yes, I use qubvel/segmentation_models.pytorch.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 676718,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-11-19T13:08:23.973000",
          "content": "",
          "votes": 0,
          "replies": []
        },
        {
          "id": 676806,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T14:16:56.637000",
          "content": "<p>更新一下版本试试。</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 677256,
          "author_name": "",
          "author_url": "",
          "post_date": "2019-11-20T01:01:15",
          "content": "",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676238,
      "author_name": "Xuan Cao",
      "author_url": "",
      "post_date": "2019-11-19T03:25:36.093000",
      "content": "<p>Congrats! Gary is so NiuBi. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 676276,
          "author_name": "liuze",
          "author_url": "",
          "post_date": "2019-11-19T04:13:16.570000",
          "content": "<p>sad steel, happy cloud :)</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 676283,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T04:20:10.183000",
          "content": "<p><a href=\"/naivelamb\">@naivelamb</a> 曹老师最🐄🍺</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676224,
      "author_name": "llh1818",
      "author_url": "",
      "post_date": "2019-11-19T03:13:38.537000",
      "content": "<p>Congrats to u. Grand master is amazing!! Im still fight for my first Gold to be a master.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 676236,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T03:25:03.273000",
          "content": "<p>thank you. The gold medal will come soon💪 </p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 676201,
      "author_name": "Neuron Engineer",
      "author_url": "",
      "post_date": "2019-11-19T02:40:16.267000",
      "content": "<p>Congrat for you GM title Gary!!!  (I prefer Corgi than a cat though)</p>",
      "votes": 2,
      "replies": [
        {
          "id": 676203,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T02:46:14.893000",
          "content": "<p>hah.. thank you so much, you remember my old head sculpture, I like both Corgi and cats. </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 677326,
      "author_name": "Limerobot",
      "author_url": "",
      "post_date": "2019-11-20T03:43:20.390000",
      "content": "<p>Wow! Congratulations for the GM! \nI want to be a GM too! 😂 </p>",
      "votes": 0,
      "replies": [
        {
          "id": 677489,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-20T08:24:36.867000",
          "content": "<p>oh, thanks, <a href=\"/limerobot\">@limerobot</a>, When the ASHRAE is finished, you will become a GM👍 </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 677212,
      "author_name": "corochann",
      "author_url": "",
      "post_date": "2019-11-19T23:25:58.033000",
      "content": "<p>Congrats for becoming Grand Master!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 677034,
      "author_name": "Chris Deotte",
      "author_url": "",
      "post_date": "2019-11-19T18:12:48.450000",
      "content": "<p>Congrats Gary and team on Gold and becoming Grand Master. Your solution is simple and scores very well. Did any of your models train on positive masks only? If not, that's impressive because most of the top models did to increase the accuracy of mask shapes.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 677266,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-20T01:26:13.663000",
          "content": "<p>thanks chris. for Segmentation v2, I just used positive masks, but our best score did not use that.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 676363,
      "author_name": "Mobassir",
      "author_url": "",
      "post_date": "2019-11-19T05:46:38.193000",
      "content": "<p>congratulations\ndid you use segmentation pytorch repo?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 676377,
          "author_name": "Gary",
          "author_url": "",
          "post_date": "2019-11-19T06:02:42",
          "content": "<p>yep, I used it.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 676339,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-11-19T05:15:27.573000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 676368,
      "author_name": "Yiheng Wang",
      "author_url": "",
      "post_date": "2019-11-19T05:51:34.430000",
      "content": "<p>Congrats Gary and thanks for sharing!</p>",
      "votes": 2,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "676197": "congratulations for all kagglers.\n# Small talk\nAfter the failure of steel, I had no time to feel sad, so I immediately went to this competition, made efforts for my GM. One of my former teammates [Xuan Cao](https://www.kaggle.com/naivelamb) choose solo. Of course, he made the right choice because he win a  solo gold and became GM. Congratulations to him. \nAnd then I choose my friends who had been suffered from steel like me, [Zheng Li](https://www.kaggle.com/mdlszhengli), [yelan](https://www.kaggle.com/lanjunyelan), [Jhui He](https://www.kaggle.com/hesene) and [Strideradu](https://www.kaggle.com/strideradu)  to team up.\n\n# Solution\n&gt; Our solution is very simple, just ensemble.\n\n## Segmentation v1：\nModel: efficientnet e5/7-FPN，se101-FPN, se101-linket\nLoss: dice loss\n\n## Segmentation v2:\nModel: efficientnet e5-FPN\nLoss: SymmetricLovaszLoss+dice loss\n\n## Classification:\n&gt; We have tried some pure classifiers, but the dice improvement of oof of our segmentation is limited, so we turn to multi-task learning, a segmentation model with fc head.\n\nModel: efficientnet e5-fpn, se50-unet, se50-fpn\nLoss: 0.1 * bce (classification) +(bce + lovasz + dice)(segmentation)\n\n## Ensemble:\n### v1: \nAveraged probability from classification model for removing fp, and Segmentation v1 for tp, then we can got the around 0.670 oof cv, and the threshold for classfication is [0.65, 0.65, 0.65 ,0.65], then remove the small size mask(the threshold is [21000, 21000, 21000, 10000]), finally got the 0.6783 lb.\n### v2:.\nwe  averaged probability from classification and the max pixel probability from Segmentation v2 for removing fp, but the lb was bad, and the threshold is low(0.55, the low threshold is not good in steel), so we abandoned this.\n\n## Post processing:\n1. From training set, each image has at least one label. Then, I extracted 4 channels with empty samples From my 6783 sub above, and extracted the maximum prediction probability of the classifier on this sample, and then restore the pixel mask if the prediction probability for a category &gt; 0.55\n2. I did a mask union of the samples that both Segmentation v2 and 6783sub predicted as postive.\nCombined with the above post-treatment, we can get 0.6800 lb.\n\n# Conclusion\n1. Unfortunately, we did not select the best submission(0.67254), which was from ensemble v2.  but the public lb was 0.67360, so we did not select this submission, and of course we had a lot of submissions in the top3. Fortunately, Our submission which we choose, still allows us to go into the gold zone.\n2. Thanks to my teammates for their efforts and I congratulate myself on becoming GM.\n",
    "676684": "Double congrats Gary and thanks for sharing.",
    "676296": "Congratulations and thank you for sharing your solution, Gary!\n\nIf I understood correctly, the pipeline of your team to get public score of 0.6783 is as follows;\n1. Train segmentation models and ensemble them.\n2. Train classification models and ensemble them.\n3. Postprocess: remove fp masks from segmentation results with classification results and remove small sized masks.\n\nI think this pipeline is actually the same as that has been shared and has been used by many competitors. Majority of us couldn't get pass 0.67 lb. but apparently you guys did!\n\nWhat do you think that made the difference? Did the improvement came from large backbones? Custom loss functions? Classification from FPN/Unet branch?\n\nThanks again for sharing your solution!",
    "676287": "Congratulations @garybios for the GM title , well deserved :)",
    "676275": "congratulations, late gold, but not so much:)\n\nI tried efficientnet, but not as good as resnet-34, and I found efficientnet-b5 is worse than efficientnet-b3, I think maybe the image is too simple, so I'm curious about your solution, do you just use qubvel/segmentation_models.pytorch?",
    "676238": "Congrats! Gary is so NiuBi. ",
    "676224": "Congrats to u. Grand master is amazing!! Im still fight for my first Gold to be a master.",
    "676201": "Congrat for you GM title Gary!!!  (I prefer Corgi than a cat though)",
    "677326": "Wow! Congratulations for the GM! \nI want to be a GM too! 😂 ",
    "677212": "Congrats for becoming Grand Master!",
    "677034": "Congrats Gary and team on Gold and becoming Grand Master. Your solution is simple and scores very well. Did any of your models train on positive masks only? If not, that's impressive because most of the top models did to increase the accuracy of mask shapes.",
    "676363": "congratulations\ndid you use segmentation pytorch repo?",
    "676339": "",
    "676368": "Congrats Gary and thanks for sharing!"
  }
}