{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":28755,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os, shutil, glob, zipfile\n\n# 1. Stage the code into writable storage\nsrc = None\nfor root, dirs, files in os.walk(\"/kaggle/input\"):\n    if \"src\" in dirs and \"scripts\" in dirs and \"configs\" in dirs:\n        src = root\n        break\nif src:\n    shutil.copytree(src, \"/kaggle/working/cedr-grade\", dirs_exist_ok=True)\nelse:\n    z = glob.glob(\"/kaggle/input/**/*.zip\", recursive=True)[0]\n    with zipfile.ZipFile(z) as f:\n        f.extractall(\"/kaggle/working/\")\nos.chdir(\"/kaggle/working/cedr-grade\")\n\n# 2. Link the APTOS dataset\nAPTOS = next(r for r, d, f in os.walk(\"/kaggle/input\")\n             if \"train.csv\" in f and \"train_images\" in d)\nos.makedirs(\"data/aptos2019\", exist_ok=True)\nfor n in [\"train.csv\", \"train_images\"]:\n    if not os.path.exists(f\"data/aptos2019/{n}\"):\n        os.symlink(f\"{APTOS}/{n}\", f\"data/aptos2019/{n}\")\n\n# 3. Locate ODIR for OOD (optional; skipped cleanly if absent)\nbest, best_n = None, 0\nfor r, _, f in os.walk(\"/kaggle/input\"):\n    if \"odir\" in r.lower() or \"ocular\" in r.lower():\n        n = sum(x.lower().endswith((\".jpg\", \".jpeg\", \".png\")) for x in f)\n        if n > best_n:\n            best, best_n = r, n\nood_flag = f'--ood-dir \"{best}\"' if best else \"\"\n\n# 4. Sanity check — read this output carefully\nimport torch\nprint(\"GPU  :\", torch.cuda.is_available(),\n      torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"NONE\")\nprint(\"APTOS:\", APTOS)\nprint(\"OOD  :\", best if best else \"none (OOD will be skipped)\", best_n)\n\n# 5. Train, evaluate, package\n!pip install -q pyyaml tqdm\n!python scripts/train.py --config configs/config.yaml\n!python scripts/evaluate.py --config configs/config.yaml \\\n    --checkpoint checkpoints/best_model.pt {ood_flag}\n!zip -qr /kaggle/working/cedr_results.zip results checkpoints/best_model.pt\nprint(\"DONE\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null}]}