{
  "id": 644215,
  "title": "Work Sharing - 3D Stationary Velocity Field Prediction ",
  "url": "/competitions/vesuvius-challenge-surface-detection/discussion/644215",
  "author_name": "",
  "post_date": "2025-11-29T14:44:18.868786Z",
  "votes": 12,
  "comment_count": 22,
  "views": 0,
  "content": "<h3>2d Example</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F5ad2f7b7220e4e94053a0712aa1c61b8%2F.png?generation=1764427425082233&amp;alt=media\" alt=\"\"></p>\n<h3>Magnitute</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fe0faa7c30706e99dfd79a12818b75735%2F11.png?generation=1764427538343268&amp;alt=media\" alt=\"\"></p>\n<h3>Full 3d View on SVF</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F748006911410ef5d27a7dfe0bb988ec1%2Fnewplot.png?generation=1764427457328548&amp;alt=media\" alt=\"\"></p>",
  "messages": [
    {
      "id": "3353060",
      "postDate": "11/29/2025 14:44:18",
      "content": "<h3>2d Example</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F5ad2f7b7220e4e94053a0712aa1c61b8%2F.png?generation=1764427425082233&amp;alt=media\" alt=\"\"></p>\n<h3>Magnitute</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fe0faa7c30706e99dfd79a12818b75735%2F11.png?generation=1764427538343268&amp;alt=media\" alt=\"\"></p>\n<h3>Full 3d View on SVF</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F748006911410ef5d27a7dfe0bb988ec1%2Fnewplot.png?generation=1764427457328548&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "### 2d Example\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F5ad2f7b7220e4e94053a0712aa1c61b8%2F.png?generation=1764427425082233&alt=media)\n\n### Magnitute\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fe0faa7c30706e99dfd79a12818b75735%2F11.png?generation=1764427538343268&alt=media)\n\n### Full 3d View on SVF\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F748006911410ef5d27a7dfe0bb988ec1%2Fnewplot.png?generation=1764427457328548&alt=media)",
      "votes": null
    },
    {
      "id": "3353157",
      "postDate": "11/29/2025 15:36:40",
      "content": "<p>too abstract to understand.</p>",
      "rawMarkdown": "too abstract to understand.",
      "votes": null
    },
    {
      "id": "3353337",
      "postDate": "11/29/2025 17:16:02",
      "content": "<p>haha, me too</p>",
      "rawMarkdown": "haha, me too",
      "votes": null
    },
    {
      "id": "3353681",
      "postDate": "11/29/2025 21:39:17",
      "content": "<p>Can you please elaborate more on what velocity stands for and how it was competed? </p>",
      "rawMarkdown": "Can you please elaborate more on what velocity stands for and how it was competed?",
      "votes": null
    },
    {
      "id": "3354473",
      "postDate": "11/30/2025 10:18:58",
      "content": "<p><a href=\"https://www.kaggle.com/jirkaborovec\" target=\"_blank\">@jirkaborovec</a> sorry I cannot release more now, you'll see how this works in the final write-up</p>",
      "rawMarkdown": "jirkaborovec sorry I cannot release more now, you'll see how this works in the final write-up",
      "votes": null
    },
    {
      "id": "3354999",
      "postDate": "11/30/2025 14:01:23",
      "content": "<p>my guess is that based on mask density and and 3d-shape, somehow to produce the velocity field. but how, I don't know. perhaps some image flow related.</p>",
      "rawMarkdown": "my guess is that based on mask density and and 3d-shape, somehow to produce the velocity field. but how, I don't know. perhaps some image flow related.",
      "votes": null
    },
    {
      "id": "3357345",
      "postDate": "12/01/2025 08:14:21",
      "content": "<p>An explanation from Gemini 3 Pro:</p>\n<pre><code>Based on the visual evidence—specifically the text \"Predicted Scroll Velocity Field\" and the distinct texture of the X-ray slices—these images are from the **Vesuvius Challenge** (or related research into **virtual unrolling**).\n\nThey depict a method used to digitally reconstruct and read ancient, carbonized papyrus scrolls from Herculaneum using 3D X-ray Computed Tomography (CT).\n\n### 1. Image Descriptions\n\n**Image 1 &amp; 3: 3D Velocity/Vector Fields**\nThese two images show **3D vector fields** (often visualized as \"quiver plots\").\n* **Visuals:** You see a 3D volume where thousands of small arrows (vectors) indicate a specific direction and magnitude at various points in space.\n* **The Colors:** The colors (blue/green/red) typically represent the magnitude (strength) or the Z-axis orientation of the vectors.\n* **The Structure:** Notice how the arrows are not random; they form swirling, laminar patterns. This represents the curved, rolled-up geometry of the papyrus pages inside the scroll.\n\n**Image 2: The Segmentation Pipeline**\nThis image breaks down the logic of how the vector field is used:\n1.  **2D Slice (Left):** A raw cross-section of the X-ray scan. The white wavy lines are the carbonized papyrus layers, which are incredibly difficult for computers to separate because they touch and crumple.\n2.  **Predicted Scroll Velocity Field (Center):** A machine learning model analyzes the raw slice and predicts a \"flow.\" It treats the papyrus layers as a stream. The arrows point along the tangent of the sheets, predicting where the paper goes next.\n3.  **2D Results (Right):** The final segmentation. Using the vector field as a guide, the computer can successfully paint (segment) the individual layers (yellow) distinct from the air gaps (purple).\n\n---\n\n### 2. How is this related to Segmentation?\n\nIn the context of medical imaging or the Vesuvius Challenge, **segmentation** is the process of identifying and isolating a specific structure (in this case, a single sheet of papyrus) from the rest of the 3D volume.\n\nHere is why the \"Velocity Field\" is the breakthrough technique for this specific task:\n\n**1. Solving the \"Touching Layers\" Problem**\nStandard segmentation looks for differences in brightness (contrast). However, in a scroll, the layers are pressed tight against each other. To a computer, they look like one solid blob. You cannot segment them by brightness alone.\n\n**2. Tracing Geometry instead of Brightness**\nThe method shown here (likely similar to the *ThaumatoAnakalyptor* pipeline used in the Vesuvius Challenge) treats the static scroll as if it were a moving fluid.\n* It calculates a **vector field** that represents the *orientation* of the papyrus sheet at every point.\n* The \"velocity\" tells the algorithm: \"If you are on a sheet here, the sheet continues in *this* direction.\"\n\n**3. Virtual Unrolling**\nOnce the algorithm has this field (Images 1 &amp; 3), it can drop a \"virtual particle\" onto a sheet and let it \"flow\" along the arrows. This traces out the entire surface of the papyrus. Once traced, the surface can be digitally flattened (unrolled), allowing researchers to look for ink on the page.\n\n**Summary:** The velocity field is a geometric map used to disentangle the complex, crushed layers of the scroll so they can be segmented, flattened, and read.\n</code></pre>",
      "rawMarkdown": "An explanation from Gemini 3 Pro:\n\n```text\nBased on the visual evidence—specifically the text \"Predicted Scroll Velocity Field\" and the distinct texture of the X-ray slices—these images are from the **Vesuvius Challenge** (or related research into **virtual unrolling**).\n\nThey depict a method used to digitally reconstruct and read ancient, carbonized papyrus scrolls from Herculaneum using 3D X-ray Computed Tomography (CT).\n\n### 1. Image Descriptions\n\n**Image 1 & 3: 3D Velocity/Vector Fields**\nThese two images show **3D vector fields** (often visualized as \"quiver plots\").\n* **Visuals:** You see a 3D volume where thousands of small arrows (vectors) indicate a specific direction and magnitude at various points in space.\n* **The Colors:** The colors (blue/green/red) typically represent the magnitude (strength) or the Z-axis orientation of the vectors.\n* **The Structure:** Notice how the arrows are not random; they form swirling, laminar patterns. This represents the curved, rolled-up geometry of the papyrus pages inside the scroll.\n\n**Image 2: The Segmentation Pipeline**\nThis image breaks down the logic of how the vector field is used:\n1.  **2D Slice (Left):** A raw cross-section of the X-ray scan. The white wavy lines are the carbonized papyrus layers, which are incredibly difficult for computers to separate because they touch and crumple.\n2.  **Predicted Scroll Velocity Field (Center):** A machine learning model analyzes the raw slice and predicts a \"flow.\" It treats the papyrus layers as a stream. The arrows point along the tangent of the sheets, predicting where the paper goes next.\n3.  **2D Results (Right):** The final segmentation. Using the vector field as a guide, the computer can successfully paint (segment) the individual layers (yellow) distinct from the air gaps (purple).\n\n---\n\n### 2. How is this related to Segmentation?\n\nIn the context of medical imaging or the Vesuvius Challenge, **segmentation** is the process of identifying and isolating a specific structure (in this case, a single sheet of papyrus) from the rest of the 3D volume.\n\nHere is why the \"Velocity Field\" is the breakthrough technique for this specific task:\n\n**1. Solving the \"Touching Layers\" Problem**\nStandard segmentation looks for differences in brightness (contrast). However, in a scroll, the layers are pressed tight against each other. To a computer, they look like one solid blob. You cannot segment them by brightness alone.\n\n**2. Tracing Geometry instead of Brightness**\nThe method shown here (likely similar to the *ThaumatoAnakalyptor* pipeline used in the Vesuvius Challenge) treats the static scroll as if it were a moving fluid.\n* It calculates a **vector field** that represents the *orientation* of the papyrus sheet at every point.\n* The \"velocity\" tells the algorithm: \"If you are on a sheet here, the sheet continues in *this* direction.\"\n\n**3. Virtual Unrolling**\nOnce the algorithm has this field (Images 1 & 3), it can drop a \"virtual particle\" onto a sheet and let it \"flow\" along the arrows. This traces out the entire surface of the papyrus. Once traced, the surface can be digitally flattened (unrolled), allowing researchers to look for ink on the page.\n\n**Summary:** The velocity field is a geometric map used to disentangle the complex, crushed layers of the scroll so they can be segmented, flattened, and read.\n\n```",
      "votes": null
    },
    {
      "id": "3357393",
      "postDate": "12/01/2025 08:38:31",
      "content": "<p>Yeah, did the same with Claude :D</p>\n<p>I may argue about the \"Solving the \"Touching Layers\" Problem\" since it is just semantic, not instance segmentation…</p>",
      "rawMarkdown": "Yeah, did the same with Claude :D\n\nI may argue about the \"Solving the \"Touching Layers\" Problem\" since it is just semantic, not instance segmentation...",
      "votes": null
    },
    {
      "id": "3358639",
      "postDate": "12/01/2025 15:44:22",
      "content": "<p>deepseek:</p>\n<p>Using a 2D slice image to produce a velocity field typically refers to Particle Image Velocimetry (PIV) or similar optical flow techniques in fluid dynamics. Here's a comprehensive guide:</p>\n<p>Core Concept\nA 2D slice image (usually containing particle patterns) captures fluid motion at an instant. By comparing consecutive images, you can compute displacement vectors → velocity field.</p>\n<p>Main Approaches</p>\n<ol>\n<li>Particle Image Velocimetry (PIV) - Traditional Method\nRequirements:</li>\n</ol>\n<p>Two consecutive images with seeded particles</p>\n<p>High contrast between particles and background</p>\n<p>Known time interval Δt between images</p>\n<p>Known spatial calibration (pixels to physical units)</p>\n<p>Process:</p>\n<p>python</p>\n<h1>Simplified PIV workflow</h1>\n<ol>\n<li>Image preprocessing (contrast enhancement, noise reduction)</li>\n<li>Divide image into interrogation windows (e.g., 32×32 pixels)</li>\n<li>Cross-correlate windows between Image A and Image B</li>\n<li>Find peak displacement → velocity vector for each window</li>\n<li>Post-process: remove outliers, interpolate, smooth\nTools:</li>\n</ol>\n<p>OpenPIV (Python): Most accessible</p>\n<p>PIVlab (MATLAB): User-friendly GUI</p>\n<p>DaVis (Commercial): Industrial standard</p>\n<p>ImageJ + PIV plugin: Free option</p>\n<ol>\n<li>Optical Flow Methods\nBased on computer vision, assumes brightness constancy.</li>\n</ol>\n<p>Horn-Schunck Method:</p>\n<p>python</p>\n<h1>Key equation: I_x<em>u + I_y</em>v + I_t = 0</h1>\n<h1>where (u,v) are velocity components</h1>\n<h1>I_x, I_y = spatial gradients</h1>\n<h1>I_t = temporal gradient</h1>\n<p>Lucas-Kanade Method:</p>\n<p>Assumes constant velocity in local neighborhood</p>\n<p>Solvable via least squares</p>\n<p>Good for sparse feature tracking</p>\n<p>Deep Learning Approaches:</p>\n<p>RAFT (Recurrent All-Pairs Field Transforms)</p>\n<p>PWC-Net</p>\n<p>FlowNet 2.0</p>\n<p>Pre-trained models available for general optical flow</p>",
      "rawMarkdown": "deepseek:\n\nUsing a 2D slice image to produce a velocity field typically refers to Particle Image Velocimetry (PIV) or similar optical flow techniques in fluid dynamics. Here's a comprehensive guide:\n\nCore Concept\nA 2D slice image (usually containing particle patterns) captures fluid motion at an instant. By comparing consecutive images, you can compute displacement vectors → velocity field.\n\nMain Approaches\n1. Particle Image Velocimetry (PIV) - Traditional Method\nRequirements:\n\nTwo consecutive images with seeded particles\n\nHigh contrast between particles and background\n\nKnown time interval Δt between images\n\nKnown spatial calibration (pixels to physical units)\n\nProcess:\n\npython\n# Simplified PIV workflow\n1. Image preprocessing (contrast enhancement, noise reduction)\n2. Divide image into interrogation windows (e.g., 32×32 pixels)\n3. Cross-correlate windows between Image A and Image B\n4. Find peak displacement → velocity vector for each window\n5. Post-process: remove outliers, interpolate, smooth\nTools:\n\nOpenPIV (Python): Most accessible\n\nPIVlab (MATLAB): User-friendly GUI\n\nDaVis (Commercial): Industrial standard\n\nImageJ + PIV plugin: Free option\n\n2. Optical Flow Methods\nBased on computer vision, assumes brightness constancy.\n\nHorn-Schunck Method:\n\npython\n# Key equation: I_x*u + I_y*v + I_t = 0\n# where (u,v) are velocity components\n# I_x, I_y = spatial gradients\n# I_t = temporal gradient\nLucas-Kanade Method:\n\nAssumes constant velocity in local neighborhood\n\nSolvable via least squares\n\nGood for sparse feature tracking\n\nDeep Learning Approaches:\n\nRAFT (Recurrent All-Pairs Field Transforms)\n\nPWC-Net\n\nFlowNet 2.0\n\nPre-trained models available for general optical flow",
      "votes": null
    },
    {
      "id": "3358732",
      "postDate": "12/01/2025 16:02:51",
      "content": "<p>Should I announce a 50,000$ sub competition which ask people building llm to guess my approach?</p>",
      "rawMarkdown": "Should I announce a 50,000$ sub competition which ask people building llm to guess my approach?",
      "votes": null
    },
    {
      "id": "3358931",
      "postDate": "12/01/2025 16:44:38",
      "content": "<p>Lucas-Kanade method is very useful for scroll geometric estimation here I think.</p>",
      "rawMarkdown": "Lucas-Kanade method is very useful for scroll geometric estimation here I think.",
      "votes": null
    },
    {
      "id": "3360266",
      "postDate": "12/02/2025 02:35:06",
      "content": "<p>thanks.  I  know optical flow from some paper. not much experience.</p>",
      "rawMarkdown": "thanks.  I  know optical flow from some paper. not much experience.",
      "votes": null
    },
    {
      "id": "3360269",
      "postDate": "12/02/2025 02:39:48",
      "content": "<p><a href=\"https://www.kaggle.com/dragonzhang\" target=\"_blank\">@dragonzhang</a>  I would like to recommend <a href=\"https://arxiv.org/abs/1612.03897\" target=\"_blank\">this paper</a> if you want to go in-depth experiments.</p>",
      "rawMarkdown": "dragonzhang  I would like to recommend [this paper](https://arxiv.org/abs/1612.03897) if you want to go in-depth experiments.",
      "votes": null
    },
    {
      "id": "3360290",
      "postDate": "12/02/2025 03:13:13",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4ff494fbb9f2b30ae8817672ea81b73%2FAn-example-of-the-deformable-Lucas-Kanade-fitting-to-a-single-image-The-first-row-is-the.png?generation=1764645191736577&amp;alt=media\" alt=\"\"></p>\n<p>Then extend to 3d version </p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4ff494fbb9f2b30ae8817672ea81b73%2FAn-example-of-the-deformable-Lucas-Kanade-fitting-to-a-single-image-The-first-row-is-the.png?generation=1764645191736577&alt=media)\n\nThen extend to 3d version",
      "votes": null
    },
    {
      "id": "3361583",
      "postDate": "12/03/2025 16:38:33",
      "content": "<p>Wow, that looks soooo much better than my own 3D U-Net attempt, well done!</p>",
      "rawMarkdown": "Wow, that looks soooo much better than my own 3D U-Net attempt, well done!",
      "votes": null
    },
    {
      "id": "3361706",
      "postDate": "12/03/2025 18:31:35",
      "content": "<p>Do you have any score yet? :)</p>",
      "rawMarkdown": "Do you have any score yet? :)",
      "votes": null
    },
    {
      "id": "3361818",
      "postDate": "12/03/2025 20:54:02",
      "content": "<p>i am curious what loss function you use</p>",
      "rawMarkdown": "i am curious what loss function you use",
      "votes": null
    },
    {
      "id": "3362270",
      "postDate": "12/04/2025 12:13:20",
      "content": "<p>i used signed distances instead of fields, but it seems that your method is better 👍</p>",
      "rawMarkdown": "i used signed distances instead of fields, but it seems that your method is better 👍",
      "votes": null
    },
    {
      "id": "3362457",
      "postDate": "12/04/2025 18:00:48",
      "content": "<p>I tried that first as well, but I don't know how to deal with the unlabeled regions besides cropping them out.</p>",
      "rawMarkdown": "I tried that first as well, but I don't know how to deal with the unlabeled regions besides cropping them out.",
      "votes": null
    },
    {
      "id": "3362820",
      "postDate": "12/05/2025 11:16:03",
      "content": "<p>the vector field reminds me of early cell instance segmentation (cellpose) in kaggle competition.\nthere is internal field and external field. there is attraction and replusion force.</p>\n<p>for the 3d scroll, you can detect some critical point of the object (sensitive to topological change) and predict the instance identity field around it (e.g., pointing to another critical point). then for each voxel you can trace a path, and voxel paths will convert to some common destination, if they belong the same instance. (very much like affinity field to assemble keypoint in early multi-human pose estimation)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5536d50b19f8d708b7567003462485b0%2FSelection_1478.png?generation=1764933007170068&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "the vector field reminds me of early cell instance segmentation (cellpose) in kaggle competition.\nthere is internal field and external field. there is attraction and replusion force.\n\nfor the 3d scroll, you can detect some critical point of the object (sensitive to topological change) and predict the instance identity field around it (e.g., pointing to another critical point). then for each voxel you can trace a path, and voxel paths will convert to some common destination, if they belong the same instance. (very much like affinity field to assemble keypoint in early multi-human pose estimation)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5536d50b19f8d708b7567003462485b0%2FSelection_1478.png?generation=1764933007170068&alt=media)",
      "votes": null
    },
    {
      "id": "3362833",
      "postDate": "12/05/2025 11:51:02",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F8b0b431e89978221f54aa2da7ab49ddf%2F123.png?generation=1764935305616799&amp;alt=media\" alt=\"\"></p>\n<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> Thank you for your advice. Yes, I think a point-based approach might shine in this competition. I was looking at the Vesuvius Challenge Grand Prize 2023 first-place solution, and it gave me a good intuition about how to trace paths and form a clean topological representation of the scrolls.</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F8b0b431e89978221f54aa2da7ab49ddf%2F123.png?generation=1764935305616799&alt=media)\n\n@hengck23 Thank you for your advice. Yes, I think a point-based approach might shine in this competition. I was looking at the Vesuvius Challenge Grand Prize 2023 first-place solution, and it gave me a good intuition about how to trace paths and form a clean topological representation of the scrolls.",
      "votes": null
    },
    {
      "id": "3363674",
      "postDate": "12/06/2025 04:06:20",
      "content": "<p>i try unlabelled as 1 (because it has something) in distance computation. but for loss, they are masked out.</p>",
      "rawMarkdown": "i try unlabelled as 1 (because it has something) in distance computation. but for loss, they are masked out.",
      "votes": null
    },
    {
      "id": "3367871",
      "postDate": "12/08/2025 19:34:28",
      "content": "<p>if you want to do VAE, why don't try this:\n1) divide the vol into grids (like object detection anchor points)\n2) for each grid point, predict if it is near to the center of surface patch, binary yes or no.\n3) if (2) is yes, then predict the displacement to center (dxdydz) and the parametric surface (e.g. linear coeff or bspline coeffs) for fitting the patch. if you want to do vae, then predict the reconstruction latent parameters.</p>\n<p>basically, a surface patch based vae solution. this also make dense prediction like flow field redundant.</p>\n<hr>\n<p>alternatively, you have your static 3d field, then use this to fit patch surface parametrically or via vae</p>",
      "rawMarkdown": "if you want to do VAE, why don't try this:\n1) divide the vol into grids (like object detection anchor points)\n2) for each grid point, predict if it is near to the center of surface patch, binary yes or no.\n3) if (2) is yes, then predict the displacement to center (dxdydz) and the parametric surface (e.g. linear coeff or bspline coeffs) for fitting the patch. if you want to do vae, then predict the reconstruction latent parameters.\n\n\nbasically, a surface patch based vae solution. this also make dense prediction like flow field redundant.\n\n\n----\n\nalternatively, you have your static 3d field, then use this to fit patch surface parametrically or via vae",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3353157,
      "author_name": "dragonzhang",
      "author_url": "",
      "post_date": "11/29/2025 15:36:40",
      "content": "<p>too abstract to understand.</p>",
      "votes": null,
      "replies": [
        {
          "id": 3353337,
          "author_name": "cudacoding",
          "author_url": "",
          "post_date": "11/29/2025 17:16:02",
          "content": "<p>haha, me too</p>",
          "votes": null,
          "replies": [
            {
              "id": 3354999,
              "author_name": "dragonzhang",
              "author_url": "",
              "post_date": "11/30/2025 14:01:23",
              "content": "<p>my guess is that based on mask density and and 3d-shape, somehow to produce the velocity field. but how, I don't know. perhaps some image flow related.</p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3353681,
      "author_name": "jirkaborovec",
      "author_url": "",
      "post_date": "11/29/2025 21:39:17",
      "content": "<p>Can you please elaborate more on what velocity stands for and how it was competed? </p>",
      "votes": null,
      "replies": [
        {
          "id": 3354473,
          "author_name": "tom99763",
          "author_url": "",
          "post_date": "11/30/2025 10:18:58",
          "content": "<p><a href=\"https://www.kaggle.com/jirkaborovec\" target=\"_blank\">@jirkaborovec</a> sorry I cannot release more now, you'll see how this works in the final write-up</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 3357345,
      "author_name": "clemchris",
      "author_url": "",
      "post_date": "12/01/2025 08:14:21",
      "content": "<p>An explanation from Gemini 3 Pro:</p>\n<pre><code>Based on the visual evidence—specifically the text \"Predicted Scroll Velocity Field\" and the distinct texture of the X-ray slices—these images are from the **Vesuvius Challenge** (or related research into **virtual unrolling**).\n\nThey depict a method used to digitally reconstruct and read ancient, carbonized papyrus scrolls from Herculaneum using 3D X-ray Computed Tomography (CT).\n\n### 1. Image Descriptions\n\n**Image 1 &amp; 3: 3D Velocity/Vector Fields**\nThese two images show **3D vector fields** (often visualized as \"quiver plots\").\n* **Visuals:** You see a 3D volume where thousands of small arrows (vectors) indicate a specific direction and magnitude at various points in space.\n* **The Colors:** The colors (blue/green/red) typically represent the magnitude (strength) or the Z-axis orientation of the vectors.\n* **The Structure:** Notice how the arrows are not random; they form swirling, laminar patterns. This represents the curved, rolled-up geometry of the papyrus pages inside the scroll.\n\n**Image 2: The Segmentation Pipeline**\nThis image breaks down the logic of how the vector field is used:\n1.  **2D Slice (Left):** A raw cross-section of the X-ray scan. The white wavy lines are the carbonized papyrus layers, which are incredibly difficult for computers to separate because they touch and crumple.\n2.  **Predicted Scroll Velocity Field (Center):** A machine learning model analyzes the raw slice and predicts a \"flow.\" It treats the papyrus layers as a stream. The arrows point along the tangent of the sheets, predicting where the paper goes next.\n3.  **2D Results (Right):** The final segmentation. Using the vector field as a guide, the computer can successfully paint (segment) the individual layers (yellow) distinct from the air gaps (purple).\n\n---\n\n### 2. How is this related to Segmentation?\n\nIn the context of medical imaging or the Vesuvius Challenge, **segmentation** is the process of identifying and isolating a specific structure (in this case, a single sheet of papyrus) from the rest of the 3D volume.\n\nHere is why the \"Velocity Field\" is the breakthrough technique for this specific task:\n\n**1. Solving the \"Touching Layers\" Problem**\nStandard segmentation looks for differences in brightness (contrast). However, in a scroll, the layers are pressed tight against each other. To a computer, they look like one solid blob. You cannot segment them by brightness alone.\n\n**2. Tracing Geometry instead of Brightness**\nThe method shown here (likely similar to the *ThaumatoAnakalyptor* pipeline used in the Vesuvius Challenge) treats the static scroll as if it were a moving fluid.\n* It calculates a **vector field** that represents the *orientation* of the papyrus sheet at every point.\n* The \"velocity\" tells the algorithm: \"If you are on a sheet here, the sheet continues in *this* direction.\"\n\n**3. Virtual Unrolling**\nOnce the algorithm has this field (Images 1 &amp; 3), it can drop a \"virtual particle\" onto a sheet and let it \"flow\" along the arrows. This traces out the entire surface of the papyrus. Once traced, the surface can be digitally flattened (unrolled), allowing researchers to look for ink on the page.\n\n**Summary:** The velocity field is a geometric map used to disentangle the complex, crushed layers of the scroll so they can be segmented, flattened, and read.\n</code></pre>",
      "votes": null,
      "replies": [
        {
          "id": 3357393,
          "author_name": "jirkaborovec",
          "author_url": "",
          "post_date": "12/01/2025 08:38:31",
          "content": "<p>Yeah, did the same with Claude :D</p>\n<p>I may argue about the \"Solving the \"Touching Layers\" Problem\" since it is just semantic, not instance segmentation…</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 3358732,
          "author_name": "tom99763",
          "author_url": "",
          "post_date": "12/01/2025 16:02:51",
          "content": "<p>Should I announce a 50,000$ sub competition which ask people building llm to guess my approach?</p>",
          "votes": null,
          "replies": [
            {
              "id": 3361706,
              "author_name": "jirkaborovec",
              "author_url": "",
              "post_date": "12/03/2025 18:31:35",
              "content": "<p>Do you have any score yet? :)</p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3358639,
      "author_name": "dragonzhang",
      "author_url": "",
      "post_date": "12/01/2025 15:44:22",
      "content": "<p>deepseek:</p>\n<p>Using a 2D slice image to produce a velocity field typically refers to Particle Image Velocimetry (PIV) or similar optical flow techniques in fluid dynamics. Here's a comprehensive guide:</p>\n<p>Core Concept\nA 2D slice image (usually containing particle patterns) captures fluid motion at an instant. By comparing consecutive images, you can compute displacement vectors → velocity field.</p>\n<p>Main Approaches</p>\n<ol>\n<li>Particle Image Velocimetry (PIV) - Traditional Method\nRequirements:</li>\n</ol>\n<p>Two consecutive images with seeded particles</p>\n<p>High contrast between particles and background</p>\n<p>Known time interval Δt between images</p>\n<p>Known spatial calibration (pixels to physical units)</p>\n<p>Process:</p>\n<p>python</p>\n<h1>Simplified PIV workflow</h1>\n<ol>\n<li>Image preprocessing (contrast enhancement, noise reduction)</li>\n<li>Divide image into interrogation windows (e.g., 32×32 pixels)</li>\n<li>Cross-correlate windows between Image A and Image B</li>\n<li>Find peak displacement → velocity vector for each window</li>\n<li>Post-process: remove outliers, interpolate, smooth\nTools:</li>\n</ol>\n<p>OpenPIV (Python): Most accessible</p>\n<p>PIVlab (MATLAB): User-friendly GUI</p>\n<p>DaVis (Commercial): Industrial standard</p>\n<p>ImageJ + PIV plugin: Free option</p>\n<ol>\n<li>Optical Flow Methods\nBased on computer vision, assumes brightness constancy.</li>\n</ol>\n<p>Horn-Schunck Method:</p>\n<p>python</p>\n<h1>Key equation: I_x<em>u + I_y</em>v + I_t = 0</h1>\n<h1>where (u,v) are velocity components</h1>\n<h1>I_x, I_y = spatial gradients</h1>\n<h1>I_t = temporal gradient</h1>\n<p>Lucas-Kanade Method:</p>\n<p>Assumes constant velocity in local neighborhood</p>\n<p>Solvable via least squares</p>\n<p>Good for sparse feature tracking</p>\n<p>Deep Learning Approaches:</p>\n<p>RAFT (Recurrent All-Pairs Field Transforms)</p>\n<p>PWC-Net</p>\n<p>FlowNet 2.0</p>\n<p>Pre-trained models available for general optical flow</p>",
      "votes": null,
      "replies": [
        {
          "id": 3358931,
          "author_name": "tom99763",
          "author_url": "",
          "post_date": "12/01/2025 16:44:38",
          "content": "<p>Lucas-Kanade method is very useful for scroll geometric estimation here I think.</p>",
          "votes": null,
          "replies": [
            {
              "id": 3360266,
              "author_name": "dragonzhang",
              "author_url": "",
              "post_date": "12/02/2025 02:35:06",
              "content": "<p>thanks.  I  know optical flow from some paper. not much experience.</p>",
              "votes": null,
              "replies": [
                {
                  "id": 3360269,
                  "author_name": "tom99763",
                  "author_url": "",
                  "post_date": "12/02/2025 02:39:48",
                  "content": "<p><a href=\"https://www.kaggle.com/dragonzhang\" target=\"_blank\">@dragonzhang</a>  I would like to recommend <a href=\"https://arxiv.org/abs/1612.03897\" target=\"_blank\">this paper</a> if you want to go in-depth experiments.</p>",
                  "votes": null,
                  "replies": []
                },
                {
                  "id": 3360290,
                  "author_name": "tom99763",
                  "author_url": "",
                  "post_date": "12/02/2025 03:13:13",
                  "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4ff494fbb9f2b30ae8817672ea81b73%2FAn-example-of-the-deformable-Lucas-Kanade-fitting-to-a-single-image-The-first-row-is-the.png?generation=1764645191736577&amp;alt=media\" alt=\"\"></p>\n<p>Then extend to 3d version </p>",
                  "votes": null,
                  "replies": []
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": 3361583,
      "author_name": "woodenrobot",
      "author_url": "",
      "post_date": "12/03/2025 16:38:33",
      "content": "<p>Wow, that looks soooo much better than my own 3D U-Net attempt, well done!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3361818,
      "author_name": "konohayui",
      "author_url": "",
      "post_date": "12/03/2025 20:54:02",
      "content": "<p>i am curious what loss function you use</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3362270,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "12/04/2025 12:13:20",
      "content": "<p>i used signed distances instead of fields, but it seems that your method is better 👍</p>",
      "votes": null,
      "replies": [
        {
          "id": 3362457,
          "author_name": "sroger",
          "author_url": "",
          "post_date": "12/04/2025 18:00:48",
          "content": "<p>I tried that first as well, but I don't know how to deal with the unlabeled regions besides cropping them out.</p>",
          "votes": null,
          "replies": [
            {
              "id": 3363674,
              "author_name": "hengck23",
              "author_url": "",
              "post_date": "12/06/2025 04:06:20",
              "content": "<p>i try unlabelled as 1 (because it has something) in distance computation. but for loss, they are masked out.</p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3362820,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "12/05/2025 11:16:03",
      "content": "<p>the vector field reminds me of early cell instance segmentation (cellpose) in kaggle competition.\nthere is internal field and external field. there is attraction and replusion force.</p>\n<p>for the 3d scroll, you can detect some critical point of the object (sensitive to topological change) and predict the instance identity field around it (e.g., pointing to another critical point). then for each voxel you can trace a path, and voxel paths will convert to some common destination, if they belong the same instance. (very much like affinity field to assemble keypoint in early multi-human pose estimation)</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5536d50b19f8d708b7567003462485b0%2FSelection_1478.png?generation=1764933007170068&amp;alt=media\" alt=\"\"></p>",
      "votes": null,
      "replies": [
        {
          "id": 3362833,
          "author_name": "tom99763",
          "author_url": "",
          "post_date": "12/05/2025 11:51:02",
          "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F8b0b431e89978221f54aa2da7ab49ddf%2F123.png?generation=1764935305616799&amp;alt=media\" alt=\"\"></p>\n<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> Thank you for your advice. Yes, I think a point-based approach might shine in this competition. I was looking at the Vesuvius Challenge Grand Prize 2023 first-place solution, and it gave me a good intuition about how to trace paths and form a clean topological representation of the scrolls.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 3367871,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "12/08/2025 19:34:28",
      "content": "<p>if you want to do VAE, why don't try this:\n1) divide the vol into grids (like object detection anchor points)\n2) for each grid point, predict if it is near to the center of surface patch, binary yes or no.\n3) if (2) is yes, then predict the displacement to center (dxdydz) and the parametric surface (e.g. linear coeff or bspline coeffs) for fitting the patch. if you want to do vae, then predict the reconstruction latent parameters.</p>\n<p>basically, a surface patch based vae solution. this also make dense prediction like flow field redundant.</p>\n<hr>\n<p>alternatively, you have your static 3d field, then use this to fit patch surface parametrically or via vae</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3353060": "### 2d Example\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F5ad2f7b7220e4e94053a0712aa1c61b8%2F.png?generation=1764427425082233&alt=media)\n\n### Magnitute\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fe0faa7c30706e99dfd79a12818b75735%2F11.png?generation=1764427538343268&alt=media)\n\n### Full 3d View on SVF\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F748006911410ef5d27a7dfe0bb988ec1%2Fnewplot.png?generation=1764427457328548&alt=media)",
    "3353157": "too abstract to understand.",
    "3353337": "haha, me too",
    "3353681": "Can you please elaborate more on what velocity stands for and how it was competed?",
    "3354473": "jirkaborovec sorry I cannot release more now, you'll see how this works in the final write-up",
    "3354999": "my guess is that based on mask density and and 3d-shape, somehow to produce the velocity field. but how, I don't know. perhaps some image flow related.",
    "3357345": "An explanation from Gemini 3 Pro:\n\n```text\nBased on the visual evidence—specifically the text \"Predicted Scroll Velocity Field\" and the distinct texture of the X-ray slices—these images are from the **Vesuvius Challenge** (or related research into **virtual unrolling**).\n\nThey depict a method used to digitally reconstruct and read ancient, carbonized papyrus scrolls from Herculaneum using 3D X-ray Computed Tomography (CT).\n\n### 1. Image Descriptions\n\n**Image 1 & 3: 3D Velocity/Vector Fields**\nThese two images show **3D vector fields** (often visualized as \"quiver plots\").\n* **Visuals:** You see a 3D volume where thousands of small arrows (vectors) indicate a specific direction and magnitude at various points in space.\n* **The Colors:** The colors (blue/green/red) typically represent the magnitude (strength) or the Z-axis orientation of the vectors.\n* **The Structure:** Notice how the arrows are not random; they form swirling, laminar patterns. This represents the curved, rolled-up geometry of the papyrus pages inside the scroll.\n\n**Image 2: The Segmentation Pipeline**\nThis image breaks down the logic of how the vector field is used:\n1.  **2D Slice (Left):** A raw cross-section of the X-ray scan. The white wavy lines are the carbonized papyrus layers, which are incredibly difficult for computers to separate because they touch and crumple.\n2.  **Predicted Scroll Velocity Field (Center):** A machine learning model analyzes the raw slice and predicts a \"flow.\" It treats the papyrus layers as a stream. The arrows point along the tangent of the sheets, predicting where the paper goes next.\n3.  **2D Results (Right):** The final segmentation. Using the vector field as a guide, the computer can successfully paint (segment) the individual layers (yellow) distinct from the air gaps (purple).\n\n---\n\n### 2. How is this related to Segmentation?\n\nIn the context of medical imaging or the Vesuvius Challenge, **segmentation** is the process of identifying and isolating a specific structure (in this case, a single sheet of papyrus) from the rest of the 3D volume.\n\nHere is why the \"Velocity Field\" is the breakthrough technique for this specific task:\n\n**1. Solving the \"Touching Layers\" Problem**\nStandard segmentation looks for differences in brightness (contrast). However, in a scroll, the layers are pressed tight against each other. To a computer, they look like one solid blob. You cannot segment them by brightness alone.\n\n**2. Tracing Geometry instead of Brightness**\nThe method shown here (likely similar to the *ThaumatoAnakalyptor* pipeline used in the Vesuvius Challenge) treats the static scroll as if it were a moving fluid.\n* It calculates a **vector field** that represents the *orientation* of the papyrus sheet at every point.\n* The \"velocity\" tells the algorithm: \"If you are on a sheet here, the sheet continues in *this* direction.\"\n\n**3. Virtual Unrolling**\nOnce the algorithm has this field (Images 1 & 3), it can drop a \"virtual particle\" onto a sheet and let it \"flow\" along the arrows. This traces out the entire surface of the papyrus. Once traced, the surface can be digitally flattened (unrolled), allowing researchers to look for ink on the page.\n\n**Summary:** The velocity field is a geometric map used to disentangle the complex, crushed layers of the scroll so they can be segmented, flattened, and read.\n\n```",
    "3357393": "Yeah, did the same with Claude :D\n\nI may argue about the \"Solving the \"Touching Layers\" Problem\" since it is just semantic, not instance segmentation...",
    "3358639": "deepseek:\n\nUsing a 2D slice image to produce a velocity field typically refers to Particle Image Velocimetry (PIV) or similar optical flow techniques in fluid dynamics. Here's a comprehensive guide:\n\nCore Concept\nA 2D slice image (usually containing particle patterns) captures fluid motion at an instant. By comparing consecutive images, you can compute displacement vectors → velocity field.\n\nMain Approaches\n1. Particle Image Velocimetry (PIV) - Traditional Method\nRequirements:\n\nTwo consecutive images with seeded particles\n\nHigh contrast between particles and background\n\nKnown time interval Δt between images\n\nKnown spatial calibration (pixels to physical units)\n\nProcess:\n\npython\n# Simplified PIV workflow\n1. Image preprocessing (contrast enhancement, noise reduction)\n2. Divide image into interrogation windows (e.g., 32×32 pixels)\n3. Cross-correlate windows between Image A and Image B\n4. Find peak displacement → velocity vector for each window\n5. Post-process: remove outliers, interpolate, smooth\nTools:\n\nOpenPIV (Python): Most accessible\n\nPIVlab (MATLAB): User-friendly GUI\n\nDaVis (Commercial): Industrial standard\n\nImageJ + PIV plugin: Free option\n\n2. Optical Flow Methods\nBased on computer vision, assumes brightness constancy.\n\nHorn-Schunck Method:\n\npython\n# Key equation: I_x*u + I_y*v + I_t = 0\n# where (u,v) are velocity components\n# I_x, I_y = spatial gradients\n# I_t = temporal gradient\nLucas-Kanade Method:\n\nAssumes constant velocity in local neighborhood\n\nSolvable via least squares\n\nGood for sparse feature tracking\n\nDeep Learning Approaches:\n\nRAFT (Recurrent All-Pairs Field Transforms)\n\nPWC-Net\n\nFlowNet 2.0\n\nPre-trained models available for general optical flow",
    "3358732": "Should I announce a 50,000$ sub competition which ask people building llm to guess my approach?",
    "3358931": "Lucas-Kanade method is very useful for scroll geometric estimation here I think.",
    "3360266": "thanks.  I  know optical flow from some paper. not much experience.",
    "3360269": "dragonzhang  I would like to recommend [this paper](https://arxiv.org/abs/1612.03897) if you want to go in-depth experiments.",
    "3360290": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2Fc4ff494fbb9f2b30ae8817672ea81b73%2FAn-example-of-the-deformable-Lucas-Kanade-fitting-to-a-single-image-The-first-row-is-the.png?generation=1764645191736577&alt=media)\n\nThen extend to 3d version",
    "3361583": "Wow, that looks soooo much better than my own 3D U-Net attempt, well done!",
    "3361706": "Do you have any score yet? :)",
    "3361818": "i am curious what loss function you use",
    "3362270": "i used signed distances instead of fields, but it seems that your method is better 👍",
    "3362457": "I tried that first as well, but I don't know how to deal with the unlabeled regions besides cropping them out.",
    "3362820": "the vector field reminds me of early cell instance segmentation (cellpose) in kaggle competition.\nthere is internal field and external field. there is attraction and replusion force.\n\nfor the 3d scroll, you can detect some critical point of the object (sensitive to topological change) and predict the instance identity field around it (e.g., pointing to another critical point). then for each voxel you can trace a path, and voxel paths will convert to some common destination, if they belong the same instance. (very much like affinity field to assemble keypoint in early multi-human pose estimation)\n\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F113660%2F5536d50b19f8d708b7567003462485b0%2FSelection_1478.png?generation=1764933007170068&alt=media)",
    "3362833": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F4310004%2F8b0b431e89978221f54aa2da7ab49ddf%2F123.png?generation=1764935305616799&alt=media)\n\n@hengck23 Thank you for your advice. Yes, I think a point-based approach might shine in this competition. I was looking at the Vesuvius Challenge Grand Prize 2023 first-place solution, and it gave me a good intuition about how to trace paths and form a clean topological representation of the scrolls.",
    "3363674": "i try unlabelled as 1 (because it has something) in distance computation. but for loss, they are masked out.",
    "3367871": "if you want to do VAE, why don't try this:\n1) divide the vol into grids (like object detection anchor points)\n2) for each grid point, predict if it is near to the center of surface patch, binary yes or no.\n3) if (2) is yes, then predict the displacement to center (dxdydz) and the parametric surface (e.g. linear coeff or bspline coeffs) for fitting the patch. if you want to do vae, then predict the reconstruction latent parameters.\n\n\nbasically, a surface patch based vae solution. this also make dense prediction like flow field redundant.\n\n\n----\n\nalternatively, you have your static 3d field, then use this to fit patch surface parametrically or via vae"
  },
  "source": "meta"
}