{
  "id": 187731,
  "title": "[22nd Place + Code] Margin Scheduling – First time on Kaggle :D",
  "url": "/competitions/landmark-recognition-2020/writeups/chan-kha-vu-22nd-place-code-margin-scheduling-firs",
  "author_name": "",
  "post_date": "2022-06-19T09:44:00.520Z",
  "votes": 15,
  "comment_count": 5,
  "views": 0,
  "content": "<p>First, <strong>congratulations to the top teams!!!</strong> 🎉🎉🎉🎉🎉🎉🎉 What they achieved is incredible! </p>\n<p>This year's <a href=\"https://www.kaggle.com/c/landmark-retrieval-2020/\" target=\"_blank\">Landmark Retrieval</a> and <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/\" target=\"_blank\">Recognition</a> challenges are the first ML competitions that I've ever participated in. Haven't touched anything ML-related for a year, so this was refreshing.</p>\n<p>Unfortunately, I joined the Retrieval competition late (8 days before the end) and got only around 2 weeks to participate in this one part-time. I've learned a lot during this competition. If there will be a landmark challenge next year, I'll give it a better fight!</p>\n<p>Also, I would like to thank <a href=\"https://www.kaggle.com/keetar\" target=\"_blank\">@keetar</a> for being an inspiration – what he achieved with just Colab Pro showed me that you don't need fancy hardware to compete, even in such a hard competition with a ton of data. His <a href=\"https://www.kaggle.com/c/landmark-retrieval-2020/discussion/176037\" target=\"_blank\">excellent writeup</a> was the sole reason why I decided to participate in the Recognition track.</p>\n<h2>Retrieval Track (39th, Silver medal)</h2>\n<ul>\n<li>Nothing special, just a weighted ensemble of <code>0.271</code> and <code>0.277</code> models and got silver medal lol lol lol 😆😆😆 I also tried some filtering using Places365 VGG model, but it doesn't work out.</li>\n</ul>\n<hr>\n<h2>Recognition Track (22nd, Silver medal) – margin scheduling</h2>\n<p>I realized that I've been spamming the Discussion section a lot, so I'll keep this short:</p>\n<ul>\n<li><p>I trained a <a href=\"https://www.tensorflow.org/api_docs/python/tf/keras/applications/ResNet152V2\" target=\"_blank\">ResNet152V2</a> with <a href=\"https://arxiv.org/abs/1711.02512\" target=\"_blank\">GeM</a> (p=3) + <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a> and a <a href=\"https://github.com/qubvel/efficientnet\" target=\"_blank\">EffNetB6</a> with GAP + <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a> global descriptors on Cleaned GLDv2. Didn't have time to train to full convergence ☹️☹️☹️ </p></li>\n<li><p>For <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a>, I started with a small margin (i.e. <code>1e-3</code>), and gradually increased it at the end of every period of Cosine LR, up to <code>0.31</code>. It was harder for me to train with a fixed margin.</p></li>\n<li><p>Training hardware: Colab Pro only!</p></li>\n<li><p>I simply used a publicly available object detector <a href=\"https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1\" target=\"_blank\">FastRCNN+InceptionResNetV2</a> trained on <a href=\"https://ai.googleblog.com/2020/02/open-images-v6-now-featuring-localized.html\" target=\"_blank\">Open Images V4</a> for non-landmark removal. This gave a boost of around <strong>+0.005</strong> on pub. LB.</p></li>\n<li><p>Because I started late (~2 weeks before the end) and didn't had enough time to experiment around, I used <a href=\"https://arxiv.org/abs/1907.05550\" target=\"_blank\">Data Echoing</a> technique to speed up training <strong>by ~20%</strong>.</p></li>\n<li><p>Standard re-ranking: Retrieval step (using KNN) + Non-Landmark Removal (as described above) + Local Descriptors extraction (using baseline DELG model) + RANSAC.</p></li>\n<li><p>During inference, I used index embeddings only! I did not have time to generate embeddings for training samples.</p></li>\n</ul>\n<p>What I didn't have time to finish:</p>\n<ul>\n<li>Local descriptors. I only implemented the local descriptors <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/discussion/187344\" target=\"_blank\">36 hours before the end</a>.</li>\n<li>Multi-Gradient Descent (<a href=\"https://papers.nips.cc/paper/7334-multi-task-learning-as-multi-objective-optimization.pdf\" target=\"_blank\">MGDA-UB</a>). I figured this could allow the local descriptor to train alongside with the global ones without <code>stop_gradient</code>.</li>\n<li>Pre-computed embeddings. Ironically, <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/discussion/176697\" target=\"_blank\">I was the first who have asked if this is legal</a>.</li>\n</ul>\n<p>My training code is <a href=\"https://github.com/hav4ik/google-landmarks-2020\" target=\"_blank\">available on Github</a>. I've also published my <a href=\"https://www.kaggle.com/chankhavu/glob-effb6-e48-rn152-e40-det-frcnn-ss-orig\" target=\"_blank\">final submission</a>.</p>\n<hr>\n<h2>Fun fact: you could've gotten a Silver medal using just baselines!</h2>\n<ul>\n<li><p>Replacing the global descriptor from the <a href=\"https://www.kaggle.com/paulorzp/baseline-landmark-recognition-lb-0-48\" target=\"_blank\">Public Recognition Baseline Example</a> with the model from <a href=\"https://www.kaggle.com/nvnnghia/main-0806\" target=\"_blank\">Public Retrieval Baseline</a> will get you <code>0.4872/0.5081</code>, or a <strong>Bronze</strong> medal.</p></li>\n<li><p>Adding a simple non-landmark removal with object detectors will boost the above described baseline-based solution to a <strong>Silver</strong> medal.</p></li>\n</ul>\n<p>[spoint]: <a href=\"https://arxiv.org/abs/1712.07629\" target=\"_blank\">https://arxiv.org/abs/1712.07629</a><br>\n[sglue]: <a href=\"https://arxiv.org/abs/1911.11763\" target=\"_blank\">https://arxiv.org/abs/1911.11763</a><br>\n[fmatches]: <a href=\"https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf\" target=\"_blank\">https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf</a></p>",
  "messages": [
    {
      "id": "1032283",
      "postDate": "09/30/2020 05:22:19",
      "content": "<p>First, <strong>congratulations to the top teams!!!</strong> 🎉🎉🎉🎉🎉🎉🎉 What they achieved is incredible! </p>\n<p>This year's <a href=\"https://www.kaggle.com/c/landmark-retrieval-2020/\" target=\"_blank\">Landmark Retrieval</a> and <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/\" target=\"_blank\">Recognition</a> challenges are the first ML competitions that I've ever participated in. Haven't touched anything ML-related for a year, so this was refreshing.</p>\n<p>Unfortunately, I joined the Retrieval competition late (8 days before the end) and got only around 2 weeks to participate in this one part-time. I've learned a lot during this competition. If there will be a landmark challenge next year, I'll give it a better fight!</p>\n<p>Also, I would like to thank <a href=\"https://www.kaggle.com/keetar\" target=\"_blank\">@keetar</a> for being an inspiration – what he achieved with just Colab Pro showed me that you don't need fancy hardware to compete, even in such a hard competition with a ton of data. His <a href=\"https://www.kaggle.com/c/landmark-retrieval-2020/discussion/176037\" target=\"_blank\">excellent writeup</a> was the sole reason why I decided to participate in the Recognition track.</p>\n<h2>Retrieval Track (39th, Silver medal)</h2>\n<ul>\n<li>Nothing special, just a weighted ensemble of <code>0.271</code> and <code>0.277</code> models and got silver medal lol lol lol 😆😆😆 I also tried some filtering using Places365 VGG model, but it doesn't work out.</li>\n</ul>\n<hr>\n<h2>Recognition Track (22nd, Silver medal) – margin scheduling</h2>\n<p>I realized that I've been spamming the Discussion section a lot, so I'll keep this short:</p>\n<ul>\n<li><p>I trained a <a href=\"https://www.tensorflow.org/api_docs/python/tf/keras/applications/ResNet152V2\" target=\"_blank\">ResNet152V2</a> with <a href=\"https://arxiv.org/abs/1711.02512\" target=\"_blank\">GeM</a> (p=3) + <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a> and a <a href=\"https://github.com/qubvel/efficientnet\" target=\"_blank\">EffNetB6</a> with GAP + <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a> global descriptors on Cleaned GLDv2. Didn't have time to train to full convergence ☹️☹️☹️ </p></li>\n<li><p>For <a href=\"https://arxiv.org/abs/1801.07698\" target=\"_blank\">ArcFace</a>, I started with a small margin (i.e. <code>1e-3</code>), and gradually increased it at the end of every period of Cosine LR, up to <code>0.31</code>. It was harder for me to train with a fixed margin.</p></li>\n<li><p>Training hardware: Colab Pro only!</p></li>\n<li><p>I simply used a publicly available object detector <a href=\"https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1\" target=\"_blank\">FastRCNN+InceptionResNetV2</a> trained on <a href=\"https://ai.googleblog.com/2020/02/open-images-v6-now-featuring-localized.html\" target=\"_blank\">Open Images V4</a> for non-landmark removal. This gave a boost of around <strong>+0.005</strong> on pub. LB.</p></li>\n<li><p>Because I started late (~2 weeks before the end) and didn't had enough time to experiment around, I used <a href=\"https://arxiv.org/abs/1907.05550\" target=\"_blank\">Data Echoing</a> technique to speed up training <strong>by ~20%</strong>.</p></li>\n<li><p>Standard re-ranking: Retrieval step (using KNN) + Non-Landmark Removal (as described above) + Local Descriptors extraction (using baseline DELG model) + RANSAC.</p></li>\n<li><p>During inference, I used index embeddings only! I did not have time to generate embeddings for training samples.</p></li>\n</ul>\n<p>What I didn't have time to finish:</p>\n<ul>\n<li>Local descriptors. I only implemented the local descriptors <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/discussion/187344\" target=\"_blank\">36 hours before the end</a>.</li>\n<li>Multi-Gradient Descent (<a href=\"https://papers.nips.cc/paper/7334-multi-task-learning-as-multi-objective-optimization.pdf\" target=\"_blank\">MGDA-UB</a>). I figured this could allow the local descriptor to train alongside with the global ones without <code>stop_gradient</code>.</li>\n<li>Pre-computed embeddings. Ironically, <a href=\"https://www.kaggle.com/c/landmark-recognition-2020/discussion/176697\" target=\"_blank\">I was the first who have asked if this is legal</a>.</li>\n</ul>\n<p>My training code is <a href=\"https://github.com/hav4ik/google-landmarks-2020\" target=\"_blank\">available on Github</a>. I've also published my <a href=\"https://www.kaggle.com/chankhavu/glob-effb6-e48-rn152-e40-det-frcnn-ss-orig\" target=\"_blank\">final submission</a>.</p>\n<hr>\n<h2>Fun fact: you could've gotten a Silver medal using just baselines!</h2>\n<ul>\n<li><p>Replacing the global descriptor from the <a href=\"https://www.kaggle.com/paulorzp/baseline-landmark-recognition-lb-0-48\" target=\"_blank\">Public Recognition Baseline Example</a> with the model from <a href=\"https://www.kaggle.com/nvnnghia/main-0806\" target=\"_blank\">Public Retrieval Baseline</a> will get you <code>0.4872/0.5081</code>, or a <strong>Bronze</strong> medal.</p></li>\n<li><p>Adding a simple non-landmark removal with object detectors will boost the above described baseline-based solution to a <strong>Silver</strong> medal.</p></li>\n</ul>\n<p>[spoint]: <a href=\"https://arxiv.org/abs/1712.07629\" target=\"_blank\">https://arxiv.org/abs/1712.07629</a><br>\n[sglue]: <a href=\"https://arxiv.org/abs/1911.11763\" target=\"_blank\">https://arxiv.org/abs/1911.11763</a><br>\n[fmatches]: <a href=\"https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf\" target=\"_blank\">https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf</a></p>",
      "rawMarkdown": "First, **congratulations to the top teams!!!** 🎉🎉🎉🎉🎉🎉🎉 What they achieved is incredible! \n\nThis year's [Landmark Retrieval][glret] and [Recognition][glrec] challenges are the first ML competitions that I've ever participated in. Haven't touched anything ML-related for a year, so this was refreshing.\n\nUnfortunately, I joined the Retrieval competition late (8 days before the end) and got only around 2 weeks to participate in this one part-time. I've learned a lot during this competition. If there will be a landmark challenge next year, I'll give it a better fight!\n\nAlso, I would like to thank @keetar for being an inspiration – what he achieved with just Colab Pro showed me that you don't need fancy hardware to compete, even in such a hard competition with a ton of data. His [excellent writeup][keetar-glr] was the sole reason why I decided to participate in the Recognition track.\n\n## Retrieval Track (39th, Silver medal)\n\n- Nothing special, just a weighted ensemble of `0.271` and `0.277` models and got silver medal lol lol lol 😆😆😆 I also tried some filtering using Places365 VGG model, but it doesn't work out.\n\n----------------------------------------------------------------\n\n## Recognition Track (22nd, Silver medal) – margin scheduling\n\nI realized that I've been spamming the Discussion section a lot, so I'll keep this short:\n\n- I trained a [ResNet152V2][resnet152v2] with [GeM][gem] (p=3) + [ArcFace][arcface] and a [EffNetB6][effnetb6] with GAP + [ArcFace][arcface] global descriptors on Cleaned GLDv2. Didn't have time to train to full convergence ☹️☹️☹️ \n\n- For [ArcFace][arcface], I started with a small margin (i.e. `1e-3`), and gradually increased it at the end of every period of Cosine LR, up to `0.31`. It was harder for me to train with a fixed margin.\n\n- Training hardware: Colab Pro only!\n\n- I simply used a publicly available object detector [FastRCNN+InceptionResNetV2][inceptresnet] trained on [Open Images V4][oims] for non-landmark removal. This gave a boost of around **+0.005** on pub. LB.\n\n- Because I started late (~2 weeks before the end) and didn't had enough time to experiment around, I used [Data Echoing][dataecho] technique to speed up training **by ~20%**.\n\n- Standard re-ranking: Retrieval step (using KNN) + Non-Landmark Removal (as described above) + Local Descriptors extraction (using baseline DELG model) + RANSAC.\n\n- During inference, I used index embeddings only! I did not have time to generate embeddings for training samples.\n\nWhat I didn't have time to finish:\n\n- Local descriptors. I only implemented the local descriptors [36 hours before the end][panictraining].\n- Multi-Gradient Descent ([MGDA-UB][mgda-ub]). I figured this could allow the local descriptor to train alongside with the global ones without `stop_gradient`.\n- Pre-computed embeddings. Ironically, [I was the first who have asked if this is legal][precompdisc].\n\nMy training code is [available on Github](https://github.com/hav4ik/google-landmarks-2020). I've also published my [final submission](https://www.kaggle.com/chankhavu/glob-effb6-e48-rn152-e40-det-frcnn-ss-orig).\n\n----------------------------------------------------------------\n\n## Fun fact: you could've gotten a Silver medal using just baselines!\n\n- Replacing the global descriptor from the [Public Recognition Baseline Example][recbase] with the model from [Public Retrieval Baseline][b277] will get you `0.4872/0.5081`, or a **Bronze** medal.\n\n- Adding a simple non-landmark removal with object detectors will boost the above described baseline-based solution to a **Silver** medal.\n\n\n\n\n[recbase]: https://www.kaggle.com/paulorzp/baseline-landmark-recognition-lb-0-48\n[b277]: https://www.kaggle.com/nvnnghia/main-0806\n[inceptresnet]: https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1\n[resnet152v2]: https://www.tensorflow.org/api_docs/python/tf/keras/applications/ResNet152V2\n[effnetb6]: https://github.com/qubvel/efficientnet\n[delg]: https://arxiv.org/pdf/2001.05027.pdf\n[arcface]: https://arxiv.org/abs/1801.07698\n[gem]: https://arxiv.org/abs/1711.02512\n[dataecho]: https://arxiv.org/abs/1907.05550\n[glret]: https://www.kaggle.com/c/landmark-retrieval-2020/\n[glrec]: https://www.kaggle.com/c/landmark-recognition-2020/\n[spoint]: https://arxiv.org/abs/1712.07629\n[sglue]: https://arxiv.org/abs/1911.11763\n[fmatches]: https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf\n[cyclegan]: https://junyanz.github.io/CycleGAN/\n[oims]: https://ai.googleblog.com/2020/02/open-images-v6-now-featuring-localized.html\n[panictraining]: https://www.kaggle.com/c/landmark-recognition-2020/discussion/187344\n[mgda-ub]: https://papers.nips.cc/paper/7334-multi-task-learning-as-multi-objective-optimization.pdf\n[precompdisc]: https://www.kaggle.com/c/landmark-recognition-2020/discussion/176697\n[keetar-glr]: https://www.kaggle.com/c/landmark-retrieval-2020/discussion/176037",
      "votes": null
    },
    {
      "id": "1032311",
      "postDate": "09/30/2020 05:47:17",
      "content": "<p>Congrats !  So you used only Global features ?</p>",
      "rawMarkdown": "Congrats !  So you used only Global features ?",
      "votes": null
    },
    {
      "id": "1032472",
      "postDate": "09/30/2020 08:30:09",
      "content": "<p>I was able to train global features. For local features, I didn't have time to train to convergence, so I used publically available local descriptor. Then, I used PyDegensac for feature matching.</p>",
      "rawMarkdown": "I was able to train global features. For local features, I didn't have time to train to convergence, so I used publically available local descriptor. Then, I used PyDegensac for feature matching.",
      "votes": null
    },
    {
      "id": "1032601",
      "postDate": "09/30/2020 10:07:11",
      "content": "<p>Thx for sharing. May I ask what hardware you used for training models?</p>",
      "rawMarkdown": "Thx for sharing. May I ask what hardware you used for training models?",
      "votes": null
    },
    {
      "id": "1032644",
      "postDate": "09/30/2020 10:34:52",
      "content": "<p>Colab Pro TPU v2-8 and private GCS buckets 😊 I spent more money on milk tea with boba than on training hardware and cloud computing 😂</p>",
      "rawMarkdown": "Colab Pro TPU v2-8 and private GCS buckets 😊 I spent more money on milk tea with boba than on training hardware and cloud computing 😂",
      "votes": null
    },
    {
      "id": "1043540",
      "postDate": "10/09/2020 04:04:15",
      "content": "<p>The results of ensembled baselines are interesting!</p>",
      "rawMarkdown": "The results of ensembled baselines are interesting!",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1032311,
      "author_name": "sidneyng",
      "author_url": "",
      "post_date": "09/30/2020 05:47:17",
      "content": "<p>Congrats !  So you used only Global features ?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1032472,
          "author_name": "chankhavu",
          "author_url": "",
          "post_date": "09/30/2020 08:30:09",
          "content": "<p>I was able to train global features. For local features, I didn't have time to train to convergence, so I used publically available local descriptor. Then, I used PyDegensac for feature matching.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1032601,
      "author_name": "hav4ik",
      "author_url": "",
      "post_date": "09/30/2020 10:07:11",
      "content": "<p>Thx for sharing. May I ask what hardware you used for training models?</p>",
      "votes": null,
      "replies": [
        {
          "id": 1032644,
          "author_name": "chankhavu",
          "author_url": "",
          "post_date": "09/30/2020 10:34:52",
          "content": "<p>Colab Pro TPU v2-8 and private GCS buckets 😊 I spent more money on milk tea with boba than on training hardware and cloud computing 😂</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1043540,
      "author_name": "sjtuwh",
      "author_url": "",
      "post_date": "10/09/2020 04:04:15",
      "content": "<p>The results of ensembled baselines are interesting!</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1032283": "First, **congratulations to the top teams!!!** 🎉🎉🎉🎉🎉🎉🎉 What they achieved is incredible! \n\nThis year's [Landmark Retrieval][glret] and [Recognition][glrec] challenges are the first ML competitions that I've ever participated in. Haven't touched anything ML-related for a year, so this was refreshing.\n\nUnfortunately, I joined the Retrieval competition late (8 days before the end) and got only around 2 weeks to participate in this one part-time. I've learned a lot during this competition. If there will be a landmark challenge next year, I'll give it a better fight!\n\nAlso, I would like to thank @keetar for being an inspiration – what he achieved with just Colab Pro showed me that you don't need fancy hardware to compete, even in such a hard competition with a ton of data. His [excellent writeup][keetar-glr] was the sole reason why I decided to participate in the Recognition track.\n\n## Retrieval Track (39th, Silver medal)\n\n- Nothing special, just a weighted ensemble of `0.271` and `0.277` models and got silver medal lol lol lol 😆😆😆 I also tried some filtering using Places365 VGG model, but it doesn't work out.\n\n----------------------------------------------------------------\n\n## Recognition Track (22nd, Silver medal) – margin scheduling\n\nI realized that I've been spamming the Discussion section a lot, so I'll keep this short:\n\n- I trained a [ResNet152V2][resnet152v2] with [GeM][gem] (p=3) + [ArcFace][arcface] and a [EffNetB6][effnetb6] with GAP + [ArcFace][arcface] global descriptors on Cleaned GLDv2. Didn't have time to train to full convergence ☹️☹️☹️ \n\n- For [ArcFace][arcface], I started with a small margin (i.e. `1e-3`), and gradually increased it at the end of every period of Cosine LR, up to `0.31`. It was harder for me to train with a fixed margin.\n\n- Training hardware: Colab Pro only!\n\n- I simply used a publicly available object detector [FastRCNN+InceptionResNetV2][inceptresnet] trained on [Open Images V4][oims] for non-landmark removal. This gave a boost of around **+0.005** on pub. LB.\n\n- Because I started late (~2 weeks before the end) and didn't had enough time to experiment around, I used [Data Echoing][dataecho] technique to speed up training **by ~20%**.\n\n- Standard re-ranking: Retrieval step (using KNN) + Non-Landmark Removal (as described above) + Local Descriptors extraction (using baseline DELG model) + RANSAC.\n\n- During inference, I used index embeddings only! I did not have time to generate embeddings for training samples.\n\nWhat I didn't have time to finish:\n\n- Local descriptors. I only implemented the local descriptors [36 hours before the end][panictraining].\n- Multi-Gradient Descent ([MGDA-UB][mgda-ub]). I figured this could allow the local descriptor to train alongside with the global ones without `stop_gradient`.\n- Pre-computed embeddings. Ironically, [I was the first who have asked if this is legal][precompdisc].\n\nMy training code is [available on Github](https://github.com/hav4ik/google-landmarks-2020). I've also published my [final submission](https://www.kaggle.com/chankhavu/glob-effb6-e48-rn152-e40-det-frcnn-ss-orig).\n\n----------------------------------------------------------------\n\n## Fun fact: you could've gotten a Silver medal using just baselines!\n\n- Replacing the global descriptor from the [Public Recognition Baseline Example][recbase] with the model from [Public Retrieval Baseline][b277] will get you `0.4872/0.5081`, or a **Bronze** medal.\n\n- Adding a simple non-landmark removal with object detectors will boost the above described baseline-based solution to a **Silver** medal.\n\n\n\n\n[recbase]: https://www.kaggle.com/paulorzp/baseline-landmark-recognition-lb-0-48\n[b277]: https://www.kaggle.com/nvnnghia/main-0806\n[inceptresnet]: https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1\n[resnet152v2]: https://www.tensorflow.org/api_docs/python/tf/keras/applications/ResNet152V2\n[effnetb6]: https://github.com/qubvel/efficientnet\n[delg]: https://arxiv.org/pdf/2001.05027.pdf\n[arcface]: https://arxiv.org/abs/1801.07698\n[gem]: https://arxiv.org/abs/1711.02512\n[dataecho]: https://arxiv.org/abs/1907.05550\n[glret]: https://www.kaggle.com/c/landmark-retrieval-2020/\n[glrec]: https://www.kaggle.com/c/landmark-recognition-2020/\n[spoint]: https://arxiv.org/abs/1712.07629\n[sglue]: https://arxiv.org/abs/1911.11763\n[fmatches]: https://local-features-tutorial.github.io/pdfs/Local_features_from_paper_to_practice.pdf\n[cyclegan]: https://junyanz.github.io/CycleGAN/\n[oims]: https://ai.googleblog.com/2020/02/open-images-v6-now-featuring-localized.html\n[panictraining]: https://www.kaggle.com/c/landmark-recognition-2020/discussion/187344\n[mgda-ub]: https://papers.nips.cc/paper/7334-multi-task-learning-as-multi-objective-optimization.pdf\n[precompdisc]: https://www.kaggle.com/c/landmark-recognition-2020/discussion/176697\n[keetar-glr]: https://www.kaggle.com/c/landmark-retrieval-2020/discussion/176037",
    "1032311": "Congrats !  So you used only Global features ?",
    "1032472": "I was able to train global features. For local features, I didn't have time to train to convergence, so I used publically available local descriptor. Then, I used PyDegensac for feature matching.",
    "1032601": "Thx for sharing. May I ask what hardware you used for training models?",
    "1032644": "Colab Pro TPU v2-8 and private GCS buckets 😊 I spent more money on milk tea with boba than on training hardware and cloud computing 😂",
    "1043540": "The results of ensembled baselines are interesting!"
  },
  "source": "meta"
}