{
  "id": 307626,
  "title": "4th Place Solution - CenterNet",
  "url": "/competitions/tensorflow-great-barrier-reef/writeups/outrunner-4th-place-solution-centernet",
  "author_name": "",
  "post_date": "2022-02-15T02:37:35.189414200Z",
  "votes": 108,
  "comment_count": 58,
  "views": 0,
  "content": "<p>Since overfitting strategy failed, let's just talk about what I've done one month ago. 😅</p>\n<p>I use CenterNet with DeepLabV3+ architecture and EfficientNetV2 backbone, start from this <a href=\"https://keras.io/examples/vision/deeplabv3_plus/\" target=\"_blank\">example</a>.</p>\n<ul>\n<li>change backbone to EfficientNetV2 B0~XL</li>\n<li>change output heatmap size to 1/8 input, and add regression head</li>\n<li>training on 1280x720, inference on 1792x1008(1.4x)</li>\n<li>blend two can get private LB score 0.712, and 0.722 if inference on 1.6x</li>\n</ul>\n<p>Actually, I am pleased to survive in huge shake up. 😃</p>\n<p>Thanks everyone and congratulation to all winners.</p>",
  "messages": [
    {
      "id": "1690578",
      "postDate": "02/15/2022 02:37:35",
      "content": "<p>Since overfitting strategy failed, let's just talk about what I've done one month ago. 😅</p>\n<p>I use CenterNet with DeepLabV3+ architecture and EfficientNetV2 backbone, start from this <a href=\"https://keras.io/examples/vision/deeplabv3_plus/\" target=\"_blank\">example</a>.</p>\n<ul>\n<li>change backbone to EfficientNetV2 B0~XL</li>\n<li>change output heatmap size to 1/8 input, and add regression head</li>\n<li>training on 1280x720, inference on 1792x1008(1.4x)</li>\n<li>blend two can get private LB score 0.712, and 0.722 if inference on 1.6x</li>\n</ul>\n<p>Actually, I am pleased to survive in huge shake up. 😃</p>\n<p>Thanks everyone and congratulation to all winners.</p>",
      "rawMarkdown": "Since overfitting strategy failed, let's just talk about what I've done one month ago. 😅\n\nI use CenterNet with DeepLabV3+ architecture and EfficientNetV2 backbone, start from this [example](https://keras.io/examples/vision/deeplabv3_plus/).\n- change backbone to EfficientNetV2 B0~XL\n- change output heatmap size to 1/8 input, and add regression head\n- training on 1280x720, inference on 1792x1008(1.4x)\n- blend two can get private LB score 0.712, and 0.722 if inference on 1.6x\n\nActually, I am pleased to survive in huge shake up. 😃\n\nThanks everyone and congratulation to all winners.",
      "votes": null
    },
    {
      "id": "1690593",
      "postDate": "02/15/2022 02:45:18",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> </p>",
      "rawMarkdown": "Congratulations @outrunner",
      "votes": null
    },
    {
      "id": "1690594",
      "postDate": "02/15/2022 02:45:27",
      "content": "<p>Simple description but definitely contains many experiences and thoughts inside! Thank you for sharing and amazing 1st place public LB position!</p>",
      "rawMarkdown": "Simple description but definitely contains many experiences and thoughts inside! Thank you for sharing and amazing 1st place public LB position!",
      "votes": null
    },
    {
      "id": "1690597",
      "postDate": "02/15/2022 02:49:06",
      "content": "<p>thank you 😄</p>",
      "rawMarkdown": "thank you 😄",
      "votes": null
    },
    {
      "id": "1690598",
      "postDate": "02/15/2022 02:50:49",
      "content": "<p>I don't like data inconsistency, but you know,  it is kaggle style.😅</p>",
      "rawMarkdown": "I don't like data inconsistency, but you know,  it is kaggle style.😅",
      "votes": null
    },
    {
      "id": "1690623",
      "postDate": "02/15/2022 03:14:59",
      "content": "<p>Congrat for your money medal! Can you share your training code?</p>",
      "rawMarkdown": "Congrat for your money medal! Can you share your training code?",
      "votes": null
    },
    {
      "id": "1690634",
      "postDate": "02/15/2022 03:29:41",
      "content": "<p>Thanks. Nothing special, just heavily augmentation, perspective transform, rotation, flip, mixup, random crop and batch size every step. Focal loss for heatmap, Huber loss for regression, and Adam optimizer.</p>",
      "rawMarkdown": "Thanks. Nothing special, just heavily augmentation, perspective transform, rotation, flip, mixup, random crop and batch size every step. Focal loss for heatmap, Huber loss for regression, and Adam optimizer.",
      "votes": null
    },
    {
      "id": "1690639",
      "postDate": "02/15/2022 03:31:52",
      "content": "<p>a bit confused, <code>CenterNet</code> is for <strong>Object Detection</strong> and <code>DeepLabV3+</code> is for <strong>Segmentation</strong>. So, how did you use both of them?</p>",
      "rawMarkdown": "a bit confused, `CenterNet` is for **Object Detection** and `DeepLabV3+` is for **Segmentation**. So, how did you use both of them?",
      "votes": null
    },
    {
      "id": "1690642",
      "postDate": "02/15/2022 03:36:45",
      "content": "<p>You survived this shake up/down! I overfitted to public LB, but I got a bronze medal. Congrats on 4th place! Thanks for sharing your solution.</p>",
      "rawMarkdown": "You survived this shake up/down! I overfitted to public LB, but I got a bronze medal. Congrats on 4th place! Thanks for sharing your solution.",
      "votes": null
    },
    {
      "id": "1690643",
      "postDate": "02/15/2022 03:36:45",
      "content": "<p>I don't know whether I should call it centernet, but objects as points model just like segmentation + regression head.</p>",
      "rawMarkdown": "I don't know whether I should call it centernet, but objects as points model just like segmentation + regression head.",
      "votes": null
    },
    {
      "id": "1690644",
      "postDate": "02/15/2022 03:38:12",
      "content": "<p>WoW. How did you get the mask?</p>",
      "rawMarkdown": "WoW. How did you get the mask?",
      "votes": null
    },
    {
      "id": "1690647",
      "postDate": "02/15/2022 03:39:46",
      "content": "<p>Thanks, it's all luck. 😅</p>",
      "rawMarkdown": "Thanks, it's all luck. 😅",
      "votes": null
    },
    {
      "id": "1690650",
      "postDate": "02/15/2022 03:41:11",
      "content": "<p>reference CenterNet paper to gen the mask</p>",
      "rawMarkdown": "reference CenterNet paper to gen the mask",
      "votes": null
    },
    {
      "id": "1690657",
      "postDate": "02/15/2022 03:43:01",
      "content": "<p>I think there is also CenterNetV2. Did you try that also?</p>",
      "rawMarkdown": "I think there is also CenterNetV2. Did you try that also?",
      "votes": null
    },
    {
      "id": "1690663",
      "postDate": "02/15/2022 03:46:16",
      "content": "<p>No, I did not try it.</p>",
      "rawMarkdown": "No, I did not try it.",
      "votes": null
    },
    {
      "id": "1690664",
      "postDate": "02/15/2022 03:46:17",
      "content": "<p>Congratulation on Solo Win<br>\nCan you talk about your validation strategy?</p>",
      "rawMarkdown": "Congratulation on Solo Win\nCan you talk about your validation strategy?",
      "votes": null
    },
    {
      "id": "1690666",
      "postDate": "02/15/2022 03:47:36",
      "content": "<p>Thank you😄</p>",
      "rawMarkdown": "Thank you😄",
      "votes": null
    },
    {
      "id": "1690673",
      "postDate": "02/15/2022 03:54:16",
      "content": "<p>as usual I use 1 fold.<br>\nmy val set have 4 sequences: [26651, 59337, 53708, 45015]<br>\nuse all cots frames and half none-cots frames for saving time.<br>\nselect checkpoints by local F2 score and public LB score.</p>",
      "rawMarkdown": "as usual I use 1 fold.\nmy val set have 4 sequences: [26651, 59337, 53708, 45015]\nuse all cots frames and half none-cots frames for saving time.\nselect checkpoints by local F2 score and public LB score.",
      "votes": null
    },
    {
      "id": "1690690",
      "postDate": "02/15/2022 04:06:07",
      "content": "<p>Thanks <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> How did you come about selecting those specific sequences</p>",
      "rawMarkdown": "Thanks @outrunner How did you come about selecting those specific sequences",
      "votes": null
    },
    {
      "id": "1690697",
      "postDate": "02/15/2022 04:11:52",
      "content": "<p>do you use Dynamichead or any other recently published detection head? </p>",
      "rawMarkdown": "do you use Dynamichead or any other recently published detection head?",
      "votes": null
    },
    {
      "id": "1690701",
      "postDate": "02/15/2022 04:13:52",
      "content": "<p>random selection according to mean and total cots counts, then decide by my mood. 😄</p>",
      "rawMarkdown": "random selection according to mean and total cots counts, then decide by my mood. 😄",
      "votes": null
    },
    {
      "id": "1690711",
      "postDate": "02/15/2022 04:20:47",
      "content": "<p>Congratulations ! :)  great work</p>",
      "rawMarkdown": "Congratulations ! :)  great work",
      "votes": null
    },
    {
      "id": "1690721",
      "postDate": "02/15/2022 04:29:08",
      "content": "<p>Congratulations. Winning gold medal requires trying new things and make it work. Thanks for sharing your solution!</p>",
      "rawMarkdown": "Congratulations. Winning gold medal requires trying new things and make it work. Thanks for sharing your solution!",
      "votes": null
    },
    {
      "id": "1690725",
      "postDate": "02/15/2022 04:30:24",
      "content": "<p>No, just features -&gt; conv -&gt; conv -&gt; heatmap</p>",
      "rawMarkdown": "No, just features -> conv -> conv -> heatmap",
      "votes": null
    },
    {
      "id": "1690726",
      "postDate": "02/15/2022 04:31:01",
      "content": "<p>Thank you 😃</p>",
      "rawMarkdown": "Thank you 😃",
      "votes": null
    },
    {
      "id": "1690730",
      "postDate": "02/15/2022 04:34:23",
      "content": "<p>Thanks, I like objects as points method because it is easy to apply post processing.</p>",
      "rawMarkdown": "Thanks, I like objects as points method because it is easy to apply post processing.",
      "votes": null
    },
    {
      "id": "1690749",
      "postDate": "02/15/2022 04:50:05",
      "content": "<p>Congratulations. thanks for your sharing solution.<br>\nJust curious, is your solution implemented with TF Object Detection API? or in Keras + Tensorflow?</p>",
      "rawMarkdown": "Congratulations. thanks for your sharing solution.\nJust curious, is your solution implemented with TF Object Detection API? or in Keras + Tensorflow?",
      "votes": null
    },
    {
      "id": "1690752",
      "postDate": "02/15/2022 04:51:13",
      "content": "<p>tf.keras, thanks.</p>",
      "rawMarkdown": "tf.keras, thanks.",
      "votes": null
    },
    {
      "id": "1690863",
      "postDate": "02/15/2022 06:14:58",
      "content": "<p>double winner!!!</p>",
      "rawMarkdown": "double winner!!!",
      "votes": null
    },
    {
      "id": "1690895",
      "postDate": "02/15/2022 06:34:27",
      "content": "<p>although I have model that can get 0.7+ within 45min, but I did not choose it. 😅</p>",
      "rawMarkdown": "although I have model that can get 0.7+ within 45min, but I did not choose it. 😅",
      "votes": null
    },
    {
      "id": "1690901",
      "postDate": "02/15/2022 06:40:15",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> Your scores (pub/priv) are outstanding. Everyday we checked LB looking for your improvements and … asking what you did to cross 0.8 … You are TOP Kaggler! Reading your solution description and I am impressed with the path you chose. 👍👍👍💪💪👋👋👋</p>",
      "rawMarkdown": "Congratulations @outrunner Your scores (pub/priv) are outstanding. Everyday we checked LB looking for your improvements and ... asking what you did to cross 0.8 ... You are TOP Kaggler! Reading your solution description and I am impressed with the path you chose. 👍👍👍💪💪👋👋👋",
      "votes": null
    },
    {
      "id": "1690912",
      "postDate": "02/15/2022 06:46:11",
      "content": "<p><a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a>  I gotta learn this mood based decision from you 😁 <br>\nCongratulations !</p>",
      "rawMarkdown": "outrunner  I gotta learn this mood based decision from you 😁 \nCongratulations !",
      "votes": null
    },
    {
      "id": "1690931",
      "postDate": "02/15/2022 06:54:14",
      "content": "<p>haha, thanks. 😃</p>",
      "rawMarkdown": "haha, thanks. 😃",
      "votes": null
    },
    {
      "id": "1690936",
      "postDate": "02/15/2022 06:58:23",
      "content": "<p>I have learned a lot from your sharing, thank you.</p>",
      "rawMarkdown": "I have learned a lot from your sharing, thank you.",
      "votes": null
    },
    {
      "id": "1690941",
      "postDate": "02/15/2022 06:59:20",
      "content": "<p>Good job bro!!!</p>",
      "rawMarkdown": "Good job bro!!!",
      "votes": null
    },
    {
      "id": "1690962",
      "postDate": "02/15/2022 07:09:08",
      "content": "<p>Congrats on yet anogther solo gold!</p>",
      "rawMarkdown": "Congrats on yet anogther solo gold!",
      "votes": null
    },
    {
      "id": "1690976",
      "postDate": "02/15/2022 07:14:01",
      "content": "<p><a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> Congratulations! Turns out we were doing very similar thing, mine was centernet with unet, 1/4 input, decoupled head and many more tricks. I also tried EffNetV2 as backbone but NF-backbone was better on cv. Did you use <em>separate</em> offset head on 1/8?  Did you train on full frames? How long did it take? I did it on crops, even 256x256 with specific sampling was enough.  </p>\n<p>Note to organizers: this setup can be easily ported to TRT to deploy on edge devices. I did it many times with lighter backbones on pretty much every jetson available (excluding Nano, including AGX). At the same time converting usual anchor-based net will be a nightmare.</p>",
      "rawMarkdown": "outrunner Congratulations! Turns out we were doing very similar thing, mine was centernet with unet, 1/4 input, decoupled head and many more tricks. I also tried EffNetV2 as backbone but NF-backbone was better on cv. Did you use *separate* offset head on 1/8?  Did you train on full frames? How long did it take? I did it on crops, even 256x256 with specific sampling was enough.  \n\nNote to organizers: this setup can be easily ported to TRT to deploy on edge devices. I did it many times with lighter backbones on pretty much every jetson available (excluding Nano, including AGX). At the same time converting usual anchor-based net will be a nightmare.",
      "votes": null
    },
    {
      "id": "1690989",
      "postDate": "02/15/2022 07:19:31",
      "content": "<p>Thank you 😃</p>",
      "rawMarkdown": "Thank you 😃",
      "votes": null
    },
    {
      "id": "1690990",
      "postDate": "02/15/2022 07:21:50",
      "content": "<p><a href=\"https://www.kaggle.com/awsaf49\" target=\"_blank\">@awsaf49</a> I build second stage on top on centernet arch, not fully probabilistic as in CNV2 paper thou. It helps a little.</p>",
      "rawMarkdown": "awsaf49 I build second stage on top on centernet arch, not fully probabilistic as in CNV2 paper thou. It helps a little.",
      "votes": null
    },
    {
      "id": "1691023",
      "postDate": "02/15/2022 07:34:08",
      "content": "<p>I train on some crop sizes to full frame randomly. For example, [high, width, batch_size] in [[448, 640, 20], [640, 896, 10], [720, 1280, 6]].<br>\nTraining takes about 1 day on single 2080ti.</p>",
      "rawMarkdown": "I train on some crop sizes to full frame randomly. For example, [high, width, batch_size] in [[448, 640, 20], [640, 896, 10], [720, 1280, 6]].\nTraining takes about 1 day on single 2080ti.",
      "votes": null
    },
    {
      "id": "1691035",
      "postDate": "02/15/2022 07:41:19",
      "content": "<p>Wow thats a long time. Same again, but I never went above 640, 896. What about offset head, i updated question a little </p>",
      "rawMarkdown": "Wow thats a long time. Same again, but I never went above 640, 896. What about offset head, i updated question a little",
      "votes": null
    },
    {
      "id": "1691046",
      "postDate": "02/15/2022 07:48:53",
      "content": "<p><code>x = Conv2D(256, 3)(features)</code><br>\n<code>x = Conv2D(256, 3)(x)</code><br>\n<code>reg = Conv2D(4, 1)(x)</code><br>\noffset + wh together 😄</p>",
      "rawMarkdown": "`    x = Conv2D(256, 3)(features)`\n`    x = Conv2D(256, 3)(x)`\n`    reg = Conv2D(4, 1)(x)`\noffset + wh together 😄",
      "votes": null
    },
    {
      "id": "1691052",
      "postDate": "02/15/2022 07:53:08",
      "content": "<p>Same, sorry for never-ending questions, As out pipelines are similar, im trying to understand was it bad coding or something else on my part. Did you do just regression on wh, like dirac-delta distribution, or something cooler like gauss, etc?</p>",
      "rawMarkdown": "Same, sorry for never-ending questions, As out pipelines are similar, im trying to understand was it bad coding or something else on my part. Did you do just regression on wh, like dirac-delta distribution, or something cooler like gauss, etc?",
      "votes": null
    },
    {
      "id": "1691057",
      "postDate": "02/15/2022 07:57:29",
      "content": "<p>oh, I see your update. offset head also is 1/8.<br>\nI post the model <a href=\"https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307626#1691065\" target=\"_blank\">here</a></p>",
      "rawMarkdown": "oh, I see your update. offset head also is 1/8.\nI post the model [here](https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307626#1691065)",
      "votes": null
    },
    {
      "id": "1691058",
      "postDate": "02/15/2022 07:58:03",
      "content": "<p>But, why 2 stage segment task can make such a improvement to detection?<br>\nI haven't seen this as a  trick or method….</p>",
      "rawMarkdown": "But, why 2 stage segment task can make such a improvement to detection?\nI haven't seen this as a  trick or method....",
      "votes": null
    },
    {
      "id": "1691065",
      "postDate": "02/15/2022 08:11:17",
      "content": "<p>base = keras_efficientnet_v2.EfficientNetV2B0(input_shape=image_size, drop_connect_rate=0, pretrained=\"imagenet21k\")</p>\n<p>x = base.get_layer(\"stack_5_block0_sortcut_swish\").output<br>\nx = DilatedSpatialPyramidPooling(x)</p>\n<p>input_a = UpSampling2D(size=(2, 2), interpolation=\"bilinear\")(x)<br>\ninput_b = base.get_layer('stack_3_block0_sortcut_swish').output<br>\ninput_b = convolution_block(input_b, num_filters=48, kernel_size=1)</p>\n<p>features = Concatenate(axis=-1)([input_a, input_b])</p>\n<p>x = convolution_block(features)<br>\nx = convolution_block(x)<br>\nheatmap = Conv2D(num_classes, 1, padding=\"same\", activation='sigmoid', name='hm', dtype=tf.float32)(x)</p>\n<p>x = Conv2D(256, 3, padding=\"same\", activation='swish')(features)<br>\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(x)<br>\nreg = Conv2D(4, 1, padding=\"same\", activation='linear', name='re', dtype=tf.float32)(x)</p>\n<p>model = keras.Model(inputs=base.input, outputs={'hm':heatmap, 're':reg})</p>",
      "rawMarkdown": "base = keras_efficientnet_v2.EfficientNetV2B0(input_shape=image_size, drop_connect_rate=0, pretrained=\"imagenet21k\")\n\nx = base.get_layer(\"stack_5_block0_sortcut_swish\").output\nx = DilatedSpatialPyramidPooling(x)\n\ninput_a = UpSampling2D(size=(2, 2), interpolation=\"bilinear\")(x)\ninput_b = base.get_layer('stack_3_block0_sortcut_swish').output\ninput_b = convolution_block(input_b, num_filters=48, kernel_size=1)\n\nfeatures = Concatenate(axis=-1)([input_a, input_b])\n\nx = convolution_block(features)\nx = convolution_block(x)\nheatmap = Conv2D(num_classes, 1, padding=\"same\", activation='sigmoid', name='hm', dtype=tf.float32)(x)\n\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(features)\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(x)\nreg = Conv2D(4, 1, padding=\"same\", activation='linear', name='re', dtype=tf.float32)(x)\n\nmodel = keras.Model(inputs=base.input, outputs={'hm':heatmap, 're':reg})",
      "votes": null
    },
    {
      "id": "1691127",
      "postDate": "02/15/2022 08:41:13",
      "content": "<p>Thanks <br>\nbut what I most wonder is <br>\nFPN is also has a upsampling and feture concat,<br>\nI want to know why this methold have such a advantange than FPN ?</p>\n<p>To my understand heatmap mask is generate by centernet</p>\n<p>you 2 stage model use centernet output and gt bbox as training target for make better use of object segmentation detail information</p>\n<p>😄 in next competition I will use this in my pipline too. </p>",
      "rawMarkdown": "Thanks \nbut what I most wonder is \nFPN is also has a upsampling and feture concat,\nI want to know why this methold have such a advantange than FPN ?\n\nTo my understand heatmap mask is generate by centernet\n\nyou 2 stage model use centernet output and gt bbox as training target for make better use of object segmentation detail information\n\n😄 in next competition I will use this in my pipline too.",
      "votes": null
    },
    {
      "id": "1691130",
      "postDate": "02/15/2022 08:45:30",
      "content": "<p>I did not try other method, so I can not confirm whether it has advantage. </p>",
      "rawMarkdown": "I did not try other method, so I can not confirm whether it has advantage.",
      "votes": null
    },
    {
      "id": "1691280",
      "postDate": "02/15/2022 10:29:12",
      "content": "<p>Thanks for the solution and congrats!</p>",
      "rawMarkdown": "Thanks for the solution and congrats!",
      "votes": null
    },
    {
      "id": "1691287",
      "postDate": "02/15/2022 10:33:25",
      "content": "<p>Good job bro keep it up !!</p>",
      "rawMarkdown": "Good job bro keep it up !!",
      "votes": null
    },
    {
      "id": "1691316",
      "postDate": "02/15/2022 10:48:48",
      "content": "<p>Congratulations! May I ask why you went with CenterNet instead of YOLO or fasterRCNN? Did you try multiple models out and found CenterNet gives the best result?</p>",
      "rawMarkdown": "Congratulations! May I ask why you went with CenterNet instead of YOLO or fasterRCNN? Did you try multiple models out and found CenterNet gives the best result?",
      "votes": null
    },
    {
      "id": "1691530",
      "postDate": "02/15/2022 13:10:20",
      "content": "<p>Can you please share cv score on that fold of 4 sequences</p>",
      "rawMarkdown": "Can you please share cv score on that fold of 4 sequences",
      "votes": null
    },
    {
      "id": "1691935",
      "postDate": "02/15/2022 17:36:04",
      "content": "<p>congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> 🎉🌟</p>",
      "rawMarkdown": "congratulations @outrunner 🎉🌟",
      "votes": null
    },
    {
      "id": "1691998",
      "postDate": "02/15/2022 18:24:53",
      "content": "<blockquote>\n  <p>my val set have 4 sequences: [26651, 59337, 53708, 45015]</p>\n</blockquote>\n<p>interesting! <br>\nour valid set consists of 5 seq., where 3/5 are similar to yours.<br>\nThis gave correlation with PVT ~90%  <br>\nRef: <a href=\"https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307718\" target=\"_blank\">11th solution</a></p>",
      "rawMarkdown": ">my val set have 4 sequences: [26651, 59337, 53708, 45015]\n\ninteresting! \nour valid set consists of 5 seq., where 3/5 are similar to yours.\nThis gave correlation with PVT ~90%  \nRef: [11th solution](https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307718)",
      "votes": null
    },
    {
      "id": "1692337",
      "postDate": "02/16/2022 01:28:53",
      "content": "<p><a href=\"https://www.kaggle.com/bakeryproducts\" target=\"_blank\">@bakeryproducts</a> cv score ranged around 0.78~0.8 @ 1.4x to 2.0x inference size. I the last month, I build a wide range solution to face the possible cots size variance in test set, but it is not the case finally.</p>\n<p><a href=\"https://www.kaggle.com/imeintanis\" target=\"_blank\">@imeintanis</a> interesting and congratulations 😄</p>",
      "rawMarkdown": "bakeryproducts cv score ranged around 0.78~0.8 @ 1.4x to 2.0x inference size. I the last month, I build a wide range solution to face the possible cots size variance in test set, but it is not the case finally.\n\n@imeintanis interesting and congratulations 😄",
      "votes": null
    },
    {
      "id": "1692339",
      "postDate": "02/16/2022 01:30:29",
      "content": "<p>Thank you 😃</p>",
      "rawMarkdown": "Thank you 😃",
      "votes": null
    },
    {
      "id": "1692343",
      "postDate": "02/16/2022 01:34:34",
      "content": "<p>No, I think anchor free base will perform well since the target is simple. (shape, texture, size, etc.)</p>",
      "rawMarkdown": "No, I think anchor free base will perform well since the target is simple. (shape, texture, size, etc.)",
      "votes": null
    },
    {
      "id": "1692356",
      "postDate": "02/16/2022 01:57:47",
      "content": "<p>Great Works Keep it up!</p>",
      "rawMarkdown": "Great Works Keep it up!",
      "votes": null
    },
    {
      "id": "1928051",
      "postDate": "09/06/2022 07:50:29",
      "content": "<p>Is the code publicly available?</p>",
      "rawMarkdown": "Is the code publicly available?",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1690593,
      "author_name": "robsonsan",
      "author_url": "",
      "post_date": "02/15/2022 02:45:18",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> </p>",
      "votes": null,
      "replies": [
        {
          "id": 1690597,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 02:49:06",
          "content": "<p>thank you 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690594,
      "author_name": "vincentwang25",
      "author_url": "",
      "post_date": "02/15/2022 02:45:27",
      "content": "<p>Simple description but definitely contains many experiences and thoughts inside! Thank you for sharing and amazing 1st place public LB position!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690598,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 02:50:49",
          "content": "<p>I don't like data inconsistency, but you know,  it is kaggle style.😅</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690623,
      "author_name": "magiccard",
      "author_url": "",
      "post_date": "02/15/2022 03:14:59",
      "content": "<p>Congrat for your money medal! Can you share your training code?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690634,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:29:41",
          "content": "<p>Thanks. Nothing special, just heavily augmentation, perspective transform, rotation, flip, mixup, random crop and batch size every step. Focal loss for heatmap, Huber loss for regression, and Adam optimizer.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690666,
          "author_name": "magiccard",
          "author_url": "",
          "post_date": "02/15/2022 03:47:36",
          "content": "<p>Thank you😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690639,
      "author_name": "awsaf49",
      "author_url": "",
      "post_date": "02/15/2022 03:31:52",
      "content": "<p>a bit confused, <code>CenterNet</code> is for <strong>Object Detection</strong> and <code>DeepLabV3+</code> is for <strong>Segmentation</strong>. So, how did you use both of them?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690643,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:36:45",
          "content": "<p>I don't know whether I should call it centernet, but objects as points model just like segmentation + regression head.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690644,
          "author_name": "awsaf49",
          "author_url": "",
          "post_date": "02/15/2022 03:38:12",
          "content": "<p>WoW. How did you get the mask?</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690650,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:41:11",
          "content": "<p>reference CenterNet paper to gen the mask</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690657,
          "author_name": "awsaf49",
          "author_url": "",
          "post_date": "02/15/2022 03:43:01",
          "content": "<p>I think there is also CenterNetV2. Did you try that also?</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690663,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:46:16",
          "content": "<p>No, I did not try it.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690990,
          "author_name": "bakeryproducts",
          "author_url": "",
          "post_date": "02/15/2022 07:21:50",
          "content": "<p><a href=\"https://www.kaggle.com/awsaf49\" target=\"_blank\">@awsaf49</a> I build second stage on top on centernet arch, not fully probabilistic as in CNV2 paper thou. It helps a little.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690642,
      "author_name": "ttkagglett",
      "author_url": "",
      "post_date": "02/15/2022 03:36:45",
      "content": "<p>You survived this shake up/down! I overfitted to public LB, but I got a bronze medal. Congrats on 4th place! Thanks for sharing your solution.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690647,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:39:46",
          "content": "<p>Thanks, it's all luck. 😅</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690664,
      "author_name": "morizin",
      "author_url": "",
      "post_date": "02/15/2022 03:46:17",
      "content": "<p>Congratulation on Solo Win<br>\nCan you talk about your validation strategy?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690673,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 03:54:16",
          "content": "<p>as usual I use 1 fold.<br>\nmy val set have 4 sequences: [26651, 59337, 53708, 45015]<br>\nuse all cots frames and half none-cots frames for saving time.<br>\nselect checkpoints by local F2 score and public LB score.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690690,
          "author_name": "trushk",
          "author_url": "",
          "post_date": "02/15/2022 04:06:07",
          "content": "<p>Thanks <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> How did you come about selecting those specific sequences</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690701,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 04:13:52",
          "content": "<p>random selection according to mean and total cots counts, then decide by my mood. 😄</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690912,
          "author_name": "nyleve",
          "author_url": "",
          "post_date": "02/15/2022 06:46:11",
          "content": "<p><a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a>  I gotta learn this mood based decision from you 😁 <br>\nCongratulations !</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690931,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 06:54:14",
          "content": "<p>haha, thanks. 😃</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691530,
          "author_name": "bakeryproducts",
          "author_url": "",
          "post_date": "02/15/2022 13:10:20",
          "content": "<p>Can you please share cv score on that fold of 4 sequences</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691998,
          "author_name": "imeintanis",
          "author_url": "",
          "post_date": "02/15/2022 18:24:53",
          "content": "<blockquote>\n  <p>my val set have 4 sequences: [26651, 59337, 53708, 45015]</p>\n</blockquote>\n<p>interesting! <br>\nour valid set consists of 5 seq., where 3/5 are similar to yours.<br>\nThis gave correlation with PVT ~90%  <br>\nRef: <a href=\"https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307718\" target=\"_blank\">11th solution</a></p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1692337,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/16/2022 01:28:53",
          "content": "<p><a href=\"https://www.kaggle.com/bakeryproducts\" target=\"_blank\">@bakeryproducts</a> cv score ranged around 0.78~0.8 @ 1.4x to 2.0x inference size. I the last month, I build a wide range solution to face the possible cots size variance in test set, but it is not the case finally.</p>\n<p><a href=\"https://www.kaggle.com/imeintanis\" target=\"_blank\">@imeintanis</a> interesting and congratulations 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690697,
      "author_name": "drzhuzhe",
      "author_url": "",
      "post_date": "02/15/2022 04:11:52",
      "content": "<p>do you use Dynamichead or any other recently published detection head? </p>",
      "votes": null,
      "replies": [
        {
          "id": 1690725,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 04:30:24",
          "content": "<p>No, just features -&gt; conv -&gt; conv -&gt; heatmap</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691058,
          "author_name": "drzhuzhe",
          "author_url": "",
          "post_date": "02/15/2022 07:58:03",
          "content": "<p>But, why 2 stage segment task can make such a improvement to detection?<br>\nI haven't seen this as a  trick or method….</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691065,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 08:11:17",
          "content": "<p>base = keras_efficientnet_v2.EfficientNetV2B0(input_shape=image_size, drop_connect_rate=0, pretrained=\"imagenet21k\")</p>\n<p>x = base.get_layer(\"stack_5_block0_sortcut_swish\").output<br>\nx = DilatedSpatialPyramidPooling(x)</p>\n<p>input_a = UpSampling2D(size=(2, 2), interpolation=\"bilinear\")(x)<br>\ninput_b = base.get_layer('stack_3_block0_sortcut_swish').output<br>\ninput_b = convolution_block(input_b, num_filters=48, kernel_size=1)</p>\n<p>features = Concatenate(axis=-1)([input_a, input_b])</p>\n<p>x = convolution_block(features)<br>\nx = convolution_block(x)<br>\nheatmap = Conv2D(num_classes, 1, padding=\"same\", activation='sigmoid', name='hm', dtype=tf.float32)(x)</p>\n<p>x = Conv2D(256, 3, padding=\"same\", activation='swish')(features)<br>\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(x)<br>\nreg = Conv2D(4, 1, padding=\"same\", activation='linear', name='re', dtype=tf.float32)(x)</p>\n<p>model = keras.Model(inputs=base.input, outputs={'hm':heatmap, 're':reg})</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691127,
          "author_name": "drzhuzhe",
          "author_url": "",
          "post_date": "02/15/2022 08:41:13",
          "content": "<p>Thanks <br>\nbut what I most wonder is <br>\nFPN is also has a upsampling and feture concat,<br>\nI want to know why this methold have such a advantange than FPN ?</p>\n<p>To my understand heatmap mask is generate by centernet</p>\n<p>you 2 stage model use centernet output and gt bbox as training target for make better use of object segmentation detail information</p>\n<p>😄 in next competition I will use this in my pipline too. </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691130,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 08:45:30",
          "content": "<p>I did not try other method, so I can not confirm whether it has advantage. </p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690711,
      "author_name": "lukaszborecki",
      "author_url": "",
      "post_date": "02/15/2022 04:20:47",
      "content": "<p>Congratulations ! :)  great work</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690726,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 04:31:01",
          "content": "<p>Thank you 😃</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690721,
      "author_name": "sgalib",
      "author_url": "",
      "post_date": "02/15/2022 04:29:08",
      "content": "<p>Congratulations. Winning gold medal requires trying new things and make it work. Thanks for sharing your solution!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690730,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 04:34:23",
          "content": "<p>Thanks, I like objects as points method because it is easy to apply post processing.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690749,
      "author_name": "ivanlaulintiong",
      "author_url": "",
      "post_date": "02/15/2022 04:50:05",
      "content": "<p>Congratulations. thanks for your sharing solution.<br>\nJust curious, is your solution implemented with TF Object Detection API? or in Keras + Tensorflow?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690752,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 04:51:13",
          "content": "<p>tf.keras, thanks.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690863,
          "author_name": "dragonzhang",
          "author_url": "",
          "post_date": "02/15/2022 06:14:58",
          "content": "<p>double winner!!!</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1690895,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 06:34:27",
          "content": "<p>although I have model that can get 0.7+ within 45min, but I did not choose it. 😅</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690901,
      "author_name": "remekkinas",
      "author_url": "",
      "post_date": "02/15/2022 06:40:15",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> Your scores (pub/priv) are outstanding. Everyday we checked LB looking for your improvements and … asking what you did to cross 0.8 … You are TOP Kaggler! Reading your solution description and I am impressed with the path you chose. 👍👍👍💪💪👋👋👋</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690936,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 06:58:23",
          "content": "<p>I have learned a lot from your sharing, thank you.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690941,
      "author_name": "lixxxxx",
      "author_url": "",
      "post_date": "02/15/2022 06:59:20",
      "content": "<p>Good job bro!!!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1690962,
      "author_name": "cpmpml",
      "author_url": "",
      "post_date": "02/15/2022 07:09:08",
      "content": "<p>Congrats on yet anogther solo gold!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1690989,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 07:19:31",
          "content": "<p>Thank you 😃</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1690976,
      "author_name": "bakeryproducts",
      "author_url": "",
      "post_date": "02/15/2022 07:14:01",
      "content": "<p><a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> Congratulations! Turns out we were doing very similar thing, mine was centernet with unet, 1/4 input, decoupled head and many more tricks. I also tried EffNetV2 as backbone but NF-backbone was better on cv. Did you use <em>separate</em> offset head on 1/8?  Did you train on full frames? How long did it take? I did it on crops, even 256x256 with specific sampling was enough.  </p>\n<p>Note to organizers: this setup can be easily ported to TRT to deploy on edge devices. I did it many times with lighter backbones on pretty much every jetson available (excluding Nano, including AGX). At the same time converting usual anchor-based net will be a nightmare.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1691023,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 07:34:08",
          "content": "<p>I train on some crop sizes to full frame randomly. For example, [high, width, batch_size] in [[448, 640, 20], [640, 896, 10], [720, 1280, 6]].<br>\nTraining takes about 1 day on single 2080ti.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691035,
          "author_name": "bakeryproducts",
          "author_url": "",
          "post_date": "02/15/2022 07:41:19",
          "content": "<p>Wow thats a long time. Same again, but I never went above 640, 896. What about offset head, i updated question a little </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691046,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 07:48:53",
          "content": "<p><code>x = Conv2D(256, 3)(features)</code><br>\n<code>x = Conv2D(256, 3)(x)</code><br>\n<code>reg = Conv2D(4, 1)(x)</code><br>\noffset + wh together 😄</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691052,
          "author_name": "bakeryproducts",
          "author_url": "",
          "post_date": "02/15/2022 07:53:08",
          "content": "<p>Same, sorry for never-ending questions, As out pipelines are similar, im trying to understand was it bad coding or something else on my part. Did you do just regression on wh, like dirac-delta distribution, or something cooler like gauss, etc?</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1691057,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/15/2022 07:57:29",
          "content": "<p>oh, I see your update. offset head also is 1/8.<br>\nI post the model <a href=\"https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307626#1691065\" target=\"_blank\">here</a></p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1691280,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "02/15/2022 10:29:12",
      "content": "<p>Thanks for the solution and congrats!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1692339,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/16/2022 01:30:29",
          "content": "<p>Thank you 😃</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1691287,
      "author_name": "mednoun",
      "author_url": "",
      "post_date": "02/15/2022 10:33:25",
      "content": "<p>Good job bro keep it up !!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1691316,
      "author_name": "kuanweichen",
      "author_url": "",
      "post_date": "02/15/2022 10:48:48",
      "content": "<p>Congratulations! May I ask why you went with CenterNet instead of YOLO or fasterRCNN? Did you try multiple models out and found CenterNet gives the best result?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1692343,
          "author_name": "outrunner",
          "author_url": "",
          "post_date": "02/16/2022 01:34:34",
          "content": "<p>No, I think anchor free base will perform well since the target is simple. (shape, texture, size, etc.)</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1691935,
      "author_name": "arunasivapragasam",
      "author_url": "",
      "post_date": "02/15/2022 17:36:04",
      "content": "<p>congratulations <a href=\"https://www.kaggle.com/outrunner\" target=\"_blank\">@outrunner</a> 🎉🌟</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1692356,
      "author_name": "elldeejay",
      "author_url": "",
      "post_date": "02/16/2022 01:57:47",
      "content": "<p>Great Works Keep it up!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1928051,
      "author_name": "onkur7",
      "author_url": "",
      "post_date": "09/06/2022 07:50:29",
      "content": "<p>Is the code publicly available?</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1690578": "Since overfitting strategy failed, let's just talk about what I've done one month ago. 😅\n\nI use CenterNet with DeepLabV3+ architecture and EfficientNetV2 backbone, start from this [example](https://keras.io/examples/vision/deeplabv3_plus/).\n- change backbone to EfficientNetV2 B0~XL\n- change output heatmap size to 1/8 input, and add regression head\n- training on 1280x720, inference on 1792x1008(1.4x)\n- blend two can get private LB score 0.712, and 0.722 if inference on 1.6x\n\nActually, I am pleased to survive in huge shake up. 😃\n\nThanks everyone and congratulation to all winners.",
    "1690593": "Congratulations @outrunner",
    "1690594": "Simple description but definitely contains many experiences and thoughts inside! Thank you for sharing and amazing 1st place public LB position!",
    "1690597": "thank you 😄",
    "1690598": "I don't like data inconsistency, but you know,  it is kaggle style.😅",
    "1690623": "Congrat for your money medal! Can you share your training code?",
    "1690634": "Thanks. Nothing special, just heavily augmentation, perspective transform, rotation, flip, mixup, random crop and batch size every step. Focal loss for heatmap, Huber loss for regression, and Adam optimizer.",
    "1690639": "a bit confused, `CenterNet` is for **Object Detection** and `DeepLabV3+` is for **Segmentation**. So, how did you use both of them?",
    "1690642": "You survived this shake up/down! I overfitted to public LB, but I got a bronze medal. Congrats on 4th place! Thanks for sharing your solution.",
    "1690643": "I don't know whether I should call it centernet, but objects as points model just like segmentation + regression head.",
    "1690644": "WoW. How did you get the mask?",
    "1690647": "Thanks, it's all luck. 😅",
    "1690650": "reference CenterNet paper to gen the mask",
    "1690657": "I think there is also CenterNetV2. Did you try that also?",
    "1690663": "No, I did not try it.",
    "1690664": "Congratulation on Solo Win\nCan you talk about your validation strategy?",
    "1690666": "Thank you😄",
    "1690673": "as usual I use 1 fold.\nmy val set have 4 sequences: [26651, 59337, 53708, 45015]\nuse all cots frames and half none-cots frames for saving time.\nselect checkpoints by local F2 score and public LB score.",
    "1690690": "Thanks @outrunner How did you come about selecting those specific sequences",
    "1690697": "do you use Dynamichead or any other recently published detection head?",
    "1690701": "random selection according to mean and total cots counts, then decide by my mood. 😄",
    "1690711": "Congratulations ! :)  great work",
    "1690721": "Congratulations. Winning gold medal requires trying new things and make it work. Thanks for sharing your solution!",
    "1690725": "No, just features -> conv -> conv -> heatmap",
    "1690726": "Thank you 😃",
    "1690730": "Thanks, I like objects as points method because it is easy to apply post processing.",
    "1690749": "Congratulations. thanks for your sharing solution.\nJust curious, is your solution implemented with TF Object Detection API? or in Keras + Tensorflow?",
    "1690752": "tf.keras, thanks.",
    "1690863": "double winner!!!",
    "1690895": "although I have model that can get 0.7+ within 45min, but I did not choose it. 😅",
    "1690901": "Congratulations @outrunner Your scores (pub/priv) are outstanding. Everyday we checked LB looking for your improvements and ... asking what you did to cross 0.8 ... You are TOP Kaggler! Reading your solution description and I am impressed with the path you chose. 👍👍👍💪💪👋👋👋",
    "1690912": "outrunner  I gotta learn this mood based decision from you 😁 \nCongratulations !",
    "1690931": "haha, thanks. 😃",
    "1690936": "I have learned a lot from your sharing, thank you.",
    "1690941": "Good job bro!!!",
    "1690962": "Congrats on yet anogther solo gold!",
    "1690976": "outrunner Congratulations! Turns out we were doing very similar thing, mine was centernet with unet, 1/4 input, decoupled head and many more tricks. I also tried EffNetV2 as backbone but NF-backbone was better on cv. Did you use *separate* offset head on 1/8?  Did you train on full frames? How long did it take? I did it on crops, even 256x256 with specific sampling was enough.  \n\nNote to organizers: this setup can be easily ported to TRT to deploy on edge devices. I did it many times with lighter backbones on pretty much every jetson available (excluding Nano, including AGX). At the same time converting usual anchor-based net will be a nightmare.",
    "1690989": "Thank you 😃",
    "1690990": "awsaf49 I build second stage on top on centernet arch, not fully probabilistic as in CNV2 paper thou. It helps a little.",
    "1691023": "I train on some crop sizes to full frame randomly. For example, [high, width, batch_size] in [[448, 640, 20], [640, 896, 10], [720, 1280, 6]].\nTraining takes about 1 day on single 2080ti.",
    "1691035": "Wow thats a long time. Same again, but I never went above 640, 896. What about offset head, i updated question a little",
    "1691046": "`    x = Conv2D(256, 3)(features)`\n`    x = Conv2D(256, 3)(x)`\n`    reg = Conv2D(4, 1)(x)`\noffset + wh together 😄",
    "1691052": "Same, sorry for never-ending questions, As out pipelines are similar, im trying to understand was it bad coding or something else on my part. Did you do just regression on wh, like dirac-delta distribution, or something cooler like gauss, etc?",
    "1691057": "oh, I see your update. offset head also is 1/8.\nI post the model [here](https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307626#1691065)",
    "1691058": "But, why 2 stage segment task can make such a improvement to detection?\nI haven't seen this as a  trick or method....",
    "1691065": "base = keras_efficientnet_v2.EfficientNetV2B0(input_shape=image_size, drop_connect_rate=0, pretrained=\"imagenet21k\")\n\nx = base.get_layer(\"stack_5_block0_sortcut_swish\").output\nx = DilatedSpatialPyramidPooling(x)\n\ninput_a = UpSampling2D(size=(2, 2), interpolation=\"bilinear\")(x)\ninput_b = base.get_layer('stack_3_block0_sortcut_swish').output\ninput_b = convolution_block(input_b, num_filters=48, kernel_size=1)\n\nfeatures = Concatenate(axis=-1)([input_a, input_b])\n\nx = convolution_block(features)\nx = convolution_block(x)\nheatmap = Conv2D(num_classes, 1, padding=\"same\", activation='sigmoid', name='hm', dtype=tf.float32)(x)\n\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(features)\nx = Conv2D(256, 3, padding=\"same\", activation='swish')(x)\nreg = Conv2D(4, 1, padding=\"same\", activation='linear', name='re', dtype=tf.float32)(x)\n\nmodel = keras.Model(inputs=base.input, outputs={'hm':heatmap, 're':reg})",
    "1691127": "Thanks \nbut what I most wonder is \nFPN is also has a upsampling and feture concat,\nI want to know why this methold have such a advantange than FPN ?\n\nTo my understand heatmap mask is generate by centernet\n\nyou 2 stage model use centernet output and gt bbox as training target for make better use of object segmentation detail information\n\n😄 in next competition I will use this in my pipline too.",
    "1691130": "I did not try other method, so I can not confirm whether it has advantage.",
    "1691280": "Thanks for the solution and congrats!",
    "1691287": "Good job bro keep it up !!",
    "1691316": "Congratulations! May I ask why you went with CenterNet instead of YOLO or fasterRCNN? Did you try multiple models out and found CenterNet gives the best result?",
    "1691530": "Can you please share cv score on that fold of 4 sequences",
    "1691935": "congratulations @outrunner 🎉🌟",
    "1691998": ">my val set have 4 sequences: [26651, 59337, 53708, 45015]\n\ninteresting! \nour valid set consists of 5 seq., where 3/5 are similar to yours.\nThis gave correlation with PVT ~90%  \nRef: [11th solution](https://www.kaggle.com/c/tensorflow-great-barrier-reef/discussion/307718)",
    "1692337": "bakeryproducts cv score ranged around 0.78~0.8 @ 1.4x to 2.0x inference size. I the last month, I build a wide range solution to face the possible cots size variance in test set, but it is not the case finally.\n\n@imeintanis interesting and congratulations 😄",
    "1692339": "Thank you 😃",
    "1692343": "No, I think anchor free base will perform well since the target is simple. (shape, texture, size, etc.)",
    "1692356": "Great Works Keep it up!",
    "1928051": "Is the code publicly available?"
  },
  "source": "meta"
}