{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":71885,"databundleVersionId":8143495,"sourceType":"competition"},{"sourceId":8489640,"sourceType":"datasetVersion","datasetId":5011907},{"sourceId":8576279,"sourceType":"datasetVersion","datasetId":4912960}],"dockerImageVersionId":30699,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Config","metadata":{}},{"cell_type":"code","source":"class config:\n    data=\"/kaggle/input/image-matching-challenge-2024\"\n    configs=[\"sift\", \"aliked2k\", \"disk\"]\n    retrieval=\"dinov2_salad\"\n    n_retrieval= 30\n    mode=\"test\"\n    output=\"./temp\"\n    pixsfm=True\n    pixsfm_force=False\n    pixsfm_max_imgs= 9999\n    pixsfm_low_mem_threshold=9999\n    pixsfm_config=\"config/pixsfm.yaml\"\n    rotation_matching=True\n    rotation_wrapper=False\n    resize=None\n    equalize_transp=True\n    equalize_grayscale=False\n    equalize_grid_size=8\n    equalize_clip_limit=40.\n    shared_camera=True\n    overwrite=True\n    cropping=False\n    max_rel_crop_size=0.75\n    min_rel_crop_size=0.2\n    skip_scenes=None\n    #skip_scenes=[\"lizard\", \"church\", \"transp_obj_glass_cup\", \"transp_obj_glass_cylinder\", \"multi-temporal-temple-baalshamin\", \"pond\"]\n    localize_unregistered=True\n ","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:21:36.903757Z","iopub.execute_input":"2024-06-01T08:21:36.904371Z","iopub.status.idle":"2024-06-01T08:21:36.912215Z","shell.execute_reply.started":"2024-06-01T08:21:36.904337Z","shell.execute_reply":"2024-06-01T08:21:36.911297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Skip Rerun","metadata":{}},{"cell_type":"code","source":"!rm -rf temp","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:21:39.483093Z","iopub.execute_input":"2024-06-01T08:21:39.483713Z","iopub.status.idle":"2024-06-01T08:21:40.488981Z","shell.execute_reply.started":"2024-06-01T08:21:39.483684Z","shell.execute_reply":"2024-06-01T08:21:40.487810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if config.mode == \"test\":\n    import os\n    import sys\n    import pandas as pd\n\n    if os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n        pass\n    else:\n        sub = pd.read_csv('/kaggle/input/image-matching-challenge-2024/sample_submission.csv')\n        sub.to_csv('submission.csv', index=False)\n        sys.exit()","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:21:29.776101Z","iopub.execute_input":"2024-06-01T08:21:29.776458Z","iopub.status.idle":"2024-06-01T08:21:31.854308Z","shell.execute_reply.started":"2024-06-01T08:21:29.776432Z","shell.execute_reply":"2024-06-01T08:21:31.851587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Install Dependencies","metadata":{}},{"cell_type":"code","source":"pip install --no-deps /kaggle/input/imc24-ppsfm-dependencies/*.whl","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2024-06-01T08:21:42.423324Z","iopub.execute_input":"2024-06-01T08:21:42.423945Z","iopub.status.idle":"2024-06-01T08:22:15.153081Z","shell.execute_reply.started":"2024-06-01T08:21:42.423911Z","shell.execute_reply":"2024-06-01T08:22:15.151652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir scripts\n!cp /kaggle/input/imc24-ppsfm-dependencies/*.py scripts","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:22:15.155670Z","iopub.execute_input":"2024-06-01T08:22:15.156098Z","iopub.status.idle":"2024-06-01T08:22:17.122954Z","shell.execute_reply.started":"2024-06-01T08:22:15.156060Z","shell.execute_reply":"2024-06-01T08:22:17.121150Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Configure checkpoints","metadata":{}},{"cell_type":"code","source":"!mkdir -p /root/.cache/torch\n!cp -r /kaggle/input/imc24-ppsfm-checkpoints/* /root/.cache/torch/\n!mkdir /opt/conda/lib/python3.10/site-packages/pixsfm/features/models/checkpoints\n!cp /kaggle/input/imc24-ppsfm-checkpoints/hub/checkpoints/s2dnet_weights.pth /opt/conda/lib/python3.10/site-packages/pixsfm/features/models/checkpoints\n%cd /root/.cache/torch/hub/checkpoints/\n!zip 2020-11-16_resnext50_32x4d.zip 2020-11-16_resnext50_32x4d.pth\n%cd /kaggle/working","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:22:17.124750Z","iopub.execute_input":"2024-06-01T08:22:17.125290Z","iopub.status.idle":"2024-06-01T08:22:49.640026Z","shell.execute_reply.started":"2024-06-01T08:22:17.125250Z","shell.execute_reply":"2024-06-01T08:22:49.638951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Run Pipeline","metadata":{}},{"cell_type":"code","source":"# Adjust pixsfm config\nimport yaml\nfrom pathlib import Path\nimport pixsfm.configs\n\nconf_path = Path(pixsfm.configs.__file__).parent / \"low_memory.yaml\"\n\nwith open(conf_path, 'r') as f:\n    conf = yaml.load(f, Loader=yaml.FullLoader)\n\nconf[\"mapping\"][\"BA\"][\"optimizer\"][\"refine_focal_length\"] = True\nconf[\"mapping\"][\"BA\"][\"optimizer\"][\"refine_extra_params\"] = True\nconf[\"mapping\"][\"BA\"][\"optimizer\"][\"refine_extrinsics\"] = True\n\nout_conf_path = Path(\"config\", \"pixsfm.yaml\")\nout_conf_path.parent.mkdir(exist_ok=True, parents=True)\nwith open(out_conf_path, 'w') as f:\n    yaml.dump(conf, f)","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:22:49.642780Z","iopub.execute_input":"2024-06-01T08:22:49.643200Z","iopub.status.idle":"2024-06-01T08:22:56.098891Z","shell.execute_reply.started":"2024-06-01T08:22:49.643161Z","shell.execute_reply":"2024-06-01T08:22:56.098036Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import argparse\nfrom pathlib import Path\nfrom pixhloc.main import main\n\n\nargs = {\n    \"data\": config.data,\n    \"configs\": config.configs,\n    \"retrieval\": config.retrieval,\n    \"n_retrieval\": config.n_retrieval,\n    \"mode\": config.mode,\n    \"output\": config.output,\n    \"pixsfm\": config.pixsfm,\n    \"pixsfm_force\": config.pixsfm_force,\n    \"pixsfm_max_imgs\": config.pixsfm_max_imgs,\n    \"pixsfm_low_mem_threshold\": config.pixsfm_low_mem_threshold,\n    \"pixsfm_config\": config.pixsfm_config,\n    \"rotation_matching\": config.rotation_matching,\n    \"rotation_wrapper\": config.rotation_wrapper,\n    \"resize\": config.resize,\n    \"equalize_transp\": config.equalize_transp,\n    \"equalize_grayscale\": config.equalize_grayscale,\n    \"equalize_grid_size\": config.equalize_grid_size,\n    \"equalize_clip_limit\": config.equalize_clip_limit,\n    \"shared_camera\": config.shared_camera,\n    \"overwrite\": config.overwrite,\n    \"cropping\": config.cropping,\n    \"max_rel_crop_size\": config.max_rel_crop_size,\n    \"min_rel_crop_size\": config.min_rel_crop_size,\n    \"skip_scenes\": config.skip_scenes,\n    \"localize_unregistered\": config.localize_unregistered\n}\nargs = argparse.Namespace(**args)\nPath(args.output).mkdir(exist_ok=True)\n\nmain(args)","metadata":{"execution":{"iopub.status.busy":"2024-06-01T08:39:20.096067Z","iopub.execute_input":"2024-06-01T08:39:20.096908Z","iopub.status.idle":"2024-06-01T08:41:14.921980Z","shell.execute_reply.started":"2024-06-01T08:39:20.096864Z","shell.execute_reply":"2024-06-01T08:41:14.920253Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}