{
  "id": 651532,
  "title": "[placeholder] my solution : it is connecting the dots!",
  "url": "/competitions/vesuvius-challenge-surface-detection/discussion/651532",
  "author_name": "hengck23",
  "post_date": "2025-12-04T02:43:16.445000",
  "votes": 58,
  "comment_count": 162,
  "views": 0,
  "content": "<h2>Disclaimer: this is a work in progress, contents subject to changes</h2>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5ea0dcb437185526a48b879f5ff4b24d%2FSelection_1614.png?generation=1765227069400375&amp;alt=media\" alt=\"\"></p>\n<p>it is connecting the dots!</p>\n<p>The boundary clues are so strong that you can do multi-class pixel label, where class1 = first curve on top, class2 = the next one ,…\nyou no longer perform semantic segmentation and jump to instance segmentation at the start. This solves all scroll-touching issues …\n(but you do need to take good care of unlaballed region)</p>\n<hr>\n<p>I just enter t the competition and did some early investigation. To win:</p>\n<p>1) <strong>Correct loss or post-processing</strong> to improve <strong>topology score</strong> (most important), surface dice, voi score.<br>\nMany kagglers will treat this as a  volume segmentation task … that is wrong. Good volume IOU doesn't guarantee  lb score. The task is actually \"scroll object\" detection\". We want continous surface object that is no holes, not disintegrated or wrongly joined (\"stuck together\")</p>\n<p>2) <strong>Use of unlabelled data</strong></p>\n<p>What i would do next:</p>\n<ul>\n<li>visualisation of topology score results. What is Betti matching? What connected components are matched or designated as FN or FP?</li>\n<li>how to improve topology score? (e.g. post processing of hole filling, separating stuck scrolls or joining disintegrated ones)</li>\n</ul>\n<hr>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe148bb135b9b439353d6edaa4a8f5a3a%2FSelection_1399.png?generation=1764816110638340&amp;alt=media\" alt=\"\"></p>\n<p>Note that the ground truth focuses on surface (and <strong>one side of the scroll</strong>) and some ground truth <strong>eats into the \"air\"</strong>. Hence this is weak supervision.</p>\n<p>summarising everything (it is a huge mess) in this post:</p>\n<ul>\n<li>Level 1 (The Hack): CED / Directional Blur. (Fixes gaps using image processing).    </li>\n<li>Level 2 (The Engineering): Tracking / Z-Sweep. (Fixes gaps using time-consistency).  </li>\n<li>Level 3 (The Math): Parametric / Vector Fitting. (Fixes gaps by mathematically forbidding them).  </li>\n</ul>",
  "messages": [
    {
      "id": 3361964,
      "postDate": "2025-12-04T02:43:16.447Z",
      "content": "<h2>Disclaimer: this is a work in progress, contents subject to changes</h2>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5ea0dcb437185526a48b879f5ff4b24d%2FSelection_1614.png?generation=1765227069400375&amp;alt=media\" alt=\"\"></p>\n<p>it is connecting the dots!</p>\n<p>The boundary clues are so strong that you can do multi-class pixel label, where class1 = first curve on top, class2 = the next one ,…\nyou no longer perform semantic segmentation and jump to instance segmentation at the start. This solves all scroll-touching issues …\n(but you do need to take good care of unlaballed region)</p>\n<hr>\n<p>I just enter t the competition and did some early investigation. To win:</p>\n<p>1) <strong>Correct loss or post-processing</strong> to improve <strong>topology score</strong> (most important), surface dice, voi score.<br>\nMany kagglers will treat this as a  volume segmentation task … that is wrong. Good volume IOU doesn't guarantee  lb score. The task is actually \"scroll object\" detection\". We want continous surface object that is no holes, not disintegrated or wrongly joined (\"stuck together\")</p>\n<p>2) <strong>Use of unlabelled data</strong></p>\n<p>What i would do next:</p>\n<ul>\n<li>visualisation of topology score results. What is Betti matching? What connected components are matched or designated as FN or FP?</li>\n<li>how to improve topology score? (e.g. post processing of hole filling, separating stuck scrolls or joining disintegrated ones)</li>\n</ul>\n<hr>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe148bb135b9b439353d6edaa4a8f5a3a%2FSelection_1399.png?generation=1764816110638340&amp;alt=media\" alt=\"\"></p>\n<p>Note that the ground truth focuses on surface (and <strong>one side of the scroll</strong>) and some ground truth <strong>eats into the \"air\"</strong>. Hence this is weak supervision.</p>\n<p>summarising everything (it is a huge mess) in this post:</p>\n<ul>\n<li>Level 1 (The Hack): CED / Directional Blur. (Fixes gaps using image processing).    </li>\n<li>Level 2 (The Engineering): Tracking / Z-Sweep. (Fixes gaps using time-consistency).  </li>\n<li>Level 3 (The Math): Parametric / Vector Fitting. (Fixes gaps by mathematically forbidding them).  </li>\n</ul>",
      "rawMarkdown": "##Disclaimer: this is a work in progress, contents subject to changes\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5ea0dcb437185526a48b879f5ff4b24d%2FSelection_1614.png?generation=1765227069400375&alt=media)\n\nit is connecting the dots!\n\nThe boundary clues are so strong that you can do multi-class pixel label, where class1 = first curve on top, class2 = the next one ,...\nyou no longer perform semantic segmentation and jump to instance segmentation at the start. This solves all scroll-touching issues ...\n(but you do need to take good care of unlaballed region)\n\n---\n\nI just enter t the competition and did some early investigation. To win:\n\n1) **Correct loss or post-processing** to improve **topology score** (most important), surface dice, voi score.  \nMany kagglers will treat this as a  volume segmentation task ... that is wrong. Good volume IOU doesn't guarantee  lb score. The task is actually \"scroll object\" detection\". We want continous surface object that is no holes, not disintegrated or wrongly joined (\"stuck together\")\n\n2) **Use of unlabelled data**\n\nWhat i would do next:\n- visualisation of topology score results. What is Betti matching? What connected components are matched or designated as FN or FP?\n- how to improve topology score? (e.g. post processing of hole filling, separating stuck scrolls or joining disintegrated ones)\n\n---\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe148bb135b9b439353d6edaa4a8f5a3a%2FSelection_1399.png?generation=1764816110638340&alt=media)\n\nNote that the ground truth focuses on surface (and **one side of the scroll**) and some ground truth **eats into the \"air\"**. Hence this is weak supervision.\n\nsummarising everything (it is a huge mess) in this post:\n- Level 1 (The Hack): CED / Directional Blur. (Fixes gaps using image processing).    \n- Level 2 (The Engineering): Tracking / Z-Sweep. (Fixes gaps using time-consistency).  \n- Level 3 (The Math): Parametric / Vector Fitting. (Fixes gaps by mathematically forbidding them).  \n\n",
      "votes": 58
    },
    {
      "id": 3375726,
      "postDate": "2025-12-13T02:22:02.607Z",
      "content": "<p>good news. after a 4-day struggle (due to bug), here is the good results. from manual line tracing to learned tracing:</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7160f3db51a29130a2144889e144d463%2FSelection_1740.png?generation=1765592479704081&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd108603d38bb44cf8455039477ad5546%2FSelection_1742.png?generation=1765592492422206&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F98cd15731dd16d674b1556c4a77fac4c%2FPeek%202025-12-13%2009-46.gif?generation=1765592507216139&amp;alt=media\" alt=\"\"></p>\n<pre><code>inference loop:\n\nwhile not end:\n    y,x = curve[-1]\n    path = model_regression_output[y,x]\n    curve = curve + path\n</code></pre>\n<p>`</p>\n<p>input is 3d and all convolution are 3d, though i show results in slice</p>",
      "rawMarkdown": "good news. after a 4-day struggle (due to bug), here is the good results. from manual line tracing to learned tracing:\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7160f3db51a29130a2144889e144d463%2FSelection_1740.png?generation=1765592479704081&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd108603d38bb44cf8455039477ad5546%2FSelection_1742.png?generation=1765592492422206&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F98cd15731dd16d674b1556c4a77fac4c%2FPeek%202025-12-13%2009-46.gif?generation=1765592507216139&alt=media)\n\n```\ninference loop:\n\nwhile not end:\n    y,x = curve[-1]\n    path = model_regression_output[y,x]\n    curve = curve + path\n\n\n````\n\ninput is 3d and all convolution are 3d, though i show results in slice",
      "votes": 7,
      "replies": [
        {
          "id": 3375753,
          "postDate": "2025-12-13T03:43:40.297Z",
          "content": "<p>results on random start points for stress test. in actual inference, we will seed from high probability pixel locations instead</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6e804e660e16bf88afa7439ade5d80ed%2FPeek%202025-12-13%2011-43.gif?generation=1765597418356451&amp;alt=media\" alt=\"\"></p>\n<p>more difficult image:<br>\nLeft: image slice, Right: probability and tracing\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa3e1745c270d8db4fb672395dea7b214%2FPeek%202025-12-13%2012-02.gif?generation=1765598599849106&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "results on random start points for stress test. in actual inference, we will seed from high probability pixel locations instead\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6e804e660e16bf88afa7439ade5d80ed%2FPeek%202025-12-13%2011-43.gif?generation=1765597418356451&alt=media)\n\nmore difficult image:   \nLeft: image slice, Right: probability and tracing\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa3e1745c270d8db4fb672395dea7b214%2FPeek%202025-12-13%2012-02.gif?generation=1765598599849106&alt=media)",
          "votes": 2,
          "replies": [
            {
              "id": 3376453,
              "postDate": "2025-12-14T14:26:03.353Z",
              "content": "<p><a href=\"https://github.com/ryanchesler/ants\" target=\"_blank\">https://github.com/ryanchesler/ants</a></p>\n<p>Might be of interest to you. Worked on this a long time ago</p>",
              "rawMarkdown": "https://github.com/ryanchesler/ants\n\nMight be of interest to you. Worked on this a long time ago",
              "votes": 7
            },
            {
              "id": 3376478,
              "postDate": "2025-12-14T15:01:49.637Z",
              "content": "<p><a href=\"https://www.kaggle.com/ryches\" target=\"_blank\">@ryches</a> Thanks for sharing</p>",
              "rawMarkdown": "@ryches Thanks for sharing"
            },
            {
              "id": 3376725,
              "postDate": "2025-12-15T02:47:55.553Z",
              "content": "<p><a href=\"https://www.kaggle.com/ryches\" target=\"_blank\">@ryches</a> \nthanks for the code. it is very close to what i have in mind. i will release my version soon.</p>\n<ul>\n<li>no need to normalise slice direction by rotation</li>\n<li>future points can be in either direction, for startpoint or endpoint</li>\n</ul>",
              "rawMarkdown": "@ryches \nthanks for the code. it is very close to what i have in mind. i will release my version soon.\n- no need to normalise slice direction by rotation\n- future points can be in either direction, for startpoint or endpoint"
            },
            {
              "id": 3377000,
              "postDate": "2025-12-15T14:06:48.427Z",
              "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  suppose we have multiple oofs, I think this approach is better.</p>\n<pre><code>anchor_points = boundary_start_points #initial points\nwhile not end:\n    points_t = Query(anchor_points, oof1, oof2, oof3,.., valid_area, radius)\n    v_t = model(point_t) for each point_t in points_t\n    anchor_points = Update(points_t, {v_t})\n</code></pre>",
              "rawMarkdown": "@hengck23  suppose we have multiple oofs, I think this approach is better.\n\n```python\nanchor_points = boundary_start_points #initial points\nwhile not end:\n    points_t = Query(anchor_points, oof1, oof2, oof3,.., valid_area, radius)\n    v_t = model(point_t) for each point_t in points_t\n    anchor_points = Update(points_t, {v_t})\n```"
            },
            {
              "id": 3377098,
              "postDate": "2025-12-15T17:41:56.680Z",
              "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a> \nthanks! i tried this before. it works, but i have problems with the efficiency (memory and computation time), so i temporary give up.  I use the architecture:</p>\n<pre><code>3d/2.5d encoder --&gt; prob and threshold for seed --&gt; curve fragment as seq query, feature map as memory --&gt; transformer --&gt; traced curve\n</code></pre>\n<p>the trick i use is:</p>\n<pre><code>curve fragment  = concat(current point | future point to be traced)\n</code></pre>\n<p>i did not do oof, but use detached and end to end.</p>",
              "rawMarkdown": "@tom99763 \nthanks! i tried this before. it works, but i have problems with the efficiency (memory and computation time), so i temporary give up.  I use the architecture:\n\n```\n3d/2.5d encoder --> prob and threshold for seed --> curve fragment as seq query, feature map as memory --> transformer --> traced curve\n\n```\n\nthe trick i use is:\n\n```\n\ncurve fragment  = concat(current point | future point to be traced)\n\n```\n\ni did not do oof, but use detached and end to end.\n",
              "votes": 1
            }
          ]
        }
      ]
    },
    {
      "id": 3369783,
      "postDate": "2025-12-10T10:40:16.683Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5cc6afc75b49056b552149a3ed2d609a%2FSelection_1674.png?generation=1765363214521450&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5cc6afc75b49056b552149a3ed2d609a%2FSelection_1674.png?generation=1765363214521450&alt=media)",
      "votes": 5,
      "replies": [
        {
          "id": 3369804,
          "postDate": "2025-12-10T11:06:11.520Z",
          "content": "<p>I also observed the same. Not sure if its wrong label or not. Especially the while circle area.\ncc <a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>",
          "rawMarkdown": "I also observed the same. Not sure if its wrong label or not. Especially the while circle area.\ncc @giorgioangelotti ",
          "replies": [
            {
              "id": 3369886,
              "postDate": "2025-12-10T12:26:48.697Z",
              "content": "<p>It is becuase the annotation could be using some label propagation or interpolation. Eg annotation size every 10 slices interpolation in-between.  </p>\n<p>Also it is difficult actually for human to label, so instead of prioritising correctness, connecting the points is more important because we can refine the surface later ( eg snapping from air to voxel)?</p>",
              "rawMarkdown": "It is becuase the annotation could be using some label propagation or interpolation. Eg annotation size every 10 slices interpolation in-between.  \n\nAlso it is difficult actually for human to label, so instead of prioritising correctness, connecting the points is more important because we can refine the surface later ( eg snapping from air to voxel)?"
            },
            {
              "id": 3369897,
              "postDate": "2025-12-10T12:39:25.523Z",
              "content": "<p>Based on my observation, predicting a pixel confidently as fg or bg is difficult. But predicting the most likely location  of the surface pixel ( within a local neighbourhood) is easy. </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5d921fb0699e8b25ee6eba94483c217f%2FSelection_1676.png?generation=1765370669256755&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "Based on my observation, predicting a pixel confidently as fg or bg is difficult. But predicting the most likely location  of the surface pixel ( within a local neighbourhood) is easy. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5d921fb0699e8b25ee6eba94483c217f%2FSelection_1676.png?generation=1765370669256755&alt=media)"
            },
            {
              "id": 3370022,
              "postDate": "2025-12-10T14:25:57.197Z",
              "content": "<p>Labels are created by voxelization of quadmeshes. The step size between adjacent nodes in the meshes should be around 20 if I am not mistaken ( <a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> ). Also, to facilitate annotation sometimes meshes are copied inward or outward (along the normal direction) and then manually \"pushed\" to right position in a local neighbourhood. These could explain the \"artifacts\" you notice.</p>",
              "rawMarkdown": "Labels are created by voxelization of quadmeshes. The step size between adjacent nodes in the meshes should be around 20 if I am not mistaken ( @seanjohnsonsp ). Also, to facilitate annotation sometimes meshes are copied inward or outward (along the normal direction) and then manually \"pushed\" to right position in a local neighbourhood. These could explain the \"artifacts\" you notice.",
              "votes": 2
            }
          ]
        },
        {
          "id": 3370024,
          "postDate": "2025-12-10T14:26:59.477Z",
          "content": "<p><a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> is the second circle in right image a kollesis?</p>",
          "rawMarkdown": "@seanjohnsonsp is the second circle in right image a kollesis?",
          "replies": [
            {
              "id": 3370411,
              "postDate": "2025-12-10T18:52:05.607Z",
              "content": "<p>It looks more like a horizontal fiber to me, but its tough to say for certain.  </p>",
              "rawMarkdown": "It looks more like a horizontal fiber to me, but its tough to say for certain.  "
            }
          ]
        }
      ]
    },
    {
      "id": 3382504,
      "postDate": "2025-12-27T17:52:47.493Z",
      "content": "<p>any good idea to construct ordered sheet loss?\ne.g truth of first sheet is z1,y1,x1, then second sheet is z2,y1+dy2,x1+dx2 … here dy,dx are non-negative …</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7e934243b278e57c5846ea697bb66d65%2FSelection_1910.png?generation=1766857851166864&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "any good idea to construct ordered sheet loss?\ne.g truth of first sheet is z1,y1,x1, then second sheet is z2,y1+dy2,x1+dx2 ... here dy,dx are non-negative ...\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7e934243b278e57c5846ea697bb66d65%2FSelection_1910.png?generation=1766857851166864&alt=media)",
      "votes": 3,
      "replies": [
        {
          "id": 3382526,
          "postDate": "2025-12-27T18:45:28.510Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4abda789e928fb5b1baa33cda79b61e6%2FScreenshot%202025-12-28%20000934.png?generation=1766860812776141&amp;alt=media\" alt=\"\"></p>\n<p>L(x) means loss at x distance from the sheet and x1 is seperation between the two sheets, sigma is a hyperparameter p(x) is prediction at x. We sum for all x and in between all layers. The intuition is, The more we are in the center of two sheets more it should be penalized, in basic probability(fg vs bg) predictions there is no meaning of different sheet. So if we use something like this, we can penalize predictions in center more, and still give model freedom to predict the sheets a bit off unlike simply penalizing false positives, because then model might start breaking lines (happened with me, i tried penalizing false positives).</p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4abda789e928fb5b1baa33cda79b61e6%2FScreenshot%202025-12-28%20000934.png?generation=1766860812776141&alt=media)\n\nL(x) means loss at x distance from the sheet and x1 is seperation between the two sheets, sigma is a hyperparameter p(x) is prediction at x. We sum for all x and in between all layers. The intuition is, The more we are in the center of two sheets more it should be penalized, in basic probability(fg vs bg) predictions there is no meaning of different sheet. So if we use something like this, we can penalize predictions in center more, and still give model freedom to predict the sheets a bit off unlike simply penalizing false positives, because then model might start breaking lines (happened with me, i tried penalizing false positives).",
          "votes": 1,
          "replies": [
            {
              "id": 3382530,
              "postDate": "2025-12-27T18:51:38.133Z",
              "content": "<p>in short penalizing probabilities in center, but not heavy penalizing near the sheets themselves, we can control the strictness via sigma. That 2 with 2*sigma^2  has no significance there, wrote it by mistake.</p>",
              "rawMarkdown": "in short penalizing probabilities in center, but not heavy penalizing near the sheets themselves, we can control the strictness via sigma. That 2 with 2*sigma^2  has no significance there, wrote it by mistake."
            }
          ]
        },
        {
          "id": 3382603,
          "postDate": "2025-12-28T01:49:50.010Z",
          "content": "<p>the next generation of LLM must understand PPT diagram. current chatgpt and gemini2 doesn't seems to have memory for image. It keeps on forgeting image context</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1cfffac20d929f5d13b9ea71819f84b0%2FSelection_1913.png?generation=1766886565262980&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1677bfdfc32a9bb096b2b4a35ede5083%2FSelection_1917.png?generation=1766887985059620&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe400482b8e5a211a6bd5dc172bc7b3cf%2FSelection_1920.png?generation=1766888742073614&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "the next generation of LLM must understand PPT diagram. current chatgpt and gemini2 doesn't seems to have memory for image. It keeps on forgeting image context\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1cfffac20d929f5d13b9ea71819f84b0%2FSelection_1913.png?generation=1766886565262980&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1677bfdfc32a9bb096b2b4a35ede5083%2FSelection_1917.png?generation=1766887985059620&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe400482b8e5a211a6bd5dc172bc7b3cf%2FSelection_1920.png?generation=1766888742073614&alt=media)",
          "votes": 1,
          "replies": [
            {
              "id": 3382714,
              "postDate": "2025-12-28T10:44:45.520Z",
              "content": "<p>not my solution. it is purely from chatgpt, he is smart</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1300e9245cb3210d90e6f89aa876a6c2%2FSelection_1927.png?generation=1766918683785473&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "not my solution. it is purely from chatgpt, he is smart\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1300e9245cb3210d90e6f89aa876a6c2%2FSelection_1927.png?generation=1766918683785473&alt=media)"
            },
            {
              "id": 3382719,
              "postDate": "2025-12-28T10:53:47.217Z",
              "content": "<p>This approach is strong if you can give a good prior for the model.</p>",
              "rawMarkdown": "This approach is strong if you can give a good prior for the model."
            },
            {
              "id": 3382721,
              "postDate": "2025-12-28T11:09:26.450Z",
              "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F9f2f9868783ab3c56a5b712c81458f78%2FSelection_1929.png?generation=1766920131853666&amp;alt=media\" alt=\"\"></p>\n<p>i don't give code here but you can show this image to chatgpt or gemini and he will write code and expalin to you</p>",
              "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F9f2f9868783ab3c56a5b712c81458f78%2FSelection_1929.png?generation=1766920131853666&alt=media)\n\ni don't give code here but you can show this image to chatgpt or gemini and he will write code and expalin to you"
            },
            {
              "id": 3383252,
              "postDate": "2025-12-29T17:31:32.133Z",
              "content": "<p>There is a very similar problem where we have to predict two surfaces of brain which shouldn't collide (in our case there can be many surfaces). It has  similar approach like what you are telling, But instead of assuming shapes and deforming them, In this approach collision free surface is extracted iteratively by refining sdf field. After which deformations are applied to topologically correct sheets. It's called SimCortex (<a href=\"https://arxiv.org/pdf/2507.06955\" target=\"_blank\">https://arxiv.org/pdf/2507.06955</a>)\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4f76a483f093d349ef5a1baba601b34f%2FScreenshot%202025-12-29%20225142.png?generation=1767028950681278&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Fcae534dfc0febca454aad4425da8cf1c%2FScreenshot%202025-12-29%20225250.png?generation=1767028987589929&amp;alt=media\" alt=\"\"></p>\n<p>This framework lead to significantly lower collisions also.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F1583e0327f9bc48eca628252e44fc366%2FScreenshot%202025-12-29%20225335.png?generation=1767029063838270&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "There is a very similar problem where we have to predict two surfaces of brain which shouldn't collide (in our case there can be many surfaces). It has  similar approach like what you are telling, But instead of assuming shapes and deforming them, In this approach collision free surface is extracted iteratively by refining sdf field. After which deformations are applied to topologically correct sheets. It's called SimCortex (https://arxiv.org/pdf/2507.06955)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4f76a483f093d349ef5a1baba601b34f%2FScreenshot%202025-12-29%20225142.png?generation=1767028950681278&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Fcae534dfc0febca454aad4425da8cf1c%2FScreenshot%202025-12-29%20225250.png?generation=1767028987589929&alt=media)\n\nThis framework lead to significantly lower collisions also.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F1583e0327f9bc48eca628252e44fc366%2FScreenshot%202025-12-29%20225335.png?generation=1767029063838270&alt=media)",
              "votes": 1
            }
          ]
        },
        {
          "id": 3383854,
          "postDate": "2025-12-31T00:11:07.967Z",
          "content": "<p>how the orginal maskformer paper work\n(which is the isntance segmentation head above)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fcd4a52a99eed85985ccc18e927e3ba4c%2FSelection_1967.png?generation=1767139866406926&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "how the orginal maskformer paper work\n(which is the isntance segmentation head above)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fcd4a52a99eed85985ccc18e927e3ba4c%2FSelection_1967.png?generation=1767139866406926&alt=media)"
        }
      ]
    },
    {
      "id": 3362655,
      "postDate": "2025-12-05T05:02:05.557Z",
      "content": "<p>here is the visualisation!\n(iou = 0.75 for threshold = 0.5, 0.57 for threshold =0.85)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4977e39a22c71055af9de15f59981a1d%2FSelection_1460.png?generation=1764910910229356&amp;alt=media\" alt=\"\"> </p>\n<p>because the ground truth label eats into the air, the label are no good for training segmentation. hence it is inevitable that segmentation topology is bad.\n(i did not check but i suspect the even for non touching labels, the image are touching)</p>",
      "rawMarkdown": "here is the visualisation!\n(iou = 0.75 for threshold = 0.5, 0.57 for threshold =0.85)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4977e39a22c71055af9de15f59981a1d%2FSelection_1460.png?generation=1764910910229356&alt=media) \n\n\nbecause the ground truth label eats into the air, the label are no good for training segmentation. hence it is inevitable that segmentation topology is bad.\n(i did not check but i suspect the even for non touching labels, the image are touching)",
      "votes": 6,
      "replies": [
        {
          "id": 3362672,
          "postDate": "2025-12-05T05:44:53.180Z",
          "content": "<p>share our score case:</p>\n<table>\n<thead>\n<tr>\n<th>dice</th>\n<th>approx comp metric</th>\n<th>lb</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0.78</td>\n<td>0.62</td>\n<td>0.541</td>\n</tr>\n<tr>\n<td>0.768</td>\n<td>0.64</td>\n<td>0.554</td>\n</tr>\n</tbody>\n</table>",
          "rawMarkdown": "share our score case:\n| dice | approx comp metric | lb |\n| --- | --- |\n| 0.78 | 0.62 | 0.541 |\n| 0.768 | 0.64 | 0.554 |\n",
          "votes": 3,
          "replies": [
            {
              "id": 3365234,
              "postDate": "2025-12-07T04:04:40.377Z",
              "content": "<p>simiar dice, but lb &lt;0.5</p>",
              "rawMarkdown": "simiar dice, but lb <0.5"
            }
          ]
        },
        {
          "id": 3362806,
          "postDate": "2025-12-05T10:41:43.850Z",
          "content": "<p>Thank you for the visualisation! <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> </p>",
          "rawMarkdown": "Thank you for the visualisation! @hengck23 "
        },
        {
          "id": 3363064,
          "postDate": "2025-12-05T18:39:34.050Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F59924212ee48eae0e4ff3965cc0251f8%2FPeek%202025-12-06%2002-37.gif?generation=1764959971276579&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F59924212ee48eae0e4ff3965cc0251f8%2FPeek%202025-12-06%2002-37.gif?generation=1764959971276579&alt=media)",
          "votes": 3
        }
      ]
    },
    {
      "id": 3368501,
      "postDate": "2025-12-09T09:13:19.430Z",
      "content": "<p>Here’s another idea for approaching this task differently: instead of predicting the mask directly, we can match the mask’s feature representation with that of the corresponding image. By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fdf93de5f41501a792b9ee3509aaf4d45%2FGSS2.png?generation=1765271597345111&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fbece7128800ea7f7c9f6d044318f53a8%2FGSS.png?generation=1765271269268425&amp;alt=media\" alt=\"\"></p>\n<p>reference: <a href=\"https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf</a></p>",
      "rawMarkdown": "Here’s another idea for approaching this task differently: instead of predicting the mask directly, we can match the mask’s feature representation with that of the corresponding image. By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fdf93de5f41501a792b9ee3509aaf4d45%2FGSS2.png?generation=1765271597345111&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fbece7128800ea7f7c9f6d044318f53a8%2FGSS.png?generation=1765271269268425&alt=media)\n\n\n\n\nreference: https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf",
      "votes": 3
    },
    {
      "id": 3367331,
      "postDate": "2025-12-08T11:06:52.100Z",
      "content": "<p>update:\nhole filling code\n<a href=\"https://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes\" target=\"_blank\">https://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes</a></p>",
      "rawMarkdown": "update:\nhole filling code\nhttps://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes\n",
      "votes": 3,
      "replies": [
        {
          "id": 3367364,
          "postDate": "2025-12-08T11:39:56.177Z",
          "content": "<p>Thanks for sharing <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>!</p>",
          "rawMarkdown": "Thanks for sharing @hengck23!"
        },
        {
          "id": 3367485,
          "postDate": "2025-12-08T13:47:04.350Z",
          "content": "<p>Thank you <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>. However, I’m seeing many non-existent holes being introduced using your approach, which causes the single-instance score to drop from 0.637 to 0.344. That said, some holes are real, since the scroll is embedded in volcanic ash. You cannot directly connect the path.</p>",
          "rawMarkdown": "Thank you @hengck23. However, I’m seeing many non-existent holes being introduced using your approach, which causes the single-instance score to drop from 0.637 to 0.344. That said, some holes are real, since the scroll is embedded in volcanic ash. You cannot directly connect the path.",
          "votes": 1,
          "replies": [
            {
              "id": 3368096,
              "postDate": "2025-12-09T01:14:06.900Z",
              "content": "<p>the demo code is for lines running in a specific direction (there are two diagonal directions). you need to generalize it to the other direction. The demo code is tracing a line at one pixel thick. you need a few pixel thick line for it not to have holes. You can visual the ground truth to see if there are actually any holes or not</p>",
              "rawMarkdown": "the demo code is for lines running in a specific direction (there are two diagonal directions). you need to generalize it to the other direction. The demo code is tracing a line at one pixel thick. you need a few pixel thick line for it not to have holes. You can visual the ground truth to see if there are actually any holes or not"
            }
          ]
        }
      ]
    },
    {
      "id": 3365600,
      "postDate": "2025-12-07T08:46:03.367Z",
      "content": "<p>the game changer … we may be getting lb &gt;0.7  in the end if test data is the same as train</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F71a5dadff6d9bcb596ecd72720490064%2FSelection_1522.png?generation=1765097086708873&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc56d91765ca5a843bf839c51602a2e56%2FPeek%202025-12-07%2016-32.gif?generation=1765097108511824&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "the game changer ... we may be getting lb >0.7  in the end if test data is the same as train\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F71a5dadff6d9bcb596ecd72720490064%2FSelection_1522.png?generation=1765097086708873&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc56d91765ca5a843bf839c51602a2e56%2FPeek%202025-12-07%2016-32.gif?generation=1765097108511824&alt=media)",
      "votes": 3,
      "replies": [
        {
          "id": 3365643,
          "postDate": "2025-12-07T09:19:01.213Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2145485ee3e16c2fed5827a27033f73b%2FSelection_1523.png?generation=1765099109256433&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4c8324b95123d0448d757b848d6fb3ea%2FSelection_1525.png?generation=1765099252694589&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2145485ee3e16c2fed5827a27033f73b%2FSelection_1523.png?generation=1765099109256433&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4c8324b95123d0448d757b848d6fb3ea%2FSelection_1525.png?generation=1765099252694589&alt=media)\n",
          "replies": [
            {
              "id": 3365646,
              "postDate": "2025-12-07T09:21:01.907Z",
              "content": "<p>Mesh =&gt; Flow =&gt; Check holes from flow and displacement</p>",
              "rawMarkdown": "Mesh => Flow => Check holes from flow and displacement"
            },
            {
              "id": 3365665,
              "postDate": "2025-12-07T09:33:01.470Z",
              "content": "<p>Yes you nailed it. Now i am deciding the mesh point … should i find the outline first, etc ? … my strategy is get topology correct first, then improve surface dice</p>",
              "rawMarkdown": "Yes you nailed it. Now i am deciding the mesh point … should i find the outline first, etc ? … my strategy is get topology correct first, then improve surface dice"
            },
            {
              "id": 3365671,
              "postDate": "2025-12-07T09:41:36.940Z",
              "content": "<p>someone has just done it!\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0bce392069398de40a4ee9920cd8463b%2FSelection_1526.png?generation=1765100441028543&amp;alt=media\" alt=\"\"></p>\n<p>Virtually Unrolling the Herculaneum Papyri by Diffeomorphic Spiral Fitting\n<a href=\"https://arxiv.org/abs/2512.04927v1\" target=\"_blank\">https://arxiv.org/abs/2512.04927v1</a></p>\n<p>related\n[1]  Improving the Identification of Layers in 3D Images of Ancient Papyrus using Artificial Neural Networks\n<a href=\"https://openaccess.thecvf.com/content/WACV2025W/VISIONDOCS/papers/Klenert_Improving_the_Identification_of_Layers_in_3D_Images_of_Ancient_WACVW_2025_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/WACV2025W/VISIONDOCS/papers/Klenert_Improving_the_Identification_of_Layers_in_3D_Images_of_Ancient_WACVW_2025_paper.pdf</a></p>\n<p>[2] A Local Iterative Approach for the Extraction of 2D Manifolds from Strongly Curved and Folded Thin-Layer Structures\n<a href=\"https://arxiv.org/pdf/2308.07070\" target=\"_blank\">https://arxiv.org/pdf/2308.07070</a></p>",
              "rawMarkdown": "someone has just done it!\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0bce392069398de40a4ee9920cd8463b%2FSelection_1526.png?generation=1765100441028543&alt=media)\n\nVirtually Unrolling the Herculaneum Papyri by Diffeomorphic Spiral Fitting\nhttps://arxiv.org/abs/2512.04927v1\n\nrelated\n[1]  Improving the Identification of Layers in 3D Images of Ancient Papyrus using Artificial Neural Networks\nhttps://openaccess.thecvf.com/content/WACV2025W/VISIONDOCS/papers/Klenert_Improving_the_Identification_of_Layers_in_3D_Images_of_Ancient_WACVW_2025_paper.pdf\n\n\n[2] A Local Iterative Approach for the Extraction of 2D Manifolds from Strongly Curved and Folded Thin-Layer Structures\nhttps://arxiv.org/pdf/2308.07070\n",
              "votes": 1
            },
            {
              "id": 3365673,
              "postDate": "2025-12-07T09:42:11.113Z",
              "content": "<p>but how you deal with unlabeled part? I currently just use replacement from previous prediction:</p>\n<pre><code> =  * ( != ) +  * ( == )\n</code></pre>",
              "rawMarkdown": "but how you deal with unlabeled part? I currently just use replacement from previous prediction:\n\n```\n_mask_gt = _mask_gt * (_mask_gt != 2) + _mask_pred * (_mask_gt == 2)\n```"
            },
            {
              "id": 3365675,
              "postDate": "2025-12-07T09:44:23.427Z",
              "content": "<p>That seems a great approach, but might need global context, I plan to use 3D vae modeling on whole scroll (1w+, 3k+, 6k+) volume in low resolution to do that.</p>",
              "rawMarkdown": "That seems a great approach, but might need global context, I plan to use 3D vae modeling on whole scroll (1w+, 3k+, 6k+) volume in low resolution to do that."
            },
            {
              "id": 3365720,
              "postDate": "2025-12-07T10:19:45.607Z",
              "content": "<p>Paul Henderson's code is available here <a href=\"https://github.com/pmh47/spiral-fitting\" target=\"_blank\">https://github.com/pmh47/spiral-fitting</a></p>",
              "rawMarkdown": "Paul Henderson's code is available here https://github.com/pmh47/spiral-fitting"
            },
            {
              "id": 3366875,
              "postDate": "2025-12-08T04:04:06.950Z",
              "content": "<p>perhaps simply regression is enough?</p>",
              "rawMarkdown": "perhaps simply regression is enough?"
            },
            {
              "id": 3376748,
              "postDate": "2025-12-15T04:23:17.903Z",
              "content": "<p>Monai has APIs that can use for this method:\n<code>monai.networks.blocks.Warp</code>\n<code>monai.networks.blocks.DVF2DDF</code></p>",
              "rawMarkdown": "Monai has APIs that can use for this method:\n`monai.networks.blocks.Warp`\n`monai.networks.blocks.DVF2DDF`"
            }
          ]
        }
      ]
    },
    {
      "id": 3370748,
      "postDate": "2025-12-11T04:43:38.083Z",
      "content": "<p>when creating ground truth curve parameterisation, i found several errors in the annotations.\nthe 3d connected components can show 2 sheets as one </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc4102cff0c0ac9a44b3662f5904b9ded%2FSelection_1691.png?generation=1765428148839265&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F3ab4dcb3ff8c2953f5ec01cccf8faf76%2FSelection_1704.png?generation=1765430128035920&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "when creating ground truth curve parameterisation, i found several errors in the annotations.\nthe 3d connected components can show 2 sheets as one \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc4102cff0c0ac9a44b3662f5904b9ded%2FSelection_1691.png?generation=1765428148839265&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F3ab4dcb3ff8c2953f5ec01cccf8faf76%2FSelection_1704.png?generation=1765430128035920&alt=media)",
      "votes": 4,
      "replies": [
        {
          "id": 3370842,
          "postDate": "2025-12-11T06:08:00.830Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F37ad1f21405a857ede7f7a86b6ccb861%2FSelection_1708.png?generation=1765433224538016&amp;alt=media\" alt=\"\"></p>\n<p>for the first 50 volumes in train.csv file, manual inspection shows that about 10% has somekind 3d touching issues</p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F37ad1f21405a857ede7f7a86b6ccb861%2FSelection_1708.png?generation=1765433224538016&alt=media)\n\nfor the first 50 volumes in train.csv file, manual inspection shows that about 10% has somekind 3d touching issues",
          "votes": 1
        },
        {
          "id": 3370916,
          "postDate": "2025-12-11T07:05:33.657Z",
          "content": "<p>I am going to inspect this and let you know as soon as possible. If this is the case, it's weird because our annotators were told to inspect the data in Napari painting every seperate connected component in 3D with the same color. This should be spottable right away. In any case, <a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> and I are considering releasing an updated version of the data fixing the mistakes that escaped during the first round, so thank you for being so meticulous, it is very helpful!</p>",
          "rawMarkdown": "I am going to inspect this and let you know as soon as possible. If this is the case, it's weird because our annotators were told to inspect the data in Napari painting every seperate connected component in 3D with the same color. This should be spottable right away. In any case, @seanjohnsonsp and I are considering releasing an updated version of the data fixing the mistakes that escaped during the first round, so thank you for being so meticulous, it is very helpful!",
          "votes": 1
        },
        {
          "id": 3371011,
          "postDate": "2025-12-11T08:29:38.077Z",
          "content": "<p>I just checked and you are right unfortunately. I think our annotators checked not for the 26 connectivity as instructed. We are going to fix these as soon as possible 🙏</p>",
          "rawMarkdown": "I just checked and you are right unfortunately. I think our annotators checked not for the 26 connectivity as instructed. We are going to fix these as soon as possible 🙏",
          "votes": 9,
          "replies": [
            {
              "id": 3373065,
              "postDate": "2025-12-12T10:18:59.917Z",
              "content": "<p>Dataset will be updated, right?</p>",
              "rawMarkdown": "Dataset will be updated, right?"
            },
            {
              "id": 3376202,
              "postDate": "2025-12-13T21:41:24.370Z",
              "content": "<p>If you guys do have the plan to update the data was there a rough guess of when this will happen? Also thank you so much for your continued support in this competition! <a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>",
              "rawMarkdown": "If you guys do have the plan to update the data was there a rough guess of when this will happen? Also thank you so much for your continued support in this competition! @giorgioangelotti "
            }
          ]
        },
        {
          "id": 3371216,
          "postDate": "2025-12-11T11:04:26.690Z",
          "content": "<p>I have some similar findings. In id=1215679884, it seems that two masks are stuck together, and there are quite a few holes in the GT.<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5569141%2F6118c7f46022a3ac96ce94fde48ef837%2F20251211185220_51_81.png?generation=1765451020275699&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "I have some similar findings. In id=1215679884, it seems that two masks are stuck together, and there are quite a few holes in the GT.![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5569141%2F6118c7f46022a3ac96ce94fde48ef837%2F20251211185220_51_81.png?generation=1765451020275699&alt=media)",
          "votes": 2,
          "replies": [
            {
              "id": 3379641,
              "postDate": "2025-12-20T09:29:44.263Z",
              "content": "<p><a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>\n<p>even if i consider individual slice, some of the train samples have tourching fibres (i.e. 4 or 8-connected)\nan example, id = 636928528</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0d74c59fe54395a8a8ba299a9375b86a%2FSelection_1775.png?generation=1766222939346010&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff59f7f09bf829ddfe4476e97a11f57dc%2FSelection_1774.png?generation=1766222956380679&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "@giorgioangelotti \n\neven if i consider individual slice, some of the train samples have tourching fibres (i.e. 4 or 8-connected)\nan example, id = 636928528\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0d74c59fe54395a8a8ba299a9375b86a%2FSelection_1775.png?generation=1766222939346010&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff59f7f09bf829ddfe4476e97a11f57dc%2FSelection_1774.png?generation=1766222956380679&alt=media)"
            }
          ]
        }
      ]
    },
    {
      "id": 3369840,
      "postDate": "2025-12-10T11:41:49.177Z",
      "content": "<p>Share a result of points of interests + cluster + local curvature regression</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F80d389c4dc383eb65916ea96eed374b9%2F1235.png?generation=1765366866348488&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "Share a result of points of interests + cluster + local curvature regression\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F80d389c4dc383eb65916ea96eed374b9%2F1235.png?generation=1765366866348488&alt=media)",
      "votes": 4
    },
    {
      "id": 3368198,
      "postDate": "2025-12-09T03:57:35.617Z",
      "content": "<p>augmentation trick:\nThe most important augmentations are : 1) occlusion (to force network to join broken lines) 2) rotation (for network to learn curvature). </p>\n<p>if you want you can add a third one: (3)touching scrolls … but i haven't found a way to augment this (maybe custom elastic transforms). but i find this is less important because the train set has many such cases.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0f764d607b1e69dd5107b70bc3e9e29e%2FSelection_1623.png?generation=1765252651223824&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "augmentation trick:\nThe most important augmentations are : 1) occlusion (to force network to join broken lines) 2) rotation (for network to learn curvature). \n\nif you want you can add a third one: (3)touching scrolls ... but i haven't found a way to augment this (maybe custom elastic transforms). but i find this is less important because the train set has many such cases.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0f764d607b1e69dd5107b70bc3e9e29e%2FSelection_1623.png?generation=1765252651223824&alt=media)",
      "votes": 4,
      "replies": [
        {
          "id": 3369099,
          "postDate": "2025-12-09T18:23:43.590Z",
          "content": "<p>I am thinking that better augmentation could solve a lot of the issues with topology score. However, it is still difficult to imagine a time where we will have .7 LB but I love to be wrong. Being wrong is always a learning opportunity, and my wife would tell you I am wrong often :)</p>",
          "rawMarkdown": "I am thinking that better augmentation could solve a lot of the issues with topology score. However, it is still difficult to imagine a time where we will have .7 LB but I love to be wrong. Being wrong is always a learning opportunity, and my wife would tell you I am wrong often :)"
        }
      ]
    },
    {
      "id": 3366857,
      "postDate": "2025-12-08T03:39:15.053Z",
      "content": "<p>very good news! my hole filling works! will release code later</p>\n<p>results\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4ddbbe991cd0b8069f9ca1f996115de7%2FSelection_1576.png?generation=1765164948914523&amp;alt=media\" alt=\"\"></p>\n<p>i ask chatgpt and gemini to code<br>\n1) input direction ( one of the 4 corners is the center of scroll). this set the line tracing direction<br>\n2) detect all startpoints endpoints of curve fragements for each slice<br>\n3) pair them up  (nearest distance)<br>\n4) start tracing  (path integration with largest prob and most coherent orientation)  </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd6a784edecf18a1808c2f87b687f20ea%2FPeek%202025-12-08%2011-32.gif?generation=1765164880614932&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "very good news! my hole filling works! will release code later\n\nresults\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4ddbbe991cd0b8069f9ca1f996115de7%2FSelection_1576.png?generation=1765164948914523&alt=media)\n\n\n i ask chatgpt and gemini to code  \n1) input direction ( one of the 4 corners is the center of scroll). this set the line tracing direction  \n2) detect all startpoints endpoints of curve fragements for each slice  \n3) pair them up  (nearest distance)  \n4) start tracing  (path integration with largest prob and most coherent orientation)  \n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd6a784edecf18a1808c2f87b687f20ea%2FPeek%202025-12-08%2011-32.gif?generation=1765164880614932&alt=media)",
      "votes": 4,
      "replies": [
        {
          "id": 3366878,
          "postDate": "2025-12-08T04:09:06.740Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> how's the computational time</p>",
          "rawMarkdown": "@hengck23 how's the computational time",
          "replies": [
            {
              "id": 3366881,
              "postDate": "2025-12-08T04:12:40.797Z",
              "content": "<p>It is a simple code and i run at 160x160x160. Python takes less than 2 sec on my local machine per object</p>",
              "rawMarkdown": "It is a simple code and i run at 160x160x160. Python takes less than 2 sec on my local machine per object"
            },
            {
              "id": 3366889,
              "postDate": "2025-12-08T04:20:45.597Z",
              "content": "<p>Chatgpt mentions \"Coherence-Enhancing Diffusion\" which is used for fingerprint enhancement and line tracing. </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa7dc9f19a53ce16861cb43cace4ebef8%2FSelection_1582.png?generation=1765168782084140&amp;alt=media\" alt=\"\"></p>\n<p>\"friend here\" is gemini3\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Feb850e2b07ba1c139c7316fef7d9a924%2FSelection_1583.png?generation=1765169933103126&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F24581d033a9712930fa3d23908b5273e%2FSelection_1584.png?generation=1765169944297531&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "Chatgpt mentions \"Coherence-Enhancing Diffusion\" which is used for fingerprint enhancement and line tracing. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa7dc9f19a53ce16861cb43cace4ebef8%2FSelection_1582.png?generation=1765168782084140&alt=media)\n\n\"friend here\" is gemini3\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Feb850e2b07ba1c139c7316fef7d9a924%2FSelection_1583.png?generation=1765169933103126&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F24581d033a9712930fa3d23908b5273e%2FSelection_1584.png?generation=1765169944297531&alt=media)"
            },
            {
              "id": 3367170,
              "postDate": "2025-12-08T08:53:26.300Z",
              "content": "<p>Finger print is very good reference to extent to scroll. I would be very surprise if someone really try in-painting to obtain good topology.</p>",
              "rawMarkdown": "Finger print is very good reference to extent to scroll. I would be very surprise if someone really try in-painting to obtain good topology.",
              "votes": 2
            },
            {
              "id": 3367745,
              "postDate": "2025-12-08T17:35:18.697Z",
              "content": "<p>Its very interesting, curious to see how this effects the other scores within the metric</p>",
              "rawMarkdown": "Its very interesting, curious to see how this effects the other scores within the metric"
            }
          ]
        }
      ]
    },
    {
      "id": 3365129,
      "postDate": "2025-12-07T01:22:50.297Z",
      "content": "<p>maybe this works</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2fa1aed1786b392dc2b8934259c3d0ef%2FSelection_1505.png?generation=1765070567323395&amp;alt=media\" alt=\"\"></p>\n<p>--- related ---</p>\n<p>poor man's topological loss.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5474b0bcc9ec31d7fb45314d67c37435%2FSelection_1507.png?generation=1765071395808388&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "maybe this works\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2fa1aed1786b392dc2b8934259c3d0ef%2FSelection_1505.png?generation=1765070567323395&alt=media)\n\n\n--- related ---\n\npoor man's topological loss.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5474b0bcc9ec31d7fb45314d67c37435%2FSelection_1507.png?generation=1765071395808388&alt=media)",
      "votes": 4,
      "replies": [
        {
          "id": 3365193,
          "postDate": "2025-12-07T03:14:09.507Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> what's the original image you show in the second image. It looks like the extracted skeleton on scroll<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F622518306bb0aaaa6fc93a94f6a1fccd%2Fimage.png?generation=1765077116164800&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "@hengck23 what's the original image you show in the second image. It looks like the extracted skeleton on scroll![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F622518306bb0aaaa6fc93a94f6a1fccd%2Fimage.png?generation=1765077116164800&alt=media)",
          "replies": [
            {
              "id": 3365270,
              "postDate": "2025-12-07T04:31:11.060Z",
              "content": "<p>it is from the paper\nTopoSeg: Topology-Aware Nuclear Instance Segmentation\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F918fd8a479ef5f16dfdb46d5435ecc68%2FSelection_1508.png?generation=1765081708031711&amp;alt=media\" alt=\"\"></p>\n<p>basically, the key idea:</p>\n<ul>\n<li>don't have to work on the whole image</li>\n<li>identify the patches that have problems</li>\n<li>try things watershed, sketeon transform, etc …. on these patches.</li>\n<li>if they work, think of how deep learning can help is the above heuristics (e.g. if Watershed works, then deep learning can be used to learn the seeds or  water levels)</li>\n</ul>",
              "rawMarkdown": "it is from the paper\nTopoSeg: Topology-Aware Nuclear Instance Segmentation\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F918fd8a479ef5f16dfdb46d5435ecc68%2FSelection_1508.png?generation=1765081708031711&alt=media)\n\nbasically, the key idea:\n- don't have to work on the whole image\n- identify the patches that have problems\n- try things watershed, sketeon transform, etc .... on these patches.\n- if they work, think of how deep learning can help is the above heuristics (e.g. if Watershed works, then deep learning can be used to learn the seeds or  water levels)\n",
              "votes": 1
            }
          ]
        },
        {
          "id": 3365337,
          "postDate": "2025-12-07T05:28:06.347Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fde02e1bde2a6a50f63fd5b1283ccf830%2FSelection_1519.png?generation=1765085284500789&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fde02e1bde2a6a50f63fd5b1283ccf830%2FSelection_1519.png?generation=1765085284500789&alt=media)",
          "votes": 3,
          "replies": [
            {
              "id": 3365382,
              "postDate": "2025-12-07T06:10:33.240Z",
              "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> I actual work on this now, but I treat this problem as one-class anomaly detection.</p>",
              "rawMarkdown": "@hengck23 I actual work on this now, but I treat this problem as one-class anomaly detection.",
              "votes": 1
            }
          ]
        },
        {
          "id": 3365613,
          "postDate": "2025-12-07T08:51:10.290Z",
          "content": "<p>if you skeletonize a prediction , you an identify the locations of these pretty easily, if this helps in splitting them. you'll want to use either a medial axis transform or a 2d slicewise skeletonization (the default 3d skeletonization will not work for this task), and then consider any voxel with &gt;2 neighbors to be a \"merge\". </p>\n<p>it can help to preprocess the segmentation to avoid stray branching by applying some sort of blur , a gaussian or median filter here is fine. then , to help improve the \"sheetness\" before the skeletonization , it is helpful to use either the midline of a distance transform or a frangi/sato like filter (hessian or others can work here as well). </p>\n<p>we have a few scripts which may contain useful pieces for this sort of thing. </p>\n<p>pre/post processing of labels/predictions with inverse edt &gt;  gaussian blur &gt; frangi-like 3d filter &gt; threshold: \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/edt_frangi_label.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/edt_frangi_label.py</a></p>\n<p>the standalone frangi-like filter is here <a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/ridges_vessels.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/ridges_vessels.py</a></p>\n<p>skeleton \"junction/merge\" detection : \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/skeletonization.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/skeletonization.py</a></p>\n<p>a pretty messy coherence enhancing diffusion filter, which could be used in place of the filter stack mentioned above.: \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/ced.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/ced.py</a></p>\n<p>structure tensor computation:\n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/geometry/structure_tensor.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/geometry/structure_tensor.py</a></p>",
          "rawMarkdown": "if you skeletonize a prediction , you an identify the locations of these pretty easily, if this helps in splitting them. you'll want to use either a medial axis transform or a 2d slicewise skeletonization (the default 3d skeletonization will not work for this task), and then consider any voxel with >2 neighbors to be a \"merge\". \n\nit can help to preprocess the segmentation to avoid stray branching by applying some sort of blur , a gaussian or median filter here is fine. then , to help improve the \"sheetness\" before the skeletonization , it is helpful to use either the midline of a distance transform or a frangi/sato like filter (hessian or others can work here as well). \n\nwe have a few scripts which may contain useful pieces for this sort of thing. \n\npre/post processing of labels/predictions with inverse edt >  gaussian blur > frangi-like 3d filter > threshold: \nhttps://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/edt_frangi_label.py\n\nthe standalone frangi-like filter is here https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/ridges_vessels.py\n\nskeleton \"junction/merge\" detection : \nhttps://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/skeletonization.py\n\na pretty messy coherence enhancing diffusion filter, which could be used in place of the filter stack mentioned above.: \nhttps://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/ced.py\n\nstructure tensor computation:\nhttps://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/geometry/structure_tensor.py",
          "votes": 9
        }
      ]
    },
    {
      "id": 3362149,
      "postDate": "2025-12-04T08:20:08.800Z",
      "content": "<p>just a couple of topology-related loss i search from web (i haven't read them yet). For kaggler who want to mpve faster, you can check them.</p>\n<p><a href=\"https://github.com/HuXiaoling/TopoLoss\" target=\"_blank\">https://github.com/HuXiaoling/TopoLoss</a><br>\n<a href=\"https://github.com/nstucki/Betti-Matching-3D\" target=\"_blank\">https://github.com/nstucki/Betti-Matching-3D</a><br>\n<a href=\"https://github.com/HuXiaoling/awesome-topology-driven-image-analysis\" target=\"_blank\">https://github.com/HuXiaoling/awesome-topology-driven-image-analysis</a><br>\n<a href=\"https://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf\" target=\"_blank\">https://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf</a></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fffdf4e96d26ad0af63badf467f5b7c71%2FSelection_1433.png?generation=1764836710806898&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F053adeb09c65676be46cc64618032f90%2FSelection_1432.png?generation=1764836723547987&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd224f90c9282698ef8fb295ef203162b%2FSelection_1434.png?generation=1764836850461940&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "just a couple of topology-related loss i search from web (i haven't read them yet). For kaggler who want to mpve faster, you can check them.\n\nhttps://github.com/HuXiaoling/TopoLoss  \nhttps://github.com/nstucki/Betti-Matching-3D  \nhttps://github.com/HuXiaoling/awesome-topology-driven-image-analysis  \nhttps://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fffdf4e96d26ad0af63badf467f5b7c71%2FSelection_1433.png?generation=1764836710806898&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F053adeb09c65676be46cc64618032f90%2FSelection_1432.png?generation=1764836723547987&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd224f90c9282698ef8fb295ef203162b%2FSelection_1434.png?generation=1764836850461940&alt=media)",
      "votes": 4,
      "replies": [
        {
          "id": 3362157,
          "postDate": "2025-12-04T08:39:37.857Z",
          "content": "<p>What matters most is whether your model can skip covering areas and form an object instead. The last viz in second row is the best example I think.</p>",
          "rawMarkdown": "What matters most is whether your model can skip covering areas and form an object instead. The last viz in second row is the best example I think."
        },
        {
          "id": 3362165,
          "postDate": "2025-12-04T08:55:22.143Z",
          "content": "<p>to extend on this a bit , examples on datasets like CREMI, DRIVE, CoW / any other blood vessel or road segmentation tasks would likely apply here. the task is different but the underlying principles are similar </p>",
          "rawMarkdown": "to extend on this a bit , examples on datasets like CREMI, DRIVE, CoW / any other blood vessel or road segmentation tasks would likely apply here. the task is different but the underlying principles are similar ",
          "votes": 4
        }
      ]
    },
    {
      "id": 3380840,
      "postDate": "2025-12-23T07:08:48.663Z",
      "content": "<p>it is quite sad that most of the predictions are good, but there is only a small touching region </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb96ac3de53c47a1ebef8e70e89e3b836%2FSelection_1797.png?generation=1766473713029561&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F12450e931026390d902ab0373312f852%2FSelection_1796.png?generation=1766473726503331&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "it is quite sad that most of the predictions are good, but there is only a small touching region \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb96ac3de53c47a1ebef8e70e89e3b836%2FSelection_1797.png?generation=1766473713029561&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F12450e931026390d902ab0373312f852%2FSelection_1796.png?generation=1766473726503331&alt=media)",
      "votes": 1,
      "replies": [
        {
          "id": 3380850,
          "postDate": "2025-12-23T07:25:53.080Z",
          "content": "<p>Looks great, what LB do you have on this one?</p>",
          "rawMarkdown": "Looks great, what LB do you have on this one?",
          "replies": [
            {
              "id": 3381739,
              "postDate": "2025-12-25T12:04:31.700Z",
              "content": "<p>i did not submit yet. on local validation on small validation set of about 50 samples, local lb is about 0.62+.\nLet me retrain everything with new data and report public lb later afer i submit</p>",
              "rawMarkdown": "i did not submit yet. on local validation on small validation set of about 50 samples, local lb is about 0.62+.\nLet me retrain everything with new data and report public lb later afer i submit"
            },
            {
              "id": 3381771,
              "postDate": "2025-12-25T13:40:20.370Z",
              "content": "<p>Is it based on your demo notebook? </p>",
              "rawMarkdown": "Is it based on your demo notebook? "
            },
            {
              "id": 3381773,
              "postDate": "2025-12-25T13:44:24.900Z",
              "content": "<p>No. Get me some time to stabilise it and will make a notebook later. Will be quite soon</p>",
              "rawMarkdown": "No. Get me some time to stabilise it and will make a notebook later. Will be quite soon",
              "votes": 1
            }
          ]
        }
      ]
    },
    {
      "id": 3385384,
      "postDate": "2026-01-03T07:45:39.033Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4a0e52b5e4f98ea344ab9ae6ebb2671%2F123.png?generation=1767426331244760&amp;alt=media\" alt=\"\"></p>\n<p>share current advancing approach, haven't submitted yet</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4a0e52b5e4f98ea344ab9ae6ebb2671%2F123.png?generation=1767426331244760&alt=media)\n\nshare current advancing approach, haven't submitted yet",
      "votes": 2,
      "replies": [
        {
          "id": 3385799,
          "postDate": "2026-01-04T03:38:05.733Z",
          "content": "<p>looks good!</p>",
          "rawMarkdown": "looks good!"
        },
        {
          "id": 3386317,
          "postDate": "2026-01-05T04:11:22.263Z",
          "content": "<p>You predict 2d or 3d fields in the image a above?</p>",
          "rawMarkdown": "You predict 2d or 3d fields in the image a above?"
        }
      ]
    },
    {
      "id": 3378595,
      "postDate": "2025-12-18T15:15:06.787Z",
      "content": "<p>Hello, thanks for sharing such valuable insights. Really helpful for newbies like me 😭 .</p>\n<p>My initial thought is to first build a strong baseline model trained with a loss function that heavily penalizes false positives, prioritizing high precision even if this leads to fragmented predictions. On top of this, I thought of training a second model whose role is to reconnect disjoint components. This second model would be trained to predict the original ground-truth masks from synthetically corrupted versions of those same masks, where disconnection and fragmentation transforms are applied to closely mimic the baseline model’s output.</p>\n<p>LB score wasnt that great but I am suspecting the loss function (ce + tversky) or weak simulation.\nWould love to hear your thought!!!!!</p>",
      "rawMarkdown": "Hello, thanks for sharing such valuable insights. Really helpful for newbies like me 😭 .\n\nMy initial thought is to first build a strong baseline model trained with a loss function that heavily penalizes false positives, prioritizing high precision even if this leads to fragmented predictions. On top of this, I thought of training a second model whose role is to reconnect disjoint components. This second model would be trained to predict the original ground-truth masks from synthetically corrupted versions of those same masks, where disconnection and fragmentation transforms are applied to closely mimic the baseline model’s output.\n\nLB score wasnt that great but I am suspecting the loss function (ce + tversky) or weak simulation.\nWould love to hear your thought!!!!!",
      "votes": 1,
      "replies": [
        {
          "id": 3378780,
          "postDate": "2025-12-18T16:32:34.963Z",
          "content": "<p>I tried ce + tversky and it worked very well! </p>",
          "rawMarkdown": "I tried ce + tversky and it worked very well! ",
          "votes": 1
        },
        {
          "id": 3378809,
          "postDate": "2025-12-18T16:48:31.770Z",
          "content": "<p>ce + tversky can achieve a fairly good score (at least on the surface dice score)</p>",
          "rawMarkdown": "ce + tversky can achieve a fairly good score (at least on the surface dice score)",
          "votes": 1
        }
      ]
    },
    {
      "id": 3381119,
      "postDate": "2025-12-23T19:20:15.957Z",
      "content": "<p>check this paper\n\"Manifold embedding of geological and geophysical observations for non-stationary subsurface property estimation using geodesic\nGaussian processes\"\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5179829a873ab294b14020e1b1be7cbc%2FSelection_1805.png?generation=1766517592388614&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F855ca87d75874c6db45d81dd61f3799a%2FSelection_1806.png?generation=1766517504717926&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F92fcbba806846fda2ab8348ebfcfc994%2FSelection_1807.png?generation=1766517558163126&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "check this paper\n\"Manifold embedding of geological and geophysical observations for non-stationary subsurface property estimation using geodesic\nGaussian processes\"\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5179829a873ab294b14020e1b1be7cbc%2FSelection_1805.png?generation=1766517592388614&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F855ca87d75874c6db45d81dd61f3799a%2FSelection_1806.png?generation=1766517504717926&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F92fcbba806846fda2ab8348ebfcfc994%2FSelection_1807.png?generation=1766517558163126&alt=media)\n",
      "votes": 2
    },
    {
      "id": 3362215,
      "postDate": "2025-12-04T10:11:39.590Z",
      "content": "<p>Thanks for opening the thread. Looking forward to know more your findings. However, just a gentle feedback about your assumption on the following topic:</p>\n<blockquote>\n  <p>Many kagglers will treat this as a volume segmentation task … that is wrong. Good volume IOU doesn't guarantee lb score. The task is actually \"scroll object\" detection\".</p>\n</blockquote>\n<p>Kagglers who treat this as a volume segmentation task also understand that this is far from a straightforward segmentation problem. Simple segmentation was just the first approach many people explored at the very beginning, and it quickly became clear that the task is much more complex. As you’ve probably noticed, several Kagglers have even tried non-ML solutions and achieved scores comparable to ML models across both 2D and 3D approaches.</p>\n<p>So yes, it has been clear to many participants from early on (long before this thread was created) that this is not a standard segmentation task, but something very specific to the structure of this dataset. Naturally, people are experimenting with different modeling strategies to understand what might actually work best.</p>\n<hr>\n<p>As for me, I’m using this competition to test my own library, see how it performs, and identify any missing components I might want to add. :)</p>",
      "rawMarkdown": "Thanks for opening the thread. Looking forward to know more your findings. However, just a gentle feedback about your assumption on the following topic:\n\n> Many kagglers will treat this as a volume segmentation task … that is wrong. Good volume IOU doesn't guarantee lb score. The task is actually \"scroll object\" detection\".\n\nKagglers who treat this as a volume segmentation task also understand that this is far from a straightforward segmentation problem. Simple segmentation was just the first approach many people explored at the very beginning, and it quickly became clear that the task is much more complex. As you’ve probably noticed, several Kagglers have even tried non-ML solutions and achieved scores comparable to ML models across both 2D and 3D approaches.\n\nSo yes, it has been clear to many participants from early on (long before this thread was created) that this is not a standard segmentation task, but something very specific to the structure of this dataset. Naturally, people are experimenting with different modeling strategies to understand what might actually work best.\n\n---\n\nAs for me, I’m using this competition to test my own library, see how it performs, and identify any missing components I might want to add. :)",
      "votes": 1
    },
    {
      "id": 3362125,
      "postDate": "2025-12-04T07:47:56.113Z",
      "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  what do you think 3D VAE approach. When I look at the metric, I feel that learning what actual scroll structure is better than just segmentation. I've made up several non-segmentation approaches such as optical flow which gives me good rewards on topology, but to make big progress to score like 0.7+lb seems needing to learn and map the structure (like NRF).</p>",
      "rawMarkdown": "@hengck23  what do you think 3D VAE approach. When I look at the metric, I feel that learning what actual scroll structure is better than just segmentation. I've made up several non-segmentation approaches such as optical flow which gives me good rewards on topology, but to make big progress to score like 0.7+lb seems needing to learn and map the structure (like NRF).",
      "votes": 1,
      "replies": [
        {
          "id": 3362143,
          "postDate": "2025-12-04T08:11:26.840Z",
          "content": "<p>NRF as Neural Representation Fields? Should also work. But currently my top priority is to visualize the topology metric (i need to know what the matched and FP,FN are), then decide if we can create some fast differentiable topology-friendly loss.</p>",
          "rawMarkdown": "NRF as Neural Representation Fields? Should also work. But currently my top priority is to visualize the topology metric (i need to know what the matched and FP,FN are), then decide if we can create some fast differentiable topology-friendly loss.",
          "votes": 1,
          "replies": [
            {
              "id": 3362159,
              "postDate": "2025-12-04T08:40:38.260Z",
              "content": "<p>average team would get 0.3~0.4 topo score I guess, if they all use segmentation approach.  Another idea is that, since a scroll is originally a flat sheet of paper, we could unfold the predicted structure onto the paper, fill in the unconnected holes, and then fold it back into scroll form.</p>",
              "rawMarkdown": "average team would get 0.3~0.4 topo score I guess, if they all use segmentation approach.  Another idea is that, since a scroll is originally a flat sheet of paper, we could unfold the predicted structure onto the paper, fill in the unconnected holes, and then fold it back into scroll form."
            }
          ]
        }
      ]
    },
    {
      "id": 3362118,
      "postDate": "2025-12-04T07:31:36.317Z",
      "content": "<p>Hello. Despite the fact that I am a supporter of your activities, I have a question: How do you have enough to be everywhere and at once?) Have a good day!</p>",
      "rawMarkdown": "Hello. Despite the fact that I am a supporter of your activities, I have a question: How do you have enough to be everywhere and at once?) Have a good day!",
      "votes": 1
    },
    {
      "id": 3377813,
      "postDate": "2025-12-17T01:41:04.360Z",
      "content": "<p>anyone interested in end-to-end tracing can google for \"neuron tracing\".\ne.g</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff7238c854199a85e75510d180a374999%2FSelection_1755.png?generation=1765935582427782&amp;alt=media\" alt=\"\">]</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc056c45ffcd6b22a20dfe060e502544d%2FSelection_1756.png?generation=1765935571459293&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6727ada4e62472e01a05f5217840539c%2FSelection_1754.png?generation=1765935619265335&amp;alt=media\" alt=\"\"></p>\n<p><a href=\"https://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf</a></p>",
      "rawMarkdown": "anyone interested in end-to-end tracing can google for \"neuron tracing\".\ne.g\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff7238c854199a85e75510d180a374999%2FSelection_1755.png?generation=1765935582427782&alt=media)]\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc056c45ffcd6b22a20dfe060e502544d%2FSelection_1756.png?generation=1765935571459293&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6727ada4e62472e01a05f5217840539c%2FSelection_1754.png?generation=1765935619265335&alt=media)\n\nhttps://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf",
      "votes": 2,
      "replies": [
        {
          "id": 3377846,
          "postDate": "2025-12-17T03:24:33.977Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  thank you, this is the method i want to do. </p>",
          "rawMarkdown": "@hengck23  thank you, this is the method i want to do. ",
          "replies": [
            {
              "id": 3377849,
              "postDate": "2025-12-17T03:28:43.343Z",
              "content": "<p>oh we are on the same track😁</p>",
              "rawMarkdown": "oh we are on the same track😁"
            }
          ]
        },
        {
          "id": 3377906,
          "postDate": "2025-12-17T06:26:40.730Z",
          "content": "<p>I tried vanilla conditional flow matching but could not get good results.\nThis looks similar but explicitly defined for tracing, very interesting.</p>",
          "rawMarkdown": "I tried vanilla conditional flow matching but could not get good results.\nThis looks similar but explicitly defined for tracing, very interesting."
        },
        {
          "id": 3378566,
          "postDate": "2025-12-18T14:14:32.203Z",
          "content": "<p>Has anyone tried this method yet?, I am planning to use the current pretrained UNet back bone, and then train each component step by  step, first forcing the Centerline block to predict thin connected lines via skeletal loss and penalizing thick predictions and then freezing it's learning. Then training the rest of the network. Before using so much compute I wanna know if someone has tried something and how it unfolded.</p>",
          "rawMarkdown": "Has anyone tried this method yet?, I am planning to use the current pretrained UNet back bone, and then train each component step by  step, first forcing the Centerline block to predict thin connected lines via skeletal loss and penalizing thick predictions and then freezing it's learning. Then training the rest of the network. Before using so much compute I wanna know if someone has tried something and how it unfolded.",
          "replies": [
            {
              "id": 3378607,
              "postDate": "2025-12-18T15:22:19.973Z",
              "content": "<p>n my experiments, the skeleton loss did not have a positive effect. My approach was to erode the skeleton out of 2D slices using graphics operations, and then penalize the unreached skeleton voxels</p>",
              "rawMarkdown": "n my experiments, the skeleton loss did not have a positive effect. My approach was to erode the skeleton out of 2D slices using graphics operations, and then penalize the unreached skeleton voxels"
            },
            {
              "id": 3378702,
              "postDate": "2025-12-18T16:05:24.827Z",
              "content": "<p>the paper is dealing with tube, while our case is sheet.\neither you change the algorithm or you change our input.</p>\n<p>eg, cut the sheet into say 4 slices to make it into \"tube\" and skeleton means center in x,y,z (center slice)</p>",
              "rawMarkdown": "the paper is dealing with tube, while our case is sheet.\neither you change the algorithm or you change our input.\n\neg, cut the sheet into say 4 slices to make it into \"tube\" and skeleton means center in x,y,z (center slice)"
            },
            {
              "id": 3378722,
              "postDate": "2025-12-18T16:10:05.617Z",
              "content": "<p>yeah, I'm planning something similar, to use the 2d version , and then depending on how good it performs, I will try to merge along z or create a mesh or something.</p>",
              "rawMarkdown": "yeah, I'm planning something similar, to use the 2d version , and then depending on how good it performs, I will try to merge along z or create a mesh or something."
            },
            {
              "id": 3378747,
              "postDate": "2025-12-18T16:18:29.090Z",
              "content": "<p>in this competition, a good pipelined solution (divided into \"simple\" but highly accurate steps) is easier than an end-to-end one. Get \"good skeletons\" first:  </p>\n<ul>\n<li>good means correct instance or good topology (no breaks, no merge error)</li>\n<li>skeleton means about 1 voxel thick surface in 3d</li>\n</ul>\n<p>then you can use next stage model(image,skeleton)= final solution</p>",
              "rawMarkdown": "in this competition, a good pipelined solution (divided into \"simple\" but highly accurate steps) is easier than an end-to-end one. Get \"good skeletons\" first:  \n- good means correct instance or good topology (no breaks, no merge error)\n- skeleton means about 1 voxel thick surface in 3d\n\nthen you can use next stage model(image,skeleton)= final solution"
            },
            {
              "id": 3378797,
              "postDate": "2025-12-18T16:43:56.677Z",
              "content": "<p>you can skeletonize like this with skimage skeletonization</p>\n<pre><code>if not np.sum(bin_seg[0]) == 0:\n            # skel = skeletonize(bin_seg[0], surface=True)\n            skel = np.zeros_like(bin_seg[0])\n            Z, Y, X = skel.shape\n\n            for z in range(Z):\n                skel[z] |= skeletonize(bin_seg[0][z])\n</code></pre>\n<p>this is just a modificaiton of <a href=\"https://github.com/MIC-DKFZ/Skeleton-Recall/blob/master/nnunetv2/training/data_augmentation/custom_transforms/skeletonization.py\" target=\"_blank\">https://github.com/MIC-DKFZ/Skeleton-Recall/blob/master/nnunetv2/training/data_augmentation/custom_transforms/skeletonization.py</a></p>\n<p>it works out of the box with just that modification. this makes the transform more like a medial surface transform, and retains the speed of skeleton recall vs things like centerline dice .</p>",
              "rawMarkdown": "you can skeletonize like this with skimage skeletonization\n\n```\nif not np.sum(bin_seg[0]) == 0:\n            # skel = skeletonize(bin_seg[0], surface=True)\n            skel = np.zeros_like(bin_seg[0])\n            Z, Y, X = skel.shape\n            \n            for z in range(Z):\n                skel[z] |= skeletonize(bin_seg[0][z])\n```\n\nthis is just a modificaiton of https://github.com/MIC-DKFZ/Skeleton-Recall/blob/master/nnunetv2/training/data_augmentation/custom_transforms/skeletonization.py\n\nit works out of the box with just that modification. this makes the transform more like a medial surface transform, and retains the speed of skeleton recall vs things like centerline dice ."
            }
          ]
        }
      ]
    },
    {
      "id": 3368685,
      "postDate": "2025-12-09T12:31:17.567Z",
      "content": "<p><a href=\"https://www.kaggle.com/choudharymanas\" target=\"_blank\">@choudharymanas</a> you can play with my model and weights here:\n<a href=\"https://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict\" target=\"_blank\">https://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict</a></p>",
      "rawMarkdown": "@choudharymanas you can play with my model and weights here:\nhttps://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict",
      "votes": 2,
      "replies": [
        {
          "id": 3368701,
          "postDate": "2025-12-09T12:41:27.220Z",
          "content": "<p>thanks, will help for sure 😁</p>",
          "rawMarkdown": "thanks, will help for sure 😁"
        }
      ]
    },
    {
      "id": 3368556,
      "postDate": "2025-12-09T10:26:15.197Z",
      "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a>  \"By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\" maybe it is the same as feature loss in this paper. in summery:</p>\n<p>Why they use feature loss?</p>\n<ul>\n<li>Comparing strokes in pixel space is too harsh.</li>\n<li>Comparing strokes only via control point MSE is too weak<br>\nso they trained a loss function by:<br>\nconvert vector stroks into image and compute loss in raster</li>\n</ul>\n<hr>\n<p>summary of below paper\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc915885e5d3e99f9ea54e0fb60c425bb%2FSelection_1645.png?generation=1765280077451449&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6d198a574ceee920d15c7c2a6e4799cf%2FSelection_1643.png?generation=1765275958732989&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7bb20f023bd2461eec1ef4f415fbc088%2FSelection_1644.png?generation=1765275972958809&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "@tom99763  \"By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\" maybe it is the same as feature loss in this paper. in summery:\n\nWhy they use feature loss?\n- Comparing strokes in pixel space is too harsh.\n- Comparing strokes only via control point MSE is too weak  \nso they trained a loss function by:   \nconvert vector stroks into image and compute loss in raster\n\n---\nsummary of below paper\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc915885e5d3e99f9ea54e0fb60c425bb%2FSelection_1645.png?generation=1765280077451449&alt=media)\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6d198a574ceee920d15c7c2a6e4799cf%2FSelection_1643.png?generation=1765275958732989&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7bb20f023bd2461eec1ef4f415fbc088%2FSelection_1644.png?generation=1765275972958809&alt=media)",
      "votes": 2,
      "replies": [
        {
          "id": 3369626,
          "postDate": "2025-12-10T07:45:03.707Z",
          "content": "<p>Are you working in 2D or 3D?</p>",
          "rawMarkdown": "Are you working in 2D or 3D?"
        }
      ]
    },
    {
      "id": 3368352,
      "postDate": "2025-12-09T06:56:32.297Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0194078c8b11b17e205a6b837e34e1b2%2FSelection_1635.png?generation=1765263373312214&amp;alt=media\" alt=\"\"></p>\n<p>wait for the code!</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0194078c8b11b17e205a6b837e34e1b2%2FSelection_1635.png?generation=1765263373312214&alt=media)\n\nwait for the code!",
      "votes": 2,
      "replies": [
        {
          "id": 3368401,
          "postDate": "2025-12-09T07:45:16.943Z",
          "content": "<p>This bspline prediction is a nice idea! similar to StarDist. I want to specify however that this data was not (for the most part) annotated using explicit b-splines or beziers,, although it does end up looking rather spline-like. The intuition is good though, and i think that focusing on pixel-accurate segmentation is a task which the model will find difficult. </p>",
          "rawMarkdown": "This bspline prediction is a nice idea! similar to StarDist. I want to specify however that this data was not (for the most part) annotated using explicit b-splines or beziers,, although it does end up looking rather spline-like. The intuition is good though, and i think that focusing on pixel-accurate segmentation is a task which the model will find difficult. \n\n",
          "votes": 2
        },
        {
          "id": 3368416,
          "postDate": "2025-12-09T08:02:05.700Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  This solution is better, you predict the valid points and connect them. Can set a hyperparameter or even smartly dynamic estimate the density of points you need to sample. GNN might be shown up again.</p>",
          "rawMarkdown": "@hengck23  This solution is better, you predict the valid points and connect them. Can set a hyperparameter or even smartly dynamic estimate the density of points you need to sample. GNN might be shown up again.",
          "votes": 2,
          "replies": [
            {
              "id": 3368426,
              "postDate": "2025-12-09T08:09:36.603Z",
              "content": "<p>Gemini says the key to line tracing is not the tracing, it is correct start and end points. And GNN is the solution to start and endpoint pairing. I am trying another method: point seq as query and image features of memory. Treating it as tx seq prediction </p>",
              "rawMarkdown": "Gemini says the key to line tracing is not the tracing, it is correct start and end points. And GNN is the solution to start and endpoint pairing. I am trying another method: point seq as query and image features of memory. Treating it as tx seq prediction "
            },
            {
              "id": 3368441,
              "postDate": "2025-12-09T08:21:52.667Z",
              "content": "<p>Also, change this task to 3d regression would be nice.</p>",
              "rawMarkdown": "Also, change this task to 3d regression would be nice.",
              "votes": 1
            },
            {
              "id": 3369478,
              "postDate": "2025-12-10T04:38:03.610Z",
              "content": "<p>2d refinement approach: point of interests =&gt; local curvature regression =&gt; predicted curves</p>",
              "rawMarkdown": "2d refinement approach: point of interests => local curvature regression => predicted curves"
            },
            {
              "id": 3369507,
              "postDate": "2025-12-10T05:15:43.953Z",
              "content": "<p>yes. the seed and probability are constrained by 3d. (since i am using a 3d resnet net)\nbut the refinement or path/tracing regression is done in 2d (since the z slicing is a natural depth grid)</p>",
              "rawMarkdown": "yes. the seed and probability are constrained by 3d. (since i am using a 3d resnet net)\nbut the refinement or path/tracing regression is done in 2d (since the z slicing is a natural depth grid)\n"
            }
          ]
        }
      ]
    },
    {
      "id": 3366389,
      "postDate": "2025-12-07T17:37:01.173Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F579cfac2853ad007eba7da5f308ff57d%2FSelection_1557.png?generation=1765128896419582&amp;alt=media\" alt=\"\"></p>\n<p>Unet baseline (input/output 160x160x160 at 0.5 scale) :</p>\n<ul>\n<li>learning skeletonised one pixel volume</li>\n<li>we have high-precision  pixel label and are about to separate  into components</li>\n</ul>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F579cfac2853ad007eba7da5f308ff57d%2FSelection_1557.png?generation=1765128896419582&alt=media)\n\nUnet baseline (input/output 160x160x160 at 0.5 scale) :\n- learning skeletonised one pixel volume\n- we have high-precision  pixel label and are about to separate  into components",
      "votes": 2,
      "replies": [
        {
          "id": 3366510,
          "postDate": "2025-12-07T19:08:17.190Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb45aeff248be50e6ea277a995c4905df%2FSelection_1566.png?generation=1765134469635137&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F30b80f5c917b746afe479364bf141a3f%2Fout.gif?generation=1765135284241458&amp;alt=media\" alt=\"\"></p>\n<hr>\n<p>There is something i don't quite understand. I always follow the rule \"if a human can do it, then it can be modelled\". Line tracing seems easy for humans, and the probability seems correct and maximizes in the correction direction. By right, the unet should be able to predict the line just by pure net prediction (without post processing). I wonder if failure is due to i not having enough weight params or not enough train samples or wrong modeling?</p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb45aeff248be50e6ea277a995c4905df%2FSelection_1566.png?generation=1765134469635137&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F30b80f5c917b746afe479364bf141a3f%2Fout.gif?generation=1765135284241458&alt=media)\n\n---\n\nThere is something i don't quite understand. I always follow the rule \"if a human can do it, then it can be modelled\". Line tracing seems easy for humans, and the probability seems correct and maximizes in the correction direction. By right, the unet should be able to predict the line just by pure net prediction (without post processing). I wonder if failure is due to i not having enough weight params or not enough train samples or wrong modeling?",
          "votes": 3
        }
      ]
    },
    {
      "id": 3362716,
      "postDate": "2025-12-05T07:01:42.727Z",
      "content": "<p>yet another better solution. the advanatge is encoder can be learned from non labelled scroll volume using MAE self-supervised. the key is good seeds (query) … which i need to study the filtration process.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F33ff4bf6b03ef10118919195bffe5e2b%2FSelection_1471.png?generation=1764918572538014&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "yet another better solution. the advanatge is encoder can be learned from non labelled scroll volume using MAE self-supervised. the key is good seeds (query) ... which i need to study the filtration process.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F33ff4bf6b03ef10118919195bffe5e2b%2FSelection_1471.png?generation=1764918572538014&alt=media)",
      "votes": 2,
      "replies": [
        {
          "id": 3362717,
          "postDate": "2025-12-05T07:06:17.647Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ffaa667ffd8e742c7fe9698daf77a7a2e%2FSelection_1469.png?generation=1764918323842403&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F622a42e7b518c4cead0443f64cf5d8ab%2FSelection_1470.png?generation=1764918338096532&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ffaa667ffd8e742c7fe9698daf77a7a2e%2FSelection_1469.png?generation=1764918323842403&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F622a42e7b518c4cead0443f64cf5d8ab%2FSelection_1470.png?generation=1764918338096532&alt=media)"
        }
      ]
    },
    {
      "id": 3362041,
      "postDate": "2025-12-04T05:39:57.763Z",
      "content": "<p>solution sketch</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F38c38d381b1a3619e84333c3e3d45fb2%2FSelection_1429.png?generation=1764826925030615&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "solution sketch\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F38c38d381b1a3619e84333c3e3d45fb2%2FSelection_1429.png?generation=1764826925030615&alt=media)\n\n",
      "votes": 2
    },
    {
      "id": 3392412,
      "postDate": "2026-01-16T23:00:05.743Z",
      "content": "<p>What is your approx current lb score currently? The public lb has almost similar score for top 10-15 participants, probably because of same method, the only difference being basic postprocessing hyperparameters. </p>",
      "rawMarkdown": "What is your approx current lb score currently? The public lb has almost similar score for top 10-15 participants, probably because of same method, the only difference being basic postprocessing hyperparameters. ",
      "replies": [
        {
          "id": 3392413,
          "postDate": "2026-01-16T23:01:58.693Z",
          "content": "<p>The only thing I do nowdays in this competition is view the lb, am working on a hackathon so don't have time for this comp. So curious about what other people are doing.</p>",
          "rawMarkdown": "The only thing I do nowdays in this competition is view the lb, am working on a hackathon so don't have time for this comp. So curious about what other people are doing."
        }
      ]
    },
    {
      "id": 3386040,
      "postDate": "2026-01-04T13:04:50.303Z",
      "content": "<p>the non-regression version of the 2 surface approach</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F02975c33712684ea3011e2dc639ca4b7%2FSelection_2039.png?generation=1767531888296619&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "the non-regression version of the 2 surface approach\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F02975c33712684ea3011e2dc639ca4b7%2FSelection_2039.png?generation=1767531888296619&alt=media)"
    },
    {
      "id": 3385882,
      "postDate": "2026-01-04T07:00:09.090Z",
      "content": "<p>i need two more loss which i haven't figure out how to implement:</p>\n<ol>\n<li>no cross overy unlabelled region loss: each query surface is either 100% inside or outside<br>\n2.x-surface and y-suface smooth fusion loss: the transistion should be smooth  </li>\n</ol>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fea1428ba7277045108502dac1063d04b%2FSelection_2036.png?generation=1767509896507838&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "i need two more loss which i haven't figure out how to implement:\n1. no cross overy unlabelled region loss: each query surface is either 100% inside or outside  \n2.x-surface and y-suface smooth fusion loss: the transistion should be smooth  \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fea1428ba7277045108502dac1063d04b%2FSelection_2036.png?generation=1767509896507838&alt=media)"
    },
    {
      "id": 3385807,
      "postDate": "2026-01-04T04:01:06.227Z",
      "content": "<p>unlabelled region is actually a headache for me. it can break the loss.<br>\nhere, top queries in unlabelled region (yellow: voxels in labelled, black: voxels enter unlabelled)  </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4606e38f4d55ff87279cb8807cd69781%2FSelection_2019.png?generation=1767499205770756&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F89ec999095c5017113e3c844bc6caf71%2FSelection_2022.png?generation=1767499222918523&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "unlabelled region is actually a headache for me. it can break the loss.   \nhere, top queries in unlabelled region (yellow: voxels in labelled, black: voxels enter unlabelled)  \n \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4606e38f4d55ff87279cb8807cd69781%2FSelection_2019.png?generation=1767499205770756&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F89ec999095c5017113e3c844bc6caf71%2FSelection_2022.png?generation=1767499222918523&alt=media)"
    },
    {
      "id": 3385339,
      "postDate": "2026-01-03T04:11:57.420Z",
      "content": "<p>i have a bug and see very interesting results  </p>\n<p>red: truth surface. it is L-shape and has each side parallel to x or y axis<br>\nyellow: predict y-parameterised surface  </p>\n<p>you can see that although there is no input feature data, the model somehow extends the surface using \"his imagination\".\ni wonder how he gets the clue or context information for it.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F483127c0fc621fe3f90b8197da843d69%2FSelection_2004.png?generation=1767413334991684&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F114ba16c387847dadf6d971c89349f37%2FSelection_2003.png?generation=1767413350358888&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "i have a bug and see very interesting results  \n\nred: truth surface. it is L-shape and has each side parallel to x or y axis  \nyellow: predict y-parameterised surface  \n\nyou can see that although there is no input feature data, the model somehow extends the surface using \"his imagination\".\ni wonder how he gets the clue or context information for it.\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F483127c0fc621fe3f90b8197da843d69%2FSelection_2004.png?generation=1767413334991684&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F114ba16c387847dadf6d971c89349f37%2FSelection_2003.png?generation=1767413350358888&alt=media)"
    },
    {
      "id": 3383638,
      "postDate": "2025-12-30T14:33:42.693Z",
      "content": "<p>interesting results</p>\n<p>i cannot be sure, but the noisy surface seems to indicate a bug in implementation.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc501eb9d879092096aead950aa734407%2FSelection_1953.png?generation=1767105212948437&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "interesting results\n\ni cannot be sure, but the noisy surface seems to indicate a bug in implementation.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc501eb9d879092096aead950aa734407%2FSelection_1953.png?generation=1767105212948437&alt=media)",
      "replies": [
        {
          "id": 3383661,
          "postDate": "2025-12-30T15:51:46.377Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Faadd32f10381f432763ba600ced1b726%2FSelection_1960.png?generation=1767109873967209&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0e72f51cc6fd9f27ace5751a2043971a%2FPeek%202025-12-30%2023-46.gif?generation=1767109888438647&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0cd1ae927e293983c11aadff5f86d16d%2FPeek%202025-12-30%2023-45.gif?generation=1767109904538349&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Faadd32f10381f432763ba600ced1b726%2FSelection_1960.png?generation=1767109873967209&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0e72f51cc6fd9f27ace5751a2043971a%2FPeek%202025-12-30%2023-46.gif?generation=1767109888438647&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0cd1ae927e293983c11aadff5f86d16d%2FPeek%202025-12-30%2023-45.gif?generation=1767109904538349&alt=media)",
          "replies": [
            {
              "id": 3383677,
              "postDate": "2025-12-30T16:20:22.343Z",
              "content": "<p>can you just remove the outliers, compute some normals and run a filtered poisson over this? maybe even a ball pivot would work without the outliers. it looks trivially \"meshable\" , and if it can be meshed it can be transformed into a nice smooth curve (with a laplacian or something similar)</p>",
              "rawMarkdown": "can you just remove the outliers, compute some normals and run a filtered poisson over this? maybe even a ball pivot would work without the outliers. it looks trivially \"meshable\" , and if it can be meshed it can be transformed into a nice smooth curve (with a laplacian or something similar)"
            },
            {
              "id": 3383878,
              "postDate": "2025-12-31T03:37:52.477Z",
              "content": "<p>thanks for the suggestion. i am trying different encoding method. i hope to reduce the train/valid error to less than 0.5/0.7 before trying filtering.</p>",
              "rawMarkdown": "thanks for the suggestion. i am trying different encoding method. i hope to reduce the train/valid error to less than 0.5/0.7 before trying filtering."
            },
            {
              "id": 3383883,
              "postDate": "2025-12-31T03:41:02.233Z",
              "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc619648a0ebfbc1e292ec90b4c1f4ff3%2FSelection_1975.png?generation=1767152642865412&amp;alt=media\" alt=\"\"></p>\n<p>after understanding how mask former works, i redesign the encoding and reduce previous error from 1.8 to 0.7 l1 loss. I need to finetune my unet. instead of fg/bg binary class, it should be 8+1 class. each pixel should be lablled bg or directed line.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa1360c6c697655be53c241977c41177d%2FPeek%202025-12-31%2011-04.gif?generation=1767152353575040&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F23dc2c6e74df366df87d8941ac801982%2FPeek%202025-12-31%2011-03.gif?generation=1767152385013169&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd10528fb7735c1adb6e24ca9c3d47917%2FSelection_1968.png?generation=1767152657791927&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc619648a0ebfbc1e292ec90b4c1f4ff3%2FSelection_1975.png?generation=1767152642865412&alt=media)\n\nafter understanding how mask former works, i redesign the encoding and reduce previous error from 1.8 to 0.7 l1 loss. I need to finetune my unet. instead of fg/bg binary class, it should be 8+1 class. each pixel should be lablled bg or directed line.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa1360c6c697655be53c241977c41177d%2FPeek%202025-12-31%2011-04.gif?generation=1767152353575040&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F23dc2c6e74df366df87d8941ac801982%2FPeek%202025-12-31%2011-03.gif?generation=1767152385013169&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd10528fb7735c1adb6e24ca9c3d47917%2FSelection_1968.png?generation=1767152657791927&alt=media)"
            },
            {
              "id": 3383889,
              "postDate": "2025-12-31T03:53:33.017Z",
              "content": "<p>Looks like a year-old dirty AC filter</p>",
              "rawMarkdown": "Looks like a year-old dirty AC filter",
              "votes": 1
            },
            {
              "id": 3383908,
              "postDate": "2025-12-31T05:09:06.627Z",
              "content": "<p>3d patchwise modeling will be more smooth and has less parameters</p>",
              "rawMarkdown": "3d patchwise modeling will be more smooth and has less parameters"
            },
            {
              "id": 3383978,
              "postDate": "2025-12-31T08:43:14.503Z",
              "content": "<p>Do you code yourself or assisted by ai or you just tell ai what's the plan?? am asking cause more I code with ai, more i can feel my brain shrinking, but when i code by myself I feel like I am taking too much time.</p>",
              "rawMarkdown": "Do you code yourself or assisted by ai or you just tell ai what's the plan?? am asking cause more I code with ai, more i can feel my brain shrinking, but when i code by myself I feel like I am taking too much time."
            },
            {
              "id": 3384066,
              "postDate": "2025-12-31T12:09:58.190Z",
              "content": "<p>whether it is AI's code, my code or my teammate's code, i am only interested in one question: how to make sure the code is correct</p>",
              "rawMarkdown": "whether it is AI's code, my code or my teammate's code, i am only interested in one question: how to make sure the code is correct"
            },
            {
              "id": 3384102,
              "postDate": "2025-12-31T13:54:23.983Z",
              "content": "<p><a href=\"https://www.kaggle.com/tom\" target=\"_blank\">@tom</a>  no more dirty AC filter\n(raw results, NO median/lapalcian filter)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff82d683055c901c22007d39085a9df47%2FPeek%202025-12-31%2021-49a.gif?generation=1767189148557251&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fff282b3fe46bbe8f0710e0c2ced44791%2FPeek%202025-12-31%2021-50.gif?generation=1767189163442525&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fcfa6152a93ef3e52cc5ed3e4c3ecc941%2FPeek%202025-12-31%2021-49.gif?generation=1767189182431381&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "@tom  no more dirty AC filter\n(raw results, NO median/lapalcian filter)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff82d683055c901c22007d39085a9df47%2FPeek%202025-12-31%2021-49a.gif?generation=1767189148557251&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fff282b3fe46bbe8f0710e0c2ced44791%2FPeek%202025-12-31%2021-50.gif?generation=1767189163442525&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fcfa6152a93ef3e52cc5ed3e4c3ecc941%2FPeek%202025-12-31%2021-49.gif?generation=1767189182431381&alt=media)",
              "votes": 1
            },
            {
              "id": 3384392,
              "postDate": "2026-01-01T07:05:34.887Z",
              "content": "<p>Are you querying in all 3 axes then compositing them to form these surfaces?</p>",
              "rawMarkdown": "Are you querying in all 3 axes then compositing them to form these surfaces?"
            },
            {
              "id": 3384410,
              "postDate": "2026-01-01T07:41:27.863Z",
              "content": "<p>i use two. because some lines are almost vertical and some are horizontal</p>",
              "rawMarkdown": "i use two. because some lines are almost vertical and some are horizontal",
              "votes": 1
            },
            {
              "id": 3384723,
              "postDate": "2026-01-01T19:21:27.657Z",
              "content": "<p><a href=\"https://www.kaggle.com/sroger\" target=\"_blank\">@sroger</a> \n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8afea1987e86432685ee93a306c0f22b%2FSelection_1979.png?generation=1767295284934977&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "@sroger \n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8afea1987e86432685ee93a306c0f22b%2FSelection_1979.png?generation=1767295284934977&alt=media)"
            },
            {
              "id": 3384785,
              "postDate": "2026-01-02T00:37:49.590Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3384942,
              "postDate": "2026-01-02T09:23:54.387Z",
              "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> I'm trying to understand, do correct me if I'm wrong.\nOverall, you're using a maskformer-esque architecture without outputting masks but instead outputting keypoints for regression?\n(Does that also mean you figured out bipartite/hungarian loss on GPU?)</p>\n<p>From your diagram, are you averaging the z obtained from the two surfaces?</p>",
              "rawMarkdown": "@hengck23 I'm trying to understand, do correct me if I'm wrong.\nOverall, you're using a maskformer-esque architecture without outputting masks but instead outputting keypoints for regression?\n(Does that also mean you figured out bipartite/hungarian loss on GPU?)\n\nFrom your diagram, are you averaging the z obtained from the two surfaces?"
            },
            {
              "id": 3384945,
              "postDate": "2026-01-02T09:32:48.850Z",
              "content": "<p>please see code (including Hungarian matching and loss) at:\n<a href=\"https://www.kaggle.com/code/hengck23/placeholder-instance-3d-surface-segmentation\" target=\"_blank\">https://www.kaggle.com/code/hengck23/placeholder-instance-3d-surface-segmentation</a></p>\n<p>in summary:</p>\n<pre><code>volume --&gt;encoder --&gt; decoder --&gt; mask, decoder feature\ndecoder feature --&gt; instance decoder (maskformer) --&gt; instance regression surface\n</code></pre>\n<p>it only implements 1 surface.\nI also have a solution for 2 surfaces but it is not public code yet\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F477bbeea79f208ee2498436245188765%2FSelection_1993.png?generation=1767346363870847&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "please see code (including Hungarian matching and loss) at:\nhttps://www.kaggle.com/code/hengck23/placeholder-instance-3d-surface-segmentation\n\nin summary:\n```\nvolume -->encoder --> decoder --> mask, decoder feature\ndecoder feature --> instance decoder (maskformer) --> instance regression surface\n\n```\n\n\nit only implements 1 surface.\nI also have a solution for 2 surfaces but it is not public code yet\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F477bbeea79f208ee2498436245188765%2FSelection_1993.png?generation=1767346363870847&alt=media)\n",
              "votes": 1
            }
          ]
        }
      ]
    },
    {
      "id": 3380196,
      "postDate": "2025-12-21T19:57:37.827Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F796fb2e22f680535bef8fb1fce621451%2FScreenshot%202025-12-22%20011330.png?generation=1766346238823625&amp;alt=media\" alt=\"\"></p>\n<p>The Orig Prob [merged] is the probability thresholded at 0.9 which get's LB score of 0.512.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F7d7e56031105bdc3f6248233d25104cd%2FScreenshot%202025-12-22%20011214.png?generation=1766346181736399&amp;alt=media\" alt=\"\"></p>\n<p>I found a small observation, it might be common and recurring but am doing such competition for the first time so idk, Here is a case which shows how simply thresholding might not be the best idea, there is an ambiguous region with very high probab pred, so when we put a low threshold it makes a blob, but with higher threshold trying to fix such blobs, the lines start to break making holes.</p>\n<p>In the probab pred, with human eyes the lines are very clearly visible, so I was trying to find methods to extract a cleaner output from that. I found this filter called Meijering which does this work pretty well, I tried many other things but this one was yet the best one. But the problem is that this is very slow to compute in 3d, and computing in 2d slice wise breaks the continuity making many components which reduces the competition metric (by nearly 0.1 on easy examples) even though it looks better in 2d.</p>\n<p>Maybe A* with a good heuristic can be good, but haven't explored that yet. Have you guys tried anything similar, or any recommended directions for this problem (of finding a suitable prediction from the probability output).</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F796fb2e22f680535bef8fb1fce621451%2FScreenshot%202025-12-22%20011330.png?generation=1766346238823625&alt=media)\n\n\nThe Orig Prob [merged] is the probability thresholded at 0.9 which get's LB score of 0.512.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F7d7e56031105bdc3f6248233d25104cd%2FScreenshot%202025-12-22%20011214.png?generation=1766346181736399&alt=media)\n\nI found a small observation, it might be common and recurring but am doing such competition for the first time so idk, Here is a case which shows how simply thresholding might not be the best idea, there is an ambiguous region with very high probab pred, so when we put a low threshold it makes a blob, but with higher threshold trying to fix such blobs, the lines start to break making holes.\n\n In the probab pred, with human eyes the lines are very clearly visible, so I was trying to find methods to extract a cleaner output from that. I found this filter called Meijering which does this work pretty well, I tried many other things but this one was yet the best one. But the problem is that this is very slow to compute in 3d, and computing in 2d slice wise breaks the continuity making many components which reduces the competition metric (by nearly 0.1 on easy examples) even though it looks better in 2d.\n\nMaybe A* with a good heuristic can be good, but haven't explored that yet. Have you guys tried anything similar, or any recommended directions for this problem (of finding a suitable prediction from the probability output).",
      "replies": [
        {
          "id": 3380214,
          "postDate": "2025-12-21T22:01:56.800Z",
          "content": "<p>I did not try Meijering filter. But if you think it work and want to speed up, you can run at lower resolution, or at problematic region ( instead of whole volume) or train a cnn to output same results </p>",
          "rawMarkdown": "I did not try Meijering filter. But if you think it work and want to speed up, you can run at lower resolution, or at problematic region ( instead of whole volume) or train a cnn to output same results ",
          "votes": 1
        }
      ]
    },
    {
      "id": 3379546,
      "postDate": "2025-12-20T04:45:55.180Z",
      "content": "<p>super solution. my friend without progamming and machine learning knowlege suggest a commonsense approach. And it works!</p>\n<p>(for simplicity, i skip tricks to use absolute of relative coords, implement iiiin 3d, having logit to indicate existence of pointsetc …)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5817d625cbe2b644e33485d43919f6e5%2FSelection_1771.png?generation=1766205953004613&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "super solution. my friend without progamming and machine learning knowlege suggest a commonsense approach. And it works!\n\n(for simplicity, i skip tricks to use absolute of relative coords, implement iiiin 3d, having logit to indicate existence of pointsetc ...)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5817d625cbe2b644e33485d43919f6e5%2FSelection_1771.png?generation=1766205953004613&alt=media)",
      "replies": [
        {
          "id": 3379548,
          "postDate": "2025-12-20T04:47:38.470Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> can I see the example of harder case?</p>",
          "rawMarkdown": "@hengck23 can I see the example of harder case?"
        }
      ]
    },
    {
      "id": 3378362,
      "postDate": "2025-12-18T00:24:10.693Z",
      "content": "<p>another paper worth reading. It detects the critical regions shown in red in the last 2 pictures<br>\n<a href=\"https://arxiv.org/pdf/2501.01022\" target=\"_blank\">https://arxiv.org/pdf/2501.01022</a><br>\n<a href=\"https://github.com/AllenNeuralDynamics/supervoxel-loss\" target=\"_blank\">https://github.com/AllenNeuralDynamics/supervoxel-loss</a>  </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa417986747308baf7e42460f74544362%2FSelection_1760.png?generation=1766017361391211&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb4eed5c12b71cdd9ead4fc036c6e026c%2FSelection_1758.png?generation=1766017375982271&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F739cc4496bfb4a30591aeda1e4c1e8fe%2FSelection_1761.png?generation=1766017387720654&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4b50565e9468b53824e7a2b389de6f64%2FSelection_1759.png?generation=1766017407359818&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "another paper worth reading. It detects the critical regions shown in red in the last 2 pictures  \nhttps://arxiv.org/pdf/2501.01022  \nhttps://github.com/AllenNeuralDynamics/supervoxel-loss  \n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa417986747308baf7e42460f74544362%2FSelection_1760.png?generation=1766017361391211&alt=media)\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb4eed5c12b71cdd9ead4fc036c6e026c%2FSelection_1758.png?generation=1766017375982271&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F739cc4496bfb4a30591aeda1e4c1e8fe%2FSelection_1761.png?generation=1766017387720654&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4b50565e9468b53824e7a2b389de6f64%2FSelection_1759.png?generation=1766017407359818&alt=media)",
      "replies": [
        {
          "id": 3378401,
          "postDate": "2025-12-18T03:44:24.430Z",
          "content": "<p>I am also experimenting with this loss, but the original calculation is very slow. I have made some efficiency optimizations and am currently verifying consistency</p>",
          "rawMarkdown": "I am also experimenting with this loss, but the original calculation is very slow. I have made some efficiency optimizations and am currently verifying consistency",
          "replies": [
            {
              "id": 3379614,
              "postDate": "2025-12-20T08:44:04.047Z",
              "content": "<p>Same results here, too slow to be usable. There is a cupy implementation by the competition host though, haven't tried it yet.</p>",
              "rawMarkdown": "Same results here, too slow to be usable. There is a cupy implementation by the competition host though, haven't tried it yet."
            },
            {
              "id": 3379642,
              "postDate": "2025-12-20T09:32:34.293Z",
              "content": "<p>I had claudecode help me implement an optimized version. It is fast and usable, but it did not show superiority during training. It might be an implementation issue.<br>\n<a href=\"https://github.com/wzyfromhust/supervoxel-loss\" target=\"_blank\">https://github.com/wzyfromhust/supervoxel-loss</a></p>",
              "rawMarkdown": "I had claudecode help me implement an optimized version. It is fast and usable, but it did not show superiority during training. It might be an implementation issue.  \nhttps://github.com/wzyfromhust/supervoxel-loss"
            },
            {
              "id": 3379646,
              "postDate": "2025-12-20T09:57:22.853Z",
              "content": "<p>You don’t have to apply for all train samples. Less than 10% has touching error. </p>\n<p>Another trick is really first use your old method and train a model. Then do inference with old model. Use the loss code to identify fp and pn. Use this to set the weights and save them. In new training, just use the weight. You should see improvements.  Alternatively use fp and fn to modify the ground truth etc. in summary, think of ways to see results without full implementations if u have speed issues </p>",
              "rawMarkdown": "You don’t have to apply for all train samples. Less than 10% has touching error. \n\nAnother trick is really first use your old method and train a model. Then do inference with old model. Use the loss code to identify fp and pn. Use this to set the weights and save them. In new training, just use the weight. You should see improvements.  Alternatively use fp and fn to modify the ground truth etc. in summary, think of ways to see results without full implementations if u have speed issues ",
              "votes": 2
            }
          ]
        }
      ]
    },
    {
      "id": 3376870,
      "postDate": "2025-12-15T10:18:22.740Z",
      "content": "<p>interesting paper</p>\n<p>google \"convolution distance transform\" for more, eg:</p>\n<p>[1] Differentiable Topology-Preserved Distance Transform for Pulmonary Airway Segmentation\nMinghui Zhang, G<br>\n<a href=\"https://arxiv.org/pdf/2209.08355\" target=\"_blank\">https://arxiv.org/pdf/2209.08355</a></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8a76922304bcfe16c100f7511e8bb226%2FSelection_1751.png?generation=1765793832169361&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "interesting paper\n\ngoogle \"convolution distance transform\" for more, eg:\n\n[1] Differentiable Topology-Preserved Distance Transform for Pulmonary Airway Segmentation\nMinghui Zhang, G  \nhttps://arxiv.org/pdf/2209.08355\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8a76922304bcfe16c100f7511e8bb226%2FSelection_1751.png?generation=1765793832169361&alt=media)\n\n",
      "replies": [
        {
          "id": 3376897,
          "postDate": "2025-12-15T11:27:02.343Z",
          "content": "<p>This part is specifically interesting.  (from fig 2)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1984321%2Fcd5f40f17f84c54f776b6156f26c2226%2FScreenshot%202025-12-15%20172618.png?generation=1765797997354016&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "This part is specifically interesting.  (from fig 2)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1984321%2Fcd5f40f17f84c54f776b6156f26c2226%2FScreenshot%202025-12-15%20172618.png?generation=1765797997354016&alt=media)"
        }
      ]
    },
    {
      "id": 3375589,
      "postDate": "2025-12-12T23:39:06.137Z",
      "content": "<p>1) Instead of classifying each pixel as foreground or background<br>\n2) Divide curvature using their angential angle into bins,say 10,20,30 …. 90 degrees …<br>\n3) do multiclass classification<br>\ni</p>",
      "rawMarkdown": "\n1) Instead of classifying each pixel as foreground or background   \n2) Divide curvature using their angential angle into bins,say 10,20,30 .... 90 degrees ...  \n3) do multiclass classification   \n\ni"
    },
    {
      "id": 3369979,
      "postDate": "2025-12-10T13:51:19.563Z",
      "content": "<p>path search using conv\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fdb662fe61298a9c6b815b77df70af4a4%2FSelection_1678.png?generation=1765374582190391&amp;alt=media\" alt=\"\"></p>\n<p>these are special line integral filters … do a nxn conv2d, then follow by channelwise argmax is a greedy path search ….</p>\n<p>can also be used to encode parameteric curve …</p>",
      "rawMarkdown": "path search using conv\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fdb662fe61298a9c6b815b77df70af4a4%2FSelection_1678.png?generation=1765374582190391&alt=media)\n\nthese are special line integral filters ... do a nxn conv2d, then follow by channelwise argmax is a greedy path search ....\n\ncan also be used to encode parameteric curve ..."
    },
    {
      "id": 3368183,
      "postDate": "2025-12-09T03:36:17.227Z",
      "content": "<p>I don't get when the model is able to learn this much detail, then why isn't a 160m parameter model able to understand the next steps which seem very simple to an human eye, i.e. fitting  sort of curves on high probability regions. Whenever I run for my model for more than 3-4 epochs. It then starts forming thick lines which start to overlap. I have tried tversky, cldice, bce losses.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Ffbb36700e807ea904987edce51db69b0%2FScreenshot%202025-12-09%20090240.png?generation=1765251308784744&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": " I don't get when the model is able to learn this much detail, then why isn't a 160m parameter model able to understand the next steps which seem very simple to an human eye, i.e. fitting  sort of curves on high probability regions. Whenever I run for my model for more than 3-4 epochs. It then starts forming thick lines which start to overlap. I have tried tversky, cldice, bce losses.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Ffbb36700e807ea904987edce51db69b0%2FScreenshot%202025-12-09%20090240.png?generation=1765251308784744&alt=media)\n",
      "replies": [
        {
          "id": 3368191,
          "postDate": "2025-12-09T03:48:47.973Z",
          "content": "<p>there are 2 solutions: model or data.\nI suggest you focus on data first because my results are better. Here are a few experiments you can try (physically or mentally, aka thought experiments)</p>\n<p>1) overfitting  train data: start with 2d then 3d unet, simple resnet and go deeper and deeper … maybe we increase larger context to convnext and then global context to transformer.</p>\n<p>Question: can we come to a point where there is zero error in train data?\nif the answer is YES, then \"model is able to learn this much detail?\" … yes model can learn this detail given enough context and parameters<br>\nif the answer is NO, then something wrong with label (same input different label) or your loss is wrong</p>\n<p>(further imagine if i reduce train sample to 100, 10, 1 for overfit, surely the train error can be zero. if it still doesn't, you can confirm loss loss since one sample can't have wrong label) </p>\n<p>2)generalising to validation data: if the train data can do it then it is a matter of more data (or more augmentation) to get good results for validation set.</p>\n<p>it will make a post for augmentation later</p>",
          "rawMarkdown": "there are 2 solutions: model or data.\nI suggest you focus on data first because my results are better. Here are a few experiments you can try (physically or mentally, aka thought experiments)\n\n1) overfitting  train data: start with 2d then 3d unet, simple resnet and go deeper and deeper ... maybe we increase larger context to convnext and then global context to transformer.\n\nQuestion: can we come to a point where there is zero error in train data?\nif the answer is YES, then \"model is able to learn this much detail?\" ... yes model can learn this detail given enough context and parameters   \nif the answer is NO, then something wrong with label (same input different label) or your loss is wrong\n\n(further imagine if i reduce train sample to 100, 10, 1 for overfit, surely the train error can be zero. if it still doesn't, you can confirm loss loss since one sample can't have wrong label) \n\n\n2)generalising to validation data: if the train data can do it then it is a matter of more data (or more augmentation) to get good results for validation set.\n\nit will make a post for augmentation later\n",
          "votes": 3,
          "replies": [
            {
              "id": 3368217,
              "postDate": "2025-12-09T04:16:28.780Z",
              "content": "<p>futher tips:</p>\n<ul>\n<li>my setup: 3d resnet [2,3,3,3] encoder. 3d resnet decoder</li>\n<li>you can skeletonize to one pixel for experiment . input at 0.5 scale (i use 160x160) for experiment. but in actual submission i will use fulll resolution with thicker line.</li>\n<li>training typically needs many epochs … i use fix rate 1e-3 and train 100+ epochs in debug. i add augmentation until the train and validation loss converge and validation will not get worse  even after prolonged training</li>\n<li>the line may get thick first (least majority error) but it should converge to the thin ground truth (overfitting) for the train set.</li>\n</ul>\n<p>line is thick means:\nGemini3: The model is minimizing False Negatives (missing the ink) by casting a wide net. It is \"hedging its bets.\" This causes the sheets to merge.</p>\n<p>line is thin means: reducing FP</p>",
              "rawMarkdown": "futher tips:\n- my setup: 3d resnet [2,3,3,3] encoder. 3d resnet decoder\n- you can skeletonize to one pixel for experiment . input at 0.5 scale (i use 160x160) for experiment. but in actual submission i will use fulll resolution with thicker line.\n- training typically needs many epochs ... i use fix rate 1e-3 and train 100+ epochs in debug. i add augmentation until the train and validation loss converge and validation will not get worse  even after prolonged training\n- the line may get thick first (least majority error) but it should converge to the thin ground truth (overfitting) for the train set.\n\nline is thick means:\nGemini3: The model is minimizing False Negatives (missing the ink) by casting a wide net. It is \"hedging its bets.\" This causes the sheets to merge.\n\nline is thin means: reducing FP\n",
              "votes": 1
            },
            {
              "id": 3368376,
              "postDate": "2025-12-09T07:23:58.877Z",
              "content": "<p>The supervision is very weak (due to label/image inconsistency). here is after 500 epoch.\nvisualisation may be more trust worthy than the loss numbers</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F480fe042ff7fb50b5a36f517cbdc59c0%2FSelection_1636.png?generation=1765265008879704&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "The supervision is very weak (due to label/image inconsistency). here is after 500 epoch.\nvisualisation may be more trust worthy than the loss numbers\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F480fe042ff7fb50b5a36f517cbdc59c0%2FSelection_1636.png?generation=1765265008879704&alt=media)",
              "votes": 2
            },
            {
              "id": 3368394,
              "postDate": "2025-12-09T07:37:33.867Z",
              "content": "<p>500 epochs !?, how much time does it take for your pc to run that many epochs? for me it takes 4 hours per epoch on kaggle🥲. Also yeah, compared to yours  mine looks real mess, will try running more epochs with focus on trying to learn atleast the training data. My input is 3 contiguous slices of 224x224 with batch size of 18 , maybe I should try smaller inputs/models.</p>",
              "rawMarkdown": "500 epochs !?, how much time does it take for your pc to run that many epochs? for me it takes 4 hours per epoch on kaggle🥲. Also yeah, compared to yours  mine looks real mess, will try running more epochs with focus on trying to learn atleast the training data. My input is 3 contiguous slices of 224x224 with batch size of 18 , maybe I should try smaller inputs/models."
            },
            {
              "id": 3368400,
              "postDate": "2025-12-09T07:43:03.107Z",
              "content": "<p>I don’t think you can get good results from 3 slides. I am using 160 cube. You need to infer from top and bottom if the lines are broken or touching, the context is in 3d. I am using local pc, about 2 min per epoch</p>",
              "rawMarkdown": "I don’t think you can get good results from 3 slides. I am using 160 cube. You need to infer from top and bottom if the lines are broken or touching, the context is in 3d. I am using local pc, about 2 min per epoch"
            },
            {
              "id": 3368406,
              "postDate": "2025-12-09T07:51:49.740Z",
              "content": "<p>I am using a 2.5D attention based architecture called CSA-Net (<a href=\"https://arxiv.org/pdf/2405.00130)\" target=\"_blank\">https://arxiv.org/pdf/2405.00130)</a>, i thought it would save me compute time while having context of close-by neighbours, I have increased the context from the neighbors from 1 as given in the paper, to 5 each side. Will switch to standard unets, if experimentations on this model don't work out.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F37c7139689e74cbf5d8c564f6ff76673%2Fcsanet.png?generation=1765266601496551&amp;alt=media\" alt=\"\"></p>",
              "rawMarkdown": "I am using a 2.5D attention based architecture called CSA-Net (https://arxiv.org/pdf/2405.00130), i thought it would save me compute time while having context of close-by neighbours, I have increased the context from the neighbors from 1 as given in the paper, to 5 each side. Will switch to standard unets, if experimentations on this model don't work out.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F37c7139689e74cbf5d8c564f6ff76673%2Fcsanet.png?generation=1765266601496551&alt=media)"
            }
          ]
        }
      ]
    },
    {
      "id": 3367913,
      "postDate": "2025-12-08T20:15:01.713Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8908ea842c80cb4a8d64f56b157de33f%2FSelection_1612.png?generation=1765224869553314&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8c57e1e3467412d5e1255ce07ef71c87%2FSelection_1613.png?generation=1765224899923036&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8908ea842c80cb4a8d64f56b157de33f%2FSelection_1612.png?generation=1765224869553314&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8c57e1e3467412d5e1255ce07ef71c87%2FSelection_1613.png?generation=1765224899923036&alt=media)"
    },
    {
      "id": 3367032,
      "postDate": "2025-12-08T06:41:54.723Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4714d3bcb2db30078e11f9f920b9b4ec%2FSelection_1594.png?generation=1765176113034935&amp;alt=media\" alt=\"\"></p>\n<p>it \"doesn't matter\" which path it takes as long as the start and end points are fixed. wrong path (no hole) is better than no path (hole). even for humans the path seems ambiguous sometimes … ideally, a probabilistic diffusion denoising may help. i recall this is very much like tracking kaggle NFL player:</p>\n<pre><code>input = [xy_history | xy_future    ] \n</code></pre>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4714d3bcb2db30078e11f9f920b9b4ec%2FSelection_1594.png?generation=1765176113034935&alt=media)\n\nit \"doesn't matter\" which path it takes as long as the start and end points are fixed. wrong path (no hole) is better than no path (hole). even for humans the path seems ambiguous sometimes ... ideally, a probabilistic diffusion denoising may help. i recall this is very much like tracking kaggle NFL player:\n\n```\ninput = [xy_history | xy_future set to unknown ] --> trajectory inpaint transformer = [xy_history | xy_future predict]\n\n```"
    },
    {
      "id": 3362673,
      "postDate": "2025-12-05T05:46:18.617Z",
      "content": "<p>There might be a shortcut solution without using homology at all. Instead, focus on instance-aware segmentation (instead of semantic segmentation). As some of you know, i am concurrently taking part in the ECG kaggle digitslization competition. I need to detect and separate grid lines.    </p>\n<p>Here you can label sheet into even sheet and odd sheet. Hence the segmentation learns to detect non touching sheet. this is repetitive pattern, idea for CNN.    </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2cc562460231b7112babdb2e51e051d6%2FSelection_1462.png?generation=1764913488552324&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd4e10ee8e3ffc77dc523db9025cceeab%2FSelection_1461.png?generation=1764913501713487&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "There might be a shortcut solution without using homology at all. Instead, focus on instance-aware segmentation (instead of semantic segmentation). As some of you know, i am concurrently taking part in the ECG kaggle digitslization competition. I need to detect and separate grid lines.    \n\nHere you can label sheet into even sheet and odd sheet. Hence the segmentation learns to detect non touching sheet. this is repetitive pattern, idea for CNN.    \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2cc562460231b7112babdb2e51e051d6%2FSelection_1462.png?generation=1764913488552324&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd4e10ee8e3ffc77dc523db9025cceeab%2FSelection_1461.png?generation=1764913501713487&alt=media)",
      "replies": [
        {
          "id": 3362678,
          "postDate": "2025-12-05T05:51:39.050Z",
          "content": "<p>Farthest-point-sampling would be a good choice:</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F13781eb39475d9cf5c83effd3fb0ac32%2F123.png?generation=1764913897288830&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "Farthest-point-sampling would be a good choice:\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F13781eb39475d9cf5c83effd3fb0ac32%2F123.png?generation=1764913897288830&alt=media)"
        },
        {
          "id": 3362683,
          "postDate": "2025-12-05T05:58:06.887Z",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F15c184c1eb4bfdde42e12c03664a35bc%2FSelection_1465.png?generation=1764914284981407&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4f6cff5d99593e9b153493f997d5e88d%2FSelection_1464.png?generation=1764914209529151&amp;alt=media\" alt=\"\"></p>\n<p>i think i have a better solution then AI 😁</p>",
          "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F15c184c1eb4bfdde42e12c03664a35bc%2FSelection_1465.png?generation=1764914284981407&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4f6cff5d99593e9b153493f997d5e88d%2FSelection_1464.png?generation=1764914209529151&alt=media)\n\ni think i have a better solution then AI 😁"
        }
      ]
    },
    {
      "id": 3362170,
      "postDate": "2025-12-04T09:02:19.333Z",
      "content": "<p>if you got time, use vibe coding to make a web app that manually improve topology score using manual \"selection and mouse click\" from unet segmentation results. this could be used in special prize and also gives insights and supervised data for post processing, etc. After some manual improvement, think of how to automate or learn this human task.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2adfec96225f764ae3e5238620c8a33f%2FSelection_1438.png?generation=1764849448668703&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "if you got time, use vibe coding to make a web app that manually improve topology score using manual \"selection and mouse click\" from unet segmentation results. this could be used in special prize and also gives insights and supervised data for post processing, etc. After some manual improvement, think of how to automate or learn this human task.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2adfec96225f764ae3e5238620c8a33f%2FSelection_1438.png?generation=1764849448668703&alt=media)"
    },
    {
      "id": 3362034,
      "postDate": "2025-12-04T05:26:29.440Z",
      "content": "<p>Master Frog, please carry me!</p>",
      "rawMarkdown": "Master Frog, please carry me!"
    },
    {
      "id": 3369146,
      "postDate": "2025-12-09T18:56:06.367Z",
      "content": "<p>Thank you for the visualisation!</p>",
      "rawMarkdown": "Thank you for the visualisation!"
    }
  ],
  "comments": [
    {
      "id": 3375726,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-13T02:22:02.607000",
      "content": "<p>good news. after a 4-day struggle (due to bug), here is the good results. from manual line tracing to learned tracing:</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7160f3db51a29130a2144889e144d463%2FSelection_1740.png?generation=1765592479704081&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd108603d38bb44cf8455039477ad5546%2FSelection_1742.png?generation=1765592492422206&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F98cd15731dd16d674b1556c4a77fac4c%2FPeek%202025-12-13%2009-46.gif?generation=1765592507216139&amp;alt=media\" alt=\"\"></p>\n<pre><code>inference loop:\n\nwhile not end:\n    y,x = curve[-1]\n    path = model_regression_output[y,x]\n    curve = curve + path\n</code></pre>\n<p>`</p>\n<p>input is 3d and all convolution are 3d, though i show results in slice</p>",
      "votes": 7,
      "replies": [
        {
          "id": 3375753,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-13T03:43:40.297000",
          "content": "<p>results on random start points for stress test. in actual inference, we will seed from high probability pixel locations instead</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6e804e660e16bf88afa7439ade5d80ed%2FPeek%202025-12-13%2011-43.gif?generation=1765597418356451&amp;alt=media\" alt=\"\"></p>\n<p>more difficult image:<br>\nLeft: image slice, Right: probability and tracing\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa3e1745c270d8db4fb672395dea7b214%2FPeek%202025-12-13%2012-02.gif?generation=1765598599849106&amp;alt=media\" alt=\"\"></p>",
          "votes": 2,
          "replies": [
            {
              "id": 3376453,
              "author_name": "ryches",
              "author_url": "",
              "post_date": "2025-12-14T14:26:03.353000",
              "content": "<p><a href=\"https://github.com/ryanchesler/ants\" target=\"_blank\">https://github.com/ryanchesler/ants</a></p>\n<p>Might be of interest to you. Worked on this a long time ago</p>",
              "votes": 7,
              "replies": []
            },
            {
              "id": 3376478,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-14T15:01:49.637000",
              "content": "<p><a href=\"https://www.kaggle.com/ryches\" target=\"_blank\">@ryches</a> Thanks for sharing</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3376725,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-15T02:47:55.553000",
              "content": "<p><a href=\"https://www.kaggle.com/ryches\" target=\"_blank\">@ryches</a> \nthanks for the code. it is very close to what i have in mind. i will release my version soon.</p>\n<ul>\n<li>no need to normalise slice direction by rotation</li>\n<li>future points can be in either direction, for startpoint or endpoint</li>\n</ul>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3377000,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-15T14:06:48.427000",
              "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  suppose we have multiple oofs, I think this approach is better.</p>\n<pre><code>anchor_points = boundary_start_points #initial points\nwhile not end:\n    points_t = Query(anchor_points, oof1, oof2, oof3,.., valid_area, radius)\n    v_t = model(point_t) for each point_t in points_t\n    anchor_points = Update(points_t, {v_t})\n</code></pre>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3377098,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-15T17:41:56.680000",
              "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a> \nthanks! i tried this before. it works, but i have problems with the efficiency (memory and computation time), so i temporary give up.  I use the architecture:</p>\n<pre><code>3d/2.5d encoder --&gt; prob and threshold for seed --&gt; curve fragment as seq query, feature map as memory --&gt; transformer --&gt; traced curve\n</code></pre>\n<p>the trick i use is:</p>\n<pre><code>curve fragment  = concat(current point | future point to be traced)\n</code></pre>\n<p>i did not do oof, but use detached and end to end.</p>",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3369783,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-10T10:40:16.683000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5cc6afc75b49056b552149a3ed2d609a%2FSelection_1674.png?generation=1765363214521450&amp;alt=media\" alt=\"\"></p>",
      "votes": 5,
      "replies": [
        {
          "id": 3369804,
          "author_name": "Innat",
          "author_url": "",
          "post_date": "2025-12-10T11:06:11.520000",
          "content": "<p>I also observed the same. Not sure if its wrong label or not. Especially the while circle area.\ncc <a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>",
          "votes": 0,
          "replies": [
            {
              "id": 3369886,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-10T12:26:48.697000",
              "content": "<p>It is becuase the annotation could be using some label propagation or interpolation. Eg annotation size every 10 slices interpolation in-between.  </p>\n<p>Also it is difficult actually for human to label, so instead of prioritising correctness, connecting the points is more important because we can refine the surface later ( eg snapping from air to voxel)?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3369897,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-10T12:39:25.523000",
              "content": "<p>Based on my observation, predicting a pixel confidently as fg or bg is difficult. But predicting the most likely location  of the surface pixel ( within a local neighbourhood) is easy. </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5d921fb0699e8b25ee6eba94483c217f%2FSelection_1676.png?generation=1765370669256755&amp;alt=media\" alt=\"\"></p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3370022,
              "author_name": "Giorgio Angelotti",
              "author_url": "",
              "post_date": "2025-12-10T14:25:57.197000",
              "content": "<p>Labels are created by voxelization of quadmeshes. The step size between adjacent nodes in the meshes should be around 20 if I am not mistaken ( <a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> ). Also, to facilitate annotation sometimes meshes are copied inward or outward (along the normal direction) and then manually \"pushed\" to right position in a local neighbourhood. These could explain the \"artifacts\" you notice.</p>",
              "votes": 2,
              "replies": []
            }
          ]
        },
        {
          "id": 3370024,
          "author_name": "Giorgio Angelotti",
          "author_url": "",
          "post_date": "2025-12-10T14:26:59.477000",
          "content": "<p><a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> is the second circle in right image a kollesis?</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3370411,
              "author_name": "Sean Johnson_SP",
              "author_url": "",
              "post_date": "2025-12-10T18:52:05.607000",
              "content": "<p>It looks more like a horizontal fiber to me, but its tough to say for certain.  </p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3382504,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-27T17:52:47.493000",
      "content": "<p>any good idea to construct ordered sheet loss?\ne.g truth of first sheet is z1,y1,x1, then second sheet is z2,y1+dy2,x1+dx2 … here dy,dx are non-negative …</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7e934243b278e57c5846ea697bb66d65%2FSelection_1910.png?generation=1766857851166864&amp;alt=media\" alt=\"\"></p>",
      "votes": 3,
      "replies": [
        {
          "id": 3382526,
          "author_name": "Manas Choudhary",
          "author_url": "",
          "post_date": "2025-12-27T18:45:28.510000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4abda789e928fb5b1baa33cda79b61e6%2FScreenshot%202025-12-28%20000934.png?generation=1766860812776141&amp;alt=media\" alt=\"\"></p>\n<p>L(x) means loss at x distance from the sheet and x1 is seperation between the two sheets, sigma is a hyperparameter p(x) is prediction at x. We sum for all x and in between all layers. The intuition is, The more we are in the center of two sheets more it should be penalized, in basic probability(fg vs bg) predictions there is no meaning of different sheet. So if we use something like this, we can penalize predictions in center more, and still give model freedom to predict the sheets a bit off unlike simply penalizing false positives, because then model might start breaking lines (happened with me, i tried penalizing false positives).</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3382530,
              "author_name": "Manas Choudhary",
              "author_url": "",
              "post_date": "2025-12-27T18:51:38.133000",
              "content": "<p>in short penalizing probabilities in center, but not heavy penalizing near the sheets themselves, we can control the strictness via sigma. That 2 with 2*sigma^2  has no significance there, wrote it by mistake.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3382603,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-28T01:49:50.010000",
          "content": "<p>the next generation of LLM must understand PPT diagram. current chatgpt and gemini2 doesn't seems to have memory for image. It keeps on forgeting image context</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1cfffac20d929f5d13b9ea71819f84b0%2FSelection_1913.png?generation=1766886565262980&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1677bfdfc32a9bb096b2b4a35ede5083%2FSelection_1917.png?generation=1766887985059620&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe400482b8e5a211a6bd5dc172bc7b3cf%2FSelection_1920.png?generation=1766888742073614&amp;alt=media\" alt=\"\"></p>",
          "votes": 1,
          "replies": [
            {
              "id": 3382714,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-28T10:44:45.520000",
              "content": "<p>not my solution. it is purely from chatgpt, he is smart</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F1300e9245cb3210d90e6f89aa876a6c2%2FSelection_1927.png?generation=1766918683785473&amp;alt=media\" alt=\"\"></p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3382719,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-28T10:53:47.217000",
              "content": "<p>This approach is strong if you can give a good prior for the model.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3382721,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-28T11:09:26.450000",
              "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F9f2f9868783ab3c56a5b712c81458f78%2FSelection_1929.png?generation=1766920131853666&amp;alt=media\" alt=\"\"></p>\n<p>i don't give code here but you can show this image to chatgpt or gemini and he will write code and expalin to you</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3383252,
              "author_name": "Manas Choudhary",
              "author_url": "",
              "post_date": "2025-12-29T17:31:32.133000",
              "content": "<p>There is a very similar problem where we have to predict two surfaces of brain which shouldn't collide (in our case there can be many surfaces). It has  similar approach like what you are telling, But instead of assuming shapes and deforming them, In this approach collision free surface is extracted iteratively by refining sdf field. After which deformations are applied to topologically correct sheets. It's called SimCortex (<a href=\"https://arxiv.org/pdf/2507.06955\" target=\"_blank\">https://arxiv.org/pdf/2507.06955</a>)\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F4f76a483f093d349ef5a1baba601b34f%2FScreenshot%202025-12-29%20225142.png?generation=1767028950681278&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Fcae534dfc0febca454aad4425da8cf1c%2FScreenshot%202025-12-29%20225250.png?generation=1767028987589929&amp;alt=media\" alt=\"\"></p>\n<p>This framework lead to significantly lower collisions also.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F1583e0327f9bc48eca628252e44fc366%2FScreenshot%202025-12-29%20225335.png?generation=1767029063838270&amp;alt=media\" alt=\"\"></p>",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3383854,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-31T00:11:07.967000",
          "content": "<p>how the orginal maskformer paper work\n(which is the isntance segmentation head above)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fcd4a52a99eed85985ccc18e927e3ba4c%2FSelection_1967.png?generation=1767139866406926&amp;alt=media\" alt=\"\"></p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3362655,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-05T05:02:05.557000",
      "content": "<p>here is the visualisation!\n(iou = 0.75 for threshold = 0.5, 0.57 for threshold =0.85)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4977e39a22c71055af9de15f59981a1d%2FSelection_1460.png?generation=1764910910229356&amp;alt=media\" alt=\"\"> </p>\n<p>because the ground truth label eats into the air, the label are no good for training segmentation. hence it is inevitable that segmentation topology is bad.\n(i did not check but i suspect the even for non touching labels, the image are touching)</p>",
      "votes": 6,
      "replies": [
        {
          "id": 3362672,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-05T05:44:53.180000",
          "content": "<p>share our score case:</p>\n<table>\n<thead>\n<tr>\n<th>dice</th>\n<th>approx comp metric</th>\n<th>lb</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0.78</td>\n<td>0.62</td>\n<td>0.541</td>\n</tr>\n<tr>\n<td>0.768</td>\n<td>0.64</td>\n<td>0.554</td>\n</tr>\n</tbody>\n</table>",
          "votes": 3,
          "replies": [
            {
              "id": 3365234,
              "author_name": "dragon zhang",
              "author_url": "",
              "post_date": "2025-12-07T04:04:40.377000",
              "content": "<p>simiar dice, but lb &lt;0.5</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3362806,
          "author_name": "Navneet",
          "author_url": "",
          "post_date": "2025-12-05T10:41:43.850000",
          "content": "<p>Thank you for the visualisation! <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3363064,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-05T18:39:34.050000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F59924212ee48eae0e4ff3965cc0251f8%2FPeek%202025-12-06%2002-37.gif?generation=1764959971276579&amp;alt=media\" alt=\"\"></p>",
          "votes": 3,
          "replies": []
        }
      ]
    },
    {
      "id": 3368501,
      "author_name": "Tom",
      "author_url": "",
      "post_date": "2025-12-09T09:13:19.430000",
      "content": "<p>Here’s another idea for approaching this task differently: instead of predicting the mask directly, we can match the mask’s feature representation with that of the corresponding image. By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fdf93de5f41501a792b9ee3509aaf4d45%2FGSS2.png?generation=1765271597345111&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fbece7128800ea7f7c9f6d044318f53a8%2FGSS.png?generation=1765271269268425&amp;alt=media\" alt=\"\"></p>\n<p>reference: <a href=\"https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf</a></p>",
      "votes": 3,
      "replies": []
    },
    {
      "id": 3367331,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-08T11:06:52.100000",
      "content": "<p>update:\nhole filling code\n<a href=\"https://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes\" target=\"_blank\">https://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes</a></p>",
      "votes": 3,
      "replies": [
        {
          "id": 3367364,
          "author_name": "Sergio Alvarez",
          "author_url": "",
          "post_date": "2025-12-08T11:39:56.177000",
          "content": "<p>Thanks for sharing <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3367485,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-08T13:47:04.350000",
          "content": "<p>Thank you <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>. However, I’m seeing many non-existent holes being introduced using your approach, which causes the single-instance score to drop from 0.637 to 0.344. That said, some holes are real, since the scroll is embedded in volcanic ash. You cannot directly connect the path.</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3368096,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-09T01:14:06.900000",
              "content": "<p>the demo code is for lines running in a specific direction (there are two diagonal directions). you need to generalize it to the other direction. The demo code is tracing a line at one pixel thick. you need a few pixel thick line for it not to have holes. You can visual the ground truth to see if there are actually any holes or not</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3365600,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-07T08:46:03.367000",
      "content": "<p>the game changer … we may be getting lb &gt;0.7  in the end if test data is the same as train</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F71a5dadff6d9bcb596ecd72720490064%2FSelection_1522.png?generation=1765097086708873&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc56d91765ca5a843bf839c51602a2e56%2FPeek%202025-12-07%2016-32.gif?generation=1765097108511824&amp;alt=media\" alt=\"\"></p>",
      "votes": 3,
      "replies": [
        {
          "id": 3365643,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-07T09:19:01.213000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2145485ee3e16c2fed5827a27033f73b%2FSelection_1523.png?generation=1765099109256433&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4c8324b95123d0448d757b848d6fb3ea%2FSelection_1525.png?generation=1765099252694589&amp;alt=media\" alt=\"\"></p>",
          "votes": 0,
          "replies": [
            {
              "id": 3365646,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-07T09:21:01.907000",
              "content": "<p>Mesh =&gt; Flow =&gt; Check holes from flow and displacement</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3365665,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-07T09:33:01.470000",
              "content": "<p>Yes you nailed it. Now i am deciding the mesh point … should i find the outline first, etc ? … my strategy is get topology correct first, then improve surface dice</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3365671,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-07T09:41:36.940000",
              "content": "<p>someone has just done it!\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0bce392069398de40a4ee9920cd8463b%2FSelection_1526.png?generation=1765100441028543&amp;alt=media\" alt=\"\"></p>\n<p>Virtually Unrolling the Herculaneum Papyri by Diffeomorphic Spiral Fitting\n<a href=\"https://arxiv.org/abs/2512.04927v1\" target=\"_blank\">https://arxiv.org/abs/2512.04927v1</a></p>\n<p>related\n[1]  Improving the Identification of Layers in 3D Images of Ancient Papyrus using Artificial Neural Networks\n<a href=\"https://openaccess.thecvf.com/content/WACV2025W/VISIONDOCS/papers/Klenert_Improving_the_Identification_of_Layers_in_3D_Images_of_Ancient_WACVW_2025_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/WACV2025W/VISIONDOCS/papers/Klenert_Improving_the_Identification_of_Layers_in_3D_Images_of_Ancient_WACVW_2025_paper.pdf</a></p>\n<p>[2] A Local Iterative Approach for the Extraction of 2D Manifolds from Strongly Curved and Folded Thin-Layer Structures\n<a href=\"https://arxiv.org/pdf/2308.07070\" target=\"_blank\">https://arxiv.org/pdf/2308.07070</a></p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3365673,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-07T09:42:11.113000",
              "content": "<p>but how you deal with unlabeled part? I currently just use replacement from previous prediction:</p>\n<pre><code> =  * ( != ) +  * ( == )\n</code></pre>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3365675,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-07T09:44:23.427000",
              "content": "<p>That seems a great approach, but might need global context, I plan to use 3D vae modeling on whole scroll (1w+, 3k+, 6k+) volume in low resolution to do that.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3365720,
              "author_name": "Giorgio Angelotti",
              "author_url": "",
              "post_date": "2025-12-07T10:19:45.607000",
              "content": "<p>Paul Henderson's code is available here <a href=\"https://github.com/pmh47/spiral-fitting\" target=\"_blank\">https://github.com/pmh47/spiral-fitting</a></p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3366875,
              "author_name": "dragon zhang",
              "author_url": "",
              "post_date": "2025-12-08T04:04:06.950000",
              "content": "<p>perhaps simply regression is enough?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3376748,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-15T04:23:17.903000",
              "content": "<p>Monai has APIs that can use for this method:\n<code>monai.networks.blocks.Warp</code>\n<code>monai.networks.blocks.DVF2DDF</code></p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3370748,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-11T04:43:38.083000",
      "content": "<p>when creating ground truth curve parameterisation, i found several errors in the annotations.\nthe 3d connected components can show 2 sheets as one </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc4102cff0c0ac9a44b3662f5904b9ded%2FSelection_1691.png?generation=1765428148839265&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F3ab4dcb3ff8c2953f5ec01cccf8faf76%2FSelection_1704.png?generation=1765430128035920&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 3370842,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-11T06:08:00.830000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F37ad1f21405a857ede7f7a86b6ccb861%2FSelection_1708.png?generation=1765433224538016&amp;alt=media\" alt=\"\"></p>\n<p>for the first 50 volumes in train.csv file, manual inspection shows that about 10% has somekind 3d touching issues</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 3370916,
          "author_name": "Giorgio Angelotti",
          "author_url": "",
          "post_date": "2025-12-11T07:05:33.657000",
          "content": "<p>I am going to inspect this and let you know as soon as possible. If this is the case, it's weird because our annotators were told to inspect the data in Napari painting every seperate connected component in 3D with the same color. This should be spottable right away. In any case, <a href=\"https://www.kaggle.com/seanjohnsonsp\" target=\"_blank\">@seanjohnsonsp</a> and I are considering releasing an updated version of the data fixing the mistakes that escaped during the first round, so thank you for being so meticulous, it is very helpful!</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 3371011,
          "author_name": "Giorgio Angelotti",
          "author_url": "",
          "post_date": "2025-12-11T08:29:38.077000",
          "content": "<p>I just checked and you are right unfortunately. I think our annotators checked not for the 26 connectivity as instructed. We are going to fix these as soon as possible 🙏</p>",
          "votes": 9,
          "replies": [
            {
              "id": 3373065,
              "author_name": "Innat",
              "author_url": "",
              "post_date": "2025-12-12T10:18:59.917000",
              "content": "<p>Dataset will be updated, right?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3376202,
              "author_name": "Cody_Null",
              "author_url": "",
              "post_date": "2025-12-13T21:41:24.370000",
              "content": "<p>If you guys do have the plan to update the data was there a rough guess of when this will happen? Also thank you so much for your continued support in this competition! <a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3371216,
          "author_name": "MOONMOON",
          "author_url": "",
          "post_date": "2025-12-11T11:04:26.690000",
          "content": "<p>I have some similar findings. In id=1215679884, it seems that two masks are stuck together, and there are quite a few holes in the GT.<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F5569141%2F6118c7f46022a3ac96ce94fde48ef837%2F20251211185220_51_81.png?generation=1765451020275699&amp;alt=media\" alt=\"\"></p>",
          "votes": 2,
          "replies": [
            {
              "id": 3379641,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-20T09:29:44.263000",
              "content": "<p><a href=\"https://www.kaggle.com/giorgioangelotti\" target=\"_blank\">@giorgioangelotti</a> </p>\n<p>even if i consider individual slice, some of the train samples have tourching fibres (i.e. 4 or 8-connected)\nan example, id = 636928528</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0d74c59fe54395a8a8ba299a9375b86a%2FSelection_1775.png?generation=1766222939346010&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff59f7f09bf829ddfe4476e97a11f57dc%2FSelection_1774.png?generation=1766222956380679&amp;alt=media\" alt=\"\"></p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3369840,
      "author_name": "Tom",
      "author_url": "",
      "post_date": "2025-12-10T11:41:49.177000",
      "content": "<p>Share a result of points of interests + cluster + local curvature regression</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F80d389c4dc383eb65916ea96eed374b9%2F1235.png?generation=1765366866348488&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": []
    },
    {
      "id": 3368198,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-09T03:57:35.617000",
      "content": "<p>augmentation trick:\nThe most important augmentations are : 1) occlusion (to force network to join broken lines) 2) rotation (for network to learn curvature). </p>\n<p>if you want you can add a third one: (3)touching scrolls … but i haven't found a way to augment this (maybe custom elastic transforms). but i find this is less important because the train set has many such cases.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0f764d607b1e69dd5107b70bc3e9e29e%2FSelection_1623.png?generation=1765252651223824&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 3369099,
          "author_name": "Cody_Null",
          "author_url": "",
          "post_date": "2025-12-09T18:23:43.590000",
          "content": "<p>I am thinking that better augmentation could solve a lot of the issues with topology score. However, it is still difficult to imagine a time where we will have .7 LB but I love to be wrong. Being wrong is always a learning opportunity, and my wife would tell you I am wrong often :)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3366857,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-08T03:39:15.053000",
      "content": "<p>very good news! my hole filling works! will release code later</p>\n<p>results\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4ddbbe991cd0b8069f9ca1f996115de7%2FSelection_1576.png?generation=1765164948914523&amp;alt=media\" alt=\"\"></p>\n<p>i ask chatgpt and gemini to code<br>\n1) input direction ( one of the 4 corners is the center of scroll). this set the line tracing direction<br>\n2) detect all startpoints endpoints of curve fragements for each slice<br>\n3) pair them up  (nearest distance)<br>\n4) start tracing  (path integration with largest prob and most coherent orientation)  </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd6a784edecf18a1808c2f87b687f20ea%2FPeek%202025-12-08%2011-32.gif?generation=1765164880614932&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 3366878,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-08T04:09:06.740000",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> how's the computational time</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3366881,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-08T04:12:40.797000",
              "content": "<p>It is a simple code and i run at 160x160x160. Python takes less than 2 sec on my local machine per object</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3366889,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-08T04:20:45.597000",
              "content": "<p>Chatgpt mentions \"Coherence-Enhancing Diffusion\" which is used for fingerprint enhancement and line tracing. </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa7dc9f19a53ce16861cb43cace4ebef8%2FSelection_1582.png?generation=1765168782084140&amp;alt=media\" alt=\"\"></p>\n<p>\"friend here\" is gemini3\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Feb850e2b07ba1c139c7316fef7d9a924%2FSelection_1583.png?generation=1765169933103126&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F24581d033a9712930fa3d23908b5273e%2FSelection_1584.png?generation=1765169944297531&amp;alt=media\" alt=\"\"></p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3367170,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-08T08:53:26.300000",
              "content": "<p>Finger print is very good reference to extent to scroll. I would be very surprise if someone really try in-painting to obtain good topology.</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3367745,
              "author_name": "Cody_Null",
              "author_url": "",
              "post_date": "2025-12-08T17:35:18.697000",
              "content": "<p>Its very interesting, curious to see how this effects the other scores within the metric</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3365129,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-07T01:22:50.297000",
      "content": "<p>maybe this works</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2fa1aed1786b392dc2b8934259c3d0ef%2FSelection_1505.png?generation=1765070567323395&amp;alt=media\" alt=\"\"></p>\n<p>--- related ---</p>\n<p>poor man's topological loss.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5474b0bcc9ec31d7fb45314d67c37435%2FSelection_1507.png?generation=1765071395808388&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 3365193,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-07T03:14:09.507000",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> what's the original image you show in the second image. It looks like the extracted skeleton on scroll<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F622518306bb0aaaa6fc93a94f6a1fccd%2Fimage.png?generation=1765077116164800&amp;alt=media\" alt=\"\"></p>",
          "votes": 0,
          "replies": [
            {
              "id": 3365270,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-07T04:31:11.060000",
              "content": "<p>it is from the paper\nTopoSeg: Topology-Aware Nuclear Instance Segmentation\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F918fd8a479ef5f16dfdb46d5435ecc68%2FSelection_1508.png?generation=1765081708031711&amp;alt=media\" alt=\"\"></p>\n<p>basically, the key idea:</p>\n<ul>\n<li>don't have to work on the whole image</li>\n<li>identify the patches that have problems</li>\n<li>try things watershed, sketeon transform, etc …. on these patches.</li>\n<li>if they work, think of how deep learning can help is the above heuristics (e.g. if Watershed works, then deep learning can be used to learn the seeds or  water levels)</li>\n</ul>",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3365337,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-07T05:28:06.347000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fde02e1bde2a6a50f63fd5b1283ccf830%2FSelection_1519.png?generation=1765085284500789&amp;alt=media\" alt=\"\"></p>",
          "votes": 3,
          "replies": [
            {
              "id": 3365382,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-07T06:10:33.240000",
              "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> I actual work on this now, but I treat this problem as one-class anomaly detection.</p>",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3365613,
          "author_name": "Sean Johnson_SP",
          "author_url": "",
          "post_date": "2025-12-07T08:51:10.290000",
          "content": "<p>if you skeletonize a prediction , you an identify the locations of these pretty easily, if this helps in splitting them. you'll want to use either a medial axis transform or a 2d slicewise skeletonization (the default 3d skeletonization will not work for this task), and then consider any voxel with &gt;2 neighbors to be a \"merge\". </p>\n<p>it can help to preprocess the segmentation to avoid stray branching by applying some sort of blur , a gaussian or median filter here is fine. then , to help improve the \"sheetness\" before the skeletonization , it is helpful to use either the midline of a distance transform or a frangi/sato like filter (hessian or others can work here as well). </p>\n<p>we have a few scripts which may contain useful pieces for this sort of thing. </p>\n<p>pre/post processing of labels/predictions with inverse edt &gt;  gaussian blur &gt; frangi-like 3d filter &gt; threshold: \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/edt_frangi_label.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/edt_frangi_label.py</a></p>\n<p>the standalone frangi-like filter is here <a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/ridges_vessels.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/ridges_vessels.py</a></p>\n<p>skeleton \"junction/merge\" detection : \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/skeletonization.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/features/skeletonization.py</a></p>\n<p>a pretty messy coherence enhancing diffusion filter, which could be used in place of the filter stack mentioned above.: \n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/ced.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/run/ced.py</a></p>\n<p>structure tensor computation:\n<a href=\"https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/geometry/structure_tensor.py\" target=\"_blank\">https://github.com/ScrollPrize/villa/blob/main/vesuvius/src/vesuvius/image_proc/geometry/structure_tensor.py</a></p>",
          "votes": 9,
          "replies": []
        }
      ]
    },
    {
      "id": 3362149,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-04T08:20:08.800000",
      "content": "<p>just a couple of topology-related loss i search from web (i haven't read them yet). For kaggler who want to mpve faster, you can check them.</p>\n<p><a href=\"https://github.com/HuXiaoling/TopoLoss\" target=\"_blank\">https://github.com/HuXiaoling/TopoLoss</a><br>\n<a href=\"https://github.com/nstucki/Betti-Matching-3D\" target=\"_blank\">https://github.com/nstucki/Betti-Matching-3D</a><br>\n<a href=\"https://github.com/HuXiaoling/awesome-topology-driven-image-analysis\" target=\"_blank\">https://github.com/HuXiaoling/awesome-topology-driven-image-analysis</a><br>\n<a href=\"https://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf\" target=\"_blank\">https://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf</a></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fffdf4e96d26ad0af63badf467f5b7c71%2FSelection_1433.png?generation=1764836710806898&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F053adeb09c65676be46cc64618032f90%2FSelection_1432.png?generation=1764836723547987&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd224f90c9282698ef8fb295ef203162b%2FSelection_1434.png?generation=1764836850461940&amp;alt=media\" alt=\"\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 3362157,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-04T08:39:37.857000",
          "content": "<p>What matters most is whether your model can skip covering areas and form an object instead. The last viz in second row is the best example I think.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3362165,
          "author_name": "Sean Johnson_SP",
          "author_url": "",
          "post_date": "2025-12-04T08:55:22.143000",
          "content": "<p>to extend on this a bit , examples on datasets like CREMI, DRIVE, CoW / any other blood vessel or road segmentation tasks would likely apply here. the task is different but the underlying principles are similar </p>",
          "votes": 4,
          "replies": []
        }
      ]
    },
    {
      "id": 3380840,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-23T07:08:48.663000",
      "content": "<p>it is quite sad that most of the predictions are good, but there is only a small touching region </p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb96ac3de53c47a1ebef8e70e89e3b836%2FSelection_1797.png?generation=1766473713029561&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F12450e931026390d902ab0373312f852%2FSelection_1796.png?generation=1766473726503331&amp;alt=media\" alt=\"\"></p>",
      "votes": 1,
      "replies": [
        {
          "id": 3380850,
          "author_name": "Giorgio Angelotti",
          "author_url": "",
          "post_date": "2025-12-23T07:25:53.080000",
          "content": "<p>Looks great, what LB do you have on this one?</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3381739,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-25T12:04:31.700000",
              "content": "<p>i did not submit yet. on local validation on small validation set of about 50 samples, local lb is about 0.62+.\nLet me retrain everything with new data and report public lb later afer i submit</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3381771,
              "author_name": "Jirka",
              "author_url": "",
              "post_date": "2025-12-25T13:40:20.370000",
              "content": "<p>Is it based on your demo notebook? </p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3381773,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-25T13:44:24.900000",
              "content": "<p>No. Get me some time to stabilise it and will make a notebook later. Will be quite soon</p>",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3385384,
      "author_name": "Tom",
      "author_url": "",
      "post_date": "2026-01-03T07:45:39.033000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4a0e52b5e4f98ea344ab9ae6ebb2671%2F123.png?generation=1767426331244760&amp;alt=media\" alt=\"\"></p>\n<p>share current advancing approach, haven't submitted yet</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3385799,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2026-01-04T03:38:05.733000",
          "content": "<p>looks good!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3386317,
          "author_name": "Manas Choudhary",
          "author_url": "",
          "post_date": "2026-01-05T04:11:22.263000",
          "content": "<p>You predict 2d or 3d fields in the image a above?</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3378595,
      "author_name": "ArjunB",
      "author_url": "",
      "post_date": "2025-12-18T15:15:06.787000",
      "content": "<p>Hello, thanks for sharing such valuable insights. Really helpful for newbies like me 😭 .</p>\n<p>My initial thought is to first build a strong baseline model trained with a loss function that heavily penalizes false positives, prioritizing high precision even if this leads to fragmented predictions. On top of this, I thought of training a second model whose role is to reconnect disjoint components. This second model would be trained to predict the original ground-truth masks from synthetically corrupted versions of those same masks, where disconnection and fragmentation transforms are applied to closely mimic the baseline model’s output.</p>\n<p>LB score wasnt that great but I am suspecting the loss function (ce + tversky) or weak simulation.\nWould love to hear your thought!!!!!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3378780,
          "author_name": "Jirka",
          "author_url": "",
          "post_date": "2025-12-18T16:32:34.963000",
          "content": "<p>I tried ce + tversky and it worked very well! </p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 3378809,
          "author_name": "Wang Zhiyao (王致尧)",
          "author_url": "",
          "post_date": "2025-12-18T16:48:31.770000",
          "content": "<p>ce + tversky can achieve a fairly good score (at least on the surface dice score)</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3381119,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-23T19:20:15.957000",
      "content": "<p>check this paper\n\"Manifold embedding of geological and geophysical observations for non-stationary subsurface property estimation using geodesic\nGaussian processes\"\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5179829a873ab294b14020e1b1be7cbc%2FSelection_1805.png?generation=1766517592388614&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F855ca87d75874c6db45d81dd61f3799a%2FSelection_1806.png?generation=1766517504717926&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F92fcbba806846fda2ab8348ebfcfc994%2FSelection_1807.png?generation=1766517558163126&amp;alt=media\" alt=\"\"></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3362215,
      "author_name": "Innat",
      "author_url": "",
      "post_date": "2025-12-04T10:11:39.590000",
      "content": "<p>Thanks for opening the thread. Looking forward to know more your findings. However, just a gentle feedback about your assumption on the following topic:</p>\n<blockquote>\n  <p>Many kagglers will treat this as a volume segmentation task … that is wrong. Good volume IOU doesn't guarantee lb score. The task is actually \"scroll object\" detection\".</p>\n</blockquote>\n<p>Kagglers who treat this as a volume segmentation task also understand that this is far from a straightforward segmentation problem. Simple segmentation was just the first approach many people explored at the very beginning, and it quickly became clear that the task is much more complex. As you’ve probably noticed, several Kagglers have even tried non-ML solutions and achieved scores comparable to ML models across both 2D and 3D approaches.</p>\n<p>So yes, it has been clear to many participants from early on (long before this thread was created) that this is not a standard segmentation task, but something very specific to the structure of this dataset. Naturally, people are experimenting with different modeling strategies to understand what might actually work best.</p>\n<hr>\n<p>As for me, I’m using this competition to test my own library, see how it performs, and identify any missing components I might want to add. :)</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3362125,
      "author_name": "Tom",
      "author_url": "",
      "post_date": "2025-12-04T07:47:56.113000",
      "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  what do you think 3D VAE approach. When I look at the metric, I feel that learning what actual scroll structure is better than just segmentation. I've made up several non-segmentation approaches such as optical flow which gives me good rewards on topology, but to make big progress to score like 0.7+lb seems needing to learn and map the structure (like NRF).</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3362143,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-04T08:11:26.840000",
          "content": "<p>NRF as Neural Representation Fields? Should also work. But currently my top priority is to visualize the topology metric (i need to know what the matched and FP,FN are), then decide if we can create some fast differentiable topology-friendly loss.</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3362159,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-04T08:40:38.260000",
              "content": "<p>average team would get 0.3~0.4 topo score I guess, if they all use segmentation approach.  Another idea is that, since a scroll is originally a flat sheet of paper, we could unfold the predicted structure onto the paper, fill in the unconnected holes, and then fold it back into scroll form.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3362118,
      "author_name": "Zaakcii Ru",
      "author_url": "",
      "post_date": "2025-12-04T07:31:36.317000",
      "content": "<p>Hello. Despite the fact that I am a supporter of your activities, I have a question: How do you have enough to be everywhere and at once?) Have a good day!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3377813,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-17T01:41:04.360000",
      "content": "<p>anyone interested in end-to-end tracing can google for \"neuron tracing\".\ne.g</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff7238c854199a85e75510d180a374999%2FSelection_1755.png?generation=1765935582427782&amp;alt=media\" alt=\"\">]</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc056c45ffcd6b22a20dfe060e502544d%2FSelection_1756.png?generation=1765935571459293&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6727ada4e62472e01a05f5217840539c%2FSelection_1754.png?generation=1765935619265335&amp;alt=media\" alt=\"\"></p>\n<p><a href=\"https://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf\" target=\"_blank\">https://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf</a></p>",
      "votes": 2,
      "replies": [
        {
          "id": 3377846,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-17T03:24:33.977000",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  thank you, this is the method i want to do. </p>",
          "votes": 0,
          "replies": [
            {
              "id": 3377849,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-17T03:28:43.343000",
              "content": "<p>oh we are on the same track😁</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3377906,
          "author_name": "sroger",
          "author_url": "",
          "post_date": "2025-12-17T06:26:40.730000",
          "content": "<p>I tried vanilla conditional flow matching but could not get good results.\nThis looks similar but explicitly defined for tracing, very interesting.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3378566,
          "author_name": "Manas Choudhary",
          "author_url": "",
          "post_date": "2025-12-18T14:14:32.203000",
          "content": "<p>Has anyone tried this method yet?, I am planning to use the current pretrained UNet back bone, and then train each component step by  step, first forcing the Centerline block to predict thin connected lines via skeletal loss and penalizing thick predictions and then freezing it's learning. Then training the rest of the network. Before using so much compute I wanna know if someone has tried something and how it unfolded.</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3378607,
              "author_name": "Wang Zhiyao (王致尧)",
              "author_url": "",
              "post_date": "2025-12-18T15:22:19.973000",
              "content": "<p>n my experiments, the skeleton loss did not have a positive effect. My approach was to erode the skeleton out of 2D slices using graphics operations, and then penalize the unreached skeleton voxels</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3378702,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-18T16:05:24.827000",
              "content": "<p>the paper is dealing with tube, while our case is sheet.\neither you change the algorithm or you change our input.</p>\n<p>eg, cut the sheet into say 4 slices to make it into \"tube\" and skeleton means center in x,y,z (center slice)</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3378722,
              "author_name": "Manas Choudhary",
              "author_url": "",
              "post_date": "2025-12-18T16:10:05.617000",
              "content": "<p>yeah, I'm planning something similar, to use the 2d version , and then depending on how good it performs, I will try to merge along z or create a mesh or something.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3378747,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-18T16:18:29.090000",
              "content": "<p>in this competition, a good pipelined solution (divided into \"simple\" but highly accurate steps) is easier than an end-to-end one. Get \"good skeletons\" first:  </p>\n<ul>\n<li>good means correct instance or good topology (no breaks, no merge error)</li>\n<li>skeleton means about 1 voxel thick surface in 3d</li>\n</ul>\n<p>then you can use next stage model(image,skeleton)= final solution</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3378797,
              "author_name": "Sean Johnson_SP",
              "author_url": "",
              "post_date": "2025-12-18T16:43:56.677000",
              "content": "<p>you can skeletonize like this with skimage skeletonization</p>\n<pre><code>if not np.sum(bin_seg[0]) == 0:\n            # skel = skeletonize(bin_seg[0], surface=True)\n            skel = np.zeros_like(bin_seg[0])\n            Z, Y, X = skel.shape\n\n            for z in range(Z):\n                skel[z] |= skeletonize(bin_seg[0][z])\n</code></pre>\n<p>this is just a modificaiton of <a href=\"https://github.com/MIC-DKFZ/Skeleton-Recall/blob/master/nnunetv2/training/data_augmentation/custom_transforms/skeletonization.py\" target=\"_blank\">https://github.com/MIC-DKFZ/Skeleton-Recall/blob/master/nnunetv2/training/data_augmentation/custom_transforms/skeletonization.py</a></p>\n<p>it works out of the box with just that modification. this makes the transform more like a medial surface transform, and retains the speed of skeleton recall vs things like centerline dice .</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3368685,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-09T12:31:17.567000",
      "content": "<p><a href=\"https://www.kaggle.com/choudharymanas\" target=\"_blank\">@choudharymanas</a> you can play with my model and weights here:\n<a href=\"https://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict\" target=\"_blank\">https://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict</a></p>",
      "votes": 2,
      "replies": [
        {
          "id": 3368701,
          "author_name": "Manas Choudhary",
          "author_url": "",
          "post_date": "2025-12-09T12:41:27.220000",
          "content": "<p>thanks, will help for sure 😁</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3368556,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-09T10:26:15.197000",
      "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a>  \"By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\" maybe it is the same as feature loss in this paper. in summery:</p>\n<p>Why they use feature loss?</p>\n<ul>\n<li>Comparing strokes in pixel space is too harsh.</li>\n<li>Comparing strokes only via control point MSE is too weak<br>\nso they trained a loss function by:<br>\nconvert vector stroks into image and compute loss in raster</li>\n</ul>\n<hr>\n<p>summary of below paper\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc915885e5d3e99f9ea54e0fb60c425bb%2FSelection_1645.png?generation=1765280077451449&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6d198a574ceee920d15c7c2a6e4799cf%2FSelection_1643.png?generation=1765275958732989&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7bb20f023bd2461eec1ef4f415fbc088%2FSelection_1644.png?generation=1765275972958809&amp;alt=media\" alt=\"\"></p>",
      "votes": 2,
      "replies": [
        {
          "id": 3369626,
          "author_name": "Giorgio Angelotti",
          "author_url": "",
          "post_date": "2025-12-10T07:45:03.707000",
          "content": "<p>Are you working in 2D or 3D?</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3368352,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-09T06:56:32.297000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0194078c8b11b17e205a6b837e34e1b2%2FSelection_1635.png?generation=1765263373312214&amp;alt=media\" alt=\"\"></p>\n<p>wait for the code!</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3368401,
          "author_name": "Sean Johnson_SP",
          "author_url": "",
          "post_date": "2025-12-09T07:45:16.943000",
          "content": "<p>This bspline prediction is a nice idea! similar to StarDist. I want to specify however that this data was not (for the most part) annotated using explicit b-splines or beziers,, although it does end up looking rather spline-like. The intuition is good though, and i think that focusing on pixel-accurate segmentation is a task which the model will find difficult. </p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 3368416,
          "author_name": "Tom",
          "author_url": "",
          "post_date": "2025-12-09T08:02:05.700000",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a>  This solution is better, you predict the valid points and connect them. Can set a hyperparameter or even smartly dynamic estimate the density of points you need to sample. GNN might be shown up again.</p>",
          "votes": 2,
          "replies": [
            {
              "id": 3368426,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-09T08:09:36.603000",
              "content": "<p>Gemini says the key to line tracing is not the tracing, it is correct start and end points. And GNN is the solution to start and endpoint pairing. I am trying another method: point seq as query and image features of memory. Treating it as tx seq prediction </p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3368441,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-09T08:21:52.667000",
              "content": "<p>Also, change this task to 3d regression would be nice.</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3369478,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-12-10T04:38:03.610000",
              "content": "<p>2d refinement approach: point of interests =&gt; local curvature regression =&gt; predicted curves</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3369507,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "2025-12-10T05:15:43.953000",
              "content": "<p>yes. the seed and probability are constrained by 3d. (since i am using a 3d resnet net)\nbut the refinement or path/tracing regression is done in 2d (since the z slicing is a natural depth grid)</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3366389,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-07T17:37:01.173000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F579cfac2853ad007eba7da5f308ff57d%2FSelection_1557.png?generation=1765128896419582&amp;alt=media\" alt=\"\"></p>\n<p>Unet baseline (input/output 160x160x160 at 0.5 scale) :</p>\n<ul>\n<li>learning skeletonised one pixel volume</li>\n<li>we have high-precision  pixel label and are about to separate  into components</li>\n</ul>",
      "votes": 2,
      "replies": [
        {
          "id": 3366510,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-07T19:08:17.190000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb45aeff248be50e6ea277a995c4905df%2FSelection_1566.png?generation=1765134469635137&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F30b80f5c917b746afe479364bf141a3f%2Fout.gif?generation=1765135284241458&amp;alt=media\" alt=\"\"></p>\n<hr>\n<p>There is something i don't quite understand. I always follow the rule \"if a human can do it, then it can be modelled\". Line tracing seems easy for humans, and the probability seems correct and maximizes in the correction direction. By right, the unet should be able to predict the line just by pure net prediction (without post processing). I wonder if failure is due to i not having enough weight params or not enough train samples or wrong modeling?</p>",
          "votes": 3,
          "replies": []
        }
      ]
    },
    {
      "id": 3362716,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-05T07:01:42.727000",
      "content": "<p>yet another better solution. the advanatge is encoder can be learned from non labelled scroll volume using MAE self-supervised. the key is good seeds (query) … which i need to study the filtration process.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F33ff4bf6b03ef10118919195bffe5e2b%2FSelection_1471.png?generation=1764918572538014&amp;alt=media\" alt=\"\"></p>",
      "votes": 2,
      "replies": [
        {
          "id": 3362717,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2025-12-05T07:06:17.647000",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ffaa667ffd8e742c7fe9698daf77a7a2e%2FSelection_1469.png?generation=1764918323842403&amp;alt=media\" alt=\"\">\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F622a42e7b518c4cead0443f64cf5d8ab%2FSelection_1470.png?generation=1764918338096532&amp;alt=media\" alt=\"\"></p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3362041,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2025-12-04T05:39:57.763000",
      "content": "<p>solution sketch</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F38c38d381b1a3619e84333c3e3d45fb2%2FSelection_1429.png?generation=1764826925030615&amp;alt=media\" alt=\"\"></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3392412,
      "author_name": "Manas Choudhary",
      "author_url": "",
      "post_date": "2026-01-16T23:00:05.743000",
      "content": "<p>What is your approx current lb score currently? The public lb has almost similar score for top 10-15 participants, probably because of same method, the only difference being basic postprocessing hyperparameters. </p>",
      "votes": 0,
      "replies": [
        {
          "id": 3392413,
          "author_name": "Manas Choudhary",
          "author_url": "",
          "post_date": "2026-01-16T23:01:58.693000",
          "content": "<p>The only thing I do nowdays in this competition is view the lb, am working on a hackathon so don't have time for this comp. So curious about what other people are doing.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3386040,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2026-01-04T13:04:50.303000",
      "content": "<p>the non-regression version of the 2 surface approach</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F02975c33712684ea3011e2dc639ca4b7%2FSelection_2039.png?generation=1767531888296619&amp;alt=media\" alt=\"\"></p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3385882,
      "author_name": "",
      "author_url": "",
      "post_date": "2026-01-04T07:00:09.090000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3385807,
      "author_name": "",
      "author_url": "",
      "post_date": "2026-01-04T04:01:06.227000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3385339,
      "author_name": "",
      "author_url": "",
      "post_date": "2026-01-03T04:11:57.420000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3383638,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-30T14:33:42.693000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3383661,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-30T15:51:46.377000",
          "content": "",
          "votes": 0,
          "replies": [
            {
              "id": 3383677,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-30T16:20:22.343000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3383878,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T03:37:52.477000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3383883,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T03:41:02.233000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3383889,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T03:53:33.017000",
              "content": "",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3383908,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T05:09:06.627000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3383978,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T08:43:14.503000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384066,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T12:09:58.190000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384102,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-31T13:54:23.983000",
              "content": "",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3384392,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-01T07:05:34.887000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384410,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-01T07:41:27.863000",
              "content": "",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3384723,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-01T19:21:27.657000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384785,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-02T00:37:49.590000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384942,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-02T09:23:54.387000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3384945,
              "author_name": "",
              "author_url": "",
              "post_date": "2026-01-02T09:32:48.850000",
              "content": "",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3380196,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-21T19:57:37.827000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3380214,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-21T22:01:56.800000",
          "content": "",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3379546,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-20T04:45:55.180000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3379548,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-20T04:47:38.470000",
          "content": "",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3378362,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-18T00:24:10.693000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3378401,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-18T03:44:24.430000",
          "content": "",
          "votes": 0,
          "replies": [
            {
              "id": 3379614,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-20T08:44:04.047000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3379642,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-20T09:32:34.293000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3379646,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-20T09:57:22.853000",
              "content": "",
              "votes": 2,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3376870,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-15T10:18:22.740000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3376897,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-15T11:27:02.343000",
          "content": "",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3375589,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-12T23:39:06.137000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3369979,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-10T13:51:19.563000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3368183,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-09T03:36:17.227000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3368191,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-09T03:48:47.973000",
          "content": "",
          "votes": 3,
          "replies": [
            {
              "id": 3368217,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-09T04:16:28.780000",
              "content": "",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3368376,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-09T07:23:58.877000",
              "content": "",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3368394,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-09T07:37:33.867000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3368400,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-09T07:43:03.107000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3368406,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-12-09T07:51:49.740000",
              "content": "",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3367913,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-08T20:15:01.713000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3367032,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-08T06:41:54.723000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3362673,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-05T05:46:18.617000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3362678,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-05T05:51:39.050000",
          "content": "",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3362683,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-12-05T05:58:06.887000",
          "content": "",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3362170,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-04T09:02:19.333000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3362034,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-04T05:26:29.440000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3369146,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-12-09T18:56:06.367000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3361964": "##Disclaimer: this is a work in progress, contents subject to changes\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5ea0dcb437185526a48b879f5ff4b24d%2FSelection_1614.png?generation=1765227069400375&alt=media)\n\nit is connecting the dots!\n\nThe boundary clues are so strong that you can do multi-class pixel label, where class1 = first curve on top, class2 = the next one ,...\nyou no longer perform semantic segmentation and jump to instance segmentation at the start. This solves all scroll-touching issues ...\n(but you do need to take good care of unlaballed region)\n\n---\n\nI just enter t the competition and did some early investigation. To win:\n\n1) **Correct loss or post-processing** to improve **topology score** (most important), surface dice, voi score.  \nMany kagglers will treat this as a  volume segmentation task ... that is wrong. Good volume IOU doesn't guarantee  lb score. The task is actually \"scroll object\" detection\". We want continous surface object that is no holes, not disintegrated or wrongly joined (\"stuck together\")\n\n2) **Use of unlabelled data**\n\nWhat i would do next:\n- visualisation of topology score results. What is Betti matching? What connected components are matched or designated as FN or FP?\n- how to improve topology score? (e.g. post processing of hole filling, separating stuck scrolls or joining disintegrated ones)\n\n---\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fe148bb135b9b439353d6edaa4a8f5a3a%2FSelection_1399.png?generation=1764816110638340&alt=media)\n\nNote that the ground truth focuses on surface (and **one side of the scroll**) and some ground truth **eats into the \"air\"**. Hence this is weak supervision.\n\nsummarising everything (it is a huge mess) in this post:\n- Level 1 (The Hack): CED / Directional Blur. (Fixes gaps using image processing).    \n- Level 2 (The Engineering): Tracking / Z-Sweep. (Fixes gaps using time-consistency).  \n- Level 3 (The Math): Parametric / Vector Fitting. (Fixes gaps by mathematically forbidding them).  \n\n",
    "3375726": "good news. after a 4-day struggle (due to bug), here is the good results. from manual line tracing to learned tracing:\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7160f3db51a29130a2144889e144d463%2FSelection_1740.png?generation=1765592479704081&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd108603d38bb44cf8455039477ad5546%2FSelection_1742.png?generation=1765592492422206&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F98cd15731dd16d674b1556c4a77fac4c%2FPeek%202025-12-13%2009-46.gif?generation=1765592507216139&alt=media)\n\n```\ninference loop:\n\nwhile not end:\n    y,x = curve[-1]\n    path = model_regression_output[y,x]\n    curve = curve + path\n\n\n````\n\ninput is 3d and all convolution are 3d, though i show results in slice",
    "3369783": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5cc6afc75b49056b552149a3ed2d609a%2FSelection_1674.png?generation=1765363214521450&alt=media)",
    "3382504": "any good idea to construct ordered sheet loss?\ne.g truth of first sheet is z1,y1,x1, then second sheet is z2,y1+dy2,x1+dx2 ... here dy,dx are non-negative ...\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7e934243b278e57c5846ea697bb66d65%2FSelection_1910.png?generation=1766857851166864&alt=media)",
    "3362655": "here is the visualisation!\n(iou = 0.75 for threshold = 0.5, 0.57 for threshold =0.85)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4977e39a22c71055af9de15f59981a1d%2FSelection_1460.png?generation=1764910910229356&alt=media) \n\n\nbecause the ground truth label eats into the air, the label are no good for training segmentation. hence it is inevitable that segmentation topology is bad.\n(i did not check but i suspect the even for non touching labels, the image are touching)",
    "3368501": "Here’s another idea for approaching this task differently: instead of predicting the mask directly, we can match the mask’s feature representation with that of the corresponding image. By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fdf93de5f41501a792b9ee3509aaf4d45%2FGSS2.png?generation=1765271597345111&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fbece7128800ea7f7c9f6d044318f53a8%2FGSS.png?generation=1765271269268425&alt=media)\n\n\n\n\nreference: https://openaccess.thecvf.com/content/CVPR2023/papers/Chen_Generative_Semantic_Segmentation_CVPR_2023_paper.pdf",
    "3367331": "update:\nhole filling code\nhttps://www.kaggle.com/code/hengck23/demo-for-line-tracing-for-filling-holes\n",
    "3365600": "the game changer ... we may be getting lb >0.7  in the end if test data is the same as train\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F71a5dadff6d9bcb596ecd72720490064%2FSelection_1522.png?generation=1765097086708873&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc56d91765ca5a843bf839c51602a2e56%2FPeek%202025-12-07%2016-32.gif?generation=1765097108511824&alt=media)",
    "3370748": "when creating ground truth curve parameterisation, i found several errors in the annotations.\nthe 3d connected components can show 2 sheets as one \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc4102cff0c0ac9a44b3662f5904b9ded%2FSelection_1691.png?generation=1765428148839265&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F3ab4dcb3ff8c2953f5ec01cccf8faf76%2FSelection_1704.png?generation=1765430128035920&alt=media)",
    "3369840": "Share a result of points of interests + cluster + local curvature regression\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F80d389c4dc383eb65916ea96eed374b9%2F1235.png?generation=1765366866348488&alt=media)",
    "3368198": "augmentation trick:\nThe most important augmentations are : 1) occlusion (to force network to join broken lines) 2) rotation (for network to learn curvature). \n\nif you want you can add a third one: (3)touching scrolls ... but i haven't found a way to augment this (maybe custom elastic transforms). but i find this is less important because the train set has many such cases.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0f764d607b1e69dd5107b70bc3e9e29e%2FSelection_1623.png?generation=1765252651223824&alt=media)",
    "3366857": "very good news! my hole filling works! will release code later\n\nresults\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4ddbbe991cd0b8069f9ca1f996115de7%2FSelection_1576.png?generation=1765164948914523&alt=media)\n\n\n i ask chatgpt and gemini to code  \n1) input direction ( one of the 4 corners is the center of scroll). this set the line tracing direction  \n2) detect all startpoints endpoints of curve fragements for each slice  \n3) pair them up  (nearest distance)  \n4) start tracing  (path integration with largest prob and most coherent orientation)  \n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd6a784edecf18a1808c2f87b687f20ea%2FPeek%202025-12-08%2011-32.gif?generation=1765164880614932&alt=media)",
    "3365129": "maybe this works\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2fa1aed1786b392dc2b8934259c3d0ef%2FSelection_1505.png?generation=1765070567323395&alt=media)\n\n\n--- related ---\n\npoor man's topological loss.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5474b0bcc9ec31d7fb45314d67c37435%2FSelection_1507.png?generation=1765071395808388&alt=media)",
    "3362149": "just a couple of topology-related loss i search from web (i haven't read them yet). For kaggler who want to mpve faster, you can check them.\n\nhttps://github.com/HuXiaoling/TopoLoss  \nhttps://github.com/nstucki/Betti-Matching-3D  \nhttps://github.com/HuXiaoling/awesome-topology-driven-image-analysis  \nhttps://proceedings.neurips.cc/paper_files/paper/2019/file/2d95666e2649fcfc6e3af75e09f5adb9-Paper.pdf\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fffdf4e96d26ad0af63badf467f5b7c71%2FSelection_1433.png?generation=1764836710806898&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F053adeb09c65676be46cc64618032f90%2FSelection_1432.png?generation=1764836723547987&alt=media)\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd224f90c9282698ef8fb295ef203162b%2FSelection_1434.png?generation=1764836850461940&alt=media)",
    "3380840": "it is quite sad that most of the predictions are good, but there is only a small touching region \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb96ac3de53c47a1ebef8e70e89e3b836%2FSelection_1797.png?generation=1766473713029561&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F12450e931026390d902ab0373312f852%2FSelection_1796.png?generation=1766473726503331&alt=media)",
    "3385384": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4a0e52b5e4f98ea344ab9ae6ebb2671%2F123.png?generation=1767426331244760&alt=media)\n\nshare current advancing approach, haven't submitted yet",
    "3378595": "Hello, thanks for sharing such valuable insights. Really helpful for newbies like me 😭 .\n\nMy initial thought is to first build a strong baseline model trained with a loss function that heavily penalizes false positives, prioritizing high precision even if this leads to fragmented predictions. On top of this, I thought of training a second model whose role is to reconnect disjoint components. This second model would be trained to predict the original ground-truth masks from synthetically corrupted versions of those same masks, where disconnection and fragmentation transforms are applied to closely mimic the baseline model’s output.\n\nLB score wasnt that great but I am suspecting the loss function (ce + tversky) or weak simulation.\nWould love to hear your thought!!!!!",
    "3381119": "check this paper\n\"Manifold embedding of geological and geophysical observations for non-stationary subsurface property estimation using geodesic\nGaussian processes\"\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5179829a873ab294b14020e1b1be7cbc%2FSelection_1805.png?generation=1766517592388614&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F855ca87d75874c6db45d81dd61f3799a%2FSelection_1806.png?generation=1766517504717926&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F92fcbba806846fda2ab8348ebfcfc994%2FSelection_1807.png?generation=1766517558163126&alt=media)\n",
    "3362215": "Thanks for opening the thread. Looking forward to know more your findings. However, just a gentle feedback about your assumption on the following topic:\n\n> Many kagglers will treat this as a volume segmentation task … that is wrong. Good volume IOU doesn't guarantee lb score. The task is actually \"scroll object\" detection\".\n\nKagglers who treat this as a volume segmentation task also understand that this is far from a straightforward segmentation problem. Simple segmentation was just the first approach many people explored at the very beginning, and it quickly became clear that the task is much more complex. As you’ve probably noticed, several Kagglers have even tried non-ML solutions and achieved scores comparable to ML models across both 2D and 3D approaches.\n\nSo yes, it has been clear to many participants from early on (long before this thread was created) that this is not a standard segmentation task, but something very specific to the structure of this dataset. Naturally, people are experimenting with different modeling strategies to understand what might actually work best.\n\n---\n\nAs for me, I’m using this competition to test my own library, see how it performs, and identify any missing components I might want to add. :)",
    "3362125": "@hengck23  what do you think 3D VAE approach. When I look at the metric, I feel that learning what actual scroll structure is better than just segmentation. I've made up several non-segmentation approaches such as optical flow which gives me good rewards on topology, but to make big progress to score like 0.7+lb seems needing to learn and map the structure (like NRF).",
    "3362118": "Hello. Despite the fact that I am a supporter of your activities, I have a question: How do you have enough to be everywhere and at once?) Have a good day!",
    "3377813": "anyone interested in end-to-end tracing can google for \"neuron tracing\".\ne.g\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Ff7238c854199a85e75510d180a374999%2FSelection_1755.png?generation=1765935582427782&alt=media)]\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc056c45ffcd6b22a20dfe060e502544d%2FSelection_1756.png?generation=1765935571459293&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6727ada4e62472e01a05f5217840539c%2FSelection_1754.png?generation=1765935619265335&alt=media)\n\nhttps://openaccess.thecvf.com/content/ICCV2025/papers/Liu_NETracer_A_Topology-Aware_Iterative_Tracing_Approach_for_Tubular_Structure_Extraction_ICCV_2025_paper.pdf",
    "3368685": "@choudharymanas you can play with my model and weights here:\nhttps://www.kaggle.com/code/hengck23/demo-limit-of-good-unet-pixel-predict",
    "3368556": "@tom99763  \"By working in this feature space, we can manipulate the vector-quantized features to handle the topology issues more effectively.\" maybe it is the same as feature loss in this paper. in summery:\n\nWhy they use feature loss?\n- Comparing strokes in pixel space is too harsh.\n- Comparing strokes only via control point MSE is too weak  \nso they trained a loss function by:   \nconvert vector stroks into image and compute loss in raster\n\n---\nsummary of below paper\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc915885e5d3e99f9ea54e0fb60c425bb%2FSelection_1645.png?generation=1765280077451449&alt=media)\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F6d198a574ceee920d15c7c2a6e4799cf%2FSelection_1643.png?generation=1765275958732989&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F7bb20f023bd2461eec1ef4f415fbc088%2FSelection_1644.png?generation=1765275972958809&alt=media)",
    "3368352": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F0194078c8b11b17e205a6b837e34e1b2%2FSelection_1635.png?generation=1765263373312214&alt=media)\n\nwait for the code!",
    "3366389": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F579cfac2853ad007eba7da5f308ff57d%2FSelection_1557.png?generation=1765128896419582&alt=media)\n\nUnet baseline (input/output 160x160x160 at 0.5 scale) :\n- learning skeletonised one pixel volume\n- we have high-precision  pixel label and are about to separate  into components",
    "3362716": "yet another better solution. the advanatge is encoder can be learned from non labelled scroll volume using MAE self-supervised. the key is good seeds (query) ... which i need to study the filtration process.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F33ff4bf6b03ef10118919195bffe5e2b%2FSelection_1471.png?generation=1764918572538014&alt=media)",
    "3362041": "solution sketch\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F38c38d381b1a3619e84333c3e3d45fb2%2FSelection_1429.png?generation=1764826925030615&alt=media)\n\n",
    "3392412": "What is your approx current lb score currently? The public lb has almost similar score for top 10-15 participants, probably because of same method, the only difference being basic postprocessing hyperparameters. ",
    "3386040": "the non-regression version of the 2 surface approach\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F02975c33712684ea3011e2dc639ca4b7%2FSelection_2039.png?generation=1767531888296619&alt=media)",
    "3385882": "i need two more loss which i haven't figure out how to implement:\n1. no cross overy unlabelled region loss: each query surface is either 100% inside or outside  \n2.x-surface and y-suface smooth fusion loss: the transistion should be smooth  \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fea1428ba7277045108502dac1063d04b%2FSelection_2036.png?generation=1767509896507838&alt=media)",
    "3385807": "unlabelled region is actually a headache for me. it can break the loss.   \nhere, top queries in unlabelled region (yellow: voxels in labelled, black: voxels enter unlabelled)  \n \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4606e38f4d55ff87279cb8807cd69781%2FSelection_2019.png?generation=1767499205770756&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F89ec999095c5017113e3c844bc6caf71%2FSelection_2022.png?generation=1767499222918523&alt=media)",
    "3385339": "i have a bug and see very interesting results  \n\nred: truth surface. it is L-shape and has each side parallel to x or y axis  \nyellow: predict y-parameterised surface  \n\nyou can see that although there is no input feature data, the model somehow extends the surface using \"his imagination\".\ni wonder how he gets the clue or context information for it.\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F483127c0fc621fe3f90b8197da843d69%2FSelection_2004.png?generation=1767413334991684&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F114ba16c387847dadf6d971c89349f37%2FSelection_2003.png?generation=1767413350358888&alt=media)",
    "3383638": "interesting results\n\ni cannot be sure, but the noisy surface seems to indicate a bug in implementation.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fc501eb9d879092096aead950aa734407%2FSelection_1953.png?generation=1767105212948437&alt=media)",
    "3380196": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F796fb2e22f680535bef8fb1fce621451%2FScreenshot%202025-12-22%20011330.png?generation=1766346238823625&alt=media)\n\n\nThe Orig Prob [merged] is the probability thresholded at 0.9 which get's LB score of 0.512.\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2F7d7e56031105bdc3f6248233d25104cd%2FScreenshot%202025-12-22%20011214.png?generation=1766346181736399&alt=media)\n\nI found a small observation, it might be common and recurring but am doing such competition for the first time so idk, Here is a case which shows how simply thresholding might not be the best idea, there is an ambiguous region with very high probab pred, so when we put a low threshold it makes a blob, but with higher threshold trying to fix such blobs, the lines start to break making holes.\n\n In the probab pred, with human eyes the lines are very clearly visible, so I was trying to find methods to extract a cleaner output from that. I found this filter called Meijering which does this work pretty well, I tried many other things but this one was yet the best one. But the problem is that this is very slow to compute in 3d, and computing in 2d slice wise breaks the continuity making many components which reduces the competition metric (by nearly 0.1 on easy examples) even though it looks better in 2d.\n\nMaybe A* with a good heuristic can be good, but haven't explored that yet. Have you guys tried anything similar, or any recommended directions for this problem (of finding a suitable prediction from the probability output).",
    "3379546": "super solution. my friend without progamming and machine learning knowlege suggest a commonsense approach. And it works!\n\n(for simplicity, i skip tricks to use absolute of relative coords, implement iiiin 3d, having logit to indicate existence of pointsetc ...)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5817d625cbe2b644e33485d43919f6e5%2FSelection_1771.png?generation=1766205953004613&alt=media)",
    "3378362": "another paper worth reading. It detects the critical regions shown in red in the last 2 pictures  \nhttps://arxiv.org/pdf/2501.01022  \nhttps://github.com/AllenNeuralDynamics/supervoxel-loss  \n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fa417986747308baf7e42460f74544362%2FSelection_1760.png?generation=1766017361391211&alt=media)\n\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fb4eed5c12b71cdd9ead4fc036c6e026c%2FSelection_1758.png?generation=1766017375982271&alt=media)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F739cc4496bfb4a30591aeda1e4c1e8fe%2FSelection_1761.png?generation=1766017387720654&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4b50565e9468b53824e7a2b389de6f64%2FSelection_1759.png?generation=1766017407359818&alt=media)",
    "3376870": "interesting paper\n\ngoogle \"convolution distance transform\" for more, eg:\n\n[1] Differentiable Topology-Preserved Distance Transform for Pulmonary Airway Segmentation\nMinghui Zhang, G  \nhttps://arxiv.org/pdf/2209.08355\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8a76922304bcfe16c100f7511e8bb226%2FSelection_1751.png?generation=1765793832169361&alt=media)\n\n",
    "3375589": "\n1) Instead of classifying each pixel as foreground or background   \n2) Divide curvature using their angential angle into bins,say 10,20,30 .... 90 degrees ...  \n3) do multiclass classification   \n\ni",
    "3369979": "path search using conv\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fdb662fe61298a9c6b815b77df70af4a4%2FSelection_1678.png?generation=1765374582190391&alt=media)\n\nthese are special line integral filters ... do a nxn conv2d, then follow by channelwise argmax is a greedy path search ....\n\ncan also be used to encode parameteric curve ...",
    "3368183": " I don't get when the model is able to learn this much detail, then why isn't a 160m parameter model able to understand the next steps which seem very simple to an human eye, i.e. fitting  sort of curves on high probability regions. Whenever I run for my model for more than 3-4 epochs. It then starts forming thick lines which start to overlap. I have tried tversky, cldice, bce losses.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F26230365%2Ffbb36700e807ea904987edce51db69b0%2FScreenshot%202025-12-09%20090240.png?generation=1765251308784744&alt=media)\n",
    "3367913": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8908ea842c80cb4a8d64f56b157de33f%2FSelection_1612.png?generation=1765224869553314&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F8c57e1e3467412d5e1255ce07ef71c87%2FSelection_1613.png?generation=1765224899923036&alt=media)",
    "3367032": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F4714d3bcb2db30078e11f9f920b9b4ec%2FSelection_1594.png?generation=1765176113034935&alt=media)\n\nit \"doesn't matter\" which path it takes as long as the start and end points are fixed. wrong path (no hole) is better than no path (hole). even for humans the path seems ambiguous sometimes ... ideally, a probabilistic diffusion denoising may help. i recall this is very much like tracking kaggle NFL player:\n\n```\ninput = [xy_history | xy_future set to unknown ] --> trajectory inpaint transformer = [xy_history | xy_future predict]\n\n```",
    "3362673": "There might be a shortcut solution without using homology at all. Instead, focus on instance-aware segmentation (instead of semantic segmentation). As some of you know, i am concurrently taking part in the ECG kaggle digitslization competition. I need to detect and separate grid lines.    \n\nHere you can label sheet into even sheet and odd sheet. Hence the segmentation learns to detect non touching sheet. this is repetitive pattern, idea for CNN.    \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2cc562460231b7112babdb2e51e051d6%2FSelection_1462.png?generation=1764913488552324&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2Fd4e10ee8e3ffc77dc523db9025cceeab%2FSelection_1461.png?generation=1764913501713487&alt=media)",
    "3362170": "if you got time, use vibe coding to make a web app that manually improve topology score using manual \"selection and mouse click\" from unet segmentation results. this could be used in special prize and also gives insights and supervised data for post processing, etc. After some manual improvement, think of how to automate or learn this human task.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F2adfec96225f764ae3e5238620c8a33f%2FSelection_1438.png?generation=1764849448668703&alt=media)",
    "3362034": "Master Frog, please carry me!",
    "3369146": "Thank you for the visualisation!"
  }
}