{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"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":12637336,"sourceType":"datasetVersion","datasetId":7981664},{"sourceId":13715373,"sourceType":"datasetVersion","datasetId":8725481}],"dockerImageVersionId":31090,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Environment setup and library imports\nimport os\nimport glob\nimport random\nimport warnings\nimport numpy as np\nimport pandas as pd\nimport cv2\nimport functools\nfrom pathlib import Path\nfrom tqdm import tqdm\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom typing import List, Tuple, Optional\nimport gc\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader\nfrom torch.optim import AdamW\nfrom torch.optim.lr_scheduler import CosineAnnealingLR\n\nimport timm\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nfrom sklearn.model_selection import StratifiedKFold, GroupKFold\nfrom sklearn.metrics import roc_auc_score\nimport pydicom\n\nwarnings.filterwarnings('ignore')\n\ndef set_seed(seed=42):\n    \"\"\"Set all random seeds for reproducibility\"\"\"\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\n\nset_seed(42)\n\n# Device configuration\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprint(f\"Using device: {device}\")\nif torch.cuda.is_available():\n    print(f\"GPU: {torch.cuda.get_device_name(0)}\")\n    print(f\"Memory: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB\")\n    print(f\"CUDA version: {torch.version.cuda}\")\n    torch.cuda.empty_cache()\nelse:\n    raise RuntimeError(\"CUDA is not available! This code requires GPU.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-26T02:30:02.399999Z","iopub.execute_input":"2025-11-26T02:30:02.400626Z","iopub.status.idle":"2025-11-26T02:30:20.400717Z","shell.execute_reply.started":"2025-11-26T02:30:02.4006Z","shell.execute_reply":"2025-11-26T02:30:20.400108Z"}},"outputs":[{"name":"stdout","text":"Using device: cuda\nGPU: Tesla T4\nMemory: 14.7 GB\nCUDA version: 12.4\n","output_type":"stream"}],"execution_count":1},{"cell_type":"code","source":"class Config:\n    # Data paths\n    DATA_DIR = \"/kaggle/input/rsna-datasets\"\n    DCM_PNG_DIR = os.path.join(DATA_DIR, \"cvt_png\")\n    SERIES_MAPPING_PATH = os.path.join(DATA_DIR, \"series_index_mapping_1.csv\")\n    LOCALIZERS_PATH = os.path.join(DATA_DIR, \"train_localizers_with_relative_1.csv\")\n    TRAIN_CSV_PATH = \"/kaggle/input/rsna-intracranial-aneurysm-detection/train.csv\"\n    \n    NUM_FRAMES = 8\n    IMAGE_SIZE = 224\n    NUM_CLASSES = 14\n    BATCH_SIZE = 6 \n    NUM_EPOCHS = 50\n    LEARNING_RATE = 5e-5\n    \n    MODEL_NAME_BACKBONE = \"resnet50\"\n    USE_METADATA = True\n    USE_WINDOWING = True\n    USE_3CHANNEL_INPUT = True\n    USE_IMPROVED_LOSS = True\n    USE_CLAHE = True\n    USE_STRONG_AUGMENTATION = True\n    \n    NUM_WORKERS = 2\n    PIN_MEMORY = True\n    PREFETCH_FACTOR = 2\n    PERSISTENT_WORKERS = True\n    \n    NUM_FOLDS = 5\n    FOLD = 0\n    ACCUMULATION_STEPS = 5  \n    EARLY_STOPPING_PATIENCE = 5\n    USE_GROUP_CV = True\n    \n    CACHE_SIZE = 100\n    \n    OUTPUT_DIR = \"/kaggle/working\"\n    MODEL_NAME = \"resnet50_aneurysm1\"\n\nconfig = Config()\n\nprint(\"=== Configuration Summary ===\")\nprint(f\"Model Backbone: {config.MODEL_NAME_BACKBONE}\")\nprint(f\"Number of Frames: {config.NUM_FRAMES}\")\nprint(f\"Batch Size: {config.BATCH_SIZE}\")\nprint(f\"Accumulation Steps: {config.ACCUMULATION_STEPS}\")\nprint(f\"Effective Batch Size: {config.BATCH_SIZE * config.ACCUMULATION_STEPS}\")\nprint(f\"CLAHE Enabled: {config.USE_CLAHE}\")\nprint(f\"Strong Augmentation: {config.USE_STRONG_AUGMENTATION}\")\nprint(f\"Group Cross-Validation: {config.USE_GROUP_CV}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-26T02:30:20.40173Z","iopub.execute_input":"2025-11-26T02:30:20.401963Z","iopub.status.idle":"2025-11-26T02:30:20.40896Z","shell.execute_reply.started":"2025-11-26T02:30:20.401944Z","shell.execute_reply":"2025-11-26T02:30:20.408309Z"}},"outputs":[{"name":"stdout","text":"=== Configuration Summary ===\nModel Backbone: resnet50\nNumber of Frames: 8\nBatch Size: 6\nAccumulation Steps: 5\nEffective Batch Size: 30\nCLAHE Enabled: True\nStrong Augmentation: True\nGroup Cross-Validation: True\n","output_type":"stream"}],"execution_count":2},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\n# Load data\nprint(\"Loading data...\")\ndf = pd.read_csv(config.TRAIN_CSV_PATH)\ntrain_df, test_df = train_test_split(\n    df,\n    test_size=0.05,\n    stratify=df['Aneurysm Present'],\n    random_state=42\n)\nseries_mapping_df = pd.read_csv(config.SERIES_MAPPING_PATH)\nlocalizers_df = pd.read_csv(config.LOCALIZERS_PATH)\n\nprint(f\"Train data shape: {train_df.shape}\")\nprint(f\"Series mapping shape: {series_mapping_df.shape}\")\nprint(f\"Localizers shape: {localizers_df.shape}\")\n\n# Define target columns\nTARGET_COLS = [\n    'Left Infraclinoid Internal Carotid Artery',\n    'Right Infraclinoid Internal Carotid Artery', \n    'Left Supraclinoid Internal Carotid Artery',\n    'Right Supraclinoid Internal Carotid Artery',\n    'Left Middle Cerebral Artery',\n    'Right Middle Cerebral Artery',\n    'Anterior Communicating Artery',\n    'Left Anterior Cerebral Artery',\n    'Right Anterior Cerebral Artery', \n    'Left Posterior Communicating Artery',\n    'Right Posterior Communicating Artery',\n    'Basilar Tip',\n    'Other Posterior Circulation',\n    'Aneurysm Present'\n]\n\nprint(f\"Target columns: {len(TARGET_COLS)}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-26T02:30:38.364812Z","iopub.execute_input":"2025-11-26T02:30:38.365125Z","iopub.status.idle":"2025-11-26T02:30:44.995291Z","shell.execute_reply.started":"2025-11-26T02:30:38.365102Z","shell.execute_reply":"2025-11-26T02:30:44.99468Z"}},"outputs":[{"name":"stdout","text":"Loading data...\nTrain data shape: (4130, 18)\nSeries mapping shape: (1012263, 5)\nLocalizers shape: (2286, 7)\nTarget columns: 14\n","output_type":"stream"}],"execution_count":3},{"cell_type":"code","source":"train_df.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-26T02:30:44.996355Z","iopub.execute_input":"2025-11-26T02:30:44.996926Z","iopub.status.idle":"2025-11-26T02:30:45.004223Z","shell.execute_reply.started":"2025-11-26T02:30:44.996907Z","shell.execute_reply":"2025-11-26T02:30:45.00359Z"}},"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"Index(['SeriesInstanceUID', 'PatientAge', 'PatientSex', 'Modality',\n       'Left Infraclinoid Internal Carotid Artery',\n       'Right Infraclinoid Internal Carotid Artery',\n       'Left Supraclinoid Internal Carotid Artery',\n       'Right Supraclinoid Internal Carotid Artery',\n       'Left Middle Cerebral Artery', 'Right Middle Cerebral Artery',\n       'Anterior Communicating Artery', 'Left Anterior Cerebral Artery',\n       'Right Anterior Cerebral Artery', 'Left Posterior Communicating Artery',\n       'Right Posterior Communicating Artery', 'Basilar Tip',\n       'Other Posterior Circulation', 'Aneurysm Present'],\n      dtype='object')"},"metadata":{}}],"execution_count":4},{"cell_type":"code","source":"train_patients = set(train_df['PatientID'].unique())\ntest_patients = set(test_df['PatientID'].unique())\n\n# Intersection\nleaked_patients = train_patients.intersection(test_patients)\n\nif len(leaked_patients) > 0:\n    print(\"⚠️ Patient Leakage Detected!\")\n    print(\"Leaked Patients:\", leaked_patients)\nelse:\n    print(\"✅ No Patient Leakage\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-26T02:25:48.809295Z","iopub.execute_input":"2025-11-26T02:25:48.809795Z","iopub.status.idle":"2025-11-26T02:25:48.850677Z","shell.execute_reply.started":"2025-11-26T02:25:48.809767Z","shell.execute_reply":"2025-11-26T02:25:48.849862Z"}},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   3804\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3805\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3806\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32mindex.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n","\u001b[0;32mindex.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n","\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n","\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: 'PatientID'","\nThe above exception was the direct cause of the following exception:\n","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_38/1330984410.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrain_patients\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'PatientID'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mtest_patients\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'PatientID'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;31m# Intersection\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mleaked_patients\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_patients\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintersection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_patients\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   4100\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4101\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4102\u001b[0;31m             \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4103\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4104\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   3810\u001b[0m             ):\n\u001b[1;32m   3811\u001b[0m                 \u001b[0;32mraise\u001b[0m \u001b[0mInvalidIndexError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3812\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3813\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3814\u001b[0m             \u001b[0;31m# If we have a listlike key, _check_indexing_error will raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: 'PatientID'"],"ename":"KeyError","evalue":"'PatientID'","output_type":"error"}],"execution_count":5},{"cell_type":"code","source":"test_df.to_csv(\"/kaggle/working/test_aneurysm1.csv\", index=None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:01:12.127929Z","iopub.execute_input":"2025-11-24T13:01:12.12816Z","iopub.status.idle":"2025-11-24T13:01:12.138346Z","shell.execute_reply.started":"2025-11-24T13:01:12.128142Z","shell.execute_reply":"2025-11-24T13:01:12.137867Z"}},"outputs":[],"execution_count":7},{"cell_type":"code","source":"def get_windowing_params(modality: str) -> Tuple[float, float]:\n    DEFAULT_WINDOW = (40, 80)\n\n    if not modality:\n        return DEFAULT_WINDOW\n\n    m = modality.strip().upper()\n\n    if \"CTA\" in m:\n        return (50, 350)\n    elif \"CT\" in m:\n        return DEFAULT_WINDOW\n    elif any(x in m for x in [\"MRA\", \"MRI\", \"T1POST\", \"T2\"]):\n        return None  \n    else:\n        return DEFAULT_WINDOW\n\ndef apply_dicom_windowing(img: np.ndarray, window_center: float, window_width: float) -> np.ndarray:\n    lower = window_center - window_width // 2\n    upper = window_center + window_width // 2\n    img_windowed = np.clip(img, lower, upper)\n    img_normalized = (img_windowed - lower) / (upper - lower + 1e-7)\n    if output_8bit:\n        img_normalized = (img_normalized * 255).astype(np.uint8)\n    return img_normalized\n\ndef apply_clahe_normalization(img: np.ndarray, modality: str) -> np.ndarray:\n    if not config.USE_CLAHE:\n        return img\n\n    clahe_params = {\n    ('CTA', 'MRA'): {'clipLimit': 3.0, 'tileGridSize': (8, 8), 'gamma': None, 'scale_alpha': 1.1},\n    ('MRI', 'MR'): {'clipLimit': 2.0, 'tileGridSize': (8, 8), 'gamma': 0.9, 'scale_alpha': None},\n}\n    default_params = {'clipLimit': 2.5, 'tileGridSize': (8, 8), 'gamma': None, 'scale_alpha': None}\n\n    modality = modality.strip().upper() if modality else 'CT'\n    params = next((v for k, v in clahe_params.items() if k in modality), default_params)\n    clahe = cv2.createCLAHE(clipLimit=params['clipLimit'], tileGridSize=params['tileGridSize'])\n    img_clahe = clahe.apply(img.astype(np.uint8))\n\n    if params['gamma'] is not None:\n        img_clahe = np.power(img_clahe / 255.0, params['gamma']) * 255\n        img_clahe = img_clahe.astype(np.uint8)\n\n    if params['scale_alpha'] is not None:\n        alpha = params.get('scale_alpha', 1.0)\n        beta = params.get('scale_beta', 0.0)\n        img_clahe = cv2.convertScaleAbs(img_clahe, alpha=alpha, beta=beta)\n\n    return img_clahe\n\ndef robust_normalization(volume: np.ndarray) -> np.ndarray:\n    \"\"\"Apply robust normalization using percentiles\"\"\"\n    p1, p99 = np.percentile(volume.flatten(), [1, 99])\n    volume_norm = np.clip(volume, p1, p99)\n    \n    if p99 > p1:\n        volume_norm = (volume_norm - p1) / (p99 - p1 + 1e-7)\n    else:\n        volume_norm = np.zeros_like(volume_norm)\n        \n    return (volume_norm * 255).astype(np.uint8)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:01:15.726993Z","iopub.execute_input":"2025-11-24T13:01:15.72754Z","iopub.status.idle":"2025-11-24T13:01:15.737432Z","shell.execute_reply.started":"2025-11-24T13:01:15.727517Z","shell.execute_reply":"2025-11-24T13:01:15.736681Z"}},"outputs":[],"execution_count":8},{"cell_type":"code","source":"def create_3channel_input_8frame(volume: np.ndarray) -> np.ndarray:\n    \"\"\"Create 3-channel input from 8-frame volume optimized for aneurysm detection\"\"\"\n    if len(volume) == 0:\n        return np.zeros((config.IMAGE_SIZE, config.IMAGE_SIZE, 3), dtype=np.uint8)\n    \n    # Middle slice (most important for anatomical reference)\n    middle_slice = volume[len(volume) // 2]\n    \n    # Maximum Intensity Projection (MIP) - optimized for vascular structures\n    mip = np.max(volume, axis=0)\n    \n    # Standard deviation projection for texture analysis\n    std_proj = np.std(volume, axis=0).astype(np.float32)\n    \n    # Normalize standard deviation projection with robust method\n    if std_proj.max() > std_proj.min():\n        p1, p99 = np.percentile(std_proj, [5, 95])\n        std_proj = np.clip(std_proj, p1, p99)\n        std_proj = ((std_proj - p1) / (p99 - p1 + 1e-7) * 255).astype(np.uint8)\n    else:\n        std_proj = np.zeros_like(std_proj, dtype=np.uint8)\n    \n    return np.stack([middle_slice, mip, std_proj], axis=-1)\n\ndef smart_8_frame_sampling(volume_paths: List[str], series_uid: str = None) -> List[str]:\n    n = len(volume_paths)\n    \n    if n <= 8:\n        result = volume_paths[:]\n        while len(result) < 8:\n            result.extend(volume_paths[:8-len(result)])\n        return result[:8]\n    \n    start_idx = max(0, int(n * 0.1))\n    \n    available_frames = n - start_idx\n    step = max(1, available_frames // 8)\n    \n    indices = []\n    current_idx = start_idx\n    while len(indices) < 8 and current_idx < n:\n        indices.append(current_idx)\n        current_idx += step\n    \n    while len(indices) < 8:\n        remaining = [i for i in range(n) if i not in indices]\n        if remaining:\n            indices.append(remaining[len(indices) % len(remaining)])\n        else:\n            indices.append(indices[-1]) \n    \n    return [volume_paths[i] for i in indices[:8]]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:01:18.281982Z","iopub.execute_input":"2025-11-24T13:01:18.282616Z","iopub.status.idle":"2025-11-24T13:01:18.290159Z","shell.execute_reply.started":"2025-11-24T13:01:18.282593Z","shell.execute_reply":"2025-11-24T13:01:18.289497Z"}},"outputs":[],"execution_count":9},{"cell_type":"code","source":"def extract_dicom_patient_info(series_uid: str) -> Tuple[str, str]:\n    \"\"\"Extract StudyInstanceUID and PatientID from DICOM metadata\"\"\"\n    try:\n        dicom_dir = f\"/kaggle/input/rsna-intracranial-aneurysm-detection/series/{series_uid}\"\n        if os.path.exists(dicom_dir):\n            dcm_files = [f for f in os.listdir(dicom_dir) if f.endswith('.dcm')]\n            if dcm_files:\n                ds = pydicom.dcmread(\n                    os.path.join(dicom_dir, dcm_files[0]), \n                    stop_before_pixels=True, \n                    force=True\n                )\n                study_uid = getattr(ds, 'StudyInstanceUID', None)\n                patient_id = getattr(ds, 'PatientID', None)\n                return study_uid or f\"fallback_{series_uid[:32]}\", patient_id\n    except Exception:\n        pass\n    \n    return f\"fallback_{series_uid[:32]}\", f\"fallback_{series_uid[:32]}\"\n\n@functools.lru_cache(maxsize=5000)\ndef get_patient_group_cached(series_uid: str) -> str:\n    \"\"\"Get patient group with caching for performance\"\"\"\n    study_uid, patient_id = extract_dicom_patient_info(series_uid)\n    return study_uid if study_uid and not study_uid.startswith('fallback_') else patient_id\n\ndef create_frame_paths_8frame():\n    \"\"\"Create mapping from series to frame paths optimized for 8-frame processing\"\"\"\n    frame_paths = {}\n    print(\"Creating 8-frame optimized paths from series_index_mapping_1.csv...\")\n    \n    for series_uid in tqdm(train_df['SeriesInstanceUID'].unique(), desc=\"Processing series\"):\n        series_data = series_mapping_df[series_mapping_df['SeriesInstanceUID'] == series_uid]\n        if len(series_data) == 0:\n            frame_paths[series_uid] = []\n            continue\n            \n        train_row = train_df[train_df['SeriesInstanceUID'] == series_uid].iloc[0]\n        found_paths = []\n        \n        for target_col in TARGET_COLS[:-1]:\n            if train_row[target_col] == 1:\n                series_dir = os.path.join(config.DCM_PNG_DIR, target_col, series_uid)\n                \n                if os.path.exists(series_dir):\n                    png_files = sorted(glob.glob(os.path.join(series_dir, \"*.png\")))\n                    if png_files:\n                        found_paths = png_files\n                        break\n        \n        if not found_paths:\n            dicom_dir = f\"/kaggle/input/rsna-intracranial-aneurysm-detection/series/{series_uid}\"\n            if os.path.exists(dicom_dir):\n                num_frames = len(series_data)\n                found_paths = [f\"dummy_path_{i:04d}.png\" for i in range(num_frames)]\n        \n        if found_paths:\n            found_paths = smart_8_frame_sampling(found_paths, series_uid)\n        \n        frame_paths[series_uid] = found_paths\n    \n    return frame_paths\n\nframe_paths_dict = create_frame_paths_8frame()\nprint(f\"Created 8-frame optimized paths for {len(frame_paths_dict)} series\")\n\nvalid_series = [uid for uid, paths in frame_paths_dict.items() if len(paths) > 0]\ntrain_df_filtered = train_df[train_df['SeriesInstanceUID'].isin(valid_series)].copy()\nprint(f\"Filtered train data shape: {train_df_filtered.shape}\")\n\naneurysm_dist_filtered = train_df_filtered['Aneurysm Present'].value_counts()\nprint(f\"Aneurysm Present distribution: {aneurysm_dist_filtered.to_dict()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:01:20.743644Z","iopub.execute_input":"2025-11-24T13:01:20.744199Z","iopub.status.idle":"2025-11-24T13:06:41.798065Z","shell.execute_reply.started":"2025-11-24T13:01:20.744178Z","shell.execute_reply":"2025-11-24T13:06:41.797417Z"}},"outputs":[{"name":"stdout","text":"Creating 8-frame optimized paths from series_index_mapping_1.csv...\n","output_type":"stream"},{"name":"stderr","text":"Processing series: 100%|██████████| 4130/4130 [05:21<00:00, 12.87it/s]","output_type":"stream"},{"name":"stdout","text":"Created 8-frame optimized paths for 4130 series\nFiltered train data shape: (4130, 18)\nAneurysm Present distribution: {0: 2360, 1: 1770}\n","output_type":"stream"},{"name":"stderr","text":"\n","output_type":"stream"}],"execution_count":10},{"cell_type":"code","source":"def create_robust_cv_split(train_df, n_splits=5):\n    print(\"Creating patient-separated cross-validation split...\")\n    \n    patient_groups = []\n    for series_uid in tqdm(train_df['SeriesInstanceUID'], desc=\"Reading DICOM patient info\"):\n        patient_group = get_patient_group_cached(series_uid)\n        patient_groups.append(patient_group)\n    \n    train_df = train_df.copy()\n    train_df['patient_id'] = patient_groups\n    \n    n_groups = train_df['patient_id'].nunique()\n    print(f\"True patient groups found: {n_groups}\")\n    \n    if n_groups < n_splits:\n        print(f\"Not enough patient groups ({n_groups}) for {n_splits}-fold CV.\")\n        print(\"Falling back to StratifiedKFold...\")\n        skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)\n        return list(skf.split(train_df, train_df['Aneurysm Present']))\n    \n    train_df['stratify_key'] = (\n        train_df['Modality'].astype(str) + '_' + \n        train_df['Aneurysm Present'].astype(str)\n    )\n    \n    print(f\"Stratification keys: {train_df['stratify_key'].unique()}\")\n    \n    group_kfold = GroupKFold(n_splits=n_splits)\n    \n    splits = []\n    for fold_idx, (train_idx, val_idx) in enumerate(group_kfold.split(\n        train_df, \n        groups=train_df['patient_id']\n    )):\n        train_fold = train_df.iloc[train_idx]\n        val_fold = train_df.iloc[val_idx]\n        \n        train_patients = set(train_fold['patient_id'])\n        val_patients = set(val_fold['patient_id'])\n        overlap = train_patients.intersection(val_patients)\n        \n        train_dist = train_fold['Aneurysm Present'].value_counts(normalize=True)\n        val_dist = val_fold['Aneurysm Present'].value_counts(normalize=True)\n        \n        print(f\"Fold {fold_idx}:\")\n        print(f\"  Train: {len(train_fold)} samples ({len(train_patients)} patients)\")\n        print(f\"  Val: {len(val_fold)} samples ({len(val_patients)} patients)\")\n        print(f\"  Patient overlap: {len(overlap)} (should be 0!)\")\n        print(f\"  Aneurysm Present - Train: {train_dist.get(1, 0):.3f}, Val: {val_dist.get(1, 0):.3f}\")\n        \n        if len(overlap) > 0:\n            print(f\"  WARNING: Found {len(overlap)} overlapping patients!\")\n        \n        splits.append((train_idx, val_idx))\n    \n    return splits\n\ncv_splits = create_robust_cv_split(train_df_filtered, config.NUM_FOLDS)\ntrain_indices, val_indices = cv_splits[config.FOLD]\n\ntrain_fold_df = train_df_filtered.iloc[train_indices]\nval_fold_df = train_df_filtered.iloc[val_indices]\n\nprint(f\"\\nRobust CV Fold {config.FOLD} Summary:\")\nprint(f\"Train fold size: {len(train_fold_df)}\")\nprint(f\"Validation fold size: {len(val_fold_df)}\")\n\n# Check distributions\nprint(f\"Train Aneurysm Present: {train_fold_df['Aneurysm Present'].value_counts().to_dict()}\")\nprint(f\"Val Aneurysm Present: {val_fold_df['Aneurysm Present'].value_counts().to_dict()}\")\n\n# Check modality distribution\nprint(f\"Train Modality distribution: {train_fold_df['Modality'].value_counts().to_dict()}\")\nprint(f\"Val Modality distribution: {val_fold_df['Modality'].value_counts().to_dict()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:09:14.53012Z","iopub.execute_input":"2025-11-24T13:09:14.530455Z","iopub.status.idle":"2025-11-24T13:14:56.236741Z","shell.execute_reply.started":"2025-11-24T13:09:14.530432Z","shell.execute_reply":"2025-11-24T13:14:56.236132Z"}},"outputs":[{"name":"stdout","text":"Creating patient-separated cross-validation split...\n","output_type":"stream"},{"name":"stderr","text":"Reading DICOM patient info: 100%|██████████| 4130/4130 [05:41<00:00, 12.09it/s]\n","output_type":"stream"},{"name":"stdout","text":"True patient groups found: 4130\nStratification keys: ['CTA_0' 'CTA_1' 'MRI T1post_0' 'MRI T2_1' 'MRA_1' 'MRA_0' 'MRI T2_0'\n 'MRI T1post_1']\nFold 0:\n  Train: 3304 samples (3304 patients)\n  Val: 826 samples (826 patients)\n  Patient overlap: 0 (should be 0!)\n  Aneurysm Present - Train: 0.428, Val: 0.432\nFold 1:\n  Train: 3304 samples (3304 patients)\n  Val: 826 samples (826 patients)\n  Patient overlap: 0 (should be 0!)\n  Aneurysm Present - Train: 0.427, Val: 0.436\nFold 2:\n  Train: 3304 samples (3304 patients)\n  Val: 826 samples (826 patients)\n  Patient overlap: 0 (should be 0!)\n  Aneurysm Present - Train: 0.437, Val: 0.393\nFold 3:\n  Train: 3304 samples (3304 patients)\n  Val: 826 samples (826 patients)\n  Patient overlap: 0 (should be 0!)\n  Aneurysm Present - Train: 0.426, Val: 0.437\nFold 4:\n  Train: 3304 samples (3304 patients)\n  Val: 826 samples (826 patients)\n  Patient overlap: 0 (should be 0!)\n  Aneurysm Present - Train: 0.425, Val: 0.444\n\nRobust CV Fold 0 Summary:\nTrain fold size: 3304\nValidation fold size: 826\nTrain Aneurysm Present: {0: 1891, 1: 1413}\nVal Aneurysm Present: {0: 469, 1: 357}\nTrain Modality distribution: {'CTA': 1366, 'MRA': 956, 'MRI T2': 749, 'MRI T1post': 233}\nVal Modality distribution: {'CTA': 344, 'MRA': 236, 'MRI T2': 189, 'MRI T1post': 57}\n","output_type":"stream"}],"execution_count":11},{"cell_type":"code","source":"if config.USE_STRONG_AUGMENTATION:\n    print(\"Using strong augmentation for better generalization...\")\n    train_transform = A.Compose([\n        A.Rotate(limit=15, p=0.7),\n        A.HorizontalFlip(p=0.5),\n        A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=10, p=0.6),\n        A.ElasticTransform(alpha=50, sigma=5, p=0.3),\n        A.GridDistortion(num_steps=3, distort_limit=0.1, p=0.3),\n        A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.6),\n        A.CLAHE(clip_limit=2.0, tile_grid_size=(8,8), p=0.5),\n        A.RandomGamma(gamma_limit=(80, 120), p=0.4),\n        A.GaussNoise(var_limit=(10, 80), p=0.4),\n        A.ISONoise(color_shift=(0.01, 0.05), intensity=(0.1, 0.5), p=0.3),\n        A.Blur(blur_limit=3, p=0.2),\n        \n        A.CoarseDropout(max_holes=8, max_height=32, max_width=32, p=0.3),\n        \n        A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n        ToTensorV2()\n    ])\nelse:\n    print(\"Using standard augmentation...\")\n    train_transform = A.Compose([\n        A.Rotate(limit=10, p=0.5),\n        A.HorizontalFlip(p=0.5),\n        A.RandomBrightnessContrast(brightness_limit=0.1, contrast_limit=0.1, p=0.3),\n        A.GaussNoise(var_limit=(10, 50), p=0.2),\n        A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n        ToTensorV2()\n    ])\n\nval_transform = A.Compose([\n    A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n    ToTensorV2()\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:15:47.005347Z","iopub.execute_input":"2025-11-24T13:15:47.006063Z","iopub.status.idle":"2025-11-24T13:15:47.251847Z","shell.execute_reply.started":"2025-11-24T13:15:47.006043Z","shell.execute_reply":"2025-11-24T13:15:47.251299Z"}},"outputs":[{"name":"stdout","text":"Using strong augmentation for better generalization...\n","output_type":"stream"}],"execution_count":12},{"cell_type":"code","source":"class EightFrameDataset(Dataset):\n    \"\"\"Dataset optimized for 8-frame processing with CLAHE\"\"\"\n    def __init__(self, df, frame_paths_dict, series_mapping_df, num_frames=8, \n                 transform=None, is_training=True):\n        self.df = df.reset_index(drop=True)\n        self.frame_paths_dict = frame_paths_dict\n        self.series_mapping_df = series_mapping_df\n        self.num_frames = num_frames\n        self.transform = transform\n        self.is_training = is_training\n        self._cache = {}\n        self._cache_keys = []\n        self._max_cache_size = config.CACHE_SIZE\n        \n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, idx):\n        if idx in self._cache:\n            return self._cache[idx]\n        \n        row = self.df.iloc[idx]\n        series_uid = row['SeriesInstanceUID']\n        labels = torch.tensor(row[TARGET_COLS].values.astype(np.float32))\n        metadata = self._extract_metadata(row)\n        image = self._load_8frame_3channel_image(series_uid, row)\n        result = (image, labels, metadata)\n        self._update_cache(idx, result)\n        return result\n    \n    def _update_cache(self, idx, data):\n        \"\"\"Update LRU cache\"\"\"\n        if len(self._cache) >= self._max_cache_size:\n            # Remove oldest entry\n            oldest_idx = self._cache_keys.pop(0)\n            del self._cache[oldest_idx]\n        \n        self._cache[idx] = data\n        self._cache_keys.append(idx)\n    \n    def _extract_metadata(self, row) -> torch.Tensor:\n        \"\"\"Extract and normalize metadata\"\"\"\n        if not config.USE_METADATA:\n            return torch.tensor([0.0, 0.0], dtype=torch.float32)\n        \n        age = row.get('PatientAge', 50)\n        if pd.isna(age):\n            age = 50\n        elif isinstance(age, str):\n            age = int(''.join(filter(str.isdigit, age[:3])) or '50')\n        age = min(float(age), 100.0) / 100.0\n        \n        sex = row.get('PatientSex', 'M')\n        sex = 1.0 if sex == 'M' else 0.0\n        \n        return torch.tensor([age, sex], dtype=torch.float32)\n    \n    def _load_8frame_3channel_image(self, series_uid: str, row) -> torch.Tensor:\n        \"\"\"Load 8-frame 3-channel image with processing\"\"\"\n        paths = self.frame_paths_dict.get(series_uid, [])\n        \n        try:\n            if len(paths) == 0 or paths[0].startswith('dummy_path'):\n                volume = self._load_volume_from_dicom_8frame(series_uid, row)\n            else:\n                volume = self._load_volume_from_png_8frame(paths)\n            \n            volume = robust_normalization(volume)\n            \n            image = create_3channel_input_8frame(volume)\n            \n            if self.transform:\n                transformed = self.transform(image=image)\n                image = transformed['image']\n            \n            return image\n            \n        except Exception as e:\n            print(f\"Error loading {series_uid}: {e}\")\n            # Return dummy image\n            dummy_image = np.zeros((config.IMAGE_SIZE, config.IMAGE_SIZE, 3), dtype=np.uint8)\n            if self.transform:\n                transformed = self.transform(image=dummy_image)\n                return transformed['image']\n            return torch.zeros(3, config.IMAGE_SIZE, config.IMAGE_SIZE)\n    \n    def _load_volume_from_png_8frame(self, paths: List[str]) -> np.ndarray:\n        \"\"\"Load PNG volume optimized for 8 frames\"\"\"\n        volume = []\n        \n        if len(paths) != 8:\n            paths = smart_8_frame_sampling(paths)\n        \n        for path in paths:\n            try:\n                img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)\n                if img is not None:\n                    img = cv2.resize(img, (config.IMAGE_SIZE, config.IMAGE_SIZE), \n                                   interpolation=cv2.INTER_AREA)\n                    volume.append(img)\n            except:\n                volume.append(np.zeros((config.IMAGE_SIZE, config.IMAGE_SIZE), dtype=np.uint8))\n        \n        return np.array(volume) if volume else np.zeros((8, config.IMAGE_SIZE, config.IMAGE_SIZE), dtype=np.uint8)\n    \n    def _load_volume_from_dicom_8frame(self, series_uid: str, row) -> np.ndarray:\n        \"\"\"Load DICOM volume optimized for 8 frames with CLAHE\"\"\"\n        series_data = self.series_mapping_df[\n            self.series_mapping_df['SeriesInstanceUID'] == series_uid\n        ].sort_values('relative_index')\n        \n        if len(series_data) == 0:\n            return np.zeros((8, config.IMAGE_SIZE, config.IMAGE_SIZE), dtype=np.uint8)\n        \n        volume = []\n        modality = row.get('Modality', 'CT')\n        \n        # Sample exactly 8 slices using every-other-frame strategy\n        if len(series_data) <= 8:\n            sampled_data = series_data\n        else:\n            # Apply smart 8-frame sampling logic to indices\n            all_indices = list(range(len(series_data)))\n            sampled_indices = smart_8_frame_sampling([str(i) for i in all_indices])\n            sampled_indices = [int(i) for i in sampled_indices]\n            sampled_data = series_data.iloc[sampled_indices]\n        \n        for _, dicom_row in sampled_data.iterrows():\n            try:\n                ds = pydicom.dcmread(dicom_row['dicom_filename'])\n                img = ds.pixel_array.astype(np.float32)\n                \n                if img.ndim == 3:\n                    if img.shape[-1] == 3:\n                        img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2GRAY).astype(np.float32)\n                    else:\n                        img = img[:, :, 0]\n                \n                if hasattr(ds, 'RescaleSlope') and hasattr(ds, 'RescaleIntercept'):\n                    img = img * ds.RescaleSlope + ds.RescaleIntercept\n                \n                if config.USE_WINDOWING:\n                    window_center, window_width = get_windowing_params(modality)\n                    img = apply_dicom_windowing(img, window_center, window_width)\n                else:\n                    img_min, img_max = img.min(), img.max()\n                    if img_max > img_min:\n                        img = ((img - img_min) / (img_max - img_min) * 255).astype(np.uint8)\n                    else:\n                        img = np.zeros_like(img, dtype=np.uint8)\n                \n                # Apply CLAHE improvement\n                img = apply_clahe_normalization(img, modality)\n                \n                # High quality resize\n                img = cv2.resize(img, (config.IMAGE_SIZE, config.IMAGE_SIZE), \n                               interpolation=cv2.INTER_AREA)\n                volume.append(img)\n                \n            except Exception as e:\n                volume.append(np.zeros((config.IMAGE_SIZE, config.IMAGE_SIZE), dtype=np.uint8))\n                continue\n\n        while len(volume) < 8:\n            if volume:\n                volume.append(volume[-1])  \n            else:\n                volume.append(np.zeros((config.IMAGE_SIZE, config.IMAGE_SIZE), dtype=np.uint8))\n        \n        return np.array(volume[:8])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:15:49.910861Z","iopub.execute_input":"2025-11-24T13:15:49.911144Z","iopub.status.idle":"2025-11-24T13:15:49.930074Z","shell.execute_reply.started":"2025-11-24T13:15:49.911122Z","shell.execute_reply":"2025-11-24T13:15:49.929428Z"}},"outputs":[],"execution_count":13},{"cell_type":"code","source":"print(\"Creating 8-frame datasets with CLAHE...\")\ntrain_dataset = EightFrameDataset(\n    train_fold_df, \n    frame_paths_dict, \n    series_mapping_df,\n    num_frames=config.NUM_FRAMES,\n    transform=train_transform,\n    is_training=True\n)\n\nval_dataset = EightFrameDataset(\n    val_fold_df,\n    frame_paths_dict,\n    series_mapping_df,\n    num_frames=config.NUM_FRAMES, \n    transform=val_transform,\n    is_training=False\n)\n\nprint(\"Creating optimized data loaders for 8-frame processing...\")\ntrain_loader = DataLoader(\n    train_dataset,\n    batch_size=config.BATCH_SIZE,\n    shuffle=True,\n    num_workers=config.NUM_WORKERS,\n    pin_memory=config.PIN_MEMORY,\n    drop_last=True,\n    prefetch_factor=config.PREFETCH_FACTOR,\n    persistent_workers=config.PERSISTENT_WORKERS\n)\n\nval_loader = DataLoader(\n    val_dataset,\n    batch_size=config.BATCH_SIZE,\n    shuffle=False,\n    num_workers=config.NUM_WORKERS,\n    pin_memory=config.PIN_MEMORY,\n    prefetch_factor=config.PREFETCH_FACTOR,\n    persistent_workers=config.PERSISTENT_WORKERS\n)\n\nprint(f\"Train batches: {len(train_loader)}\")\nprint(f\"Validation batches: {len(val_loader)}\")\n\nprint(\"Testing 8-frame data loading speed...\")\nimport time\n\nstart_time = time.time()\nfor i, batch in enumerate(train_loader):\n    if i >= 5:  \n        break\n    images, labels, metadata = batch\n    print(f\"Batch {i+1}: Images shape: {images.shape}, Device: {images.device}\")\n\nelapsed = time.time() - start_time\nprint(f\"Loaded 5 batches in {elapsed:.2f} seconds ({elapsed/5:.2f}s per batch)\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:15:53.928414Z","iopub.execute_input":"2025-11-24T13:15:53.928863Z","iopub.status.idle":"2025-11-24T13:15:58.197906Z","shell.execute_reply.started":"2025-11-24T13:15:53.928839Z","shell.execute_reply":"2025-11-24T13:15:58.196696Z"}},"outputs":[{"name":"stdout","text":"Creating 8-frame datasets with CLAHE...\nCreating optimized data loaders for 8-frame processing...\nTrain batches: 550\nValidation batches: 138\nTesting 8-frame data loading speed...\nBatch 1: Images shape: torch.Size([6, 3, 224, 224]), Device: cpu\nBatch 2: Images shape: torch.Size([6, 3, 224, 224]), Device: cpu\nBatch 3: Images shape: torch.Size([6, 3, 224, 224]), Device: cpu\nBatch 4: Images shape: torch.Size([6, 3, 224, 224]), Device: cpu\nBatch 5: Images shape: torch.Size([6, 3, 224, 224]), Device: cpu\nLoaded 5 batches in 4.26 seconds (0.85s per batch)\n","output_type":"stream"}],"execution_count":14},{"cell_type":"code","source":"class ImprovedMultiFrameModel(nn.Module):\n    \"\"\"Model with EfficientNetV2-S and metadata integration for 8-frame processing\"\"\"\n    def __init__(self, num_frames=8, num_classes=14, pretrained=True):\n        super(ImprovedMultiFrameModel, self).__init__()\n        self.num_frames = num_frames\n        self.num_classes = num_classes\n        self.use_3channel = config.USE_3CHANNEL_INPUT\n        self.use_metadata = config.USE_METADATA\n        \n        print(f\"Loading backbone: {config.MODEL_NAME_BACKBONE}\")\n        self.backbone = timm.create_model(\n            \"resnet50\",\n            pretrained=pretrained,\n            num_classes=0,\n            global_pool='avg'\n        )\n        \n        self.feature_dim = self.backbone.num_features\n        print(f\"Backbone {config.MODEL_NAME_BACKBONE}: {self.feature_dim} features\")\n        \n        if self.use_metadata:\n            self.meta_fc = nn.Sequential(\n                nn.Linear(2, 16),\n                nn.ReLU(),\n                nn.Dropout(0.2),\n                nn.Linear(16, 32),\n                nn.ReLU()\n            )\n            classifier_input_dim = self.feature_dim + 32\n        else:\n            classifier_input_dim = self.feature_dim\n        \n        self.classifier = nn.Sequential(\n            nn.Linear(classifier_input_dim, 512),\n            nn.BatchNorm1d(512),\n            nn.ReLU(),\n            nn.Dropout(0.3),\n            nn.Linear(512, 256),\n            nn.BatchNorm1d(256),\n            nn.ReLU(),\n            nn.Dropout(0.3),\n            nn.Linear(256, num_classes)\n        )\n        \n    def forward(self, x, meta=None):\n        features = self.backbone(x)  # (batch_size, feature_dim)\n        \n\n        if self.use_metadata and meta is not None:\n            meta_features = self.meta_fc(meta)\n            features = torch.cat([features, meta_features], dim=1)\n        \n        output = self.classifier(features)\n        return output\n\nprint(\"Initializing 8-frame model...\")\nmodel = ImprovedMultiFrameModel(\n    num_frames=config.NUM_FRAMES,\n    num_classes=config.NUM_CLASSES,\n    pretrained=True\n)\n\nmodel = model.to(device)\n\ntotal_params = sum(p.numel() for p in model.parameters())\ntrainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)\n\nprint(f\"Total parameters: {total_params:,}\")\nprint(f\"Trainable parameters: {trainable_params:,}\")\nprint(f\"Model device: {next(model.parameters()).device}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:16:01.286859Z","iopub.execute_input":"2025-11-24T13:16:01.287199Z","iopub.status.idle":"2025-11-24T13:16:03.899029Z","shell.execute_reply.started":"2025-11-24T13:16:01.287158Z","shell.execute_reply":"2025-11-24T13:16:03.898429Z"}},"outputs":[{"name":"stdout","text":"Initializing 8-frame model...\nLoading backbone: resnet50\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"model.safetensors:   0%|          | 0.00/102M [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e1dfa56faf5743fd9249e4d7a5f2fefb"}},"metadata":{}},{"name":"stdout","text":"Backbone resnet50: 2048 features\nTotal parameters: 24,710,558\nTrainable parameters: 24,710,558\nModel device: cuda:0\n","output_type":"stream"}],"execution_count":15},{"cell_type":"code","source":"class FocalLoss(nn.Module):\n    \"\"\"Focal Loss for addressing class imbalance\"\"\"\n    def __init__(self, alpha=1, gamma=2):\n        super(FocalLoss, self).__init__()\n        self.alpha = alpha\n        self.gamma = gamma\n        \n    def forward(self, inputs, targets):\n        bce_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction='none')\n        pt = torch.exp(-bce_loss)\n        focal_loss = self.alpha * (1-pt)**self.gamma * bce_loss\n        return focal_loss.mean()\n\nclass WeightedMultiLabelLoss(nn.Module):\n    \"\"\"Weighted multi-label loss\"\"\"\n    def __init__(self, aneurysm_weight=3.0):\n        super(WeightedMultiLabelLoss, self).__init__()\n        self.weights = torch.ones(config.NUM_CLASSES, device=device)\n        self.weights[-1] = aneurysm_weight\n        \n    def forward(self, outputs, targets):\n        bce_loss = F.binary_cross_entropy_with_logits(outputs, targets, reduction='none')\n        weighted_loss = bce_loss * self.weights\n        return weighted_loss.mean()\n\nclass ImprovedLoss(nn.Module):\n    def __init__(self, aneurysm_weight=3.0, focal_weight=0.3):\n        super(ImprovedLoss, self).__init__()\n        self.aneurysm_weight = aneurysm_weight\n        self.focal_weight = focal_weight\n        self.weights = torch.ones(config.NUM_CLASSES, device=device)\n        self.weights[-1] = aneurysm_weight\n        self.focal_loss = FocalLoss(alpha=1, gamma=2)\n        \n    def forward(self, outputs, targets):\n        bce_loss = F.binary_cross_entropy_with_logits(outputs, targets, reduction='none')\n        weighted_bce = (bce_loss * self.weights).mean()\n        focal_loss = self.focal_loss(outputs, targets)\n        return (1 - self.focal_weight) * weighted_bce + self.focal_weight * focal_loss\n\ndef get_loss_function():\n    \"\"\"Get loss function based on configuration\"\"\"\n    if config.USE_IMPROVED_LOSS:\n        return ImprovedLoss(aneurysm_weight=3.0, focal_weight=0.3)\n    else:\n        return WeightedMultiLabelLoss(aneurysm_weight=3.0)\n\ndef calculate_competition_metric(y_true, y_pred):\n    \"\"\"Calculate competition metric: weighted multilabel AUC ROC\"\"\"\n    individual_aucs = []\n    \n    for i in range(13):\n        try:\n            if len(np.unique(y_true[:, i])) > 1:\n                auc = roc_auc_score(y_true[:, i], y_pred[:, i])\n            else:\n                auc = 0.5\n            individual_aucs.append(auc)\n        except:\n            individual_aucs.append(0.5)\n    \n    try:\n        if len(np.unique(y_true[:, 13])) > 1:\n            aneurysm_present_auc = roc_auc_score(y_true[:, 13], y_pred[:, 13])\n        else:\n            aneurysm_present_auc = 0.5\n    except:\n        aneurysm_present_auc = 0.5\n    \n    avg_individual = np.mean(individual_aucs)\n    final_score = (aneurysm_present_auc + avg_individual) / 2\n    \n    return final_score, aneurysm_present_auc, avg_individual, individual_aucs\n\ncriterion = get_loss_function()\noptimizer = AdamW(model.parameters(), lr=config.LEARNING_RATE, weight_decay=1e-4)\nscheduler = CosineAnnealingLR(optimizer, T_max=config.NUM_EPOCHS, eta_min=1e-6)\n\nscaler = torch.cuda.amp.GradScaler()\n\nprint(\"Training setup complete\")\nprint(f\"Using loss function: {type(criterion).__name__}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:16:08.263027Z","iopub.execute_input":"2025-11-24T13:16:08.263361Z","iopub.status.idle":"2025-11-24T13:16:08.318483Z","shell.execute_reply.started":"2025-11-24T13:16:08.263342Z","shell.execute_reply":"2025-11-24T13:16:08.317896Z"}},"outputs":[{"name":"stdout","text":"Training setup complete\nUsing loss function: ImprovedLoss\n","output_type":"stream"}],"execution_count":16},{"cell_type":"code","source":"def train_epoch_optimized(model, train_loader, criterion, optimizer, scaler, device, accumulation_steps):\n    model.train()\n    running_loss = 0.0\n    optimizer.zero_grad()\n\n    for batch_idx, (images, targets, metadata) in enumerate(\n            tqdm(train_loader, desc=\"Training 8-Frame\")):\n\n        images = images.to(device, non_blocking=True)\n        targets = targets.to(device, non_blocking=True)\n        metadata = metadata.to(device, non_blocking=True)\n\n        with torch.cuda.amp.autocast():\n            outputs = model(images, metadata)\n            loss = criterion(outputs, targets) / accumulation_steps\n\n        scaler.scale(loss).backward()\n\n        if (batch_idx + 1) % accumulation_steps == 0:\n            scaler.step(optimizer)\n            scaler.update()\n            optimizer.zero_grad()\n\n        running_loss += loss.item() * accumulation_steps\n\n    if len(train_loader) % accumulation_steps != 0:\n        scaler.step(optimizer)\n        scaler.update()\n        optimizer.zero_grad()\n\n    return running_loss / len(train_loader)\n\ndef check_gpu_utilization():\n    if not torch.cuda.is_available():\n        print(\"No GPU available.\")\n        return 0\n\n    allocated = torch.cuda.memory_allocated() / 1024**3\n    reserved  = torch.cuda.memory_reserved()  / 1024**3\n    total     = torch.cuda.get_device_properties(0).total_memory / 1024**3\n\n    print(f\"GPU Memory - Allocated: {allocated:.2f}GB  Reserved: {reserved:.2f}GB  Total: {total:.2f}GB\")\n    print(f\"GPU Utilization: {(allocated / total) * 100:.1f}%\")\n\n    return allocated / total * 100\n\n\nprint(\"Initial GPU status for 8-frame processing:\")\ncheck_gpu_utilization()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:16:12.641332Z","iopub.execute_input":"2025-11-24T13:16:12.641598Z","iopub.status.idle":"2025-11-24T13:16:12.65303Z","shell.execute_reply.started":"2025-11-24T13:16:12.641581Z","shell.execute_reply":"2025-11-24T13:16:12.652311Z"}},"outputs":[{"name":"stdout","text":"Initial GPU status for 8-frame processing:\nGPU Memory - Allocated: 0.09GB  Reserved: 0.12GB  Total: 14.74GB\nGPU Utilization: 0.6%\n","output_type":"stream"},{"execution_count":17,"output_type":"execute_result","data":{"text/plain":"0.6260842742453038"},"metadata":{}}],"execution_count":17},{"cell_type":"code","source":"def validate_epoch_optimized(model, val_loader, criterion, device):\n    model.eval()\n    running_loss = 0.0\n    all_outputs = []\n    all_targets = []\n    \n    with torch.no_grad():\n        for images, targets, metadata in tqdm(val_loader, desc=\"Validating 8-Frame\"):\n            # Move data to GPU efficiently\n            images = images.to(device, non_blocking=True)\n            targets = targets.to(device, non_blocking=True)\n            metadata = metadata.to(device, non_blocking=True)\n                \n            with torch.cuda.amp.autocast():\n                logits = model(images, metadata)\n                loss = criterion(logits, targets)\n            \n            outputs = torch.sigmoid(logits)\n            \n            running_loss += loss.item()\n            all_outputs.append(outputs.cpu().numpy())\n            all_targets.append(targets.cpu().numpy())\n    \n    all_outputs = np.concatenate(all_outputs)\n    all_targets = np.concatenate(all_targets)\n    \n    final_score, aneurysm_auc, avg_individual, individual_aucs = calculate_competition_metric(\n        all_targets, all_outputs\n    )\n    \n    return running_loss / len(val_loader), final_score, aneurysm_auc, avg_individual\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:16:15.154702Z","iopub.execute_input":"2025-11-24T13:16:15.155275Z","iopub.status.idle":"2025-11-24T13:16:15.160991Z","shell.execute_reply.started":"2025-11-24T13:16:15.155253Z","shell.execute_reply":"2025-11-24T13:16:15.160368Z"}},"outputs":[],"execution_count":18},{"cell_type":"code","source":"best_score = 0.0\nbest_epoch = 0\npatience_counter = 0\ntrain_losses = []\nval_losses = []\nval_scores = []\n\nprint(\"Starting 8-frame training with patient-separated CV...\")\nprint(f\"Batch size: {config.BATCH_SIZE}, Workers: {config.NUM_WORKERS}\")\nprint(f\"Frames per sample: {config.NUM_FRAMES}\")\nprint(f\"CLAHE enabled: {config.USE_CLAHE}\")\nprint(f\"Strong augmentation: {config.USE_STRONG_AUGMENTATION}\")\nprint(f\"True patient separation: {config.USE_GROUP_CV}\")\n\nfor epoch in range(config.NUM_EPOCHS):\n    print(f\"\\nEpoch {epoch+1}/{config.NUM_EPOCHS}\")\n    print(\"-\" * 50)\n    \n    train_loss = train_epoch_optimized(\n        model, train_loader, criterion, optimizer, scaler, device, config.ACCUMULATION_STEPS\n    )\n    \n    val_loss, val_score, aneurysm_auc, avg_individual = validate_epoch_optimized(\n        model, val_loader, criterion, device\n    )\n    \n    scheduler.step()\n    \n    train_losses.append(train_loss)\n    val_losses.append(val_loss)\n    val_scores.append(val_score)\n    \n    print(f\"Train Loss: {train_loss:.6f}\")\n    print(f\"Val Loss: {val_loss:.6f}\")\n    print(f\"Val Score: {val_score:.6f}\")\n    print(f\"Aneurysm AUC: {aneurysm_auc:.6f}\")\n    print(f\"Avg Individual AUC: {avg_individual:.6f}\")\n    print(f\"Learning Rate: {optimizer.param_groups[0]['lr']:.8f}\")\n    \n    gpu_util = check_gpu_utilization()\n    \n    if val_score > best_score:\n        best_score = val_score\n        best_epoch = epoch + 1\n        patience_counter = 0\n        \n        model_path = os.path.join(config.OUTPUT_DIR, f\"{config.MODEL_NAME}_best.pth\")\n        torch.save({\n            'epoch': epoch + 1,\n            'model_state_dict': model.state_dict(),\n            'optimizer_state_dict': optimizer.state_dict(),\n            'scheduler_state_dict': scheduler.state_dict(),\n            'best_score': best_score,\n            'val_loss': val_loss,\n            'aneurysm_auc': aneurysm_auc,\n            'avg_individual_auc': avg_individual,\n            'config': config,\n            'model_config': {\n                'backbone': config.MODEL_NAME_BACKBONE,\n                'num_frames': config.NUM_FRAMES,\n                'use_3channel': config.USE_3CHANNEL_INPUT,\n                'use_metadata': config.USE_METADATA,\n                'use_windowing': config.USE_WINDOWING,\n                'use_improved_loss': config.USE_IMPROVED_LOSS,\n                'use_clahe': config.USE_CLAHE,\n                'use_strong_augmentation': config.USE_STRONG_AUGMENTATION,\n                'use_group_cv': config.USE_GROUP_CV\n            }\n        }, model_path)\n        \n        print(f\"New best model saved! Score: {best_score:.6f}\")\n    else:\n        patience_counter += 1\n        print(f\"No improvement. Patience: {patience_counter}/3\")\n        \n        if patience_counter >= 3:\n            print(f\"Early stopping triggered at epoch {epoch + 1}\")\n            break\n    \n    torch.cuda.empty_cache()\n\nprint(\"\\n\" + \"=\"*70)\nprint(\"8-FRAME TRAINING WITH PATIENT SEPARATION COMPLETED\")\nprint(\"=\"*70)\nprint(f\"Best Score: {best_score:.6f} at Epoch {best_epoch}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T13:16:19.617865Z","iopub.execute_input":"2025-11-24T13:16:19.618355Z","iopub.status.idle":"2025-11-24T13:59:57.103656Z","shell.execute_reply.started":"2025-11-24T13:16:19.61833Z","shell.execute_reply":"2025-11-24T13:59:57.102707Z"}},"outputs":[{"name":"stdout","text":"Starting 8-frame training with patient-separated CV...\nBatch size: 6, Workers: 2\nFrames per sample: 8\nCLAHE enabled: True\nStrong augmentation: True\nTrue patient separation: True\n\nEpoch 1/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [06:42<00:00,  1.37it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:36<00:00,  1.43it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.488672\nVal Loss: 0.397675\nVal Score: 0.793821\nAneurysm AUC: 0.967438\nAvg Individual AUC: 0.620204\nLearning Rate: 0.00004995\nGPU Memory - Allocated: 0.30GB  Reserved: 0.37GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNew best model saved! Score: 0.793821\n\nEpoch 2/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:47<00:00,  1.91it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:04<00:00,  2.13it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.344646\nVal Loss: 0.352101\nVal Score: 0.785934\nAneurysm AUC: 0.966225\nAvg Individual AUC: 0.605643\nLearning Rate: 0.00004981\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNo improvement. Patience: 1/3\n\nEpoch 3/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:43<00:00,  1.94it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:05<00:00,  2.11it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.271117\nVal Loss: 0.282216\nVal Score: 0.800735\nAneurysm AUC: 0.964183\nAvg Individual AUC: 0.637288\nLearning Rate: 0.00004957\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNew best model saved! Score: 0.800735\n\nEpoch 4/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:45<00:00,  1.93it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:04<00:00,  2.13it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.226645\nVal Loss: 0.242606\nVal Score: 0.860278\nAneurysm AUC: 0.964908\nAvg Individual AUC: 0.755648\nLearning Rate: 0.00004923\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNew best model saved! Score: 0.860278\n\nEpoch 5/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:44<00:00,  1.93it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:05<00:00,  2.11it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.203480\nVal Loss: 0.220801\nVal Score: 0.850281\nAneurysm AUC: 0.962806\nAvg Individual AUC: 0.737756\nLearning Rate: 0.00004880\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNo improvement. Patience: 1/3\n\nEpoch 6/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:55<00:00,  1.86it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:06<00:00,  2.09it/s]\n","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.184599\nVal Loss: 0.202923\nVal Score: 0.841320\nAneurysm AUC: 0.966034\nAvg Individual AUC: 0.716605\nLearning Rate: 0.00004828\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNo improvement. Patience: 2/3\n\nEpoch 7/50\n--------------------------------------------------\n","output_type":"stream"},{"name":"stderr","text":"Training 8-Frame: 100%|██████████| 550/550 [04:47<00:00,  1.92it/s]\nValidating 8-Frame: 100%|██████████| 138/138 [01:05<00:00,  2.09it/s]","output_type":"stream"},{"name":"stdout","text":"Train Loss: 0.171647\nVal Loss: 0.265818\nVal Score: 0.830229\nAneurysm AUC: 0.964401\nAvg Individual AUC: 0.696058\nLearning Rate: 0.00004767\nGPU Memory - Allocated: 0.30GB  Reserved: 0.72GB  Total: 14.74GB\nGPU Utilization: 2.0%\nNo improvement. Patience: 3/3\nEarly stopping triggered at epoch 7\n\n======================================================================\n8-FRAME TRAINING WITH PATIENT SEPARATION COMPLETED\n======================================================================\nBest Score: 0.860278 at Epoch 4\n","output_type":"stream"},{"name":"stderr","text":"\n","output_type":"stream"}],"execution_count":19},{"cell_type":"code","source":"fig, axes = plt.subplots(1, 3, figsize=(18, 5))\n\naxes[0].plot(range(1, len(train_losses)+1), train_losses, 'b-', label='Train Loss', linewidth=2)\naxes[0].plot(range(1, len(val_losses)+1), val_losses, 'r-', label='Val Loss', linewidth=2)\naxes[0].set_xlabel('Epoch')\naxes[0].set_ylabel('Loss')\naxes[0].set_title('8-Frame Training: Loss Curves')\naxes[0].legend()\naxes[0].grid(True, alpha=0.3)\n\naxes[1].plot(range(1, len(val_scores)+1), val_scores, 'g-', label='Val Score', linewidth=2)\naxes[1].axhline(y=best_score, color='r', linestyle='--', alpha=0.7, \n                label=f'Best: {best_score:.6f}')\naxes[1].set_xlabel('Epoch')\naxes[1].set_ylabel('Score')\naxes[1].set_title('8-Frame Training')\naxes[1].legend()\naxes[1].grid(True, alpha=0.3)\n\nlr_values = []\ntemp_optimizer = AdamW(model.parameters(), lr=config.LEARNING_RATE, weight_decay=1e-4)\ntemp_scheduler = CosineAnnealingLR(temp_optimizer, T_max=config.NUM_EPOCHS, eta_min=1e-6)\nfor _ in range(config.NUM_EPOCHS):\n    lr_values.append(temp_optimizer.param_groups[0]['lr'])\n    temp_scheduler.step()\n\naxes[2].plot(range(1, len(lr_values)+1), lr_values, 'purple', linewidth=2, label='Learning Rate')\naxes[2].set_xlabel('Epoch')\naxes[2].set_ylabel('Learning Rate')\naxes[2].set_title('Learning Rate Schedule')\naxes[2].legend()\naxes[2].grid(True, alpha=0.3)\naxes[2].set_yscale('log')\n\nplt.tight_layout()\nplt.show()\n\nmodel_path = os.path.join(config.OUTPUT_DIR, f\"{config.MODEL_NAME}_best.pth\")\nif os.path.exists(model_path):\n    checkpoint = torch.load(model_path, map_location='cpu', weights_only=False)\n    \n    print(\"\\n\" + \"=\"*60)\n    print(\"8-FRAME MODEL WITH PATIENT SEPARATION SUMMARY\")\n    print(\"=\"*60)\n    print(f\"Best Epoch: {checkpoint['epoch']}\")\n    print(f\"Best Score: {checkpoint['best_score']:.6f}\")\n    print(f\"Aneurysm AUC: {checkpoint['aneurysm_auc']:.6f}\")\n    print(f\"Avg Individual AUC: {checkpoint['avg_individual_auc']:.6f}\")\n    print(f\"Model Size: {os.path.getsize(model_path) / (1024*1024):.1f} MB\")\n    print(f\"- CLAHE contrast adaptation: {config.USE_CLAHE}\")\n    print(f\"- Strong augmentation: {config.USE_STRONG_AUGMENTATION}\")\n\ntorch.cuda.empty_cache()\ngc.collect()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-24T14:04:07.885868Z","iopub.execute_input":"2025-11-24T14:04:07.88623Z","iopub.status.idle":"2025-11-24T14:04:09.402449Z","shell.execute_reply.started":"2025-11-24T14:04:07.88619Z","shell.execute_reply":"2025-11-24T14:04:09.401822Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1800x500 with 3 Axes>","image/png":"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q1evsn37di5cuMD+/fsT9f2iNGjQgO+++w53d3cKFy7M9u3bWbduHR4eHknyfvHVuHFjypYtS58+fThx4gQFCxbk999/5+bNm0D0q64uXrxIoUKF4jVV1/jx42Os/2I2m/n4448ZO3Ys9erVo0KFCrRv35779+8zadIk3N3dGTZsGGBdby9btmy88cYbFCtWjDRp0rBu3Tp27dpluxp+w4YN9OjRgzfffJP8+fMTERHBd999ZxuoP06LFi3477//GDVqFP/88w8tW7YkR44cBAQEsGrVKtavX8+CBQsAKFKkCOXLl2fgwIHcvHmTjBkz8tNPP8WaLHyS+vXrkzZtWvr27RtrnHny5GHkyJEMHDiQM2fO0LhxY9KmTcvp06f57bff6NSpE3379n2mYxcREXlaGi9qvPi040UREZEXxezZs1m1alWM8l69evH555+zceNGypUrR8eOHSlcuDA3b95k7969rFu3zvY3sEGDBixevJgmTZrw2muvcfr0aaZNm0bhwoVjTbTYi7e3N7169eLLL7/k9ddfp27duuzfv58//viDTJkyPdPf8rZt2zJkyBDGjBlD48aNqVixIhkyZKBNmza8//77mEwmvvvuu1iTaKVKlWLhwoX07t2bMmXKkCZNGho2bEirVq1YtGgRXbp0YePGjVSqVInIyEiOHDnCokWLWL16NaVLl441nnv37lGxYkXKly9P3bp18fX15fbt2yxZsoTNmzfTuHFjSpQoAUDr1q2ZP38+vXv3ZufOnVSpUoW7d++ybt06unXrRqNGjeLVF087luzXrx/fffcddevWpVevXqROnZoZM2aQI0eOGGsyd+jQgS5dutCsWTNq167N/v37Wb16NZkyZXpsLGazmVmzZlGvXj2KFClCu3btyJo1KxcvXmTjxo2kS5eOZcuWxev4ROxFST+ReKpatSrbtm1j2LBhTJkyhYCAAHLlysWoUaPo169fkr53gQIF+OWXXxg0aBB9+/bFx8eHrl274unpyXvvvZeo71W4cGF2797N8OHDmTt3LgEBAXh5eVGiRAmGDBmSqO/1sK+++goHBwd++OEHQkJCqFSpEuvWrYtzfu/nzcHBgRUrVtCrVy/mzZuH2WymSZMmDB06lEqVKuHq6vpM7Y8ePTrW9/z444+pVasWq1atYujQoQwZMgQnJyeqVavGmDFjbNNNuLm50a1bN9asWcPixYuxWCzkzZuXKVOm0LVrVwCKFSuGv78/y5Yt4+LFi7i5uVGsWDH++OMPypcv/8QYR44cyauvvsrXX3/N1KlTuXnzJhkyZKB8+fIsXbqU119/3Vb3hx9+oHPnznz++eekT5+e9u3bU6NGDWrXrh2vfnF1deX111/nhx9+oFatWnh5ecWoM2DAAPLnz8+ECRMYPnw4YJ23vk6dOraYnvXYRUREnobGixovJuV4UURExB4evestStu2bcmWLRs7d+5kxIgRLF68mClTpuDh4UGRIkUYM2ZMtLpXrlxh+vTprF69msKFC/P999/z888/s2nTpud0JE9nzJgxuLm5MXPmTNatW0eFChVYs2YNlStXfqa/5alSpaJHjx4MGzaMTZs2Ub16dZYvX06fPn0YNGgQGTJk4N1336VmzZoxxjbdunVj3759zJkzhwkTJpAjRw4aNmyI2WxmyZIlTJgwgfnz5/Pbb7/h5uZG7ty56dWr12OXQUmfPj0zZ85kxYoVzJkzhytXruDg4ECBAgUYO3Ys77//vq2ug4MDK1euZNSoUSxYsIBff/0VDw8PW+Iuvp52LJk5c2Y2btxIz549+fzzz/Hw8KBLly5kyZKF9u3bR2uzY8eOnD59mm+//ZZVq1ZRpUoV1q5dS82aNZ8YT/Xq1dm+fTuffvop33zzDcHBwfj4+FCuXDk6d+4c7+MTsReTkdgrlIqIpEBLliyhSZMmbNmyhUqVKtk7HBERERFJZjReFBERebHdvn2bDBkyMHLkSD755BN7hyMiEiut6SciEk/379+P9jwyMpJJkyaRLl06SpYsaaeoRERERCS50HhRRETkxfbo33KAiRMnAtY7wkREkitN7ykiEk89e/bk/v37VKhQgdDQUBYvXsy2bdv47LPPSJUqlb3DExERERE703hRRETkxbZw4ULmzp1L/fr1SZMmDVu2bOHHH3+kTp06umNfRJI1Te8pIhJPCxYs4Msvv+TEiROEhISQN29eunbtSo8ePewdmoiIiIgkAxovioiIvNj27t1Lv3792LdvH0FBQXh7e9OsWTNGjhxJmjRp7B2eiEiclPQTERERERERERERERERecFpTT8RERERERERERERERGRF5ySfiIiIiIiIiIiIiIiIiIvOEd7B5AcWSwWLl26RNq0aTGZTPYOR0REROzIMAzu3LlD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48aNMzsUpxIeHk6/fv3YvHkzK1as4Pr16zRr1owrV66YHVqmVqBAAT7++GN27NjB9u3bady4Ma1bt+b33383OzSnsW3bNr799lsqVqxodihOo1y5cpw+fdqxbdiwweyQnMLFixepU6cObm5uLFmyhH379vGf//wHHx8fs0PL1LZt25bi523FihUAdOjQweTIJD2pnkod1VOpo3rq0ameeniqp1JH9VTqqJ7KWmbNmkVYWBjDhg1j586dVKpUidDQUM6cOWN2aFnS/erSTz75hC+//JIJEyawZcsWvLy8CA0NJSEhIYMjzXoepLZ97bXX+O2335gzZw7h4eGcOnWKtm3bmhh11nG/Glm5zzh3q7X1HqS/e9XspuffLqYA7PPnzzc7DKd05swZO2APDw83OxSn4+PjY588ebLZYTiFuLg4e4kSJewrVqywN2jQwD5w4ECzQ8r0hg0bZq9UqZLZYTilt956y163bl2zw3B6AwcOtBcrVsxus9nMDkUyiOqp1FM9lXqqpx6c6qmHp3oq9VRPpQ3VU86tZs2a9n79+jkeJycn24OCguyjRo0yMarHwz/rUpvNZg8ICLCPGTPGse/SpUt2Dw8P+88//2xChFnbP2vbS5cu2d3c3Oxz5sxxHLN//347YI+IiDArzCztRo2s3Gecu9Xaeg/S371q9syQf430E6cTGxsLgK+vr8mROI/k5GRmzpzJlStXqFWrltnhOIV+/frx1FNPERISYnYoTuXgwYMEBQXxxBNP0LVrV44fP252SE5h4cKFVK9enQ4dOpAvXz6qVKnCpEmTzA7LqSQmJvLDDz/w/PPPY7FYzA5HJNNTPfXwVE89PNVTqaN6KnVUTz061VPOLTExkR07dqT4O9dqtRISEkJERISJkT2ejh49SnR0dIr3I1euXAQHB+v9SAf/rG137NjB9evXU+S/dOnSFCpUSPlPY/+skZX7jHO3WlvvQca4W82eGfLvmiGvIpJGbDYbgwYNok6dOpQvX97scDK9PXv2UKtWLRISEsiRIwfz58+nbNmyZoeV6c2cOZOdO3eybds2s0NxKsHBwUyfPp1SpUpx+vRpRowYQb169di7dy85c+Y0O7xM7ciRI4wfP56wsDDefvtttm3bxquvvoq7uzs9e/Y0OzynsGDBAi5dukSvXr3MDkUk01M99XBUT6WO6qnUUT2VeqqnHp3qKed27tw5kpOT8ff3T7Hf39+fAwcOmBTV4ys6Ohrgju/Hjeckbdypto2Ojsbd3Z3cuXOnOFb5Tzt3q5EjIyOV+wxwr1pbP//p7141e2bIv5p+4lT69evH3r17ta7FAypVqhSRkZHExsYyd+5cevbsSXh4uD6ouocTJ04wcOBAVqxYQbZs2cwOx6m0aNHC8eeKFSsSHBxM4cKFmT17Nn369DExsszPZrNRvXp1PvroIwCqVKnC3r17mTBhgj6kekBTpkyhRYsWBAUFmR2KSKaneurhqJ56eKqnUk/1VOqpnnp0qqdExBmptjXH3WpkSX+qtc13r5rd09PTxMgMmt5TnEb//v1ZtGgRa9asoUCBAmaH4xTc3d0pXrw41apVY9SoUVSqVIkvvvjC7LAytR07dnDmzBmqVq2Kq6srrq6uhIeH8+WXX+Lq6kpycrLZITqN3LlzU7JkSQ4dOmR2KJleYGDgbR8elylTRtN5PaA///yTlStX8sILL5gdikimp3rq4ameeniqp9KO6qkHp3rq0aiecn558uTBxcWFmJiYFPtjYmIICAgwKarH142c6/1IX3erbQMCAkhMTOTSpUspjlf+087damTlPv3dr9b29/fXe5DBbq3ZM8PvgJp+kunZ7Xb69+/P/PnzWb16NUWLFjU7JKdls9m4du2a2WFkak2aNGHPnj1ERkY6turVq9O1a1ciIyNxcXExO0SnER8fz+HDhwkMDDQ7lEyvTp06REVFpdj3xx9/ULhwYZMici7Tpk0jX758PPXUU2aHIpJpqZ5KO6qn7k/1VNpRPfXgVE89GtVTzs/d3Z1q1aqxatUqxz6bzcaqVau0Fq0JihYtSkBAQIr34/Lly2zZskXvRxq4X21brVo13NzcUuQ/KiqK48ePK//p5EaNrNynv/vV2tWrV9d7kMFurdkzw++ApvfMQPHx8Sm+oXn06FEiIyPx9fWlUKFCJkaWufXr14+ffvqJX3/9lZw5czrmvs2VK1emGC6bWQ0ZMoQWLVpQqFAh4uLi+Omnn1i7di3Lli0zO7RMLWfOnLetb+Tl5YWfn5/WPbqPN954g1atWlG4cGFOnTrFsGHDcHFxoUuXLmaHlum99tpr1K5dm48++oiOHTuydetWJk6cyMSJE80OLdOz2WxMmzaNnj174uqqsuZxoHoqdVRPpY7qqdRRPZV6qqdST/VU6qmeyjrCwsLo2bMn1atXp2bNmnz++edcuXKF3r17mx1alnS/unTQoEF88MEHlChRgqJFizJ06FCCgoJo06aNeUFnEferbXPlykWfPn0ICwvD19cXb29vBgwYQK1atXjyySdNjt753atGVu7T34PU2noP0te9avZM8TtglwyzZs0aO3Db1rNnT7NDy9TulDPAPm3aNLNDy9Sef/55e+HChe3u7u72vHnz2ps0aWJfvny52WE5pQYNGtgHDhxodhiZXqdOneyBgYF2d3d3e/78+e2dOnWyHzp0yOywnMZvv/1mL1++vN3Dw8NeunRp+8SJE80OySksW7bMDtijoqLMDkUyiOqp1FE9lTqqp9KO6qkHo3rq0aieSh3VU1nLV199ZS9UqJDd3d3dXrNmTfvmzZvNDinLul9darPZ7EOHDrX7+/vbPTw87E2aNNHvWRp5kNr277//tv/rX/+y+/j42LNnz25/9tln7adPnzYv6CzkfjWycp/x/llr6z1IX/er2c3Ov8Vut9vTua8oIiIiIiIiIiIiIiIiIulIa/qJiIiIiIiIiIiIiIiIODk1/UREREREREREREREREScnJp+IiIiIiIiIiIiIiIiIk5OTT8RERERERERERERERERJ6emn4iIiIiIiIiIiIiIiIiTU9NPRERERERERERERERExMmp6SciIiIiIiIiIiIiIiLi5NT0ExEREREREREREREREXFyavqJiKQxi8XCggULzA5DRERExGmpnhIRERF5NKqnRB5PavqJSJbSq1cvLBbLbVvz5s3NDk1ERETEKaieEhEREXk0qqdExCyuZgcgIpLWmjdvzrRp01Ls8/DwMCkaEREREeejekpERETk0aieEhEzaKSfiGQ5Hh4eBAQEpNh8fHwAY2qD8ePH06JFCzw9PXniiSeYO3duivP37NlD48aN8fT0xM/Pj759+xIfH5/imKlTp1KuXDk8PDwIDAykf//+KZ4/d+4czz77LNmzZ6dEiRIsXLgwfW9aREREJA2pnhIRERF5NKqnRMQMavqJyGNn6NChtGvXjl27dtG1a1c6d+7M/v37Abhy5QqhoaH4+Piwbds25syZw8qVK1MUTePHj6dfv3707duXPXv2sHDhQooXL57iNUaMGEHHjh3ZvXs3LVu2pGvXrly4cCFD71NEREQkvaieEhEREXk0qqdEJF3YRUSykJ49e9pdXFzsXl5eKbYPP/zQbrfb7YD95ZdfTnFOcHCw/ZVXXrHb7Xb7xIkT7T4+Pvb4+HjH84sXL7ZbrVZ7dHS03W6324OCguzvvPPOXWMA7O+++67jcXx8vB2wL1myJM3uU0RERCS9qJ4SEREReTSqp0TELFrTT0SynEaNGjF+/PgU+3x9fR1/rlWrVornatWqRWRkJAD79++nUqVKeHl5OZ6vU6cONpuNqKgoLBYLp06dokmTJveMoWLFio4/e3l54e3tzZkzZ1J7SyIiIiIZSvWUiIiIyKNRPSUiZlDTT0SyHC8vr9umM0grnp6eD3Scm5tbiscWiwWbzZYeIYmIiIikOdVTIiIiIo9G9ZSImEFr+onIY2fz5s23PS5TpgwAZcqUYdeuXVy5csXx/MaNG7FarZQqVYqcOXNSpEgRVq1alaExi4iIiGQmqqdEREREHo3qKRFJDxrpJyJZzrVr14iOjk6xz9XVlTx58gAwZ84cqlevTt26dfnxxx/ZunUrU6ZMAaBr164MGzaMnj17Mnz4cM6ePcuAAQPo3r07/v7+AAwfPpyXX36ZfPny0aJFC+Li4ti4cSMDBgzI2BsVERERSSeqp0REREQejeopETGDmn4ikuUsXbqUwMDAFPtKlSrFgQMHABgxYgQzZ87kX//6F4GBgfz888+ULVsWgOzZs7Ns2TIGDhxIjRo1yJ49O+3atWPs2LGOa/Xs2ZOEhAQ+++wz3njjDfLkyUP79u0z7gZFRERE0pnqKREREZFHo3pKRMxgsdvtdrODEBHJKBaLhfnz59OmTRuzQxERERFxSqqnRERERB6N6ikRSS9a009ERERERERERERERETEyanpJyIiIiIiIiIiIiIiIuLkNL2niIiIiIiIiIiIiIiIiJPTSD8RERERERERERERERERJ6emn4iIiIiIiIiIiIiIiIiTU9NPRERERERERERERERExMmp6SciIiIiIiIiIiIiIiLi5NT0ExEREREREREREREREXFyavqJiIiIiIiIiIiIiIiIODk1/UREREREREREREREREScnJp+IiIiIiIiIiIiIiIiIk5OTT8RERERERERERERERERJ/d/DYY4zEa6G/8AAAAASUVORK5CYII=\n"},"metadata":{}},{"name":"stdout","text":"\n============================================================\n8-FRAME MODEL WITH PATIENT SEPARATION SUMMARY\n============================================================\nBest Epoch: 4\nBest Score: 0.860278\nAneurysm AUC: 0.964908\nAvg Individual AUC: 0.755648\nModel Size: 283.3 MB\n- CLAHE contrast adaptation: True\n- Strong augmentation: True\n","output_type":"stream"},{"execution_count":20,"output_type":"execute_result","data":{"text/plain":"1583"},"metadata":{}}],"execution_count":20},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}