{
  "id": 172416,
  "title": "[80th place solution😂] Source-separated Psuedo Labeling",
  "url": "/competitions/global-wheat-detection/discussion/172416",
  "author_name": "arutema47",
  "post_date": "2020-08-05T01:16:21.278000",
  "votes": 42,
  "comment_count": 14,
  "views": 0,
  "content": "<p>First of all, thanks for the host for holding this competition! </p>\n<p>And great thanks to our team members, <a href=\"https://www.kaggle.com/datahobbit\" target=\"_blank\">@datahobbit</a>, <a href=\"https://www.kaggle.com/ratthachat\" target=\"_blank\">@ratthachat</a>, <a href=\"https://www.kaggle.com/yashchoudhary\" target=\"_blank\">@yashchoudhary</a>, <a href=\"https://www.kaggle.com/nitindatta\" target=\"_blank\">@nitindatta</a> and it was a pleasure teaming up. Everyone played a great part in the solutions which <a href=\"https://www.kaggle.com/ratthachat\" target=\"_blank\">@ratthachat</a> elaborates! It was fun having discussions and everybody was a great analyst/coder. We did a great job and made it into the TOP-2% ;)</p>\n<p>This is our solution of our team Wheat Fields!</p>\n<p>(I will come back to update with the details.)</p>\n<h2>Models</h2>\n<ul>\n<li>Model: EffdetD5 2 folds ensemble </li>\n</ul>\n<p>We evaluated our CV based on data source separated CV with original weightings.</p>\n<h2>Source separated psuedo labeling</h2>\n<h3>Idea</h3>\n<p>We were scared that psuedo labeling with the entire test set prior will overfit to the UTokyo data which should be 70% of the test data. With this source-split, we can train model which overfit to UTokyo and other model to the rest, maximizing the PB.</p>\n<h3>Step.1</h3>\n<p>Predict on test set using Best CV Model and split the test set to two: TestSetB :UToyko which image has <code>number of wheats &lt;39</code> and TestSetC: <code>number of wheats&gt;=39</code>. We save the labels for psuedo label as well</p>\n<h3>Step2:</h3>\n<p>train two models --&gt; Model-B train with pseudo [TestSetB, traindata] and Model-C train with pseudo [TestSetC,traindata].</p>\n<h3>Inference:</h3>\n<p>Predict TestSetB with Model-B and TestSetC with Model-C.</p>\n<h1>Codes!</h1>\n<p>I uploaded my training codes here.<br>\n<a href=\"https://github.com/kentaroy47/kaggle-wheat-arutema47\" target=\"_blank\">https://github.com/kentaroy47/kaggle-wheat-arutema47</a></p>",
  "messages": [
    {
      "id": 958415,
      "postDate": "2020-08-05T01:16:21.277Z",
      "content": "<p>First of all, thanks for the host for holding this competition! </p>\n<p>And great thanks to our team members, <a href=\"https://www.kaggle.com/datahobbit\" target=\"_blank\">@datahobbit</a>, <a href=\"https://www.kaggle.com/ratthachat\" target=\"_blank\">@ratthachat</a>, <a href=\"https://www.kaggle.com/yashchoudhary\" target=\"_blank\">@yashchoudhary</a>, <a href=\"https://www.kaggle.com/nitindatta\" target=\"_blank\">@nitindatta</a> and it was a pleasure teaming up. Everyone played a great part in the solutions which <a href=\"https://www.kaggle.com/ratthachat\" target=\"_blank\">@ratthachat</a> elaborates! It was fun having discussions and everybody was a great analyst/coder. We did a great job and made it into the TOP-2% ;)</p>\n<p>This is our solution of our team Wheat Fields!</p>\n<p>(I will come back to update with the details.)</p>\n<h2>Models</h2>\n<ul>\n<li>Model: EffdetD5 2 folds ensemble </li>\n</ul>\n<p>We evaluated our CV based on data source separated CV with original weightings.</p>\n<h2>Source separated psuedo labeling</h2>\n<h3>Idea</h3>\n<p>We were scared that psuedo labeling with the entire test set prior will overfit to the UTokyo data which should be 70% of the test data. With this source-split, we can train model which overfit to UTokyo and other model to the rest, maximizing the PB.</p>\n<h3>Step.1</h3>\n<p>Predict on test set using Best CV Model and split the test set to two: TestSetB :UToyko which image has <code>number of wheats &lt;39</code> and TestSetC: <code>number of wheats&gt;=39</code>. We save the labels for psuedo label as well</p>\n<h3>Step2:</h3>\n<p>train two models --&gt; Model-B train with pseudo [TestSetB, traindata] and Model-C train with pseudo [TestSetC,traindata].</p>\n<h3>Inference:</h3>\n<p>Predict TestSetB with Model-B and TestSetC with Model-C.</p>\n<h1>Codes!</h1>\n<p>I uploaded my training codes here.<br>\n<a href=\"https://github.com/kentaroy47/kaggle-wheat-arutema47\" target=\"_blank\">https://github.com/kentaroy47/kaggle-wheat-arutema47</a></p>",
      "rawMarkdown": "First of all, thanks for the host for holding this competition! \n\nAnd great thanks to our team members, @datahobbit, @ratthachat, @yashchoudhary, @nitindatta and it was a pleasure teaming up. Everyone played a great part in the solutions which @ratthachat elaborates! It was fun having discussions and everybody was a great analyst/coder. We did a great job and made it into the TOP-2% ;)\n\nThis is our solution of our team Wheat Fields!\n\n(I will come back to update with the details.)\n\n## Models\n* Model: EffdetD5 2 folds ensemble \n\nWe evaluated our CV based on data source separated CV with original weightings.\n\n## Source separated psuedo labeling\n### Idea\nWe were scared that psuedo labeling with the entire test set prior will overfit to the UTokyo data which should be 70% of the test data. With this source-split, we can train model which overfit to UTokyo and other model to the rest, maximizing the PB.\n\n### Step.1 \nPredict on test set using Best CV Model and split the test set to two: TestSetB :UToyko which image has `number of wheats &lt;39` and TestSetC: `number of wheats&gt;=39`. We save the labels for psuedo label as well\n\n### Step2: \ntrain two models --&gt; Model-B train with pseudo [TestSetB, traindata] and Model-C train with pseudo [TestSetC,traindata].\n\n### Inference: \nPredict TestSetB with Model-B and TestSetC with Model-C.\n\n# Codes!\nI uploaded my training codes here.\nhttps://github.com/kentaroy47/kaggle-wheat-arutema47",
      "votes": 42
    },
    {
      "id": 958494,
      "postDate": "2020-08-05T02:48:45.167Z",
      "content": "<p>Thanks <a href=\"/kyoshioka47\">@kyoshioka47</a> (arutema47) again for his great job!! Also thanks to my other teammates <a href=\"/nitindatta\">@nitindatta</a> <a href=\"/datahobbit\">@datahobbit</a> <a href=\"/yashchoudhary\">@yashchoudhary</a>  for their dedicated efforts!</p>\n\n<p>In fact, our two selections are (1) <strong>EffDet</strong> as described by arutema here, and (2) <strong>FRCNN-ResNest</strong> which is able to reach 0.770+ Public LB at the end but not as good in Private LB (around 0.685). In FRCNN-ResNest we use the Pseudo+Ensemble technique which in case you guys feel interested in,  you can see our published notebook here : </p>\n\n<p><a href=\"https://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub\">https://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub</a></p>",
      "rawMarkdown": "Thanks @kyoshioka47 (arutema47) again for his great job!! Also thanks to my other teammates @nitindatta @datahobbit @yashchoudhary  for their dedicated efforts!\n\nIn fact, our two selections are (1) **EffDet** as described by arutema here, and (2) **FRCNN-ResNest** which is able to reach 0.770+ Public LB at the end but not as good in Private LB (around 0.685). In FRCNN-ResNest we use the Pseudo+Ensemble technique which in case you guys feel interested in,  you can see our published notebook here : \n\nhttps://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub",
      "votes": 4,
      "replies": [
        {
          "id": 958502,
          "postDate": "2020-08-05T02:57:46.757Z",
          "content": "<p>Thanks for sharing!\nAnd Congrats <a href=\"/ratthachat\">@ratthachat</a> !</p>",
          "rawMarkdown": "Thanks for sharing!\nAnd Congrats @ratthachat !",
          "votes": 1
        },
        {
          "id": 958505,
          "postDate": "2020-08-05T02:59:29.443Z",
          "content": "<p>Thanks Heroseo <a href=\"/piantic\">@piantic</a> !  To answer your question above, both EffDet and ResNest use 1024 image size :) </p>",
          "rawMarkdown": "Thanks Heroseo @piantic !  To answer your question above, both EffDet and ResNest use 1024 image size :) ",
          "votes": 1
        }
      ]
    },
    {
      "id": 958476,
      "postDate": "2020-08-05T02:34:04.680Z",
      "content": "<p>Congrats <a href=\"/nguyenbadung\">@nguyenbadung</a>!\nand Congrats <a href=\"/datahobbit\">@datahobbit</a> <a href=\"/ratthachat\">@ratthachat</a> <a href=\"/yashchoudhary\">@yashchoudhary</a> <a href=\"/nitindatta\">@nitindatta</a>!</p>\n\n<p>The idea seems simple but good!\nMay I ask that what is image_size for training?</p>\n\n<p>p.s. Maybe your team go up to a higher rank. :)</p>",
      "rawMarkdown": "Congrats @nguyenbadung!\nand Congrats @datahobbit @ratthachat @yashchoudhary @nitindatta!\n\nThe idea seems simple but good!\nMay I ask that what is image_size for training?\n\np.s. Maybe your team go up to a higher rank. :)\n",
      "votes": 4,
      "replies": [
        {
          "id": 963379,
          "postDate": "2020-08-09T01:23:50.010Z",
          "content": "<p>Thanks for the warm words! Let's see after the YOLO subs are removed..</p>",
          "rawMarkdown": "Thanks for the warm words! Let's see after the YOLO subs are removed.."
        }
      ]
    },
    {
      "id": 959297,
      "postDate": "2020-08-05T13:31:07.600Z",
      "content": "<p>Quite interesting</p>",
      "rawMarkdown": "Quite interesting",
      "votes": 1,
      "replies": [
        {
          "id": 963382,
          "postDate": "2020-08-09T01:24:33.070Z",
          "content": "<p>Thank you!</p>",
          "rawMarkdown": "Thank you!"
        }
      ]
    },
    {
      "id": 958540,
      "postDate": "2020-08-05T03:37:37.253Z",
      "content": "<p>wow, learn a new trick. Big congrats to you guys!</p>",
      "rawMarkdown": "wow, learn a new trick. Big congrats to you guys!",
      "votes": 1,
      "replies": [
        {
          "id": 963381,
          "postDate": "2020-08-09T01:24:13.370Z",
          "content": "<p>Thank you!</p>",
          "rawMarkdown": "Thank you!"
        }
      ]
    },
    {
      "id": 958522,
      "postDate": "2020-08-05T03:21:15.943Z",
      "content": "<p>Good results! Thanks for sharing your team solution <a href=\"/kyoshioka47\">@kyoshioka47</a> <a href=\"/ratthachat\">@ratthachat</a> </p>",
      "rawMarkdown": "Good results! Thanks for sharing your team solution @kyoshioka47 @ratthachat ",
      "votes": 1,
      "replies": [
        {
          "id": 963380,
          "postDate": "2020-08-09T01:24:04.863Z",
          "content": "<p>Big thanks to the whole team ;)</p>",
          "rawMarkdown": "Big thanks to the whole team ;)"
        }
      ]
    },
    {
      "id": 962952,
      "postDate": "2020-08-08T15:09:12.520Z",
      "content": "<p>Thank you <a href=\"/kyoshioka47\">@kyoshioka47</a>  for sharing your approach and congratulation... Soon gonna give it a hands-on practice... </p>",
      "rawMarkdown": "Thank you @kyoshioka47  for sharing your approach and congratulation... Soon gonna give it a hands-on practice... ",
      "replies": [
        {
          "id": 963383,
          "postDate": "2020-08-09T01:25:03.770Z",
          "content": "<p>Thanks! The idea is simple but is quite complicated to implement.. ;)</p>",
          "rawMarkdown": "Thanks! The idea is simple but is quite complicated to implement.. ;)"
        }
      ]
    },
    {
      "id": 958741,
      "postDate": "2020-08-05T06:06:13.810Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 958494,
      "author_name": "Neuron Engineer",
      "author_url": "",
      "post_date": "2020-08-05T02:48:45.167000",
      "content": "<p>Thanks <a href=\"/kyoshioka47\">@kyoshioka47</a> (arutema47) again for his great job!! Also thanks to my other teammates <a href=\"/nitindatta\">@nitindatta</a> <a href=\"/datahobbit\">@datahobbit</a> <a href=\"/yashchoudhary\">@yashchoudhary</a>  for their dedicated efforts!</p>\n\n<p>In fact, our two selections are (1) <strong>EffDet</strong> as described by arutema here, and (2) <strong>FRCNN-ResNest</strong> which is able to reach 0.770+ Public LB at the end but not as good in Private LB (around 0.685). In FRCNN-ResNest we use the Pseudo+Ensemble technique which in case you guys feel interested in,  you can see our published notebook here : </p>\n\n<p><a href=\"https://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub\">https://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub</a></p>",
      "votes": 4,
      "replies": [
        {
          "id": 958502,
          "author_name": "Heroseo",
          "author_url": "",
          "post_date": "2020-08-05T02:57:46.757000",
          "content": "<p>Thanks for sharing!\nAnd Congrats <a href=\"/ratthachat\">@ratthachat</a> !</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 958505,
          "author_name": "Neuron Engineer",
          "author_url": "",
          "post_date": "2020-08-05T02:59:29.443000",
          "content": "<p>Thanks Heroseo <a href=\"/piantic\">@piantic</a> !  To answer your question above, both EffDet and ResNest use 1024 image size :) </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 958476,
      "author_name": "Heroseo",
      "author_url": "",
      "post_date": "2020-08-05T02:34:04.680000",
      "content": "<p>Congrats <a href=\"/nguyenbadung\">@nguyenbadung</a>!\nand Congrats <a href=\"/datahobbit\">@datahobbit</a> <a href=\"/ratthachat\">@ratthachat</a> <a href=\"/yashchoudhary\">@yashchoudhary</a> <a href=\"/nitindatta\">@nitindatta</a>!</p>\n\n<p>The idea seems simple but good!\nMay I ask that what is image_size for training?</p>\n\n<p>p.s. Maybe your team go up to a higher rank. :)</p>",
      "votes": 4,
      "replies": [
        {
          "id": 963379,
          "author_name": "arutema47",
          "author_url": "",
          "post_date": "2020-08-09T01:23:50.010000",
          "content": "<p>Thanks for the warm words! Let's see after the YOLO subs are removed..</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 959297,
      "author_name": "mayhatten",
      "author_url": "",
      "post_date": "2020-08-05T13:31:07.600000",
      "content": "<p>Quite interesting</p>",
      "votes": 1,
      "replies": [
        {
          "id": 963382,
          "author_name": "arutema47",
          "author_url": "",
          "post_date": "2020-08-09T01:24:33.070000",
          "content": "<p>Thank you!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 958540,
      "author_name": "",
      "author_url": "",
      "post_date": "2020-08-05T03:37:37.253000",
      "content": "<p>wow, learn a new trick. Big congrats to you guys!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 963381,
          "author_name": "arutema47",
          "author_url": "",
          "post_date": "2020-08-09T01:24:13.370000",
          "content": "<p>Thank you!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 958522,
      "author_name": "KhanhVD",
      "author_url": "",
      "post_date": "2020-08-05T03:21:15.943000",
      "content": "<p>Good results! Thanks for sharing your team solution <a href=\"/kyoshioka47\">@kyoshioka47</a> <a href=\"/ratthachat\">@ratthachat</a> </p>",
      "votes": 1,
      "replies": [
        {
          "id": 963380,
          "author_name": "arutema47",
          "author_url": "",
          "post_date": "2020-08-09T01:24:04.863000",
          "content": "<p>Big thanks to the whole team ;)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 962952,
      "author_name": "VinayVikram",
      "author_url": "",
      "post_date": "2020-08-08T15:09:12.520000",
      "content": "<p>Thank you <a href=\"/kyoshioka47\">@kyoshioka47</a>  for sharing your approach and congratulation... Soon gonna give it a hands-on practice... </p>",
      "votes": 0,
      "replies": [
        {
          "id": 963383,
          "author_name": "arutema47",
          "author_url": "",
          "post_date": "2020-08-09T01:25:03.770000",
          "content": "<p>Thanks! The idea is simple but is quite complicated to implement.. ;)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 958741,
      "author_name": "",
      "author_url": "",
      "post_date": "2020-08-05T06:06:13.810000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "958415": "First of all, thanks for the host for holding this competition! \n\nAnd great thanks to our team members, @datahobbit, @ratthachat, @yashchoudhary, @nitindatta and it was a pleasure teaming up. Everyone played a great part in the solutions which @ratthachat elaborates! It was fun having discussions and everybody was a great analyst/coder. We did a great job and made it into the TOP-2% ;)\n\nThis is our solution of our team Wheat Fields!\n\n(I will come back to update with the details.)\n\n## Models\n* Model: EffdetD5 2 folds ensemble \n\nWe evaluated our CV based on data source separated CV with original weightings.\n\n## Source separated psuedo labeling\n### Idea\nWe were scared that psuedo labeling with the entire test set prior will overfit to the UTokyo data which should be 70% of the test data. With this source-split, we can train model which overfit to UTokyo and other model to the rest, maximizing the PB.\n\n### Step.1 \nPredict on test set using Best CV Model and split the test set to two: TestSetB :UToyko which image has `number of wheats &lt;39` and TestSetC: `number of wheats&gt;=39`. We save the labels for psuedo label as well\n\n### Step2: \ntrain two models --&gt; Model-B train with pseudo [TestSetB, traindata] and Model-C train with pseudo [TestSetC,traindata].\n\n### Inference: \nPredict TestSetB with Model-B and TestSetC with Model-C.\n\n# Codes!\nI uploaded my training codes here.\nhttps://github.com/kentaroy47/kaggle-wheat-arutema47",
    "958494": "Thanks @kyoshioka47 (arutema47) again for his great job!! Also thanks to my other teammates @nitindatta @datahobbit @yashchoudhary  for their dedicated efforts!\n\nIn fact, our two selections are (1) **EffDet** as described by arutema here, and (2) **FRCNN-ResNest** which is able to reach 0.770+ Public LB at the end but not as good in Private LB (around 0.685). In FRCNN-ResNest we use the Pseudo+Ensemble technique which in case you guys feel interested in,  you can see our published notebook here : \n\nhttps://www.kaggle.com/ratthachat/wheat-resnest-pseudo-ensemble-framework-for-77pub",
    "958476": "Congrats @nguyenbadung!\nand Congrats @datahobbit @ratthachat @yashchoudhary @nitindatta!\n\nThe idea seems simple but good!\nMay I ask that what is image_size for training?\n\np.s. Maybe your team go up to a higher rank. :)\n",
    "959297": "Quite interesting",
    "958540": "wow, learn a new trick. Big congrats to you guys!",
    "958522": "Good results! Thanks for sharing your team solution @kyoshioka47 @ratthachat ",
    "962952": "Thank you @kyoshioka47  for sharing your approach and congratulation... Soon gonna give it a hands-on practice... ",
    "958741": ""
  }
}