{
  "id": 54838,
  "title": "My Solution 11th place (LB 0.590)",
  "url": "/competitions/data-science-bowl-2018/discussion/54838",
  "author_name": "Zheng Li",
  "post_date": "2018-04-18T13:40:09.942000",
  "votes": 45,
  "comment_count": 38,
  "views": 0,
  "content": "<p>（currently 8th place while leaderboard is being updated）</p>\n\n<p>Hi all. It is my first time join this competition. All my methods are learned from open discussion. As return, I decide to share my solution to the community. Thanks a lot to those who have made many contributions to the community. </p>\n\n<p>First of all, I thank Allen, John1231983, Keven Wang, Mehul Sampat, Heng CherKeng, CPMP, bsp2020, kamil, YaGana Sheriff-Hussaini, Yan Wang, Konstantin Maksimov, xiapidan, xuan, Waleed for your very impressive discussions. I learned a lot from those discussions. @Mehul Sampat hope we can team up together next time :) thanks again.</p>\n\n<p>My score: Stage1 LB 0.489(87th), Stage2 LB 0.590(11th). I am using matterport mask-rcnn.</p>\n\n<p><strong>Augmentations</strong></p>\n\n<p>Since there are hundreds of training images, we must find some useful augmentations to prevent our models from overfitting and make them generalizable. Here are some methods I have tried but it didn't work for me:</p>\n\n<ul>\n<li>add gaussian noise</li>\n<li>color to gray</li>\n<li>contrast and brightness</li>\n<li>random crop 512x512 if image size is bigger than 512 otherwise resize the image to 512x512</li>\n<li>mosacis</li>\n<li>mosacis+random crop</li>\n<li>mosacis+random crop+ h&amp;e</li>\n<li>rotate 90 degrees </li>\n<li>radnom rotate 90,180,270 degrees</li>\n<li>rotate +-5 degrees on top of flip &amp; 90 degree rotation</li>\n<li>elastic transform</li>\n</ul>\n\n<p>I only use flip up&amp;down&amp;left&amp;right</p>\n\n<p><strong>Additional data</strong></p>\n\n<p>No. I have tried to add h&amp;e dataset to training data, but it didn't improve my performance. I am using <a href=\"https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes\">https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes</a></p>\n\n<p><strong>Ensembling</strong></p>\n\n<p>No. I spend almost one week trying this method but it didn't work so well. I devided the training data into two categories: color &amp; grey. I have seen someone get a high score (0.5+) in stage1 by using this method. I am very interested in this so I really hope that someone can share some solutions about this.</p>\n\n<p><strong>Parameters</strong></p>\n\n<p>train:</p>\n\n<p>inti_with= coco</p>\n\n<p>RESNET_ARCHITECTURE = \"resnet101\"</p>\n\n<p>MEAN_PIXEL = np.array([0., 0., 0.])</p>\n\n<p>RPN_NMS_THRESHOLD = 0.7</p>\n\n<p>DETECTION_MIN_CONFIDENCE = 0.7</p>\n\n<p>DETECTION_NMS_THRESHOLD = 0.3</p>\n\n<p>TRAIN_ROIS_PER_IMAGE = 600</p>\n\n<p>RPN_TRAIN_ANCHORS_PER_IMAGE = 320</p>\n\n<p>LEARNING_RATE = 1e-3</p>\n\n<p>inference:</p>\n\n<p>RPN_NMS_THRESHOLD = 0.6</p>\n\n<p>DETECTION_NMS_THRESHOLD = 0.1</p>\n\n<p><strong>Training</strong></p>\n\n<p>1e-3 all 20epochs. Choose the best point according to the display of tensorboard, then 1e-4 or 1e-5 train all 20epochs. (if val loss stops decreasing, stops training) \noptimizer=Adam.</p>\n\n<p><strong>Post processing</strong> \nUse binary_dilation.</p>\n\n<p><strong>Other method</strong>\ngeneral standardization.\nimg = img-mean(img)/std(img).</p>\n\n<p><strong>Some methods might be useful</strong></p>\n\n<p>1.Filter</p>\n\n<p>&gt; We use single mask rcnn, but with special post process to filter noises (i.e. small FPs) based on clustering and outlier detection of mask sizes, which boosted us a lot (kill lots of noises). Less FPs is the key to get high mAP as Heng said. I should thank him a lot</p>\n\n<p>2.fill_holes</p>\n\n<p><a href=\"https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes\">https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes</a></p>\n\n<p>3.wateshed</p>\n\n<p><strong>Some interesting discussions&amp;methods links</strong></p>\n\n<ol>\n<li><a href=\"https://github.com/matterport/Mask_RCNN/issues/230\">https://github.com/matterport/Mask_RCNN/issues/230</a></li>\n<li><a href=\"https://github.com/matterport/Mask_RCNN/issues/281\">https://github.com/matterport/Mask_RCNN/issues/281</a></li>\n<li><a href=\"https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5\">https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5</a></li>\n<li><a href=\"https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook\">https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook</a></li>\n<li><a href=\"https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758\">https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758</a></li>\n</ol>\n\n<p><strong>Last</strong></p>\n\n<p>I have tried a lot of experiments. Some of them i just don't remeber.....sorry :(  So here is my email mdlszhengli@@gmail.com. I am very happy to discuss via email or wechat(removed).</p>",
  "messages": [
    {
      "id": 316229,
      "postDate": "2018-04-18T13:40:09.943Z",
      "content": "<p>（currently 8th place while leaderboard is being updated）</p>\n\n<p>Hi all. It is my first time join this competition. All my methods are learned from open discussion. As return, I decide to share my solution to the community. Thanks a lot to those who have made many contributions to the community. </p>\n\n<p>First of all, I thank Allen, John1231983, Keven Wang, Mehul Sampat, Heng CherKeng, CPMP, bsp2020, kamil, YaGana Sheriff-Hussaini, Yan Wang, Konstantin Maksimov, xiapidan, xuan, Waleed for your very impressive discussions. I learned a lot from those discussions. @Mehul Sampat hope we can team up together next time :) thanks again.</p>\n\n<p>My score: Stage1 LB 0.489(87th), Stage2 LB 0.590(11th). I am using matterport mask-rcnn.</p>\n\n<p><strong>Augmentations</strong></p>\n\n<p>Since there are hundreds of training images, we must find some useful augmentations to prevent our models from overfitting and make them generalizable. Here are some methods I have tried but it didn't work for me:</p>\n\n<ul>\n<li>add gaussian noise</li>\n<li>color to gray</li>\n<li>contrast and brightness</li>\n<li>random crop 512x512 if image size is bigger than 512 otherwise resize the image to 512x512</li>\n<li>mosacis</li>\n<li>mosacis+random crop</li>\n<li>mosacis+random crop+ h&amp;e</li>\n<li>rotate 90 degrees </li>\n<li>radnom rotate 90,180,270 degrees</li>\n<li>rotate +-5 degrees on top of flip &amp; 90 degree rotation</li>\n<li>elastic transform</li>\n</ul>\n\n<p>I only use flip up&amp;down&amp;left&amp;right</p>\n\n<p><strong>Additional data</strong></p>\n\n<p>No. I have tried to add h&amp;e dataset to training data, but it didn't improve my performance. I am using <a href=\"https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes\">https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes</a></p>\n\n<p><strong>Ensembling</strong></p>\n\n<p>No. I spend almost one week trying this method but it didn't work so well. I devided the training data into two categories: color &amp; grey. I have seen someone get a high score (0.5+) in stage1 by using this method. I am very interested in this so I really hope that someone can share some solutions about this.</p>\n\n<p><strong>Parameters</strong></p>\n\n<p>train:</p>\n\n<p>inti_with= coco</p>\n\n<p>RESNET_ARCHITECTURE = \"resnet101\"</p>\n\n<p>MEAN_PIXEL = np.array([0., 0., 0.])</p>\n\n<p>RPN_NMS_THRESHOLD = 0.7</p>\n\n<p>DETECTION_MIN_CONFIDENCE = 0.7</p>\n\n<p>DETECTION_NMS_THRESHOLD = 0.3</p>\n\n<p>TRAIN_ROIS_PER_IMAGE = 600</p>\n\n<p>RPN_TRAIN_ANCHORS_PER_IMAGE = 320</p>\n\n<p>LEARNING_RATE = 1e-3</p>\n\n<p>inference:</p>\n\n<p>RPN_NMS_THRESHOLD = 0.6</p>\n\n<p>DETECTION_NMS_THRESHOLD = 0.1</p>\n\n<p><strong>Training</strong></p>\n\n<p>1e-3 all 20epochs. Choose the best point according to the display of tensorboard, then 1e-4 or 1e-5 train all 20epochs. (if val loss stops decreasing, stops training) \noptimizer=Adam.</p>\n\n<p><strong>Post processing</strong> \nUse binary_dilation.</p>\n\n<p><strong>Other method</strong>\ngeneral standardization.\nimg = img-mean(img)/std(img).</p>\n\n<p><strong>Some methods might be useful</strong></p>\n\n<p>1.Filter</p>\n\n<p>&gt; We use single mask rcnn, but with special post process to filter noises (i.e. small FPs) based on clustering and outlier detection of mask sizes, which boosted us a lot (kill lots of noises). Less FPs is the key to get high mAP as Heng said. I should thank him a lot</p>\n\n<p>2.fill_holes</p>\n\n<p><a href=\"https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes\">https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes</a></p>\n\n<p>3.wateshed</p>\n\n<p><strong>Some interesting discussions&amp;methods links</strong></p>\n\n<ol>\n<li><a href=\"https://github.com/matterport/Mask_RCNN/issues/230\">https://github.com/matterport/Mask_RCNN/issues/230</a></li>\n<li><a href=\"https://github.com/matterport/Mask_RCNN/issues/281\">https://github.com/matterport/Mask_RCNN/issues/281</a></li>\n<li><a href=\"https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5\">https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5</a></li>\n<li><a href=\"https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook\">https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook</a></li>\n<li><a href=\"https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758\">https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758</a></li>\n</ol>\n\n<p><strong>Last</strong></p>\n\n<p>I have tried a lot of experiments. Some of them i just don't remeber.....sorry :(  So here is my email mdlszhengli@@gmail.com. I am very happy to discuss via email or wechat(removed).</p>",
      "rawMarkdown": "（currently 8th place while leaderboard is being updated）\n\nHi all. It is my first time join this competition. All my methods are learned from open discussion. As return, I decide to share my solution to the community. Thanks a lot to those who have made many contributions to the community. \n\nFirst of all, I thank Allen, John1231983, Keven Wang, Mehul Sampat, Heng CherKeng, CPMP, bsp2020, kamil, YaGana Sheriff-Hussaini, Yan Wang, Konstantin Maksimov, xiapidan, xuan, Waleed for your very impressive discussions. I learned a lot from those discussions. @Mehul Sampat hope we can team up together next time :) thanks again.\n\nMy score: Stage1 LB 0.489(87th), Stage2 LB 0.590(11th). I am using matterport mask-rcnn.\n\n**Augmentations**\n\nSince there are hundreds of training images, we must find some useful augmentations to prevent our models from overfitting and make them generalizable. Here are some methods I have tried but it didn't work for me:\n \n - add gaussian noise\n - color to gray\n - contrast and brightness\n - random crop 512x512 if image size is bigger than 512 otherwise resize the image to 512x512\n - mosacis\n - mosacis+random crop\n - mosacis+random crop+ h&amp;e\n - rotate 90 degrees \n - radnom rotate 90,180,270 degrees\n - rotate +-5 degrees on top of flip &amp; 90 degree rotation\n - elastic transform\n\nI only use flip up&amp;down&amp;left&amp;right\n\n**Additional data**\n\nNo. I have tried to add h&amp;e dataset to training data, but it didn't improve my performance. I am using https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes\n\n**Ensembling**\n\nNo. I spend almost one week trying this method but it didn't work so well. I devided the training data into two categories: color &amp; grey. I have seen someone get a high score (0.5+) in stage1 by using this method. I am very interested in this so I really hope that someone can share some solutions about this.\n\n**Parameters**\n\ntrain:\n\ninti_with= coco\n\nRESNET_ARCHITECTURE = \"resnet101\"\n\nMEAN_PIXEL = np.array([0., 0., 0.])\n\nRPN_NMS_THRESHOLD = 0.7\n\nDETECTION_MIN_CONFIDENCE = 0.7\n\nDETECTION_NMS_THRESHOLD = 0.3\n\nTRAIN_ROIS_PER_IMAGE = 600\n\nRPN_TRAIN_ANCHORS_PER_IMAGE = 320\n\nLEARNING_RATE = 1e-3\n\ninference:\n\nRPN_NMS_THRESHOLD = 0.6\n\nDETECTION_NMS_THRESHOLD = 0.1\n\n**Training**\n\n1e-3 all 20epochs. Choose the best point according to the display of tensorboard, then 1e-4 or 1e-5 train all 20epochs. (if val loss stops decreasing, stops training) \noptimizer=Adam.\n\n**Post processing** \nUse binary_dilation.\n\n**Other method**\ngeneral standardization.\nimg = img-mean(img)/std(img).\n\n**Some methods might be useful**\n\n1.Filter\n\n&gt; We use single mask rcnn, but with special post process to filter noises (i.e. small FPs) based on clustering and outlier detection of mask sizes, which boosted us a lot (kill lots of noises). Less FPs is the key to get high mAP as Heng said. I should thank him a lot\n\n2.fill_holes\n\nhttps://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes\n\n3.wateshed\n\n**Some interesting discussions&amp;methods links**\n\n 1. https://github.com/matterport/Mask_RCNN/issues/230\n 2. https://github.com/matterport/Mask_RCNN/issues/281\n 3. https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5\n 4. https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook\n 5. https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758\n\n**Last**\n\nI have tried a lot of experiments. Some of them i just don't remeber.....sorry :(  So here is my email mdlszhengli@@gmail.com. I am very happy to discuss via email or wechat(removed).",
      "votes": 45
    },
    {
      "id": 318739,
      "postDate": "2018-04-24T11:32:06.060Z",
      "content": "<p>@Zheng Li , whew, I'm glad you'll be reinstated, make sure to upload your model in your next 2-stage competition, since you were very close to the prize this time. You're the \"outlier\" of the samples I'd say  ;)  your model is very well generalized and totally beat our LB at the 2nd stage even our LB was higher at the 1st stage. Good job. </p>",
      "rawMarkdown": "@Zheng Li , whew, I'm glad you'll be reinstated, make sure to upload your model in your next 2-stage competition, since you were very close to the prize this time. You're the \"outlier\" of the samples I'd say  ;)  your model is very well generalized and totally beat our LB at the 2nd stage even our LB was higher at the 1st stage. Good job. ",
      "votes": 1,
      "replies": [
        {
          "id": 318746,
          "postDate": "2018-04-24T11:55:17.420Z",
          "content": "<p>Hi Nicole. Thank you. See you in the next competition. ;)</p>",
          "rawMarkdown": "Hi Nicole. Thank you. See you in the next competition. ;)",
          "votes": 1
        },
        {
          "id": 1621965,
          "postDate": "2021-12-18T08:43:12.260Z",
          "content": "<p><a href=\"https://www.kaggle.com/mdlszhengli\" target=\"_blank\">@mdlszhengli</a>  opening very old discussion.<br>\ncould you explain about the fitering method you used in the post processing</p>",
          "rawMarkdown": "@mdlszhengli  opening very old discussion.\ncould you explain about the fitering method you used in the post processing"
        }
      ]
    },
    {
      "id": 316775,
      "postDate": "2018-04-19T21:30:40.963Z",
      "content": "<p>Nice job, Congratulations, Zheng!</p>",
      "rawMarkdown": "Nice job, Congratulations, Zheng!",
      "votes": 1
    },
    {
      "id": 316510,
      "postDate": "2018-04-19T08:36:55.587Z",
      "content": "<p>Thanks for sharing! The score is very impressive. </p>\n\n<p>Several questions I had:\n(1) What is the purpose for binary dilation as post-processing, compared to other methods such as opening? Does dilation make the masks larger? \n(1) Did learning rate decay help the convergence? I found decreasing LR to 1e-4 or below causes overfitting, but I was using SGD with momentum. Did you see an improvement using Adam vs. SGD? \n(2) Since you're using 512x512, do you use a batch size (IMAGES_PER_GPU) &gt; 1? \nThanks! </p>",
      "rawMarkdown": "Thanks for sharing! The score is very impressive. \n\nSeveral questions I had:\n(1) What is the purpose for binary dilation as post-processing, compared to other methods such as opening? Does dilation make the masks larger? \n(1) Did learning rate decay help the convergence? I found decreasing LR to 1e-4 or below causes overfitting, but I was using SGD with momentum. Did you see an improvement using Adam vs. SGD? \n(2) Since you're using 512x512, do you use a batch size (IMAGES_PER_GPU) &gt; 1? \nThanks! ",
      "votes": 1,
      "replies": [
        {
          "id": 316528,
          "postDate": "2018-04-19T09:33:15.253Z",
          "content": "<p>Hi, Yueqi. Dilation is generally used to extend edges and fill some small holes. As Heng mentioned before \"Deep network is the weakest at the boundary image and strongest are the center.\". In this competition, it is very necessary to do some works on boundary detection. It actually improve my result. (2) I have not used SGD, so it is hard to tell which one is more suitable in this competition. As far as i know, Keven Wang and Panpan Zhou is using SGD, you can discuss with them. (3) batch_size=1.  Thanks Zheng</p>",
          "rawMarkdown": "Hi, Yueqi. Dilation is generally used to extend edges and fill some small holes. As Heng mentioned before \"Deep network is the weakest at the boundary image and strongest are the center.\". In this competition, it is very necessary to do some works on boundary detection. It actually improve my result. (2) I have not used SGD, so it is hard to tell which one is more suitable in this competition. As far as i know, Keven Wang and Panpan Zhou is using SGD, you can discuss with them. (3) batch_size=1.  Thanks Zheng"
        },
        {
          "id": 316751,
          "postDate": "2018-04-19T19:59:17.183Z",
          "content": "<p>Thanks for the explanation! </p>",
          "rawMarkdown": "Thanks for the explanation! "
        },
        {
          "id": 316754,
          "postDate": "2018-04-19T20:14:13.453Z",
          "content": "<p>Hi Yueqi, </p>\n\n<p>I have collected the parameters from various contestants here: \n<a href=\"https://www.kaggle.com/c/data-science-bowl-2018/discussion/54920\">https://www.kaggle.com/c/data-science-bowl-2018/discussion/54920</a>\n(this includes, Zheng, Waleed, Avi and me). </p>\n\n<p>I will be happy to add your parameters to the table here:\n<a href=\"https://github.com/mpsampat/DSB_2018_Parameter_Selection_For_Matterport_Mask_RCNN/blob/master/comparison_of_Matterport_Mask_RCNN_parameters.md\">https://github.com/mpsampat/DSB_2018_Parameter_Selection_For_Matterport_Mask_RCNN/blob/master/comparison_of_Matterport_Mask_RCNN_parameters.md</a></p>\n\n<p>Thanks\nMehul</p>",
          "rawMarkdown": "Hi Yueqi, \n\nI have collected the parameters from various contestants here: \nhttps://www.kaggle.com/c/data-science-bowl-2018/discussion/54920\n(this includes, Zheng, Waleed, Avi and me). \n\nI will be happy to add your parameters to the table here:\nhttps://github.com/mpsampat/DSB_2018_Parameter_Selection_For_Matterport_Mask_RCNN/blob/master/comparison_of_Matterport_Mask_RCNN_parameters.md\n\nThanks\nMehul",
          "votes": 1
        },
        {
          "id": 316757,
          "postDate": "2018-04-19T20:29:59.380Z",
          "content": "<p>Hi Mehul,</p>\n\n<p>Thanks! It's a great idea to distill what works best for MaskRCNN. I'll follow up on your new thread. </p>",
          "rawMarkdown": "Hi Mehul,\n\nThanks! It's a great idea to distill what works best for MaskRCNN. I'll follow up on your new thread. ",
          "votes": 1
        },
        {
          "id": 317997,
          "postDate": "2018-04-23T02:38:11.727Z",
          "content": "<p>Hi Mehul,</p>\n\n<p>I've checked your summary for this model, it's great!</p>\n\n<p>I also used this model for this competition and got similar results. And I found the threshold in unmold_mask function also has some influence on the final results. I wonder if you guys tried that.</p>\n\n<p>Also I've used the tiramisu model as well, and it's interesting that tiramisu needs a higher threshold to perform better while mask rcnn needs lower.</p>",
          "rawMarkdown": "Hi Mehul,\n\nI've checked your summary for this model, it's great!\n\nI also used this model for this competition and got similar results. And I found the threshold in unmold_mask function also has some influence on the final results. I wonder if you guys tried that.\n\nAlso I've used the tiramisu model as well, and it's interesting that tiramisu needs a higher threshold to perform better while mask rcnn needs lower."
        }
      ]
    },
    {
      "id": 316320,
      "postDate": "2018-04-18T17:53:05.743Z",
      "content": "<p>thanks for sharing, nice work and congrats</p>\n\n<p>btw. it just show how important it's do do CV resp. some early validation - also was using matterport but guess I overfit quite badly (though still don't understand how ... maybe I actually just \"overaugmented\", was doing a lot of color augmentation, blur, random noise, brigthness, rotations, all with 50% chance), next time I need to be more carefull of what I do :)</p>",
      "rawMarkdown": "thanks for sharing, nice work and congrats\n\nbtw. it just show how important it's do do CV resp. some early validation - also was using matterport but guess I overfit quite badly (though still don't understand how ... maybe I actually just \"overaugmented\", was doing a lot of color augmentation, blur, random noise, brigthness, rotations, all with 50% chance), next time I need to be more carefull of what I do :)",
      "votes": 1,
      "replies": [
        {
          "id": 316469,
          "postDate": "2018-04-19T06:26:26.540Z",
          "content": "<p>Hi steelrose. When I use general normalization, I guess this method doesn't work well with other methods, so I just use flip. 1st place solution use many augmentation methods and it actually works very well. So always choose the best methods for your model. Good luck. Thanks Zheng</p>",
          "rawMarkdown": "Hi steelrose. When I use general normalization, I guess this method doesn't work well with other methods, so I just use flip. 1st place solution use many augmentation methods and it actually works very well. So always choose the best methods for your model. Good luck. Thanks Zheng"
        }
      ]
    },
    {
      "id": 316315,
      "postDate": "2018-04-18T17:39:51.600Z",
      "content": "<p>Great job</p>",
      "rawMarkdown": "Great job",
      "votes": 1
    },
    {
      "id": 316272,
      "postDate": "2018-04-18T15:38:17.430Z",
      "content": "<p>Awesome!</p>",
      "rawMarkdown": "Awesome!",
      "votes": 1
    },
    {
      "id": 316252,
      "postDate": "2018-04-18T14:38:31.560Z",
      "content": "<p>Cool! Your model is generalized very well since it outperformed at the 2nd stage. Quite impressive. Very curious to know how your model can bump up so much. We have a very similar approach with a U-net, but our positions at both stages were pretty similar (at around top 2% at both stages). </p>\n\n<ul>\n<li>A question - If you rotated your images by 5 degree, how did you fill the part outside of the image, just left it 0? </li>\n<li>Your model is very impressive, bumped up by LB=0.1 on the unseen data, it's worth a big praise. </li>\n</ul>\n\n<p>Cool @Emil will be happy to know you applied mosaic as well :) I just posted your post on his kernel. \n<a href=\"https://www.kaggle.com/bonlime/train-test-image-mosaic\">https://www.kaggle.com/bonlime/train-test-image-mosaic</a></p>",
      "rawMarkdown": "Cool! Your model is generalized very well since it outperformed at the 2nd stage. Quite impressive. Very curious to know how your model can bump up so much. We have a very similar approach with a U-net, but our positions at both stages were pretty similar (at around top 2% at both stages). \n\n - A question - If you rotated your images by 5 degree, how did you fill the part outside of the image, just left it 0? \n - Your model is very impressive, bumped up by LB=0.1 on the unseen data, it's worth a big praise. \n\nCool @Emil will be happy to know you applied mosaic as well :) I just posted your post on his kernel. \nhttps://www.kaggle.com/bonlime/train-test-image-mosaic\n",
      "votes": 1,
      "replies": [
        {
          "id": 316260,
          "postDate": "2018-04-18T14:59:38.830Z",
          "content": "<p>HI Nicole! </p>\n\n<ol>\n<li><p>I think ZhengLi said none of the augmentations worked for him and he said he only used \"\"use flip up&amp;down&amp;left&amp;right\"; For me too H&amp;E data did not help and rotations by 0-15 did not help.</p></li>\n<li><p>(We were discussing it within the team and we thought it might be due to interpolations)</p></li>\n<li><p>Also @ZhengLi you forked Mask-RCNN from here <a href=\"https://github.com/YanWang2014/Mask_RCNN\">https://github.com/YanWang2014/Mask_RCNN</a> right ?</p></li>\n<li><p>@Waleed made a lot of improvements to Mask-RCNN after that fork. He is the original author of Matterport Mask_RCNN; @Waleed got 0.476 on stage1 and we got 0.472; but we both did not go above 0.5 in stage2. I could only train for 25 epochs;</p></li>\n<li><p>But there are atleast 2 other groups that went above 0.59 with Mask-RCNN. </p></li>\n<li><p>Zheng used dilation for post-processing whereas we did no post-processing. </p></li>\n<li><p>It is very interesting that differences in parameters made such a large difference in performance. It will be interesting to learn what is the root cause of difference in performance. Maybe how training/validation data is split ? </p></li>\n<li>I will share a google doc with a comparison of the parameters used by me and Waleed.\nMehul</li>\n</ol>",
          "rawMarkdown": "HI Nicole! \n\n1. I think ZhengLi said none of the augmentations worked for him and he said he only used \"\"use flip up&amp;down&amp;left&amp;right\"; For me too H&amp;E data did not help and rotations by 0-15 did not help.\n\n2. (We were discussing it within the team and we thought it might be due to interpolations)\n\n3. Also @ZhengLi you forked Mask-RCNN from here https://github.com/YanWang2014/Mask_RCNN right ?\n\n4. @Waleed made a lot of improvements to Mask-RCNN after that fork. He is the original author of Matterport Mask_RCNN; @Waleed got 0.476 on stage1 and we got 0.472; but we both did not go above 0.5 in stage2. I could only train for 25 epochs;\n\n5. But there are atleast 2 other groups that went above 0.59 with Mask-RCNN. \n6. Zheng used dilation for post-processing whereas we did no post-processing. \n\n7. It is very interesting that differences in parameters made such a large difference in performance. It will be interesting to learn what is the root cause of difference in performance. Maybe how training/validation data is split ? \n8. I will share a google doc with a comparison of the parameters used by me and Waleed.\nMehul",
          "votes": 4
        },
        {
          "id": 316472,
          "postDate": "2018-04-19T06:33:33.810Z",
          "content": "<p>@Nicole Finnie\nHi Nicole. Thank you very much. :) Just left it 0. Here is my code. </p>\n\n<pre><code>from imgaug import augmenters as iaa\n\nAUGMENTATION_AFFINE = {\n    \"order\": 0,\n    \"rotate\": (-5, 5)}\n\nif config.AUGMENTATION_AFFINE:\n  augmentations.append(iaa.Affine(**config.AUGMENTATION_AFFINE))\n\nseq=iaa.Sequential(augmentations)\nseq_det=seq.to_deterministic()\nimage, mask =seq_det.augment_image(image), seq_det.augment_image(mask)\n</code></pre>",
          "rawMarkdown": "@Nicole Finnie\nHi Nicole. Thank you very much. :) Just left it 0. Here is my code. \n\n\n    from imgaug import augmenters as iaa\n\n    AUGMENTATION_AFFINE = {\n        \"order\": 0,\n        \"rotate\": (-5, 5)}\n\n    if config.AUGMENTATION_AFFINE:\n      augmentations.append(iaa.Affine(**config.AUGMENTATION_AFFINE))\n\n    seq=iaa.Sequential(augmentations)\n    seq_det=seq.to_deterministic()\n    image, mask =seq_det.augment_image(image), seq_det.augment_image(mask)\n\n"
        },
        {
          "id": 316474,
          "postDate": "2018-04-19T06:42:52.493Z",
          "content": "<p>@Mehul Sampat Hi Mehul. Thanks for your explanation. You are right. I only use flip.\nMask rcnn code is from here: <a href=\"https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline\">https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline</a>\nI am also very interested in other groups' solutions. I think training/validation data split is very important and it can tell us where is the best point( local optimum).  Thanks Zheng</p>",
          "rawMarkdown": "@Mehul Sampat Hi Mehul. Thanks for your explanation. You are right. I only use flip.\nMask rcnn code is from here: https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline\nI am also very interested in other groups' solutions. I think training/validation data split is very important and it can tell us where is the best point( local optimum).  Thanks Zheng"
        },
        {
          "id": 317567,
          "postDate": "2018-04-21T21:45:05.967Z",
          "content": "<p>Hi Zheng. Thanks for sharing your solution and I am really impressed that you managed to achieve such great result with the minimal tweak to matterport's solution.</p>\n\n<p>May I ask how did you split the images between training and validation sets? </p>\n\n<p>Many thanks in advance!</p>",
          "rawMarkdown": "Hi Zheng. Thanks for sharing your solution and I am really impressed that you managed to achieve such great result with the minimal tweak to matterport's solution.\n\nMay I ask how did you split the images between training and validation sets? \n\nMany thanks in advance!",
          "votes": 1
        },
        {
          "id": 317732,
          "postDate": "2018-04-22T12:08:30.063Z",
          "rawMarkdown": "",
          "votes": -6,
          "isDeleted": true
        },
        {
          "id": 317746,
          "postDate": "2018-04-22T12:56:49.907Z",
          "content": "<p>I agree. I gave them up vote because I thought the post gave some clarification. but I also think kaggle didn't handle this issue properly and fairly. I am with you on this one. </p>",
          "rawMarkdown": "I agree. I gave them up vote because I thought the post gave some clarification. but I also think kaggle didn't handle this issue properly and fairly. I am with you on this one. "
        },
        {
          "id": 317763,
          "postDate": "2018-04-22T13:52:50.627Z",
          "content": "<p>Hi YL. Thank you very much.</p>",
          "rawMarkdown": "Hi YL. Thank you very much.",
          "votes": -1
        }
      ]
    },
    {
      "id": 316251,
      "postDate": "2018-04-18T14:37:04.567Z",
      "content": "<p>@ZhengLi, Congratulations! and thanks for sharing your approach.</p>",
      "rawMarkdown": "@ZhengLi, Congratulations! and thanks for sharing your approach.",
      "votes": 1
    },
    {
      "id": 316238,
      "postDate": "2018-04-18T14:12:13.027Z",
      "content": "<p>Thanks for your sharing and congrats to you ！</p>",
      "rawMarkdown": "Thanks for your sharing and congrats to you ！",
      "votes": 1
    },
    {
      "id": 317769,
      "postDate": "2018-04-22T14:09:09.117Z",
      "content": "<p>hi Zheng, Congratulations! You say \"Less FPs is the key to get high mAP as Heng said.\" So what the meaning of Fps here? thanks.</p>",
      "rawMarkdown": "hi Zheng, Congratulations! You say \"Less FPs is the key to get high mAP as Heng said.\" So what the meaning of Fps here? thanks.",
      "votes": 2,
      "replies": [
        {
          "id": 317848,
          "postDate": "2018-04-22T17:17:40.510Z",
          "content": "<p>FP=False Positive. Detected masks that are actually not there.</p>",
          "rawMarkdown": "FP=False Positive. Detected masks that are actually not there.",
          "votes": 2
        }
      ]
    },
    {
      "id": 316481,
      "postDate": "2018-04-19T07:13:25.027Z",
      "content": "<p>Congrats!\nI have 3 questions to consult:\n1. I am also using matterport mask-rcnn with image-size 1024 * 1024.  I found it gets better score than small sizes. What size are you using?\n2. you are using a very low DETECTION_NMS_THRESHOLD, will this cause problems when the GT is few? \n3. you are using zero MEAN_PIXEL, what is the consideration for this?\nThank you.</p>",
      "rawMarkdown": "Congrats!\nI have 3 questions to consult:\n1. I am also using matterport mask-rcnn with image-size 1024 * 1024.  I found it gets better score than small sizes. What size are you using?\n2. you are using a very low DETECTION_NMS_THRESHOLD, will this cause problems when the GT is few? \n3. you are using zero MEAN_PIXEL, what is the consideration for this?\nThank you.",
      "votes": 2,
      "replies": [
        {
          "id": 316497,
          "postDate": "2018-04-19T07:54:51.677Z",
          "content": "<p>Hi YUNFEI. 1. I am using 512*512. \n2. Sorry there are some parameters I didn't mentioned above.  When I was training, I set DETECTION_NMS_THRESHOLD = 0.3, DETECTION_MIN_CONFIDENCE = 0.7. \nPOST_NMS_ROIS_TRAINING = 2000, POST_NMS_ROIS_INFERENCE = 2000\n3. general standardization can speed up the convergence of your algorithm.</p>",
          "rawMarkdown": "Hi YUNFEI. 1. I am using 512*512. \n2. Sorry there are some parameters I didn't mentioned above.  When I was training, I set DETECTION_NMS_THRESHOLD = 0.3, DETECTION_MIN_CONFIDENCE = 0.7. \nPOST_NMS_ROIS_TRAINING = 2000, POST_NMS_ROIS_INFERENCE = 2000\n3. general standardization can speed up the convergence of your algorithm.",
          "votes": 1
        },
        {
          "id": 316505,
          "postDate": "2018-04-19T08:22:03.387Z",
          "content": "<p>Thank you for your explain, I will have a try.</p>",
          "rawMarkdown": "Thank you for your explain, I will have a try."
        },
        {
          "id": 316513,
          "postDate": "2018-04-19T08:39:01.370Z",
          "content": "<p>I also found that 1024x1024 got me better score than smaller sizes. So I was surprised to see 512x512 without cropping to work so well. </p>",
          "rawMarkdown": "I also found that 1024x1024 got me better score than smaller sizes. So I was surprised to see 512x512 without cropping to work so well. "
        }
      ]
    },
    {
      "id": 316271,
      "postDate": "2018-04-18T15:35:39.830Z",
      "content": "<p>Nice work!</p>",
      "rawMarkdown": " Nice work!",
      "votes": 2
    },
    {
      "id": 316242,
      "postDate": "2018-04-18T14:24:19.513Z",
      "content": "<p>666</p>",
      "rawMarkdown": "666",
      "votes": -4
    },
    {
      "id": 316314,
      "postDate": "2018-04-18T17:32:58.763Z",
      "content": "<p>Thanks for sharing, I was wondering if compared the model with pretrained coco weights and without? And whether or not it made a significant difference?</p>",
      "rawMarkdown": "Thanks for sharing, I was wondering if compared the model with pretrained coco weights and without? And whether or not it made a significant difference?",
      "replies": [
        {
          "id": 316467,
          "postDate": "2018-04-19T06:16:54.393Z",
          "content": "<p>Hi. I only compared the model with pretrained coco and imagenet and i found that coco is better than imagenet in this competition.</p>",
          "rawMarkdown": "Hi. I only compared the model with pretrained coco and imagenet and i found that coco is better than imagenet in this competition.",
          "votes": 1
        },
        {
          "id": 316582,
          "postDate": "2018-04-19T11:29:36.140Z",
          "content": "<p>Thanks</p>",
          "rawMarkdown": "Thanks"
        }
      ]
    },
    {
      "id": 316305,
      "postDate": "2018-04-18T17:09:28.917Z",
      "content": "<p>Great job! Thanks!</p>",
      "rawMarkdown": "Great job! Thanks!",
      "votes": 1
    },
    {
      "id": 316286,
      "postDate": "2018-04-18T16:16:54.793Z",
      "content": "<p>Nice job! Thanks for sharing!</p>",
      "rawMarkdown": "Nice job! Thanks for sharing!",
      "votes": 1
    },
    {
      "id": 318087,
      "postDate": "2018-04-23T07:08:33.203Z",
      "content": "<p>Well done ! Thanks for sharing :) </p>",
      "rawMarkdown": "Well done ! Thanks for sharing :) "
    }
  ],
  "comments": [
    {
      "id": 318739,
      "author_name": "Nicole Finnie",
      "author_url": "",
      "post_date": "2018-04-24T11:32:06.060000",
      "content": "<p>@Zheng Li , whew, I'm glad you'll be reinstated, make sure to upload your model in your next 2-stage competition, since you were very close to the prize this time. You're the \"outlier\" of the samples I'd say  ;)  your model is very well generalized and totally beat our LB at the 2nd stage even our LB was higher at the 1st stage. Good job. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 318746,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-24T11:55:17.420000",
          "content": "<p>Hi Nicole. Thank you. See you in the next competition. ;)</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1621965,
          "author_name": "Jaideep",
          "author_url": "",
          "post_date": "2021-12-18T08:43:12.260000",
          "content": "<p><a href=\"https://www.kaggle.com/mdlszhengli\" target=\"_blank\">@mdlszhengli</a>  opening very old discussion.<br>\ncould you explain about the fitering method you used in the post processing</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 316775,
      "author_name": "Zhi Liu",
      "author_url": "",
      "post_date": "2018-04-19T21:30:40.963000",
      "content": "<p>Nice job, Congratulations, Zheng!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 316510,
      "author_name": "yueqi",
      "author_url": "",
      "post_date": "2018-04-19T08:36:55.587000",
      "content": "<p>Thanks for sharing! The score is very impressive. </p>\n\n<p>Several questions I had:\n(1) What is the purpose for binary dilation as post-processing, compared to other methods such as opening? Does dilation make the masks larger? \n(1) Did learning rate decay help the convergence? I found decreasing LR to 1e-4 or below causes overfitting, but I was using SGD with momentum. Did you see an improvement using Adam vs. SGD? \n(2) Since you're using 512x512, do you use a batch size (IMAGES_PER_GPU) &gt; 1? \nThanks! </p>",
      "votes": 1,
      "replies": [
        {
          "id": 316528,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T09:33:15.253000",
          "content": "<p>Hi, Yueqi. Dilation is generally used to extend edges and fill some small holes. As Heng mentioned before \"Deep network is the weakest at the boundary image and strongest are the center.\". In this competition, it is very necessary to do some works on boundary detection. It actually improve my result. (2) I have not used SGD, so it is hard to tell which one is more suitable in this competition. As far as i know, Keven Wang and Panpan Zhou is using SGD, you can discuss with them. (3) batch_size=1.  Thanks Zheng</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 316751,
          "author_name": "yueqi",
          "author_url": "",
          "post_date": "2018-04-19T19:59:17.183000",
          "content": "<p>Thanks for the explanation! </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 316754,
          "author_name": "Mehul Sampat",
          "author_url": "",
          "post_date": "2018-04-19T20:14:13.453000",
          "content": "<p>Hi Yueqi, </p>\n\n<p>I have collected the parameters from various contestants here: \n<a href=\"https://www.kaggle.com/c/data-science-bowl-2018/discussion/54920\">https://www.kaggle.com/c/data-science-bowl-2018/discussion/54920</a>\n(this includes, Zheng, Waleed, Avi and me). </p>\n\n<p>I will be happy to add your parameters to the table here:\n<a href=\"https://github.com/mpsampat/DSB_2018_Parameter_Selection_For_Matterport_Mask_RCNN/blob/master/comparison_of_Matterport_Mask_RCNN_parameters.md\">https://github.com/mpsampat/DSB_2018_Parameter_Selection_For_Matterport_Mask_RCNN/blob/master/comparison_of_Matterport_Mask_RCNN_parameters.md</a></p>\n\n<p>Thanks\nMehul</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 316757,
          "author_name": "yueqi",
          "author_url": "",
          "post_date": "2018-04-19T20:29:59.380000",
          "content": "<p>Hi Mehul,</p>\n\n<p>Thanks! It's a great idea to distill what works best for MaskRCNN. I'll follow up on your new thread. </p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 317997,
          "author_name": "ryan",
          "author_url": "",
          "post_date": "2018-04-23T02:38:11.727000",
          "content": "<p>Hi Mehul,</p>\n\n<p>I've checked your summary for this model, it's great!</p>\n\n<p>I also used this model for this competition and got similar results. And I found the threshold in unmold_mask function also has some influence on the final results. I wonder if you guys tried that.</p>\n\n<p>Also I've used the tiramisu model as well, and it's interesting that tiramisu needs a higher threshold to perform better while mask rcnn needs lower.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 316320,
      "author_name": "steelrose",
      "author_url": "",
      "post_date": "2018-04-18T17:53:05.743000",
      "content": "<p>thanks for sharing, nice work and congrats</p>\n\n<p>btw. it just show how important it's do do CV resp. some early validation - also was using matterport but guess I overfit quite badly (though still don't understand how ... maybe I actually just \"overaugmented\", was doing a lot of color augmentation, blur, random noise, brigthness, rotations, all with 50% chance), next time I need to be more carefull of what I do :)</p>",
      "votes": 1,
      "replies": [
        {
          "id": 316469,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T06:26:26.540000",
          "content": "<p>Hi steelrose. When I use general normalization, I guess this method doesn't work well with other methods, so I just use flip. 1st place solution use many augmentation methods and it actually works very well. So always choose the best methods for your model. Good luck. Thanks Zheng</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 316315,
      "author_name": "William Green",
      "author_url": "",
      "post_date": "2018-04-18T17:39:51.600000",
      "content": "<p>Great job</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 316272,
      "author_name": "CPMP",
      "author_url": "",
      "post_date": "2018-04-18T15:38:17.430000",
      "content": "<p>Awesome!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 316252,
      "author_name": "Nicole Finnie",
      "author_url": "",
      "post_date": "2018-04-18T14:38:31.560000",
      "content": "<p>Cool! Your model is generalized very well since it outperformed at the 2nd stage. Quite impressive. Very curious to know how your model can bump up so much. We have a very similar approach with a U-net, but our positions at both stages were pretty similar (at around top 2% at both stages). </p>\n\n<ul>\n<li>A question - If you rotated your images by 5 degree, how did you fill the part outside of the image, just left it 0? </li>\n<li>Your model is very impressive, bumped up by LB=0.1 on the unseen data, it's worth a big praise. </li>\n</ul>\n\n<p>Cool @Emil will be happy to know you applied mosaic as well :) I just posted your post on his kernel. \n<a href=\"https://www.kaggle.com/bonlime/train-test-image-mosaic\">https://www.kaggle.com/bonlime/train-test-image-mosaic</a></p>",
      "votes": 1,
      "replies": [
        {
          "id": 316260,
          "author_name": "Mehul Sampat",
          "author_url": "",
          "post_date": "2018-04-18T14:59:38.830000",
          "content": "<p>HI Nicole! </p>\n\n<ol>\n<li><p>I think ZhengLi said none of the augmentations worked for him and he said he only used \"\"use flip up&amp;down&amp;left&amp;right\"; For me too H&amp;E data did not help and rotations by 0-15 did not help.</p></li>\n<li><p>(We were discussing it within the team and we thought it might be due to interpolations)</p></li>\n<li><p>Also @ZhengLi you forked Mask-RCNN from here <a href=\"https://github.com/YanWang2014/Mask_RCNN\">https://github.com/YanWang2014/Mask_RCNN</a> right ?</p></li>\n<li><p>@Waleed made a lot of improvements to Mask-RCNN after that fork. He is the original author of Matterport Mask_RCNN; @Waleed got 0.476 on stage1 and we got 0.472; but we both did not go above 0.5 in stage2. I could only train for 25 epochs;</p></li>\n<li><p>But there are atleast 2 other groups that went above 0.59 with Mask-RCNN. </p></li>\n<li><p>Zheng used dilation for post-processing whereas we did no post-processing. </p></li>\n<li><p>It is very interesting that differences in parameters made such a large difference in performance. It will be interesting to learn what is the root cause of difference in performance. Maybe how training/validation data is split ? </p></li>\n<li>I will share a google doc with a comparison of the parameters used by me and Waleed.\nMehul</li>\n</ol>",
          "votes": 4,
          "replies": []
        },
        {
          "id": 316472,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T06:33:33.810000",
          "content": "<p>@Nicole Finnie\nHi Nicole. Thank you very much. :) Just left it 0. Here is my code. </p>\n\n<pre><code>from imgaug import augmenters as iaa\n\nAUGMENTATION_AFFINE = {\n    \"order\": 0,\n    \"rotate\": (-5, 5)}\n\nif config.AUGMENTATION_AFFINE:\n  augmentations.append(iaa.Affine(**config.AUGMENTATION_AFFINE))\n\nseq=iaa.Sequential(augmentations)\nseq_det=seq.to_deterministic()\nimage, mask =seq_det.augment_image(image), seq_det.augment_image(mask)\n</code></pre>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 316474,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T06:42:52.493000",
          "content": "<p>@Mehul Sampat Hi Mehul. Thanks for your explanation. You are right. I only use flip.\nMask rcnn code is from here: <a href=\"https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline\">https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline</a>\nI am also very interested in other groups' solutions. I think training/validation data split is very important and it can tell us where is the best point( local optimum).  Thanks Zheng</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 317567,
          "author_name": "YL",
          "author_url": "",
          "post_date": "2018-04-21T21:45:05.967000",
          "content": "<p>Hi Zheng. Thanks for sharing your solution and I am really impressed that you managed to achieve such great result with the minimal tweak to matterport's solution.</p>\n\n<p>May I ask how did you split the images between training and validation sets? </p>\n\n<p>Many thanks in advance!</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 317732,
          "author_name": "",
          "author_url": "",
          "post_date": "2018-04-22T12:08:30.063000",
          "content": "",
          "votes": -6,
          "replies": []
        },
        {
          "id": 317746,
          "author_name": "YL",
          "author_url": "",
          "post_date": "2018-04-22T12:56:49.907000",
          "content": "<p>I agree. I gave them up vote because I thought the post gave some clarification. but I also think kaggle didn't handle this issue properly and fairly. I am with you on this one. </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 317763,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-22T13:52:50.627000",
          "content": "<p>Hi YL. Thank you very much.</p>",
          "votes": -1,
          "replies": []
        }
      ]
    },
    {
      "id": 316251,
      "author_name": "Mehul Sampat",
      "author_url": "",
      "post_date": "2018-04-18T14:37:04.567000",
      "content": "<p>@ZhengLi, Congratulations! and thanks for sharing your approach.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 316238,
      "author_name": "Zhiran Ye",
      "author_url": "",
      "post_date": "2018-04-18T14:12:13.027000",
      "content": "<p>Thanks for your sharing and congrats to you ！</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 317769,
      "author_name": "chen w",
      "author_url": "",
      "post_date": "2018-04-22T14:09:09.117000",
      "content": "<p>hi Zheng, Congratulations! You say \"Less FPs is the key to get high mAP as Heng said.\" So what the meaning of Fps here? thanks.</p>",
      "votes": 2,
      "replies": [
        {
          "id": 317848,
          "author_name": "Oscar Takeshita",
          "author_url": "",
          "post_date": "2018-04-22T17:17:40.510000",
          "content": "<p>FP=False Positive. Detected masks that are actually not there.</p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 316481,
      "author_name": "YUNFEI DUAN",
      "author_url": "",
      "post_date": "2018-04-19T07:13:25.027000",
      "content": "<p>Congrats!\nI have 3 questions to consult:\n1. I am also using matterport mask-rcnn with image-size 1024 * 1024.  I found it gets better score than small sizes. What size are you using?\n2. you are using a very low DETECTION_NMS_THRESHOLD, will this cause problems when the GT is few? \n3. you are using zero MEAN_PIXEL, what is the consideration for this?\nThank you.</p>",
      "votes": 2,
      "replies": [
        {
          "id": 316497,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T07:54:51.677000",
          "content": "<p>Hi YUNFEI. 1. I am using 512*512. \n2. Sorry there are some parameters I didn't mentioned above.  When I was training, I set DETECTION_NMS_THRESHOLD = 0.3, DETECTION_MIN_CONFIDENCE = 0.7. \nPOST_NMS_ROIS_TRAINING = 2000, POST_NMS_ROIS_INFERENCE = 2000\n3. general standardization can speed up the convergence of your algorithm.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 316505,
          "author_name": "YUNFEI DUAN",
          "author_url": "",
          "post_date": "2018-04-19T08:22:03.387000",
          "content": "<p>Thank you for your explain, I will have a try.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 316513,
          "author_name": "yueqi",
          "author_url": "",
          "post_date": "2018-04-19T08:39:01.370000",
          "content": "<p>I also found that 1024x1024 got me better score than smaller sizes. So I was surprised to see 512x512 without cropping to work so well. </p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 316271,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-04-18T15:35:39.830000",
      "content": "<p>Nice work!</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 316242,
      "author_name": "NullPoint",
      "author_url": "",
      "post_date": "2018-04-18T14:24:19.513000",
      "content": "<p>666</p>",
      "votes": -4,
      "replies": []
    },
    {
      "id": 316314,
      "author_name": "LivingProgram",
      "author_url": "",
      "post_date": "2018-04-18T17:32:58.763000",
      "content": "<p>Thanks for sharing, I was wondering if compared the model with pretrained coco weights and without? And whether or not it made a significant difference?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 316467,
          "author_name": "Zheng Li",
          "author_url": "",
          "post_date": "2018-04-19T06:16:54.393000",
          "content": "<p>Hi. I only compared the model with pretrained coco and imagenet and i found that coco is better than imagenet in this competition.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 316582,
          "author_name": "LivingProgram",
          "author_url": "",
          "post_date": "2018-04-19T11:29:36.140000",
          "content": "<p>Thanks</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 316305,
      "author_name": "Brian Luo",
      "author_url": "",
      "post_date": "2018-04-18T17:09:28.917000",
      "content": "<p>Great job! Thanks!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 316286,
      "author_name": "Panpan Zhou",
      "author_url": "",
      "post_date": "2018-04-18T16:16:54.793000",
      "content": "<p>Nice job! Thanks for sharing!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 318087,
      "author_name": "Nathan Lauga",
      "author_url": "",
      "post_date": "2018-04-23T07:08:33.203000",
      "content": "<p>Well done ! Thanks for sharing :) </p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "316229": "（currently 8th place while leaderboard is being updated）\n\nHi all. It is my first time join this competition. All my methods are learned from open discussion. As return, I decide to share my solution to the community. Thanks a lot to those who have made many contributions to the community. \n\nFirst of all, I thank Allen, John1231983, Keven Wang, Mehul Sampat, Heng CherKeng, CPMP, bsp2020, kamil, YaGana Sheriff-Hussaini, Yan Wang, Konstantin Maksimov, xiapidan, xuan, Waleed for your very impressive discussions. I learned a lot from those discussions. @Mehul Sampat hope we can team up together next time :) thanks again.\n\nMy score: Stage1 LB 0.489(87th), Stage2 LB 0.590(11th). I am using matterport mask-rcnn.\n\n**Augmentations**\n\nSince there are hundreds of training images, we must find some useful augmentations to prevent our models from overfitting and make them generalizable. Here are some methods I have tried but it didn't work for me:\n \n - add gaussian noise\n - color to gray\n - contrast and brightness\n - random crop 512x512 if image size is bigger than 512 otherwise resize the image to 512x512\n - mosacis\n - mosacis+random crop\n - mosacis+random crop+ h&amp;e\n - rotate 90 degrees \n - radnom rotate 90,180,270 degrees\n - rotate +-5 degrees on top of flip &amp; 90 degree rotation\n - elastic transform\n\nI only use flip up&amp;down&amp;left&amp;right\n\n**Additional data**\n\nNo. I have tried to add h&amp;e dataset to training data, but it didn't improve my performance. I am using https://github.com/lopuhin/kaggle-dsbowl-2018-dataset-fixes\n\n**Ensembling**\n\nNo. I spend almost one week trying this method but it didn't work so well. I devided the training data into two categories: color &amp; grey. I have seen someone get a high score (0.5+) in stage1 by using this method. I am very interested in this so I really hope that someone can share some solutions about this.\n\n**Parameters**\n\ntrain:\n\ninti_with= coco\n\nRESNET_ARCHITECTURE = \"resnet101\"\n\nMEAN_PIXEL = np.array([0., 0., 0.])\n\nRPN_NMS_THRESHOLD = 0.7\n\nDETECTION_MIN_CONFIDENCE = 0.7\n\nDETECTION_NMS_THRESHOLD = 0.3\n\nTRAIN_ROIS_PER_IMAGE = 600\n\nRPN_TRAIN_ANCHORS_PER_IMAGE = 320\n\nLEARNING_RATE = 1e-3\n\ninference:\n\nRPN_NMS_THRESHOLD = 0.6\n\nDETECTION_NMS_THRESHOLD = 0.1\n\n**Training**\n\n1e-3 all 20epochs. Choose the best point according to the display of tensorboard, then 1e-4 or 1e-5 train all 20epochs. (if val loss stops decreasing, stops training) \noptimizer=Adam.\n\n**Post processing** \nUse binary_dilation.\n\n**Other method**\ngeneral standardization.\nimg = img-mean(img)/std(img).\n\n**Some methods might be useful**\n\n1.Filter\n\n&gt; We use single mask rcnn, but with special post process to filter noises (i.e. small FPs) based on clustering and outlier detection of mask sizes, which boosted us a lot (kill lots of noises). Less FPs is the key to get high mAP as Heng said. I should thank him a lot\n\n2.fill_holes\n\nhttps://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.morphology.binary_fill_holes.html#scipy-ndimage-morphology-binary-fill-holes\n\n3.wateshed\n\n**Some interesting discussions&amp;methods links**\n\n 1. https://github.com/matterport/Mask_RCNN/issues/230\n 2. https://github.com/matterport/Mask_RCNN/issues/281\n 3. https://github.com/killthekitten/kaggle-ds-bowl-2018-baseline/issues/5\n 4. https://www.kaggle.com/bostjanm/overlapping-objects-separation-method/notebook\n 5. https://www.kaggle.com/c/data-science-bowl-2018/discussion/52989#30758\n\n**Last**\n\nI have tried a lot of experiments. Some of them i just don't remeber.....sorry :(  So here is my email mdlszhengli@@gmail.com. I am very happy to discuss via email or wechat(removed).",
    "318739": "@Zheng Li , whew, I'm glad you'll be reinstated, make sure to upload your model in your next 2-stage competition, since you were very close to the prize this time. You're the \"outlier\" of the samples I'd say  ;)  your model is very well generalized and totally beat our LB at the 2nd stage even our LB was higher at the 1st stage. Good job. ",
    "316775": "Nice job, Congratulations, Zheng!",
    "316510": "Thanks for sharing! The score is very impressive. \n\nSeveral questions I had:\n(1) What is the purpose for binary dilation as post-processing, compared to other methods such as opening? Does dilation make the masks larger? \n(1) Did learning rate decay help the convergence? I found decreasing LR to 1e-4 or below causes overfitting, but I was using SGD with momentum. Did you see an improvement using Adam vs. SGD? \n(2) Since you're using 512x512, do you use a batch size (IMAGES_PER_GPU) &gt; 1? \nThanks! ",
    "316320": "thanks for sharing, nice work and congrats\n\nbtw. it just show how important it's do do CV resp. some early validation - also was using matterport but guess I overfit quite badly (though still don't understand how ... maybe I actually just \"overaugmented\", was doing a lot of color augmentation, blur, random noise, brigthness, rotations, all with 50% chance), next time I need to be more carefull of what I do :)",
    "316315": "Great job",
    "316272": "Awesome!",
    "316252": "Cool! Your model is generalized very well since it outperformed at the 2nd stage. Quite impressive. Very curious to know how your model can bump up so much. We have a very similar approach with a U-net, but our positions at both stages were pretty similar (at around top 2% at both stages). \n\n - A question - If you rotated your images by 5 degree, how did you fill the part outside of the image, just left it 0? \n - Your model is very impressive, bumped up by LB=0.1 on the unseen data, it's worth a big praise. \n\nCool @Emil will be happy to know you applied mosaic as well :) I just posted your post on his kernel. \nhttps://www.kaggle.com/bonlime/train-test-image-mosaic\n",
    "316251": "@ZhengLi, Congratulations! and thanks for sharing your approach.",
    "316238": "Thanks for your sharing and congrats to you ！",
    "317769": "hi Zheng, Congratulations! You say \"Less FPs is the key to get high mAP as Heng said.\" So what the meaning of Fps here? thanks.",
    "316481": "Congrats!\nI have 3 questions to consult:\n1. I am also using matterport mask-rcnn with image-size 1024 * 1024.  I found it gets better score than small sizes. What size are you using?\n2. you are using a very low DETECTION_NMS_THRESHOLD, will this cause problems when the GT is few? \n3. you are using zero MEAN_PIXEL, what is the consideration for this?\nThank you.",
    "316271": " Nice work!",
    "316242": "666",
    "316314": "Thanks for sharing, I was wondering if compared the model with pretrained coco weights and without? And whether or not it made a significant difference?",
    "316305": "Great job! Thanks!",
    "316286": "Nice job! Thanks for sharing!",
    "318087": "Well done ! Thanks for sharing :) "
  },
  "complete": true,
  "source": "existing_discussion",
  "competition_id": 8089,
  "competition_slug": "data-science-bowl-2018",
  "team_id": 1437044,
  "solution_url": "/competitions/data-science-bowl-2018/writeups/zheng-li-my-solution-11th-place-lb-0-590"
}