{
  "id": 582810,
  "title": "15th Place Solution",
  "url": "/competitions/image-matching-challenge-2025/writeups/hayatofujihara-15th-place-solution",
  "author_name": "",
  "post_date": "2025-06-03T00:45:31.673Z",
  "votes": 29,
  "comment_count": 7,
  "views": 0,
  "content": "<p>First of all, thank you very much for organizing this wonderful competition. I sincerely appreciate both the organizers and participants.</p>\n<p>Unfortunately, I dropped from 9th place to 15th, but here is the approach I took:</p>\n<h2>Base solutiion</h2>\n<ul>\n<li><p>Model: Feature extraction using Aliked, feature matching with LightGlue</p></li>\n<li><p>TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048])</p></li>\n<li><p>Pre-processing: Images were rotated in advance to determine the angle for each pair</p></li>\n<li><p>Expanded the search range by setting min_pair to 60–70 (increased both public and private scores by approximately 3 points compared to min_pair = 20)</p></li>\n<li><p>Match filtering: min_matches set to 20 (100 was effective in CV tasks but lowered leaderboard score)</p></li>\n<li><p>Detection threshold: aliked_detection_threshold = 0.001 (smaller values tend to reduce LB score variance)</p></li>\n</ul>\n<h2>Various speed optimizations</h2>\n<ul>\n<li><p>Multi-threaded reconstruction and other tasks (parallel CPU and GPU processing)</p></li>\n<li><p>Parallel execution of Aliked and LightGlue on two GPUs</p></li>\n<li><p>Set LightGlue's \"width_confidence\" to 0.9 for faster processing.</p></li>\n<li><p>Did not extract feature points for unused angles</p></li>\n</ul>\n<p>My best private score was achieved with min_pair = 60.</p>\n<p>Thanks for reading!</p>",
  "messages": [
    {
      "id": "3215974",
      "postDate": "06/03/2025 00:42:05",
      "content": "<p>First of all, thank you very much for organizing this wonderful competition. I sincerely appreciate both the organizers and participants.</p>\n<p>Unfortunately, I dropped from 9th place to 15th, but here is the approach I took:</p>\n<h2>Base solutiion</h2>\n<ul>\n<li><p>Model: Feature extraction using Aliked, feature matching with LightGlue</p></li>\n<li><p>TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048])</p></li>\n<li><p>Pre-processing: Images were rotated in advance to determine the angle for each pair</p></li>\n<li><p>Expanded the search range by setting min_pair to 60–70 (increased both public and private scores by approximately 3 points compared to min_pair = 20)</p></li>\n<li><p>Match filtering: min_matches set to 20 (100 was effective in CV tasks but lowered leaderboard score)</p></li>\n<li><p>Detection threshold: aliked_detection_threshold = 0.001 (smaller values tend to reduce LB score variance)</p></li>\n</ul>\n<h2>Various speed optimizations</h2>\n<ul>\n<li><p>Multi-threaded reconstruction and other tasks (parallel CPU and GPU processing)</p></li>\n<li><p>Parallel execution of Aliked and LightGlue on two GPUs</p></li>\n<li><p>Set LightGlue's \"width_confidence\" to 0.9 for faster processing.</p></li>\n<li><p>Did not extract feature points for unused angles</p></li>\n</ul>\n<p>My best private score was achieved with min_pair = 60.</p>\n<p>Thanks for reading!</p>",
      "rawMarkdown": "First of all, thank you very much for organizing this wonderful competition. I sincerely appreciate both the organizers and participants.\n\nUnfortunately, I dropped from 9th place to 15th, but here is the approach I took:\n\n## Base solutiion\n\n- Model: Feature extraction using Aliked, feature matching with LightGlue\n\n- TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048])\n\n- Pre-processing: Images were rotated in advance to determine the angle for each pair\n\n- Expanded the search range by setting min_pair to 60–70 (increased both public and private scores by approximately 3 points compared to min_pair = 20)\n\n- Match filtering: min_matches set to 20 (100 was effective in CV tasks but lowered leaderboard score)\n\n- Detection threshold: aliked_detection_threshold = 0.001 (smaller values tend to reduce LB score variance)\n\n## Various speed optimizations\n\n- Multi-threaded reconstruction and other tasks (parallel CPU and GPU processing)\n\n- Parallel execution of Aliked and LightGlue on two GPUs\n\n- Set LightGlue's \"width_confidence\" to 0.9 for faster processing.\n\n- Did not extract feature points for unused angles\n\n\nMy best private score was achieved with min_pair = 60.\n\nThanks for reading!",
      "votes": null
    },
    {
      "id": "3216013",
      "postDate": "06/03/2025 02:20:44",
      "content": "<p>How do you implement TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048]), can you show some examples on how to tackle this problem? I only use 8192 feats with 768 img size. I also added  \"simple-radial\" twice and \"simple-pinhole\" to eliminate randomness in the results. My other experiments may be similar to yours. </p>",
      "rawMarkdown": "How do you implement TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048]), can you show some examples on how to tackle this problem? I only use 8192 feats with 768 img size. I also added  \"simple-radial\" twice and \"simple-pinhole\" to eliminate randomness in the results. My other experiments may be similar to yours.",
      "votes": null
    },
    {
      "id": "3216024",
      "postDate": "06/03/2025 02:41:57",
      "content": "<p>To handle such heavy processing, speed optimization is necessary. That’s why the acceleration methods mentioned above were applied. In particular, setting LightGlue's \"width_confidence\": 0.9 is a unique approach. This setting helps eliminate low-score keypoints midway when there are many keypoints. Additionally, the TTA implementation was based on the top-ranked public notebook from IMC2024.</p>\n<p>The process of eliminating randomness in the results is great!</p>",
      "rawMarkdown": "To handle such heavy processing, speed optimization is necessary. That’s why the acceleration methods mentioned above were applied. In particular, setting LightGlue's \"width_confidence\": 0.9 is a unique approach. This setting helps eliminate low-score keypoints midway when there are many keypoints. Additionally, the TTA implementation was based on the top-ranked public notebook from IMC2024.\n\nThe process of eliminating randomness in the results is great!",
      "votes": null
    },
    {
      "id": "3216115",
      "postDate": "06/03/2025 06:11:35",
      "content": "<p>thx for sharing, some numerical experience really helps a lot.</p>",
      "rawMarkdown": "thx for sharing, some numerical experience really helps a lot.",
      "votes": null
    },
    {
      "id": "3216234",
      "postDate": "06/03/2025 09:20:46",
      "content": "<p>Have you tried batch matching instead of width_confidence? In my experience, the batch matching is better on decent GPU -- not sure about T4 though.</p>",
      "rawMarkdown": "Have you tried batch matching instead of width_confidence? In my experience, the batch matching is better on decent GPU -- not sure about T4 though.",
      "votes": null
    },
    {
      "id": "3216261",
      "postDate": "06/03/2025 10:00:10",
      "content": "<p>I'm sorry, but I haven't tried batch matching for feature point matching. It seems that width_confidence does not significantly degrade accuracy while improving speed. In fact, on CV, mAA even increased for ET and fbk_vineyard. I set filter_threshold to 0.2. I also tried depth_confidence, but even after experimenting with internal function modifications, accuracy worsened.</p>",
      "rawMarkdown": "I'm sorry, but I haven't tried batch matching for feature point matching. It seems that width_confidence does not significantly degrade accuracy while improving speed. In fact, on CV, mAA even increased for ET and fbk_vineyard. I set filter_threshold to 0.2. I also tried depth_confidence, but even after experimenting with internal function modifications, accuracy worsened.",
      "votes": null
    },
    {
      "id": "3218934",
      "postDate": "06/06/2025 23:50:57",
      "content": "<p>Congratulations on your 15th place solution! Your detailed explanation of <code>min_pair</code> and <code>min_matches</code> optimization, alongside the impressive speed optimizations, is very insightful.<br>\nCould you elaborate on how you determined the optimal rotation angle for each image pair during preprocessing?</p>",
      "rawMarkdown": "Congratulations on your 15th place solution! Your detailed explanation of `min_pair` and `min_matches` optimization, alongside the impressive speed optimizations, is very insightful.\nCould you elaborate on how you determined the optimal rotation angle for each image pair during preprocessing?",
      "votes": null
    },
    {
      "id": "3218951",
      "postDate": "06/07/2025 01:06:42",
      "content": "<p>Thank you!</p>\n<p>Before the main processing, feature point matching is performed at four angles: 0°, 90°, 180°, and 270°. The angle with the highest number of matches is adopted as the processing angle (with a slight preference for 0°). Since the search volume increases, the number of feature points for Aliked is set to a small value.</p>",
      "rawMarkdown": "Thank you!\n\nBefore the main processing, feature point matching is performed at four angles: 0°, 90°, 180°, and 270°. The angle with the highest number of matches is adopted as the processing angle (with a slight preference for 0°). Since the search volume increases, the number of feature points for Aliked is set to a small value.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3216013,
      "author_name": "shanzhong8",
      "author_url": "",
      "post_date": "06/03/2025 02:20:44",
      "content": "<p>How do you implement TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048]), can you show some examples on how to tackle this problem? I only use 8192 feats with 768 img size. I also added  \"simple-radial\" twice and \"simple-pinhole\" to eliminate randomness in the results. My other experiments may be similar to yours. </p>",
      "votes": null,
      "replies": [
        {
          "id": 3216024,
          "author_name": "hayatofujihara",
          "author_url": "",
          "post_date": "06/03/2025 02:41:57",
          "content": "<p>To handle such heavy processing, speed optimization is necessary. That’s why the acceleration methods mentioned above were applied. In particular, setting LightGlue's \"width_confidence\": 0.9 is a unique approach. This setting helps eliminate low-score keypoints midway when there are many keypoints. Additionally, the TTA implementation was based on the top-ranked public notebook from IMC2024.</p>\n<p>The process of eliminating randomness in the results is great!</p>",
          "votes": null,
          "replies": [
            {
              "id": 3216234,
              "author_name": "oldufo",
              "author_url": "",
              "post_date": "06/03/2025 09:20:46",
              "content": "<p>Have you tried batch matching instead of width_confidence? In my experience, the batch matching is better on decent GPU -- not sure about T4 though.</p>",
              "votes": null,
              "replies": [
                {
                  "id": 3216261,
                  "author_name": "hayatofujihara",
                  "author_url": "",
                  "post_date": "06/03/2025 10:00:10",
                  "content": "<p>I'm sorry, but I haven't tried batch matching for feature point matching. It seems that width_confidence does not significantly degrade accuracy while improving speed. In fact, on CV, mAA even increased for ET and fbk_vineyard. I set filter_threshold to 0.2. I also tried depth_confidence, but even after experimenting with internal function modifications, accuracy worsened.</p>",
                  "votes": null,
                  "replies": []
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": 3216115,
      "author_name": "rezinchow",
      "author_url": "",
      "post_date": "06/03/2025 06:11:35",
      "content": "<p>thx for sharing, some numerical experience really helps a lot.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3218934,
      "author_name": "tyyuki",
      "author_url": "",
      "post_date": "06/06/2025 23:50:57",
      "content": "<p>Congratulations on your 15th place solution! Your detailed explanation of <code>min_pair</code> and <code>min_matches</code> optimization, alongside the impressive speed optimizations, is very insightful.<br>\nCould you elaborate on how you determined the optimal rotation angle for each image pair during preprocessing?</p>",
      "votes": null,
      "replies": [
        {
          "id": 3218951,
          "author_name": "hayatofujihara",
          "author_url": "",
          "post_date": "06/07/2025 01:06:42",
          "content": "<p>Thank you!</p>\n<p>Before the main processing, feature point matching is performed at four angles: 0°, 90°, 180°, and 270°. The angle with the highest number of matches is adopted as the processing angle (with a slight preference for 0°). Since the search volume increases, the number of feature points for Aliked is set to a small value.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "3215974": "First of all, thank you very much for organizing this wonderful competition. I sincerely appreciate both the organizers and participants.\n\nUnfortunately, I dropped from 9th place to 15th, but here is the approach I took:\n\n## Base solutiion\n\n- Model: Feature extraction using Aliked, feature matching with LightGlue\n\n- TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048])\n\n- Pre-processing: Images were rotated in advance to determine the angle for each pair\n\n- Expanded the search range by setting min_pair to 60–70 (increased both public and private scores by approximately 3 points compared to min_pair = 20)\n\n- Match filtering: min_matches set to 20 (100 was effective in CV tasks but lowered leaderboard score)\n\n- Detection threshold: aliked_detection_threshold = 0.001 (smaller values tend to reduce LB score variance)\n\n## Various speed optimizations\n\n- Multi-threaded reconstruction and other tasks (parallel CPU and GPU processing)\n\n- Parallel execution of Aliked and LightGlue on two GPUs\n\n- Set LightGlue's \"width_confidence\" to 0.9 for faster processing.\n\n- Did not extract feature points for unused angles\n\n\nMy best private score was achieved with min_pair = 60.\n\nThanks for reading!",
    "3216013": "How do you implement TTA with num_features = 8192 (image sizes: [1024, 2560, 1536, 2048]), can you show some examples on how to tackle this problem? I only use 8192 feats with 768 img size. I also added  \"simple-radial\" twice and \"simple-pinhole\" to eliminate randomness in the results. My other experiments may be similar to yours.",
    "3216024": "To handle such heavy processing, speed optimization is necessary. That’s why the acceleration methods mentioned above were applied. In particular, setting LightGlue's \"width_confidence\": 0.9 is a unique approach. This setting helps eliminate low-score keypoints midway when there are many keypoints. Additionally, the TTA implementation was based on the top-ranked public notebook from IMC2024.\n\nThe process of eliminating randomness in the results is great!",
    "3216115": "thx for sharing, some numerical experience really helps a lot.",
    "3216234": "Have you tried batch matching instead of width_confidence? In my experience, the batch matching is better on decent GPU -- not sure about T4 though.",
    "3216261": "I'm sorry, but I haven't tried batch matching for feature point matching. It seems that width_confidence does not significantly degrade accuracy while improving speed. In fact, on CV, mAA even increased for ET and fbk_vineyard. I set filter_threshold to 0.2. I also tried depth_confidence, but even after experimenting with internal function modifications, accuracy worsened.",
    "3218934": "Congratulations on your 15th place solution! Your detailed explanation of `min_pair` and `min_matches` optimization, alongside the impressive speed optimizations, is very insightful.\nCould you elaborate on how you determined the optimal rotation angle for each image pair during preprocessing?",
    "3218951": "Thank you!\n\nBefore the main processing, feature point matching is performed at four angles: 0°, 90°, 180°, and 270°. The angle with the highest number of matches is adopted as the processing angle (with a slight preference for 0°). Since the search volume increases, the number of feature points for Aliked is set to a small value."
  },
  "source": "meta"
}