{
  "id": 580624,
  "title": "Submission scoring errors",
  "url": "/competitions/image-matching-challenge-2025/discussion/580624",
  "author_name": "",
  "post_date": "2025-05-25T14:51:12.249316800Z",
  "votes": 3,
  "comment_count": 10,
  "views": 0,
  "content": "<p>Hey everyone :)</p>\n<p>I was trying to make the first successful submission the whole day but failed miserably. To write the submission file, I use the functionality implemented in this notebook <a href=\"https://www.kaggle.com/code/eduardtrulls/imc25-submission/\" target=\"_blank\">https://www.kaggle.com/code/eduardtrulls/imc25-submission/</a>. Submitting the csv with all \"null\" values works, but the moment I start adding actual predictions to the file, I get the scoring errors. I checked and the scoring function from the competition utils works just fine with the files that I create. I've attached one submission example below.</p>\n<p>Maybe be somebody had the similar issue? Maybe I am missing something? Thanks in advance for any help!</p>",
  "messages": [
    {
      "id": "3209306",
      "postDate": "05/25/2025 14:51:12",
      "content": "<p>Hey everyone :)</p>\n<p>I was trying to make the first successful submission the whole day but failed miserably. To write the submission file, I use the functionality implemented in this notebook <a href=\"https://www.kaggle.com/code/eduardtrulls/imc25-submission/\" target=\"_blank\">https://www.kaggle.com/code/eduardtrulls/imc25-submission/</a>. Submitting the csv with all \"null\" values works, but the moment I start adding actual predictions to the file, I get the scoring errors. I checked and the scoring function from the competition utils works just fine with the files that I create. I've attached one submission example below.</p>\n<p>Maybe be somebody had the similar issue? Maybe I am missing something? Thanks in advance for any help!</p>",
      "rawMarkdown": "Hey everyone :)\n\nI was trying to make the first successful submission the whole day but failed miserably. To write the submission file, I use the functionality implemented in this notebook https://www.kaggle.com/code/eduardtrulls/imc25-submission/. Submitting the csv with all \"null\" values works, but the moment I start adding actual predictions to the file, I get the scoring errors. I checked and the scoring function from the competition utils works just fine with the files that I create. I've attached one submission example below.\n\nMaybe be somebody had the similar issue? Maybe I am missing something? Thanks in advance for any help!",
      "votes": null
    },
    {
      "id": "3209425",
      "postDate": "05/25/2025 19:09:51",
      "content": "<p>Hey! I’m actually in the exact same situation 😅</p>\n<p>My public score has been stuck at 0.00 no matter what I try. Submitting the official sample_submission gives me a non-zero score, and even if I just replace the first 500 rows of my own submission with the sample’s, I get something like 1.24 — so the system is clearly reading the file, just completely ignoring my predictions.</p>\n<p>I even tried replacing all my poses with the ones from the sample solution — still got 0.00 😭</p>\n<p>I’ve spent the past 3 days debugging everything: rotation matrix validity, formatting, field names, etc. I even made a dummy threshold file and used the latest official metric script locally, treating the sample as ground truth — and it runs totally fine in a Kaggle notebook, giving me non-zero scores.</p>\n<p>So I’m like 99% sure the format is fine, and Kaggle is accepting the file, but somehow none of my predictions are being scored.</p>\n<p>If you figure anything out, I’d really appreciate a ping 🙏 Will do the same on my end!</p>",
      "rawMarkdown": "Hey! I’m actually in the exact same situation 😅\n\nMy public score has been stuck at 0.00 no matter what I try. Submitting the official sample_submission gives me a non-zero score, and even if I just replace the first 500 rows of my own submission with the sample’s, I get something like 1.24 — so the system is clearly reading the file, just completely ignoring my predictions.\n\nI even tried replacing all my poses with the ones from the sample solution — still got 0.00 😭\n\nI’ve spent the past 3 days debugging everything: rotation matrix validity, formatting, field names, etc. I even made a dummy threshold file and used the latest official metric script locally, treating the sample as ground truth — and it runs totally fine in a Kaggle notebook, giving me non-zero scores.\n\nSo I’m like 99% sure the format is fine, and Kaggle is accepting the file, but somehow none of my predictions are being scored.\n\nIf you figure anything out, I’d really appreciate a ping 🙏 Will do the same on my end!",
      "votes": null
    },
    {
      "id": "3209795",
      "postDate": "05/26/2025 10:28:49",
      "content": "<p>Damn, I've tried pretty much the same stuff 🤷🏻‍♀️ It does not seem like a file formatting issue cause when I generate the intrinsics randomly with numpy the submission works just fine. But the moment I use the estimations made with COLMAP, nothing works.</p>\n<pre><code>rot_matrix = (())\ntranslation_vec = (np(.translation))\n</code></pre>",
      "rawMarkdown": "Damn, I've tried pretty much the same stuff 🤷🏻‍♀️ It does not seem like a file formatting issue cause when I generate the intrinsics randomly with numpy the submission works just fine. But the moment I use the estimations made with COLMAP, nothing works.\n```\nrot_matrix = deepcopy(image.cam_from_world.rotation.matrix())\ntranslation_vec = deepcopy(np.array(image.cam_from_world.translation))\n```",
      "votes": null
    },
    {
      "id": "3210735",
      "postDate": "05/27/2025 16:30:12",
      "content": "<p>Same here! At this point, I’m honestly not sure how to proceed anymore.</p>\n<p><a href=\"https://www.kaggle.com/oldufo\" target=\"_blank\">@oldufo</a> When you have a moment, could you kindly help us look into what might be going on? We’d really appreciate any guidance or insight 🙏</p>",
      "rawMarkdown": "Same here! At this point, I’m honestly not sure how to proceed anymore.\n\n@oldufo When you have a moment, could you kindly help us look into what might be going on? We’d really appreciate any guidance or insight 🙏",
      "votes": null
    },
    {
      "id": "3210788",
      "postDate": "05/27/2025 17:13:58",
      "content": "<p>Sorry, I am not sure that I follow.<br>\nThere are a lot of submission examples on code - both from orgs, as well as improved versions from participants.<br>\n<a href=\"https://www.kaggle.com/competitions/image-matching-challenge-2025/code\" target=\"_blank\">https://www.kaggle.com/competitions/image-matching-challenge-2025/code</a></p>\n<p>They all have non-zero scores, meaning, they work. I would recommend you to start from them and make changes there. <br>\nAlso, if we are speaking about pycolmap interface</p>\n<pre><code>rot_matrix = (())\n</code></pre>\n<p>please make sure, that you use correct ones for the version you use because they have been changing with the versions flow. </p>",
      "rawMarkdown": "Sorry, I am not sure that I follow.\nThere are a lot of submission examples on code - both from orgs, as well as improved versions from participants.\nhttps://www.kaggle.com/competitions/image-matching-challenge-2025/code\n\nThey all have non-zero scores, meaning, they work. I would recommend you to start from them and make changes there. \nAlso, if we are speaking about pycolmap interface\n\n```\nrot_matrix = deepcopy(image.cam_from_world.rotation.matrix())\n```\n\nplease make sure, that you use correct ones for the version you use because they have been changing with the versions flow.",
      "votes": null
    },
    {
      "id": "3210821",
      "postDate": "05/27/2025 17:42:42",
      "content": "<p>Probably, I'm in the same situation.<br>\nThis isn't a matter of the number of digits, is it?</p>",
      "rawMarkdown": "Probably, I'm in the same situation.\nThis isn't a matter of the number of digits, is it?",
      "votes": null
    },
    {
      "id": "3211028",
      "postDate": "05/28/2025 02:44:28",
      "content": "<p>I spot checked some recent 0.00 submissions and all of them were working as intended / scored properly.</p>",
      "rawMarkdown": "I spot checked some recent 0.00 submissions and all of them were working as intended / scored properly.",
      "votes": null
    },
    {
      "id": "3211471",
      "postDate": "05/28/2025 13:20:20",
      "content": "<p>Thanks so much for the clarification! I really appreciate it. I’ll double check my code again today and try a few more tests to narrow it down. </p>",
      "rawMarkdown": "Thanks so much for the clarification! I really appreciate it. I’ll double check my code again today and try a few more tests to narrow it down.",
      "votes": null
    },
    {
      "id": "3212354",
      "postDate": "05/29/2025 17:17:46",
      "content": "<p><a href=\"https://www.kaggle.com/oldufo\" target=\"_blank\">@oldufo</a> thank you for the hint!</p>\n<p>I've checked the pipeline that I was trying to submit multiple times, and I think there is an issue with scoring the images that are assigned to a specific cluster but not registered.</p>\n<p>i. First, I ran my solution for the matching but submitted the random predictions instead. I made this to make sure that everything is fine with the dependencies, colmap usage, etc. This submission was successful so I excluded the possibility that something was wrong with the code I've created. </p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     ,   sample_submission.iterrows():\n        rotation = ..rand(, )\n        translation = ..rand()\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p><br>\nii. Then I did the same, but now the random predictions had primarily been null (except the first 50 rows). This was also successful, and I knew that the issue was not with the outliers. </p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     i,   sample_submission.iterrows():\n        rotation = ..rand(, )  i &lt;   None\n        translation = ..rand()  i &lt;   None\n        cluster_index =   i &lt;   -\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p>iii. And then I checked for the cases when the image is assigned to the cluster but not registered. It's stated in the rules that such cases can happen and can be formatted like this in the submission file:</p>\n<pre><code>dataset2,cluster1,image2.png,;;;;;;;;,;;\n</code></pre>\n<p>After I submitted the dummy file, where half of the \"clustered\" images were not registered, I finally got the scoring error.</p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     i,   sample_submission.iterrows():\n        is_registered = ..choice([True, False])\n        rotation = ..rand(, )  i &lt;   is_registered  None\n        translation = ..rand()  i &lt;   is_registered  None\n        cluster_index =   i &lt;   -\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p>After checking this working solution <a href=\"https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue\" target=\"_blank\">https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue</a>, I've realised that it will never assign the non-registered image to a cluster. While in my notebook, some of the non-registered images end up in the valid clusters. Unfortunately, that's all I've got for now as I've run out of submissions today and have no chance to do more tests 🙈 </p>",
      "rawMarkdown": "oldufo thank you for the hint!\n\nI've checked the pipeline that I was trying to submit multiple times, and I think there is an issue with scoring the images that are assigned to a specific cluster but not registered.\n\ni. First, I ran my solution for the matching but submitted the random predictions instead. I made this to make sure that everything is fine with the dependencies, colmap usage, etc. This submission was successful so I excluded the possibility that something was wrong with the code I've created. \n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for _, row in sample_submission.iterrows():\n        rotation = np.random.rand(3, 3)\n        translation = np.random.rand(3)\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=0,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions = make_dummy_predictions()\nwrite_submission(predictions)\n``` \nii. Then I did the same, but now the random predictions had primarily been null (except the first 50 rows). This was also successful, and I knew that the issue was not with the outliers. \n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for i, row in sample_submission.iterrows():\n        rotation = np.random.rand(3, 3) if i < 50 else None\n        translation = np.random.rand(3) if i < 50 else None\n        cluster_index = 0 if i < 50 else -1\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n```\niii. And then I checked for the cases when the image is assigned to the cluster but not registered. It's stated in the rules that such cases can happen and can be formatted like this in the submission file:\n```\ndataset2,cluster1,image2.png,nan;nan;nan;nan;nan;nan;nan;nan;nan,nan;nan;nan\n```\nAfter I submitted the dummy file, where half of the \"clustered\" images were not registered, I finally got the scoring error.\n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for i, row in sample_submission.iterrows():\n        is_registered = np.random.choice([True, False])\n        rotation = np.random.rand(3, 3) if i < 50 and is_registered else None\n        translation = np.random.rand(3) if i < 50 and is_registered else None\n        cluster_index = 0 if i < 50 else -1\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n```\n\nAfter checking this working solution https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue, I've realised that it will never assign the non-registered image to a cluster. While in my notebook, some of the non-registered images end up in the valid clusters. Unfortunately, that's all I've got for now as I've run out of submissions today and have no chance to do more tests 🙈",
      "votes": null
    },
    {
      "id": "3213594",
      "postDate": "05/30/2025 08:08:11",
      "content": "<p>Just to follow up on my previous comments <a href=\"https://www.kaggle.com/ewiniar110\" target=\"_blank\">@ewiniar110</a> , I was able to submit my original notebook by modifying this line in the <code>write_submission</code> function:</p>\n<pre><code>cluster_name =   (prediction.cluster_index == -)  (prediction.translation  )  \n</code></pre>\n<p>It appears that this statement in the rules is not true for the evaluation</p>\n<blockquote>\n  <p>Note that you can group images together if you think they belong to the same scene, even if you cannot register them. You can indicate this by using the right scene label and nan values for rotation_matrix and translation_vector.</p>\n</blockquote>",
      "rawMarkdown": "Just to follow up on my previous comments @ewiniar110 , I was able to submit my original notebook by modifying this line in the `write_submission` function:\n```\ncluster_name = \"outliers\" if (prediction.cluster_index == -1) or (prediction.translation is None) else f\"cluster{prediction.cluster_index}\"\n```\nIt appears that this statement in the rules is not true for the evaluation\n>Note that you can group images together if you think they belong to the same scene, even if you cannot register them. You can indicate this by using the right scene label and nan values for rotation_matrix and translation_vector.",
      "votes": null
    },
    {
      "id": "3214135",
      "postDate": "05/31/2025 02:13:50",
      "content": "<p>you can refer my begineer friendly code here -  <a href=\"https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly\" target=\"_blank\">https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly</a></p>\n<p>DO UPVOTE!</p>",
      "rawMarkdown": "you can refer my begineer friendly code here -  https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly\n\nDO UPVOTE!",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3209425,
      "author_name": "ewiniar110",
      "author_url": "",
      "post_date": "05/25/2025 19:09:51",
      "content": "<p>Hey! I’m actually in the exact same situation 😅</p>\n<p>My public score has been stuck at 0.00 no matter what I try. Submitting the official sample_submission gives me a non-zero score, and even if I just replace the first 500 rows of my own submission with the sample’s, I get something like 1.24 — so the system is clearly reading the file, just completely ignoring my predictions.</p>\n<p>I even tried replacing all my poses with the ones from the sample solution — still got 0.00 😭</p>\n<p>I’ve spent the past 3 days debugging everything: rotation matrix validity, formatting, field names, etc. I even made a dummy threshold file and used the latest official metric script locally, treating the sample as ground truth — and it runs totally fine in a Kaggle notebook, giving me non-zero scores.</p>\n<p>So I’m like 99% sure the format is fine, and Kaggle is accepting the file, but somehow none of my predictions are being scored.</p>\n<p>If you figure anything out, I’d really appreciate a ping 🙏 Will do the same on my end!</p>",
      "votes": null,
      "replies": [
        {
          "id": 3209795,
          "author_name": "ddzhulay",
          "author_url": "",
          "post_date": "05/26/2025 10:28:49",
          "content": "<p>Damn, I've tried pretty much the same stuff 🤷🏻‍♀️ It does not seem like a file formatting issue cause when I generate the intrinsics randomly with numpy the submission works just fine. But the moment I use the estimations made with COLMAP, nothing works.</p>\n<pre><code>rot_matrix = (())\ntranslation_vec = (np(.translation))\n</code></pre>",
          "votes": null,
          "replies": [
            {
              "id": 3210735,
              "author_name": "ewiniar110",
              "author_url": "",
              "post_date": "05/27/2025 16:30:12",
              "content": "<p>Same here! At this point, I’m honestly not sure how to proceed anymore.</p>\n<p><a href=\"https://www.kaggle.com/oldufo\" target=\"_blank\">@oldufo</a> When you have a moment, could you kindly help us look into what might be going on? We’d really appreciate any guidance or insight 🙏</p>",
              "votes": null,
              "replies": [
                {
                  "id": 3210788,
                  "author_name": "oldufo",
                  "author_url": "",
                  "post_date": "05/27/2025 17:13:58",
                  "content": "<p>Sorry, I am not sure that I follow.<br>\nThere are a lot of submission examples on code - both from orgs, as well as improved versions from participants.<br>\n<a href=\"https://www.kaggle.com/competitions/image-matching-challenge-2025/code\" target=\"_blank\">https://www.kaggle.com/competitions/image-matching-challenge-2025/code</a></p>\n<p>They all have non-zero scores, meaning, they work. I would recommend you to start from them and make changes there. <br>\nAlso, if we are speaking about pycolmap interface</p>\n<pre><code>rot_matrix = (())\n</code></pre>\n<p>please make sure, that you use correct ones for the version you use because they have been changing with the versions flow. </p>",
                  "votes": null,
                  "replies": [
                    {
                      "id": 3210821,
                      "author_name": "tomatanigawa",
                      "author_url": "",
                      "post_date": "05/27/2025 17:42:42",
                      "content": "<p>Probably, I'm in the same situation.<br>\nThis isn't a matter of the number of digits, is it?</p>",
                      "votes": null,
                      "replies": [
                        {
                          "id": 3212354,
                          "author_name": "ddzhulay",
                          "author_url": "",
                          "post_date": "05/29/2025 17:17:46",
                          "content": "<p><a href=\"https://www.kaggle.com/oldufo\" target=\"_blank\">@oldufo</a> thank you for the hint!</p>\n<p>I've checked the pipeline that I was trying to submit multiple times, and I think there is an issue with scoring the images that are assigned to a specific cluster but not registered.</p>\n<p>i. First, I ran my solution for the matching but submitted the random predictions instead. I made this to make sure that everything is fine with the dependencies, colmap usage, etc. This submission was successful so I excluded the possibility that something was wrong with the code I've created. </p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     ,   sample_submission.iterrows():\n        rotation = ..rand(, )\n        translation = ..rand()\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p><br>\nii. Then I did the same, but now the random predictions had primarily been null (except the first 50 rows). This was also successful, and I knew that the issue was not with the outliers. </p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     i,   sample_submission.iterrows():\n        rotation = ..rand(, )  i &lt;   None\n        translation = ..rand()  i &lt;   None\n        cluster_index =   i &lt;   -\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p>iii. And then I checked for the cases when the image is assigned to the cluster but not registered. It's stated in the rules that such cases can happen and can be formatted like this in the submission file:</p>\n<pre><code>dataset2,cluster1,image2.png,;;;;;;;;,;;\n</code></pre>\n<p>After I submitted the dummy file, where half of the \"clustered\" images were not registered, I finally got the scoring error.</p>\n<pre><code>def make_dummy_predictions():\n    data = defaultdict(list)\n     i,   sample_submission.iterrows():\n        is_registered = ..choice([True, False])\n        rotation = ..rand(, )  i &lt;   is_registered  None\n        translation = ..rand()  i &lt;   is_registered  None\n        cluster_index =   i &lt;   -\n        data[.dataset].(\n            Prediction(\n                image_id=.image_id  SUBMISSION_DATA_DIR ==   f,\n                dataset=.dataset,\n                filename=.,\n                filepath=os.path.(IMC_DIR_PATH, SUBMISSION_DATA_DIR, .dataset, .),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n     data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n</code></pre>\n<p>After checking this working solution <a href=\"https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue\" target=\"_blank\">https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue</a>, I've realised that it will never assign the non-registered image to a cluster. While in my notebook, some of the non-registered images end up in the valid clusters. Unfortunately, that's all I've got for now as I've run out of submissions today and have no chance to do more tests 🙈 </p>",
                          "votes": null,
                          "replies": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": 3211028,
          "author_name": "sohier",
          "author_url": "",
          "post_date": "05/28/2025 02:44:28",
          "content": "<p>I spot checked some recent 0.00 submissions and all of them were working as intended / scored properly.</p>",
          "votes": null,
          "replies": [
            {
              "id": 3211471,
              "author_name": "ewiniar110",
              "author_url": "",
              "post_date": "05/28/2025 13:20:20",
              "content": "<p>Thanks so much for the clarification! I really appreciate it. I’ll double check my code again today and try a few more tests to narrow it down. </p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3213594,
      "author_name": "ddzhulay",
      "author_url": "",
      "post_date": "05/30/2025 08:08:11",
      "content": "<p>Just to follow up on my previous comments <a href=\"https://www.kaggle.com/ewiniar110\" target=\"_blank\">@ewiniar110</a> , I was able to submit my original notebook by modifying this line in the <code>write_submission</code> function:</p>\n<pre><code>cluster_name =   (prediction.cluster_index == -)  (prediction.translation  )  \n</code></pre>\n<p>It appears that this statement in the rules is not true for the evaluation</p>\n<blockquote>\n  <p>Note that you can group images together if you think they belong to the same scene, even if you cannot register them. You can indicate this by using the right scene label and nan values for rotation_matrix and translation_vector.</p>\n</blockquote>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3214135,
      "author_name": "kindasomethin",
      "author_url": "",
      "post_date": "05/31/2025 02:13:50",
      "content": "<p>you can refer my begineer friendly code here -  <a href=\"https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly\" target=\"_blank\">https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly</a></p>\n<p>DO UPVOTE!</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3209306": "Hey everyone :)\n\nI was trying to make the first successful submission the whole day but failed miserably. To write the submission file, I use the functionality implemented in this notebook https://www.kaggle.com/code/eduardtrulls/imc25-submission/. Submitting the csv with all \"null\" values works, but the moment I start adding actual predictions to the file, I get the scoring errors. I checked and the scoring function from the competition utils works just fine with the files that I create. I've attached one submission example below.\n\nMaybe be somebody had the similar issue? Maybe I am missing something? Thanks in advance for any help!",
    "3209425": "Hey! I’m actually in the exact same situation 😅\n\nMy public score has been stuck at 0.00 no matter what I try. Submitting the official sample_submission gives me a non-zero score, and even if I just replace the first 500 rows of my own submission with the sample’s, I get something like 1.24 — so the system is clearly reading the file, just completely ignoring my predictions.\n\nI even tried replacing all my poses with the ones from the sample solution — still got 0.00 😭\n\nI’ve spent the past 3 days debugging everything: rotation matrix validity, formatting, field names, etc. I even made a dummy threshold file and used the latest official metric script locally, treating the sample as ground truth — and it runs totally fine in a Kaggle notebook, giving me non-zero scores.\n\nSo I’m like 99% sure the format is fine, and Kaggle is accepting the file, but somehow none of my predictions are being scored.\n\nIf you figure anything out, I’d really appreciate a ping 🙏 Will do the same on my end!",
    "3209795": "Damn, I've tried pretty much the same stuff 🤷🏻‍♀️ It does not seem like a file formatting issue cause when I generate the intrinsics randomly with numpy the submission works just fine. But the moment I use the estimations made with COLMAP, nothing works.\n```\nrot_matrix = deepcopy(image.cam_from_world.rotation.matrix())\ntranslation_vec = deepcopy(np.array(image.cam_from_world.translation))\n```",
    "3210735": "Same here! At this point, I’m honestly not sure how to proceed anymore.\n\n@oldufo When you have a moment, could you kindly help us look into what might be going on? We’d really appreciate any guidance or insight 🙏",
    "3210788": "Sorry, I am not sure that I follow.\nThere are a lot of submission examples on code - both from orgs, as well as improved versions from participants.\nhttps://www.kaggle.com/competitions/image-matching-challenge-2025/code\n\nThey all have non-zero scores, meaning, they work. I would recommend you to start from them and make changes there. \nAlso, if we are speaking about pycolmap interface\n\n```\nrot_matrix = deepcopy(image.cam_from_world.rotation.matrix())\n```\n\nplease make sure, that you use correct ones for the version you use because they have been changing with the versions flow.",
    "3210821": "Probably, I'm in the same situation.\nThis isn't a matter of the number of digits, is it?",
    "3211028": "I spot checked some recent 0.00 submissions and all of them were working as intended / scored properly.",
    "3211471": "Thanks so much for the clarification! I really appreciate it. I’ll double check my code again today and try a few more tests to narrow it down.",
    "3212354": "oldufo thank you for the hint!\n\nI've checked the pipeline that I was trying to submit multiple times, and I think there is an issue with scoring the images that are assigned to a specific cluster but not registered.\n\ni. First, I ran my solution for the matching but submitted the random predictions instead. I made this to make sure that everything is fine with the dependencies, colmap usage, etc. This submission was successful so I excluded the possibility that something was wrong with the code I've created. \n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for _, row in sample_submission.iterrows():\n        rotation = np.random.rand(3, 3)\n        translation = np.random.rand(3)\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=0,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions = make_dummy_predictions()\nwrite_submission(predictions)\n``` \nii. Then I did the same, but now the random predictions had primarily been null (except the first 50 rows). This was also successful, and I knew that the issue was not with the outliers. \n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for i, row in sample_submission.iterrows():\n        rotation = np.random.rand(3, 3) if i < 50 else None\n        translation = np.random.rand(3) if i < 50 else None\n        cluster_index = 0 if i < 50 else -1\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n```\niii. And then I checked for the cases when the image is assigned to the cluster but not registered. It's stated in the rules that such cases can happen and can be formatted like this in the submission file:\n```\ndataset2,cluster1,image2.png,nan;nan;nan;nan;nan;nan;nan;nan;nan,nan;nan;nan\n```\nAfter I submitted the dummy file, where half of the \"clustered\" images were not registered, I finally got the scoring error.\n```\ndef make_dummy_predictions():\n    data = defaultdict(list)\n    for i, row in sample_submission.iterrows():\n        is_registered = np.random.choice([True, False])\n        rotation = np.random.rand(3, 3) if i < 50 and is_registered else None\n        translation = np.random.rand(3) if i < 50 and is_registered else None\n        cluster_index = 0 if i < 50 else -1\n        data[row.dataset].append(\n            Prediction(\n                image_id=row.image_id if SUBMISSION_DATA_DIR == \"test\" else f\"{row.dataset}_{row.image}\",\n                dataset=row.dataset,\n                filename=row.image,\n                filepath=os.path.join(IMC_DIR_PATH, SUBMISSION_DATA_DIR, row.dataset, row.image),\n                cluster_index=cluster_index,\n                rotation=rotation,\n                translation=translation,\n            )\n        )\n    return data\n\npredictions = run()\npredictions_dummy = make_dummy_predictions()\nwrite_submission(predictions)\n```\n\nAfter checking this working solution https://www.kaggle.com/code/muhammadqasimshabbir/baseline-dino-aliked-lightglue, I've realised that it will never assign the non-registered image to a cluster. While in my notebook, some of the non-registered images end up in the valid clusters. Unfortunately, that's all I've got for now as I've run out of submissions today and have no chance to do more tests 🙈",
    "3213594": "Just to follow up on my previous comments @ewiniar110 , I was able to submit my original notebook by modifying this line in the `write_submission` function:\n```\ncluster_name = \"outliers\" if (prediction.cluster_index == -1) or (prediction.translation is None) else f\"cluster{prediction.cluster_index}\"\n```\nIt appears that this statement in the rules is not true for the evaluation\n>Note that you can group images together if you think they belong to the same scene, even if you cannot register them. You can indicate this by using the right scene label and nan values for rotation_matrix and translation_vector.",
    "3214135": "you can refer my begineer friendly code here -  https://www.kaggle.com/code/kindasomethin/image-matching-easy-version-begineer-freindly\n\nDO UPVOTE!"
  },
  "source": "meta"
}