{
  "id": 475657,
  "title": "2nd place solution",
  "url": "/competitions/blood-vessel-segmentation/writeups/ryo-2nd-place-solution",
  "author_name": "",
  "post_date": "2024-02-13T03:54:58.030Z",
  "votes": 33,
  "comment_count": 12,
  "views": 0,
  "content": "<p>What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052…</p>\n<h1>Overview</h1>\n<p>My solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.</p>\n<ul>\n<li>data augmentation using random rotation (and position), same as 1st place solution.</li>\n<li>U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .</li>\n<li>Binary-focal loss. Since there are a few positive data.</li>\n<li>Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.</li>\n<li><strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.</li>\n</ul>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation</a><br>\n<a href=\"https://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443\" target=\"_blank\">https://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443</a></p>\n<h1>Data</h1>\n<p>To make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created <em>all</em> and <em>dense</em> data because I was planning to do curriculum learning in the order of <em>all</em> to <em>dense</em>. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py</a></p>\n<h1>Train</h1>\n<p>I generate data from random positions and rotations in each <em>n</em> epochs. To reduce data generation time, I used multiple processes.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py</a></p>\n<p>The neural network is U-Net3D.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py</a></p>\n<p>I used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py</a></p>\n<h1>Submit</h1>\n<p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py</a></p>\n<p>Searching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>…</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py</a></p>\n<p>Other scores…</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&amp;alt=media\"></p>\n<h1>What's happend?</h1>\n<p>What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052…</p>\n<h1>Overview</h1>\n<p>My solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.</p>\n<ul>\n<li>data augmentation using random rotation (and position), same as 1st place solution.</li>\n<li>U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .</li>\n<li>Binary-focal loss. Since there are a few positive data.</li>\n<li>Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.</li>\n<li><strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.</li>\n</ul>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation</a></p>\n<h1>Data</h1>\n<p>To make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created <em>all</em> and <em>dense</em> data because I was planning to do curriculum learning in the order of <em>all</em> to <em>dense</em>. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py</a></p>\n<h1>Train</h1>\n<p>I generate data from random positions and rotations in each <em>n</em> epochs. To reduce data generation time, I used multiple processes.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py</a></p>\n<p>The neural network is U-Net3D.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py</a></p>\n<p>I used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py</a></p>\n<h1>Submit</h1>\n<p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py</a></p>\n<p>Searching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>…</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py</a></p>\n<p>Other scores…</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&amp;alt=media\"></p>\n<h1>What's happend?</h1>\n<p></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Fc3db76cc66c0f14a28e86393c735b925%2Fpublic-private.png?generation=1707470652290411&amp;alt=media\"></p>\n<p></p>\n<p>What's happened?</p>",
  "messages": [
    {
      "id": "2644091",
      "postDate": "02/09/2024 09:29:50",
      "content": "<p>What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052…</p>\n<h1>Overview</h1>\n<p>My solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.</p>\n<ul>\n<li>data augmentation using random rotation (and position), same as 1st place solution.</li>\n<li>U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .</li>\n<li>Binary-focal loss. Since there are a few positive data.</li>\n<li>Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.</li>\n<li><strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.</li>\n</ul>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation</a><br>\n<a href=\"https://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443\" target=\"_blank\">https://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443</a></p>\n<h1>Data</h1>\n<p>To make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created <em>all</em> and <em>dense</em> data because I was planning to do curriculum learning in the order of <em>all</em> to <em>dense</em>. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py</a></p>\n<h1>Train</h1>\n<p>I generate data from random positions and rotations in each <em>n</em> epochs. To reduce data generation time, I used multiple processes.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py</a></p>\n<p>The neural network is U-Net3D.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py</a></p>\n<p>I used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py</a></p>\n<h1>Submit</h1>\n<p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py</a></p>\n<p>Searching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>…</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py</a></p>\n<p>Other scores…</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&amp;alt=media\"></p>\n<h1>What's happend?</h1>\n<p>What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052…</p>\n<h1>Overview</h1>\n<p>My solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.</p>\n<ul>\n<li>data augmentation using random rotation (and position), same as 1st place solution.</li>\n<li>U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .</li>\n<li>Binary-focal loss. Since there are a few positive data.</li>\n<li>Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.</li>\n<li><strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.</li>\n</ul>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation</a></p>\n<h1>Data</h1>\n<p>To make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created <em>all</em> and <em>dense</em> data because I was planning to do curriculum learning in the order of <em>all</em> to <em>dense</em>. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py</a></p>\n<h1>Train</h1>\n<p>I generate data from random positions and rotations in each <em>n</em> epochs. To reduce data generation time, I used multiple processes.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py</a></p>\n<p>The neural network is U-Net3D.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py</a></p>\n<p>I used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py</a></p>\n<h1>Submit</h1>\n<p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py</a></p>\n<p>Searching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>…</p>\n<p><a href=\"https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\" target=\"_blank\">https://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py</a></p>\n<p>Other scores…</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&amp;alt=media\"></p>\n<h1>What's happend?</h1>\n<p></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Fc3db76cc66c0f14a28e86393c735b925%2Fpublic-private.png?generation=1707470652290411&amp;alt=media\"></p>\n<p></p>\n<p>What's happened?</p>",
      "rawMarkdown": "What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052...\n\n# Overview\n\nMy solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.\n\n* data augmentation using random rotation (and position), same as 1st place solution.\n* U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .\n* Binary-focal loss. Since there are a few positive data.\n* Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.\n* <strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.\n\nhttps://github.com/tail-island/blood-vessel-segmentation\nhttps://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443\n\n# Data\n\nTo make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created *all* and *dense* data because I was planning to do curriculum learning in the order of *all* to *dense*. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\n\n# Train\n\nI generate data from random positions and rotations in each *n* epochs. To reduce data generation time, I used multiple processes.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\n\nThe neural network is U-Net3D.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\n\nI used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\n\n# Submit\n\nPrediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\n\nSearching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>...\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\n\nOther scores...\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&alt=media)\n\n# What's happend?\n\nWhat's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052...\n\n# Overview\n\nMy solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.\n\n* data augmentation using random rotation (and position), same as 1st place solution.\n* U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .\n* Binary-focal loss. Since there are a few positive data.\n* Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.\n* <strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.\n\nhttps://github.com/tail-island/blood-vessel-segmentation\n\n# Data\n\nTo make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created *all* and *dense* data because I was planning to do curriculum learning in the order of *all* to *dense*. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\n\n# Train\n\nI generate data from random positions and rotations in each *n* epochs. To reduce data generation time, I used multiple processes.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\n\nThe neural network is U-Net3D.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\n\nI used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\n\n# Submit\n\nPrediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\n\nSearching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>...\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\n\nOther scores...\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&alt=media)\n\n# What's happend?\n\n~~Maybe public data is for the first *x*% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.~~\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Fc3db76cc66c0f14a28e86393c735b925%2Fpublic-private.png?generation=1707470652290411&alt=media)\n\n~~I gave up to improve my program quite early because my public score was too low. And some other Kagglers continued to improve their programs for the end part of the blood vessels in public data. I suspect that their improvements were not very effective in the private data that contains the root of the blood vessels. In other words, my 2nd place would be caused by LUCK...~~\n\nWhat's happened?",
      "votes": null
    },
    {
      "id": "2644355",
      "postDate": "02/09/2024 12:14:42",
      "content": "<p>Congratulations! <br>\nIt shows that surface dice score is a poor choice for the final metric. </p>",
      "rawMarkdown": "Congratulations! \nIt shows that surface dice score is a poor choice for the final metric.",
      "votes": null
    },
    {
      "id": "2644356",
      "postDate": "02/09/2024 12:14:49",
      "content": "<p>\"Maybe public data is for the first x% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.\"</p>\n<p>NO there are 2 different kidney for private and public, you can check the updated data description page</p>\n<hr>\n<p>good work! sometimes,  the simplest solution works for the most uncertain cases!</p>",
      "rawMarkdown": "\"Maybe public data is for the first x% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.\"\n\nNO there are 2 different kidney for private and public, you can check the updated data description page\n\n---\n\ngood work! sometimes,  the simplest solution works for the most uncertain cases!",
      "votes": null
    },
    {
      "id": "2644375",
      "postDate": "02/09/2024 12:32:31",
      "content": "<p>Thanks! Please give me time for checking.</p>",
      "rawMarkdown": "Thanks! Please give me time for checking.",
      "votes": null
    },
    {
      "id": "2644379",
      "postDate": "02/09/2024 12:35:37",
      "content": "<p>Top1 solution also rotates in 3D space while training. So maybe training with 3d rotation augment is the key of this challenge. Hence, even your public score is low, your solution is insightful. </p>\n<p>Also, removing small unconnected chunks is what I planned to do. But I joined this competition late and don't have time to implement it(Another reason is that I didn't expect it cause such a huge improvement).</p>\n<p>In words, I think although your solution only have 2 two key points, both points are very important and valuable.<br>\nCongratulations for solo top 2. <a href=\"https://www.kaggle.com/ojimaryoji\" target=\"_blank\">@ojimaryoji</a> .</p>",
      "rawMarkdown": "Top1 solution also rotates in 3D space while training. So maybe training with 3d rotation augment is the key of this challenge. Hence, even your public score is low, your solution is insightful. \n\nAlso, removing small unconnected chunks is what I planned to do. But I joined this competition late and don't have time to implement it(Another reason is that I didn't expect it cause such a huge improvement).\n\nIn words, I think although your solution only have 2 two key points, both points are very important and valuable.\nCongratulations for solo top 2. @ojimaryoji .",
      "votes": null
    },
    {
      "id": "2644385",
      "postDate": "02/09/2024 12:43:11",
      "content": "<p>Thank you very much. I had updated my post.</p>\n<blockquote>\n  <p>Public Test:<br>\n  Continuous 3D part of a whole human kidney…<br>\n  Private Test:<br>\n  Continuous 3D part of a whole human kidney…</p>\n</blockquote>\n<p>What's happened?</p>\n<p></p>",
      "rawMarkdown": "Thank you very much. I had updated my post.\n\n>Public Test:\n>Continuous 3D part of a whole human kidney...\n>Private Test:\n>Continuous 3D part of a whole human kidney...\n\nWhat's happened?\n\n~~\"part of\"?~~",
      "votes": null
    },
    {
      "id": "2644556",
      "postDate": "02/09/2024 15:14:05",
      "content": "<p>I checked my submissions.</p>\n<p>Version 12: clip + search large size chunk (&gt;20% of candidates) -&gt; private score: 0.756793, public score: 0.</p>\n<ul>\n<li>My program was able to find a large chunk of blood vessels in the private data, but could not find a large chunk in the public data.</li>\n<li>If the large chunk is not found, my program uses prediction. -&gt; My program could not find the blood vessels from the public data.</li>\n</ul>\n<p>Version 32: no clip + delete size &gt;= 100 chunks -&gt; private score: 0.759959, public score: 0.043141.</p>\n<p>Version 33: no clip + delete size ≥ 1000 chunks → private score: 0.742442, public score: 0.041478.</p>\n<ul>\n<li>Version 33 has a lower score, so the 100-1000 size chunks are blood vessels. -&gt; Without clipping, the large chunk are split into small unconnected chunks.</li>\n<li>However, the score does not change much. -&gt; My program found very few blood vessels in the private data.</li>\n</ul>\n<p>What happened? I think any of the following is happened.</p>\n<ol>\n<li>My program luckily overfit the public data.</li>\n<li>My program overfit the training data + the private data and the training data are very similar + the public data are too different.<br>\nAnd fitting to the public data will reduce accuracy on the private data?</li>\n<li>Or, surface-dice-metrics is the source of this confusion…</li>\n</ol>\n<p>Please post what do you think, great Kagglers.</p>",
      "rawMarkdown": "I checked my submissions.\n\nVersion 12: clip + search large size chunk (>20% of candidates) -> private score: 0.756793, public score: 0.\n\n* My program was able to find a large chunk of blood vessels in the private data, but could not find a large chunk in the public data.\n* If the large chunk is not found, my program uses prediction. -> My program could not find the blood vessels from the public data.\n\nVersion 32: no clip + delete size >= 100 chunks -> private score: 0.759959, public score: 0.043141.\n\nVersion 33: no clip + delete size ≥ 1000 chunks → private score: 0.742442, public score: 0.041478.\n\n* Version 33 has a lower score, so the 100-1000 size chunks are blood vessels. -> Without clipping, the large chunk are split into small unconnected chunks.\n* However, the score does not change much. -> My program found very few blood vessels in the private data.\n\nWhat happened? I think any of the following is happened.\n\n1. My program luckily overfit the public data.\n2. My program overfit the training data + the private data and the training data are very similar + the public data are too different.\n   And fitting to the public data will reduce accuracy on the private data?\n3. Or, surface-dice-metrics is the source of this confusion...\n\nPlease post what do you think, great Kagglers.",
      "votes": null
    },
    {
      "id": "2644907",
      "postDate": "02/09/2024 19:02:44",
      "content": "<p>Truly incredible, I am astounded how this works great strategy with the post-processing, I wish I had thought of that one!</p>",
      "rawMarkdown": "Truly incredible, I am astounded how this works great strategy with the post-processing, I wish I had thought of that one!",
      "votes": null
    },
    {
      "id": "2644989",
      "postDate": "02/09/2024 20:12:37",
      "content": "<p>And you, my friend, you are a true genius.</p>",
      "rawMarkdown": "And you, my friend, you are a true genius.",
      "votes": null
    },
    {
      "id": "2645075",
      "postDate": "02/09/2024 23:24:31",
      "content": "<p>Congratulations</p>",
      "rawMarkdown": "Congratulations",
      "votes": null
    },
    {
      "id": "2645537",
      "postDate": "02/10/2024 10:10:00",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/ojimaryoji\" target=\"_blank\">@ojimaryoji</a> !!  It is good to see you made a 2nd place with 3D.  There was discussion <a href=\"https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/461213\" target=\"_blank\">here</a> around results of 3D during the competition and seemed it would not be promising but you found a way to do it.  And probably quite useful for the hosts - indicated as one of the key features of their imaging technique.  </p>\n<blockquote>\n  <p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and get_blood_vessels() removes small unconnected chunks</p>\n</blockquote>\n<p>This may have been key to eliminating false positives - but the differences in resolution for public and private perhaps affected how each scored?  As <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> <a href=\"https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/457702\" target=\"_blank\">posted</a></p>\n<blockquote>\n  <p>your solution need to:<br>\n  1) either remove false positive<br>\n  2) limit the number of 3d connected component objects </p>\n</blockquote>\n<p>Certainly using connected-components-3d  cc3d.dust post processing (also from hengck23) gave improvements to private LB. (not that I selected of course!)</p>\n<p>It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.</p>\n<p>How did you select your 2  final submissions or were they autoselected?  Pretty insane all the 0s !!  You must be happy with the end result.  </p>",
      "rawMarkdown": "Congratulations @ojimaryoji !!  It is good to see you made a 2nd place with 3D.  There was discussion [here](https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/461213) around results of 3D during the competition and seemed it would not be promising but you found a way to do it.  And probably quite useful for the hosts - indicated as one of the key features of their imaging technique.  \n\n>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and get_blood_vessels() removes small unconnected chunks\n\nThis may have been key to eliminating false positives - but the differences in resolution for public and private perhaps affected how each scored?  As @hengck23 [posted](https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/457702)\n\n>your solution need to:\n1) either remove false positive\n2) limit the number of 3d connected component objects \n\nCertainly using connected-components-3d  cc3d.dust post processing (also from hengck23) gave improvements to private LB. (not that I selected of course!)\n\nIt might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.\n\nHow did you select your 2  final submissions or were they autoselected?  Pretty insane all the 0s !!  You must be happy with the end result.",
      "votes": null
    },
    {
      "id": "2645659",
      "postDate": "02/10/2024 11:51:32",
      "content": "<p><code>It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.</code></p>\n<p>Yes, I also think that it would be useful not only for us, the participants, but also for the host to read the consequent comments.</p>\n<p>Now we can only wonder and speculate why some solutions (nearly \"traditionally\" for some participants as me unselected) worked so well on private dataset though bringing very bad results on public dataset.</p>\n<p>Please, <a href=\"https://www.kaggle.com/jonathanmcwilliams\" target=\"_blank\">@jonathanmcwilliams</a> , <a href=\"https://www.kaggle.com/clairewalsh\" target=\"_blank\">@clairewalsh</a> , would the release be possible?                            </p>",
      "rawMarkdown": "`It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.`\n\nYes, I also think that it would be useful not only for us, the participants, but also for the host to read the consequent comments.\n\nNow we can only wonder and speculate why some solutions (nearly \"traditionally\" for some participants as me unselected) worked so well on private dataset though bringing very bad results on public dataset.\n\nPlease, @jonathanmcwilliams , @clairewalsh , would the release be possible?",
      "votes": null
    },
    {
      "id": "2647944",
      "postDate": "02/11/2024 22:59:03",
      "content": "<p>Thank you very much. I will study \"connected-components-3d cc3d.dust\" as you suggested. It's beautiful.</p>\n<p>Final submissions were auto-selected. It's too difficult to choice from 0, 0, 0.043, 0.002…</p>",
      "rawMarkdown": "Thank you very much. I will study \"connected-components-3d cc3d.dust\" as you suggested. It's beautiful.\n\nFinal submissions were auto-selected. It's too difficult to choice from 0, 0, 0.043, 0.002...",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2644355,
      "author_name": "jankowalski2000",
      "author_url": "",
      "post_date": "02/09/2024 12:14:42",
      "content": "<p>Congratulations! <br>\nIt shows that surface dice score is a poor choice for the final metric. </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2644356,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "02/09/2024 12:14:49",
      "content": "<p>\"Maybe public data is for the first x% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.\"</p>\n<p>NO there are 2 different kidney for private and public, you can check the updated data description page</p>\n<hr>\n<p>good work! sometimes,  the simplest solution works for the most uncertain cases!</p>",
      "votes": null,
      "replies": [
        {
          "id": 2644375,
          "author_name": "ojimaryoji",
          "author_url": "",
          "post_date": "02/09/2024 12:32:31",
          "content": "<p>Thanks! Please give me time for checking.</p>",
          "votes": null,
          "replies": [
            {
              "id": 2644385,
              "author_name": "ojimaryoji",
              "author_url": "",
              "post_date": "02/09/2024 12:43:11",
              "content": "<p>Thank you very much. I had updated my post.</p>\n<blockquote>\n  <p>Public Test:<br>\n  Continuous 3D part of a whole human kidney…<br>\n  Private Test:<br>\n  Continuous 3D part of a whole human kidney…</p>\n</blockquote>\n<p>What's happened?</p>\n<p></p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 2644379,
      "author_name": "forcewithme",
      "author_url": "",
      "post_date": "02/09/2024 12:35:37",
      "content": "<p>Top1 solution also rotates in 3D space while training. So maybe training with 3d rotation augment is the key of this challenge. Hence, even your public score is low, your solution is insightful. </p>\n<p>Also, removing small unconnected chunks is what I planned to do. But I joined this competition late and don't have time to implement it(Another reason is that I didn't expect it cause such a huge improvement).</p>\n<p>In words, I think although your solution only have 2 two key points, both points are very important and valuable.<br>\nCongratulations for solo top 2. <a href=\"https://www.kaggle.com/ojimaryoji\" target=\"_blank\">@ojimaryoji</a> .</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2644556,
      "author_name": "ojimaryoji",
      "author_url": "",
      "post_date": "02/09/2024 15:14:05",
      "content": "<p>I checked my submissions.</p>\n<p>Version 12: clip + search large size chunk (&gt;20% of candidates) -&gt; private score: 0.756793, public score: 0.</p>\n<ul>\n<li>My program was able to find a large chunk of blood vessels in the private data, but could not find a large chunk in the public data.</li>\n<li>If the large chunk is not found, my program uses prediction. -&gt; My program could not find the blood vessels from the public data.</li>\n</ul>\n<p>Version 32: no clip + delete size &gt;= 100 chunks -&gt; private score: 0.759959, public score: 0.043141.</p>\n<p>Version 33: no clip + delete size ≥ 1000 chunks → private score: 0.742442, public score: 0.041478.</p>\n<ul>\n<li>Version 33 has a lower score, so the 100-1000 size chunks are blood vessels. -&gt; Without clipping, the large chunk are split into small unconnected chunks.</li>\n<li>However, the score does not change much. -&gt; My program found very few blood vessels in the private data.</li>\n</ul>\n<p>What happened? I think any of the following is happened.</p>\n<ol>\n<li>My program luckily overfit the public data.</li>\n<li>My program overfit the training data + the private data and the training data are very similar + the public data are too different.<br>\nAnd fitting to the public data will reduce accuracy on the private data?</li>\n<li>Or, surface-dice-metrics is the source of this confusion…</li>\n</ol>\n<p>Please post what do you think, great Kagglers.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2644907,
      "author_name": "cody11null",
      "author_url": "",
      "post_date": "02/09/2024 19:02:44",
      "content": "<p>Truly incredible, I am astounded how this works great strategy with the post-processing, I wish I had thought of that one!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2644989,
      "author_name": "pkuszboi",
      "author_url": "",
      "post_date": "02/09/2024 20:12:37",
      "content": "<p>And you, my friend, you are a true genius.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2645075,
      "author_name": "humaperveen",
      "author_url": "",
      "post_date": "02/09/2024 23:24:31",
      "content": "<p>Congratulations</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2645537,
      "author_name": "something4kag",
      "author_url": "",
      "post_date": "02/10/2024 10:10:00",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/ojimaryoji\" target=\"_blank\">@ojimaryoji</a> !!  It is good to see you made a 2nd place with 3D.  There was discussion <a href=\"https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/461213\" target=\"_blank\">here</a> around results of 3D during the competition and seemed it would not be promising but you found a way to do it.  And probably quite useful for the hosts - indicated as one of the key features of their imaging technique.  </p>\n<blockquote>\n  <p>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and get_blood_vessels() removes small unconnected chunks</p>\n</blockquote>\n<p>This may have been key to eliminating false positives - but the differences in resolution for public and private perhaps affected how each scored?  As <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> <a href=\"https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/457702\" target=\"_blank\">posted</a></p>\n<blockquote>\n  <p>your solution need to:<br>\n  1) either remove false positive<br>\n  2) limit the number of 3d connected component objects </p>\n</blockquote>\n<p>Certainly using connected-components-3d  cc3d.dust post processing (also from hengck23) gave improvements to private LB. (not that I selected of course!)</p>\n<p>It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.</p>\n<p>How did you select your 2  final submissions or were they autoselected?  Pretty insane all the 0s !!  You must be happy with the end result.  </p>",
      "votes": null,
      "replies": [
        {
          "id": 2645659,
          "author_name": "blankaf",
          "author_url": "",
          "post_date": "02/10/2024 11:51:32",
          "content": "<p><code>It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.</code></p>\n<p>Yes, I also think that it would be useful not only for us, the participants, but also for the host to read the consequent comments.</p>\n<p>Now we can only wonder and speculate why some solutions (nearly \"traditionally\" for some participants as me unselected) worked so well on private dataset though bringing very bad results on public dataset.</p>\n<p>Please, <a href=\"https://www.kaggle.com/jonathanmcwilliams\" target=\"_blank\">@jonathanmcwilliams</a> , <a href=\"https://www.kaggle.com/clairewalsh\" target=\"_blank\">@clairewalsh</a> , would the release be possible?                            </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 2647944,
          "author_name": "ojimaryoji",
          "author_url": "",
          "post_date": "02/11/2024 22:59:03",
          "content": "<p>Thank you very much. I will study \"connected-components-3d cc3d.dust\" as you suggested. It's beautiful.</p>\n<p>Final submissions were auto-selected. It's too difficult to choice from 0, 0, 0.043, 0.002…</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2644091": "What's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052...\n\n# Overview\n\nMy solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.\n\n* data augmentation using random rotation (and position), same as 1st place solution.\n* U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .\n* Binary-focal loss. Since there are a few positive data.\n* Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.\n* <strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.\n\nhttps://github.com/tail-island/blood-vessel-segmentation\nhttps://www.kaggle.com/code/ojimaryoji/sennet-hoa-2nd-place-solution?scriptVersionId=159388443\n\n# Data\n\nTo make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created *all* and *dense* data because I was planning to do curriculum learning in the order of *all* to *dense*. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\n\n# Train\n\nI generate data from random positions and rotations in each *n* epochs. To reduce data generation time, I used multiple processes.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\n\nThe neural network is U-Net3D.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\n\nI used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\n\n# Submit\n\nPrediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\n\nSearching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>...\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\n\nOther scores...\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&alt=media)\n\n# What's happend?\n\nWhat's happened? My name is written at 2nd place? I remember my public score was 0.43 and my place was 1052...\n\n# Overview\n\nMy solution consists of U-Net3D (128x128x32), threshold adjustment, and <strong>post-processing</strong> to remove unconnected vessels as they are false positives.\n\n* data augmentation using random rotation (and position), same as 1st place solution.\n* U-Net3D. I assumed that 3D would be more accurate because it provides more information. I think this assumption might be wrong, since the 1st place solution uses 2.5D, .\n* Binary-focal loss. Since there are a few positive data.\n* Adjusting threshold. Since the volume ratio of blood vessels are not so different betwwen persons, the threshold is set according to the ratio.\n* <strong>Post-processing</strong>. Since blood vessels are supposed to be connected, extract small chunks with depth-first-search and remove them.\n\nhttps://github.com/tail-island/blood-vessel-segmentation\n\n# Data\n\nTo make it easier cutting out the data, I created a 3D Numpy array and adjusted the scale. I created *all* and *dense* data because I was planning to do curriculum learning in the order of *all* to *dense*. However, since it took a long time to learn in my PC, I only trained on sparse data this time. Also, I did not normalize or clipping the data because I thought there should not be a big difference since the data is visible to the human eye.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/create_volumetric_images.py\n\n# Train\n\nI generate data from random positions and rotations in each *n* epochs. To reduce data generation time, I used multiple processes.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/dataset.py\n\nThe neural network is U-Net3D.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/model.py\n\nI used binary-focal loss. Optimizer is AdamW and learning rate is scheduled by cosine-decay.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/train_0.py\n\n# Submit\n\nPrediction is made by tiling. get_candidate() finds candidates with a given ratio and <strong>get_blood_vessels()</strong> removes small unconnected chunks.\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit.py\n\nSearching the big blood vessel chunk (and clip) version, private score is 0.756793 and public score is <strong>0.000000</strong>...\n\nhttps://github.com/tail-island/blood-vessel-segmentation/blob/main/src/submit_.py\n\nOther scores...\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Ff7be4975a186ddc226fd463f32632d0a%2Fscores.png?generation=1707479299719710&alt=media)\n\n# What's happend?\n\n~~Maybe public data is for the first *x*% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.~~\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5895718%2Fc3db76cc66c0f14a28e86393c735b925%2Fpublic-private.png?generation=1707470652290411&alt=media)\n\n~~I gave up to improve my program quite early because my public score was too low. And some other Kagglers continued to improve their programs for the end part of the blood vessels in public data. I suspect that their improvements were not very effective in the private data that contains the root of the blood vessels. In other words, my 2nd place would be caused by LUCK...~~\n\nWhat's happened?",
    "2644355": "Congratulations! \nIt shows that surface dice score is a poor choice for the final metric.",
    "2644356": "\"Maybe public data is for the first x% of the images, I think. It contains only the end part of the blood vessels; the root part is not included. So, it seems that my post-processing would have resulted in a lower score.\"\n\nNO there are 2 different kidney for private and public, you can check the updated data description page\n\n---\n\ngood work! sometimes,  the simplest solution works for the most uncertain cases!",
    "2644375": "Thanks! Please give me time for checking.",
    "2644379": "Top1 solution also rotates in 3D space while training. So maybe training with 3d rotation augment is the key of this challenge. Hence, even your public score is low, your solution is insightful. \n\nAlso, removing small unconnected chunks is what I planned to do. But I joined this competition late and don't have time to implement it(Another reason is that I didn't expect it cause such a huge improvement).\n\nIn words, I think although your solution only have 2 two key points, both points are very important and valuable.\nCongratulations for solo top 2. @ojimaryoji .",
    "2644385": "Thank you very much. I had updated my post.\n\n>Public Test:\n>Continuous 3D part of a whole human kidney...\n>Private Test:\n>Continuous 3D part of a whole human kidney...\n\nWhat's happened?\n\n~~\"part of\"?~~",
    "2644556": "I checked my submissions.\n\nVersion 12: clip + search large size chunk (>20% of candidates) -> private score: 0.756793, public score: 0.\n\n* My program was able to find a large chunk of blood vessels in the private data, but could not find a large chunk in the public data.\n* If the large chunk is not found, my program uses prediction. -> My program could not find the blood vessels from the public data.\n\nVersion 32: no clip + delete size >= 100 chunks -> private score: 0.759959, public score: 0.043141.\n\nVersion 33: no clip + delete size ≥ 1000 chunks → private score: 0.742442, public score: 0.041478.\n\n* Version 33 has a lower score, so the 100-1000 size chunks are blood vessels. -> Without clipping, the large chunk are split into small unconnected chunks.\n* However, the score does not change much. -> My program found very few blood vessels in the private data.\n\nWhat happened? I think any of the following is happened.\n\n1. My program luckily overfit the public data.\n2. My program overfit the training data + the private data and the training data are very similar + the public data are too different.\n   And fitting to the public data will reduce accuracy on the private data?\n3. Or, surface-dice-metrics is the source of this confusion...\n\nPlease post what do you think, great Kagglers.",
    "2644907": "Truly incredible, I am astounded how this works great strategy with the post-processing, I wish I had thought of that one!",
    "2644989": "And you, my friend, you are a true genius.",
    "2645075": "Congratulations",
    "2645537": "Congratulations @ojimaryoji !!  It is good to see you made a 2nd place with 3D.  There was discussion [here](https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/461213) around results of 3D during the competition and seemed it would not be promising but you found a way to do it.  And probably quite useful for the hosts - indicated as one of the key features of their imaging technique.  \n\n>Prediction is made by tiling. get_candidate() finds candidates with a given ratio and get_blood_vessels() removes small unconnected chunks\n\nThis may have been key to eliminating false positives - but the differences in resolution for public and private perhaps affected how each scored?  As @hengck23 [posted](https://www.kaggle.com/competitions/blood-vessel-segmentation/discussion/457702)\n\n>your solution need to:\n1) either remove false positive\n2) limit the number of 3d connected component objects \n\nCertainly using connected-components-3d  cc3d.dust post processing (also from hengck23) gave improvements to private LB. (not that I selected of course!)\n\nIt might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.\n\nHow did you select your 2  final submissions or were they autoselected?  Pretty insane all the 0s !!  You must be happy with the end result.",
    "2645659": "`It might be good if the hosts released the public and private kidney images to analyse why what worked for one did not for the other.`\n\nYes, I also think that it would be useful not only for us, the participants, but also for the host to read the consequent comments.\n\nNow we can only wonder and speculate why some solutions (nearly \"traditionally\" for some participants as me unselected) worked so well on private dataset though bringing very bad results on public dataset.\n\nPlease, @jonathanmcwilliams , @clairewalsh , would the release be possible?",
    "2647944": "Thank you very much. I will study \"connected-components-3d cc3d.dust\" as you suggested. It's beautiful.\n\nFinal submissions were auto-selected. It's too difficult to choice from 0, 0, 0.043, 0.002..."
  },
  "source": "meta"
}