{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":99552,"databundleVersionId":13851420,"sourceType":"competition"},{"sourceId":12974092,"sourceType":"datasetVersion","datasetId":8091323},{"sourceId":13267539,"sourceType":"datasetVersion","datasetId":8407675},{"sourceId":13267672,"sourceType":"datasetVersion","datasetId":8407765},{"sourceId":13267764,"sourceType":"datasetVersion","datasetId":8407830},{"sourceId":13268490,"sourceType":"datasetVersion","datasetId":8408329},{"sourceId":13327553,"sourceType":"datasetVersion","datasetId":8449523},{"sourceId":13364304,"sourceType":"datasetVersion","datasetId":8477428},{"sourceId":13364468,"sourceType":"datasetVersion","datasetId":8211584},{"sourceId":13364471,"sourceType":"datasetVersion","datasetId":8211597},{"sourceId":13423152,"sourceType":"datasetVersion","datasetId":8211582},{"sourceId":13423154,"sourceType":"datasetVersion","datasetId":8211598},{"sourceId":260238394,"sourceType":"kernelVersion"},{"sourceId":267231845,"sourceType":"kernelVersion"}],"dockerImageVersionId":31090,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Setup","metadata":{}},{"cell_type":"code","source":"%%capture\n!uv pip install --system --no-index --find-links=/kaggle/input/rsna2025-packages/pip-packages -r /kaggle/input/rsna2025-pip-packages/requirements.txt --no-build-isolation \n!uv pip install --system --no-index --find-links=/kaggle/input/rsna2025-packages/pip-packages --force-reinstall numpy==1.26.4","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:05:14.636492Z","iopub.execute_input":"2025-10-13T14:05:14.637389Z","iopub.status.idle":"2025-10-13T14:05:58.726842Z","shell.execute_reply.started":"2025-10-13T14:05:14.637347Z","shell.execute_reply":"2025-10-13T14:05:58.726057Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%capture\n!cp -r /kaggle/input/rsna2025-nnunet /kaggle/working/\n!rm -r /kaggle/working/rsna2025-nnunet/nnunetv2.egg-info;\n!cd /kaggle/working/rsna2025-nnunet; uv pip install --system . --no-build-isolation --no-index","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:05:58.7282Z","iopub.execute_input":"2025-10-13T14:05:58.728455Z","iopub.status.idle":"2025-10-13T14:06:02.098724Z","shell.execute_reply.started":"2025-10-13T14:05:58.728431Z","shell.execute_reply":"2025-10-13T14:06:02.097952Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%capture\n!dpkg -i /kaggle/input/rsna2025-packages/libyaml-cpp0.7_0.7.0+dfsg-8build1_amd64.deb\n!dpkg -i /kaggle/input/rsna2025-packages/dcm2niix_1.0.20211006-1build1_amd64.deb\n!dpkg -i /kaggle/input/rsna2025-packages/libgdcm-tools_3.0.10-1build2_amd64.deb","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:06:02.099795Z","iopub.execute_input":"2025-10-13T14:06:02.100104Z","iopub.status.idle":"2025-10-13T14:06:08.277611Z","shell.execute_reply.started":"2025-10-13T14:06:02.100062Z","shell.execute_reply":"2025-10-13T14:06:08.276827Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!cp -r /kaggle/input/rsna2025-src /kaggle/working; mv /kaggle/working/rsna2025-src /kaggle/working/src\n!cp -r /kaggle/input/rsna2025-scripts /kaggle/working; mv /kaggle/working/rsna2025-scripts /kaggle/working/scripts\n!ln -s /kaggle/input/rsna2025-configs /kaggle/working/configs\n\n!mkdir -p /kaggle/working/logs/train/runs\n!ln -s \"/kaggle/input/251013-prev6-1-ex-dav6w3-e25-w01-005-1-s128-256/251013-seg_tf-v4-nnunet_truncate1_preV6_1-ex_dav6w3-m32g64-e25-w01_005_1-s128_256_256\" /kaggle/working/logs/train/runs/\n\n# for rootutils\n!touch /kaggle/working/.project-root","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:06:08.279802Z","iopub.execute_input":"2025-10-13T14:06:08.280043Z","iopub.status.idle":"2025-10-13T14:06:09.23611Z","shell.execute_reply.started":"2025-10-13T14:06:08.280017Z","shell.execute_reply":"2025-10-13T14:06:09.235295Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Inference","metadata":{}},{"cell_type":"code","source":"import rootutils\nimport os\nfrom pathlib import Path\n\nrootutils.setup_root(Path().resolve(), indicator=\".project-root\", pythonpath=True)\n\nroot = os.environ[\"PROJECT_ROOT\"]\nos.chdir(root)\n\nfrom scripts.rsna_submission_roi import predict","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:06:09.243813Z","iopub.execute_input":"2025-10-13T14:06:09.244509Z","iopub.status.idle":"2025-10-13T14:06:49.138008Z","shell.execute_reply.started":"2025-10-13T14:06:09.244482Z","shell.execute_reply":"2025-10-13T14:06:49.137448Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%env VESSEL_DEVICE=cuda:0\n%env VESSEL_DEVICES=0\n\n# Whether to abort when sparse search fails\n%env VESSEL_ABORT_ON_SPARSE_FAIL=1\n%env VESSEL_ABORT_MIN_ALL_DIMS_MM=140\n# Whether to abort when the ROI volume is too small\n%env VESSEL_ABORT_ON_SMALL_ROI=1  \n%env VESSEL_MIN_ROI_VOXELS=1000000\n# Whether to abort when the number of union voxels is too small\n%env VESSEL_ABORT_ON_LOW_UNION=1  \n%env VESSEL_MIN_UNION_SUM=5000\n\n%env RSNA_ERROR_FALLBACK_PROBS=0.02,0.02,0.08,0.08,0.03,0.03,0.07,0.02,0.02,0.02,0.02,0.02,0.02,0.35\n\n# Vessel Segmentation\n%env VESSEL_NNUNET_SPARSE_MODEL_DIR=/kaggle/input/nnunet-vessel-grouping-da7\n%env VESSEL_ENABLE_ORIENTATION_CORRECTION=1\n%env VESSEL_ORIENTATION_WEIGHTS=1,1,1\n# ROI Size [mm]\n%env VESSEL_SPARSE_ROI_EXTENT_MM=140\n%env VESSEL_REFINE_Z_ONLY=0\n\n# %env VESSEL_NNUNET_MODEL_DIR=/kaggle/input/nnunet-da3-sklr-with-all\n%env VESSEL_NNUNET_MODEL_DIR=/kaggle/input/nnunet-da3-sklr-ep800\n%env VESSEL_ADDITIONAL_DENSE_MODEL_DIRS=/kaggle/input/nnunet-da6-sklr-w3-tv07\n%env VESSEL_FOLDS=all\n\n%env VESSEL_REFINE_MARGIN_Z=15\n%env VESSEL_REFINE_MARGIN_XY=30\n%env VESSEL_SPARSE_OVERLAP=0.2\n%env VESSEL_DENSE_OVERLAP=0.3\n\n%env VESSEL_TRT_DIR=/kaggle/input/rsna2025-convert-trt/trt\n\n# ROI Classification Model\n%env ROI_EXPERIMENTS=251013-seg_tf-v4-nnunet_truncate1_preV6_1-ex_dav6w3-m32g64-e25-w01_005_1-s128_256_256\n%env ROI_FOLDS=0,1,2,3\n%env ROI_TTA=2\n%env ROI_NNUNET_MODEL_DIR=/kaggle/input/nnunet-da6-1-sklr-tv07\n\n%env CONFIG_DIR=/kaggle/working/configs\n%env RUN_MODE=kaggle\n\n%env RSNA_ONLY_AP=0\n%env RSNA_ONLY_LOCATIONS=0\n\n%env RSNA_MAX_PREDICT_ERRORS=300\n# %env RSNA_STAGE=dicom\n# %env RSNA_VESSEL_STAGE_LIMIT=roi_crop \n# \"load\"|\"preprocess\"|\"sparse_search\"|\"roi_crop\"|\"fold_infer\"|\"refine\"|\"aggregate\"\n\nif not os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    %env RSNA_DEBUG=1\n\n# warmup\nfor i in range(3):\n    predict(\"/kaggle/input/rsna-intracranial-aneurysm-detection/series/1.2.826.0.1.3680043.8.498.10004044428023505108375152878107656647\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:06:49.144726Z","iopub.execute_input":"2025-10-13T14:06:49.14495Z","iopub.status.idle":"2025-10-13T14:09:18.50883Z","shell.execute_reply.started":"2025-10-13T14:06:49.144931Z","shell.execute_reply":"2025-10-13T14:09:18.508252Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from kaggle_evaluation.rsna_inference_server import RSNAInferenceServer\nimport polars as pl\n\ninference_server = RSNAInferenceServer(predict)\n\nif os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    inference_server.serve()\nelse:\n    inference_server.run_local_gateway()\n    display(pl.read_parquet('submission.parquet'))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T14:09:18.509691Z","iopub.execute_input":"2025-10-13T14:09:18.50997Z","iopub.status.idle":"2025-10-13T14:10:42.042894Z","shell.execute_reply.started":"2025-10-13T14:09:18.509941Z","shell.execute_reply":"2025-10-13T14:10:42.042119Z"}},"outputs":[],"execution_count":null}]}