Ambabidi's picture
download
raw
453 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "037feef3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload extension is already loaded. To reload it, use:\n",
" %reload_ext autoreload\n",
"/home/skibidi/PreThesis/[2]CLASSIFICATION\n"
]
}
],
"source": [
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"import json\n",
"import math\n",
"import os\n",
"import cmd\n",
"import random\n",
"import subprocess\n",
"import sys\n",
"import time\n",
"import warnings\n",
"import numpy as np\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"import torchvision.models as models\n",
"import albumentations as A\n",
"import cv2\n",
"import nibabel as nib\n",
"from collections import OrderedDict\n",
"from pathlib import Path\n",
"from torch.nn.utils import clip_grad_norm_\n",
"from torch.utils.data import DataLoader, Dataset\n",
"from scipy.stats import bootstrap\n",
"from sklearn.metrics import average_precision_score, roc_auc_score\n",
"from tqdm import tqdm\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"PROJECT_ROOT = Path.cwd()\n",
"if str(PROJECT_ROOT) not in sys.path:\n",
" sys.path.insert(0, str(PROJECT_ROOT))\n",
"print(PROJECT_ROOT)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7afd1109",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[cfg] TEACHER resenc | STUDENT resnet50 | USE_DISTILL False\n",
"[KD] grid 128 <- guru resenc 64 kanal | murid e0 64 kanal | bobot 1.00\n",
"[KD] grid 64 <- guru resenc 128 kanal | murid e1 256 kanal | bobot 1.00\n",
"[KD] grid 32 <- guru resenc 256 kanal | murid e2 512 kanal | bobot 1.00\n"
]
}
],
"source": [
"CONFIG = {\n",
" 'INIT_SEED': 42,\n",
" 'EPOCHS': 50,\n",
" 'BATCH_SIZE': 8,\n",
" 'WORKERS': 2,\n",
" 'WEIGHT_DECAY': 1e-5,\n",
" 'GRAD_CLIP': 5.0,\n",
" 'SMOOTHING': 0.1,\n",
" 'DROPOUT': 0.4,\n",
" 'SLICE_CONTEXT': 3,\n",
" 'PATIENCE': 15,\n",
" 'LR_ENCODER': 1e-5,\n",
" 'LR_CLS': 1e-4,\n",
" 'LR_KD': 1e-4,\n",
" 'MIN_LR': 1e-7,\n",
" 'EPS': 1e-6,\n",
" 'WARMUP_STEPS': 1500,\n",
" 'BOOTSTRAP_DRAWS': 15000,\n",
" # CLASSIFICATION\n",
" 'ALPHA_CLS': 1.0,\n",
" 'POS_WEIGHT': 1.3666,\n",
" 'STUDENT': 'resnet50', # 'resnet50' | 'efficientnetb3' | 'swinv2tiny'\n",
" # DISTILLATION\n",
" 'TEACHER': 'resenc', # 'resenc' | 'umamba' | 'transunet'\n",
" 'GAMMA_DISTILL': 5.0, \n",
" 'GRID_WEIGHTS': {128: 1.00, 64: 1, 32: 1.0, 16: 1.0},\n",
" 'DISTILL_GRIDS': (128, 64, 32),\n",
" 'USE_DISTILL': False,\n",
" 'GEM_P_INIT': 3.0,\n",
" 'GEM_P_MIN': 1.0,\n",
" 'GEM_P_MAX': 8.0,\n",
" 'KD_STANDARDIZE': True,\n",
" # AUGMENTATION,\n",
" 'AUG': {\n",
" 'hflip_p': 0.5,\n",
" 'affine_p': 0.7,\n",
" 'affine_scale': (0.8, 1.2),\n",
" 'affine_rotate': (-15, 15),\n",
" 'gamma_limit': (80, 120),\n",
" 'gamma_p': 0.3,\n",
" 'brightness_limit': 0.15,\n",
" 'contrast_limit': 0.15,\n",
" 'bc_p': 0.5,\n",
" 'noise_std': (0.01, 0.03),\n",
" 'noise_p': 0.2,\n",
" 'blur_limit': (3, 3),\n",
" 'blur_p': 0.15,\n",
" }\n",
"}\n",
"\n",
"IS_RESUME = False\n",
"if CONFIG['TEACHER'] not in ('resenc', 'umamba', 'transunet'):\n",
" raise ValueError('TEACHER UNKNOWN %r' % (CONFIG['TEACHER'],))\n",
"LOG_NAME = f\"train.log\"\n",
"IS_KAGGLE = Path(\"/kaggle/input\").is_dir()\n",
"IS_VAST = Path.cwd() == Path(\"/workspace\")\n",
"IS_LOCAL = Path.cwd().parent == Path('/home/skibidi/PreThesis')\n",
"DATASET = 'datasets/preprocessed_data_unzipped_he'\n",
"\n",
"if IS_KAGGLE:\n",
" INPUT_ROOT = '/kaggle/input'\n",
" WORKSPACE_ROOT = '/kaggle/working/'\n",
" WORKSPACE = os.path.join(WORKSPACE_ROOT, 'phase_2')\n",
" OUTPUT_DIR = os.path.join(WORKSPACE_ROOT, 'phase_2_out')\n",
" DATASET_DIR = os.path.join(INPUT_ROOT, DATASET)\n",
"elif not IS_KAGGLE and IS_VAST:\n",
" INPUT_ROOT = '/workspace'\n",
" WORKSPACE = os.path.join(INPUT_ROOT, 'phase_2')\n",
" OUTPUT_DIR = os.path.join(INPUT_ROOT, 'phase_2_out')\n",
" DATASET_DIR = os.path.join(INPUT_ROOT, DATASET)\n",
"else:\n",
" INPUT_ROOT = '/home/skibidi/PreThesis'\n",
" WORKSPACE = os.path.join(INPUT_ROOT, '[2]CLASSIFICATION')\n",
" OUTPUT_DIR = WORKSPACE\n",
" DATASET_DIR = os.path.join('..', DATASET)\n",
"os.makedirs(WORKSPACE, exist_ok=True)\n",
"os.makedirs(OUTPUT_DIR, exist_ok=True)\n",
"\n",
"if IS_KAGGLE or IS_VAST:\n",
" packages = ['scikit-learn', 'opencv-python', 'albumentations', 'matplotlib', 'nibabel', 'numpy', 'torch', 'pytorch-msssim', 'scikit-image', 'tqdm', 'torch-lr-finder', 'packaging', 'ninja']\n",
" if CONFIG['TEACHER'] == 'resenc':\n",
" packages.extend(['dynamic-network-architectures'])\n",
" if CONFIG['TEACHER'] == 'umamba':\n",
" packages.extend(['causal-conv1d --no-build-isolation', 'mamba-ssm --no-build-isolation'])\n",
" if CONFIG['TEACHER'] == 'transunet':\n",
" packages.extend(['ml-collections'])\n",
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", *packages])\n",
" if CONFIG['TEACHER'] == 'umamba':\n",
" env = os.environ.copy()\n",
" for package in (\"causal-conv1d\", \"mamba-ssm\"):\n",
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", package, \"--no-build-isolation\"], env=env)\n",
" cmd = subprocess.list2cmdline([\n",
" sys.executable,\n",
" \"-m\", \"pip\", \"install\",\n",
" ]) + ' \"transformers\" \"huggingface-hub<1.0\"'\n",
" subprocess.check_call(cmd, env=env, shell=True)\n",
"\n",
"if not os.path.isdir(os.path.join(WORKSPACE, 'TransUNet')):\n",
" subprocess.run(['git', 'clone', '--depth', '1', 'https://github.com/Beckschen/TransUNet.git', \n",
" os.path.join(WORKSPACE, 'TransUNet')], check=True)\n",
" \n",
"TEACHER_CHANNELS = {\n",
" 'resenc': {128: 64, 64: 128, 32: 256, 16: 512},\n",
" 'umamba': {128: 128, 64: 256, 32: 512, 16: 1024},\n",
" 'transunet': {128: 64, 64: 256, 32: 512, 16: 768},\n",
"}\n",
"STUDENT_CHANNELS = {\n",
" 'resnet50': {128: 64, 64: 256, 32: 512, 16: 1024},\n",
" 'efficientnetb3': {128: 40, 64: 32, 32: 48, 16: 136},\n",
" 'swinv2tiny': {128: 0, 64: 96, 32: 192, 16: 384},\n",
"}\n",
"STUDENT_SKIP_ORDER = {\n",
" 'resnet50': (128, 64, 32, 16),\n",
" 'efficientnetb3': (128, 64, 32, 16),\n",
" 'swinv2tiny': (64, 32, 16),\n",
"}\n",
"STUDENT_OUT_CHANNELS = {\n",
" 'resnet50': 2048,\n",
" 'efficientnetb3': 1536,\n",
" 'swinv2tiny': 768,\n",
"}\n",
"TEACHER_WEIGHTS = {\n",
" 'resenc': os.path.join(WORKSPACE, 'phase_1_resenc_m_encoder.pth'),\n",
" 'umamba': os.path.join(WORKSPACE, 'phase_1_umamba_encoder.pth'),\n",
" 'transunet': os.path.join(WORKSPACE, 'phase_1_transunet_encoder.pth')\n",
"}\n",
"STUDENT_WEIGHTS = {\n",
" 'resnet50': os.path.join(WORKSPACE, 'ResNet50.pt'),\n",
" 'efficientnetb3': 'default',\n",
" 'swinv2tiny': 'default'\n",
"}\n",
"\n",
"BEST_CHECKPOINT_NAME = ('p2_%s-%s%s_best.pth'\n",
" % (CONFIG['STUDENT'], CONFIG['TEACHER'],\n",
" '-kd' if CONFIG['USE_DISTILL'] else ''))\n",
"LAST_CHECKPOINT_NAME = ('p2_%s-%s%s_last.pth'\n",
" % (CONFIG['STUDENT'], CONFIG['TEACHER'],\n",
" '-kd' if CONFIG['USE_DISTILL'] else ''))\n",
"CI_KEYS = ('precision', 'recall', 'f1', 'roc_auc', 'pr_auc')\n",
"\n",
"_RADIMAGENET_PREFIX = [\n",
" ('backbone.0', 'conv1'),\n",
" ('backbone.1', 'bn1'),\n",
" ('backbone.4', 'layer1'),\n",
" ('backbone.5', 'layer2'),\n",
" ('backbone.6', 'layer3'),\n",
" ('backbone.7', 'layer4'),\n",
"]\n",
"\n",
"def grid_resolve(teacher, student, grids=(128, 64, 32, 16)):\n",
" tch, sch = TEACHER_CHANNELS[teacher], STUDENT_CHANNELS[student]\n",
" order = STUDENT_SKIP_ORDER[student]\n",
" levels, skipped = {}, []\n",
" for g in sorted(grids, reverse=True):\n",
" if sch.get(g, 0) == 0:\n",
" skipped.append((g, 'siswa %s tidak punya grid %d' % (student, g))); continue\n",
" if tch.get(g, 0) == 0:\n",
" skipped.append((g, 'guru %s tidak punya grid %d' % (teacher, g))); continue\n",
" levels[g] = {'student_index': order.index(g),\n",
" 'student_channels': int(sch[g]),\n",
" 'teacher_channels': int(tch[g])}\n",
" return levels, skipped\n",
"\n",
"DISTILL_LEVELS, SKIPPED_GRIDS = grid_resolve(CONFIG['TEACHER'], CONFIG['STUDENT'], CONFIG['DISTILL_GRIDS'])\n",
"ENABLED_GRIDS = tuple(sorted(DISTILL_LEVELS, reverse=True))\n",
"\n",
"DISTILL_GRID_WEIGHTS = {g: float(CONFIG['GRID_WEIGHTS'].get(g, 1.0))\n",
" for g in ENABLED_GRIDS}\n",
"\n",
"if CONFIG['USE_DISTILL'] and not DISTILL_LEVELS:\n",
" raise ValueError('tidak ada grid yang bisa didistilasi untuk %s / %s'\n",
" % (CONFIG['TEACHER'], CONFIG['STUDENT']))\n",
"if DISTILL_LEVELS and sum(DISTILL_GRID_WEIGHTS.values()) <= 0:\n",
" raise ValueError('DISTILL_GRID_WEIGHTS semua nol: %s' % (DISTILL_GRID_WEIGHTS,))\n",
"\n",
"print('[cfg] TEACHER %s | STUDENT %s | USE_DISTILL %s'\n",
" % (CONFIG['TEACHER'], CONFIG['STUDENT'], CONFIG['USE_DISTILL']))\n",
"for _g, _why in SKIPPED_GRIDS:\n",
" print('[KD] grid %d DILEWATI: %s' % (_g, _why))\n",
"for _g in ENABLED_GRIDS:\n",
" _spec = DISTILL_LEVELS[_g]\n",
" print('[KD] grid %3d <- guru %-9s %4d kanal | murid e%d %4d kanal | bobot %.2f'\n",
" % (_g, CONFIG['TEACHER'], _spec['teacher_channels'],\n",
" _spec['student_index'], _spec['student_channels'],\n",
" DISTILL_GRID_WEIGHTS[_g]))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "f6a2fc49",
"metadata": {},
"outputs": [],
"source": [
"def seed_everything(seed=CONFIG['INIT_SEED']):\n",
" os.environ['PYTHONHASHSEED'] = str(seed)\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.cuda.matmul.allow_tf32 = False\n",
" torch.backends.cudnn.allow_tf32 = False\n",
" torch.backends.cudnn.deterministic = True\n",
" torch.backends.cudnn.benchmark = False\n",
" \n",
"def seed_worker(worker_id):\n",
" worker_seed = torch.initial_seed() % 2**32\n",
" np.random.seed(worker_seed)\n",
" random.seed(worker_seed)\n",
" info = torch.utils.data.get_worker_info()\n",
" if info is not None and hasattr(info.dataset, \"reseed_augment\"):\n",
" info.dataset.reseed_augment(worker_seed)"
]
},
{
"cell_type": "markdown",
"id": "3614a96c",
"metadata": {},
"source": [
"# Student Encoders"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b4681535",
"metadata": {},
"outputs": [],
"source": [
"def _convert_to_1ch(conv):\n",
" new = nn.Conv2d(1, conv.out_channels, conv.kernel_size, conv.stride,\n",
" conv.padding, bias=conv.bias is not None)\n",
" with torch.no_grad():\n",
" new.weight.copy_(conv.weight.sum(dim=1, keepdim=True))\n",
" if conv.bias is not None:\n",
" new.bias.copy_(conv.bias)\n",
" return new\n",
"\n",
"def _convert_to_nch(conv, n):\n",
" if n == 1:\n",
" return _convert_to_1ch(conv)\n",
" single = _convert_to_1ch(conv)\n",
" new = nn.Conv2d(n, conv.out_channels, conv.kernel_size, conv.stride,\n",
" conv.padding, bias=conv.bias is not None)\n",
" with torch.no_grad():\n",
" new.weight.copy_(single.weight.repeat(1, n, 1, 1) / float(n))\n",
" if conv.bias is not None:\n",
" new.bias.copy_(single.bias)\n",
" return new\n",
"\n",
"def _load_radimagenet(trunk, checkpoint_path=STUDENT_WEIGHTS['resnet50']):\n",
" state = torch.load(checkpoint_path, map_location='cpu', weights_only=True)\n",
" if isinstance(state, dict) and 'state_dict' in state:\n",
" state = state['state_dict']\n",
"\n",
" renamed = {}\n",
" for key in state:\n",
" for src, dst in _RADIMAGENET_PREFIX:\n",
" if key == src or key.startswith(src + '.'):\n",
" renamed[dst + key[len(src):]] = key\n",
" break\n",
" else:\n",
" raise KeyError('RadImageNet key mismatch: %s' % key)\n",
"\n",
" target = trunk.state_dict()\n",
" missing = sorted(set(target) - set(renamed))\n",
" unexpected = sorted(set(renamed) - set(target))\n",
" if missing or unexpected:\n",
" raise RuntimeError(\n",
" 'missing %d %s | unexpected %d %s'\n",
" % (len(missing), missing[:3], len(unexpected), unexpected[:3]))\n",
"\n",
" trunk.load_state_dict({k: state[v] for k, v in renamed.items()}, strict=True)\n",
" print('[RadImageNet] %d/%d tensor loaded | strict=True | 0 missing / 0 unexpected'\n",
" % (len(renamed), len(target)))\n",
"\n",
"\n",
"class ResNet50Encoder(nn.Module):\n",
" def __init__(self, pretrained=True, in_channels=CONFIG['SLICE_CONTEXT']):\n",
" super().__init__()\n",
" trunk = models.resnet50(weights=models.ResNet50_Weights.DEFAULT)\n",
" trunk.fc = nn.Identity()\n",
" if pretrained:\n",
" _load_radimagenet(trunk)\n",
" if in_channels == 1:\n",
" trunk.conv1 = _convert_to_1ch(trunk.conv1)\n",
" elif in_channels > 1:\n",
" trunk.conv1 = _convert_to_nch(trunk.conv1, in_channels)\n",
" else:\n",
" raise ValueError('in_channels harus >= 1, bukan %r' % (in_channels,))\n",
"\n",
" self.pretrained = pretrained\n",
" self.in_channels = in_channels\n",
" self.conv1 = trunk.conv1\n",
" self.bn1 = trunk.bn1\n",
" self.relu = trunk.relu\n",
" self.maxpool = trunk.maxpool\n",
" self.layer1 = trunk.layer1\n",
" self.layer2 = trunk.layer2\n",
" self.layer3 = trunk.layer3\n",
" self.layer4 = trunk.layer4\n",
"\n",
" def forward(self, x):\n",
" x = self.conv1(x)\n",
" x = self.bn1(x)\n",
" x = self.relu(x)\n",
" e0 = x # 64 @ 128\n",
" x = self.maxpool(x)\n",
" e1 = self.layer1(x) # 256 @ 64\n",
" e2 = self.layer2(e1) # 512 @ 32\n",
" e3 = self.layer3(e2) # 1024 @ 16\n",
" e4 = self.layer4(e3) # 2048 @ 8\n",
" return e4, [e0, e1, e2, e3]\n",
"\n",
"\n",
"class EfficientNetB3Encoder(nn.Module):\n",
" def __init__(self, pretrained=True, in_channels=CONFIG['SLICE_CONTEXT']):\n",
" super().__init__()\n",
" weights = (models.EfficientNet_B3_Weights.IMAGENET1K_V1\n",
" if pretrained else None)\n",
" base = models.efficientnet_b3(weights=weights)\n",
" if in_channels == 1:\n",
" base.features[0][0] = _convert_to_1ch(base.features[0][0])\n",
" elif in_channels > 1:\n",
" base.features[0][0] = _convert_to_nch(base.features[0][0], in_channels)\n",
" else:\n",
" raise ValueError('in_channels harus >= 1, bukan %r' % (in_channels,))\n",
"\n",
" self.pretrained = pretrained\n",
" self.in_channels = in_channels\n",
" self.features = base.features\n",
"\n",
" def forward(self, x):\n",
" e0 = e1 = e2 = e3 = e4 = None\n",
" for index, layer in enumerate(self.features):\n",
" x = layer(x)\n",
" if index == 0:\n",
" e0 = x # 40 @ 128\n",
" elif index == 2:\n",
" e1 = x # 32 @ 64\n",
" elif index == 3:\n",
" e2 = x # 48 @ 32\n",
" elif index == 5:\n",
" e3 = x # 136 @ 16\n",
" elif index == 8:\n",
" e4 = x # 1536 @ 8\n",
" return e4, [e0, e1, e2, e3]\n",
"\n",
"\n",
"class SwinV2TinyEncoder(nn.Module):\n",
" def __init__(self, pretrained=True, in_channels=CONFIG['SLICE_CONTEXT']):\n",
" super().__init__()\n",
" weights = (models.Swin_V2_T_Weights.IMAGENET1K_V1\n",
" if pretrained else None)\n",
" base = models.swin_v2_t(weights=weights)\n",
" if in_channels == 1:\n",
" base.features[0][0] = _convert_to_1ch(base.features[0][0])\n",
" elif in_channels > 1:\n",
" base.features[0][0] = _convert_to_nch(base.features[0][0], in_channels)\n",
" else:\n",
" raise ValueError('in_channels harus >= 1, bukan %r' % (in_channels,))\n",
"\n",
" self.pretrained = pretrained\n",
" self.in_channels = in_channels\n",
" self.features = base.features\n",
" self.norm = base.norm\n",
"\n",
" def forward(self, x):\n",
" e0 = e1 = e2 = e4 = None\n",
" for index, layer in enumerate(self.features):\n",
" x = layer(x)\n",
" if index == 1:\n",
" e0 = x # 96 @ 64\n",
" elif index == 3:\n",
" e1 = x # 192 @ 32\n",
" elif index == 5:\n",
" e2 = x # 384 @ 16\n",
" elif index == 7:\n",
" e4 = self.norm(x) # 768 @ 8\n",
" to_nchw = lambda t: t.permute(0, 3, 1, 2).contiguous()\n",
" return to_nchw(e4), [to_nchw(e0), to_nchw(e1), to_nchw(e2)]\n",
"\n",
"\n",
"ENCODER_REGISTRY = {\n",
" 'resnet50': ResNet50Encoder,\n",
" 'efficientnetb3': EfficientNetB3Encoder,\n",
" 'swinv2tiny': SwinV2TinyEncoder,\n",
"}\n",
"\n",
"class EncoderModule(nn.Module):\n",
" def __init__(self, model=CONFIG['STUDENT'], pretrained=True, in_ch=CONFIG['SLICE_CONTEXT']):\n",
" super().__init__()\n",
" if model not in ENCODER_REGISTRY:\n",
" raise ValueError('UNSUPPORTED STUDENT %r | SUPPORTED: %s'\n",
" % (model, tuple(ENCODER_REGISTRY)))\n",
" self.model = model\n",
" self.skip_grids = tuple(STUDENT_SKIP_ORDER[model])\n",
" self.grid_channels = {grid: int(STUDENT_CHANNELS[model][grid])\n",
" for grid in self.skip_grids}\n",
" self.out_channels = int(STUDENT_OUT_CHANNELS[model])\n",
" self.in_channels = int(in_ch)\n",
" self.body = ENCODER_REGISTRY[model](pretrained=pretrained,\n",
" in_channels=self.in_channels)\n",
"\n",
" def forward(self, x, return_skips=True):\n",
" e4, skips = self.body(x)\n",
" if len(skips) != len(self.skip_grids):\n",
" raise RuntimeError('%s keluarkan %d skip, kontrak bilang %d'\n",
" % (self.model, len(skips), len(self.skip_grids)))\n",
" for grid, tensor in zip(self.skip_grids, skips):\n",
" want = self.grid_channels[grid]\n",
" if tuple(tensor.shape[1:]) != (want, grid, grid):\n",
" raise RuntimeError('%s grid %d: tabel %d@%dx%d, model keluarkan %s'\n",
" % (self.model, grid, want, grid, grid,\n",
" tuple(tensor.shape[1:])))\n",
" return (e4, skips) if return_skips else e4"
]
},
{
"cell_type": "markdown",
"id": "b3cffe99",
"metadata": {},
"source": [
"# Teacher Encoders"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3e452588",
"metadata": {},
"outputs": [],
"source": [
"class TeacherMambaLayer(nn.Module):\n",
" def __init__(self, dim, d_state=16, d_conv=4, expand=2):\n",
" super().__init__()\n",
" from mamba_ssm import Mamba\n",
" self.dim = dim\n",
" self.norm = nn.LayerNorm(dim)\n",
" self.mamba = Mamba(d_model=dim, d_state=d_state, d_conv=d_conv, expand=expand)\n",
" \n",
" def forward(self, x):\n",
" batch, channels = x.shape[:2]\n",
" image_dims = x.shape[2:]\n",
" tokens = x.reshape(batch, channels, -1).transpose(-1, -2)\n",
" out = self.mamba(self.norm(tokens))\n",
" return out.transpose(-1, -2).reshape(batch, channels, *image_dims)\n",
" \n",
"class TeacherConvBlock(nn.Module):\n",
" def __init__(self, in_ch, out_ch, use_residual=False):\n",
" super().__init__()\n",
" self.conv = nn.Sequential(\n",
" nn.Conv2d(in_ch, out_ch, 3, padding=1, bias=False), nn.InstanceNorm2d(out_ch),\n",
" nn.LeakyReLU(0.01, inplace=True),\n",
" nn.Conv2d(out_ch, out_ch, 3, padding=1, bias=False), nn.InstanceNorm2d(out_ch),\n",
" nn.LeakyReLU(0.01, inplace=True),\n",
" )\n",
" self.use_residual = use_residual\n",
" self.residual = nn.Identity() if in_ch == out_ch else nn.Conv2d(in_ch, out_ch, 1)\n",
" \n",
" def forward(self, x):\n",
" if self.use_residual:\n",
" return self.conv(x) + self.residual(x)\n",
" return self.conv(x)\n",
" \n",
"class ResEncMTeacherEncoder(nn.Module):\n",
" def __init__(self, in_ch=1, features_per_stage=(32, 64, 128, 256, 512, 512, 512),\n",
" n_blocks=(1, 3, 4, 6, 6, 6, 6), strides=(1, 2, 2, 2, 2, 2, 2)):\n",
" super().__init__()\n",
" from dynamic_network_architectures.building_blocks.residual_encoders import ResidualEncoder\n",
" self.channels = list(features_per_stage)\n",
" self.encoder = ResidualEncoder(\n",
" input_channels=in_ch,\n",
" n_stages=len(features_per_stage),\n",
" features_per_stage=list(features_per_stage),\n",
" conv_op=nn.Conv2d,\n",
" kernel_sizes=3,\n",
" strides=list(strides),\n",
" n_blocks_per_stage=list(n_blocks),\n",
" conv_bias=True,\n",
" norm_op=nn.InstanceNorm2d,\n",
" norm_op_kwargs={'eps': 1e-5, 'affine': True},\n",
" nonlin=nn.LeakyReLU,\n",
" nonlin_kwargs={'inplace': True},\n",
" return_skips=True,\n",
" )\n",
" \n",
" def forward(self, x, return_skips=True):\n",
" skips = self.encoder(x)\n",
" return (skips[-1], skips) if return_skips else skips[-1]\n",
" \n",
"\n",
"class UMambaTeacherEncoder(nn.Module):\n",
" def __init__(self, in_ch=1, channels=(64, 128, 256, 512, 1024), d_state=16, d_conv=4, expand=2):\n",
" super().__init__()\n",
" self.channels = channels\n",
" self.stages = nn.ModuleList()\n",
" self.mamba_layers = nn.ModuleList()\n",
" self.downsamples = nn.ModuleList()\n",
" in_channels = in_ch\n",
" for i, out_ch in enumerate(self.channels):\n",
" self.stages.append(TeacherConvBlock(in_channels, out_ch))\n",
" self.mamba_layers.append(TeacherMambaLayer(out_ch, d_state, d_conv, expand))\n",
" if i < len(channels) - 1:\n",
" self.downsamples.append(nn.Conv2d(out_ch, out_ch, kernel_size=2, stride=2))\n",
" else:\n",
" self.downsamples.append(nn.Identity())\n",
" in_channels = out_ch\n",
" \n",
" def forward(self, x, return_skips=True):\n",
" skips = []\n",
" for stage, mamba, down in zip(self.stages, self.mamba_layers, self.downsamples):\n",
" x = stage(x)\n",
" x = mamba(x)\n",
" skips.append(x)\n",
" x = down(x)\n",
" return (x, skips) if return_skips else x\n",
" \n",
"class TransUNetTeacherEncoder(nn.Module):\n",
" def __init__(self, in_ch, img_size=256):\n",
" super().__init__()\n",
" if IS_KAGGLE:\n",
" from phase_2.TransUNet.networks.vit_seg_configs import get_r50_b16_config\n",
" from phase_2.TransUNet.networks.vit_seg_modeling import VisionTransformer\n",
" else: \n",
" from TransUNet.networks.vit_seg_configs import get_r50_b16_config\n",
" from TransUNet.networks.vit_seg_modeling import VisionTransformer\n",
" self.vit = VisionTransformer(get_r50_b16_config(), img_size=img_size, num_classes=2)\n",
" self.in_ch = int(in_ch)\n",
" self.side = img_size // 16\n",
" self.channels = (64, 256, 512, 768)\n",
" \n",
" def forward(self, x, return_skips=True):\n",
" if x.size(1) == 1:\n",
" x = x.repeat(1, 3, 1, 1)\n",
" emb, feats = self.vit.transformer.embeddings(x)\n",
" enc, _ = self.vit.transformer.encoder(emb)\n",
" b, n, c = enc.shape\n",
" assert n == self.side * self.side, 'token %d != %d^2' % (n, self.side)\n",
" vit_grid = enc.transpose(1, 2).reshape(b, c, self.side, self.side).contiguous()\n",
" skips = sorted(feats, key=lambda t: -t.shape[-1]) + [vit_grid]\n",
" return (vit_grid, skips) if return_skips else vit_grid\n",
"\n",
"\n",
"TEACHER_REGISTRY = {\n",
" 'resenc': ResEncMTeacherEncoder,\n",
" 'umamba': UMambaTeacherEncoder,\n",
" 'transunet': TransUNetTeacherEncoder,\n",
"}\n",
"\n",
"class TeacherModule(nn.Module):\n",
" def __init__(self, model=CONFIG['TEACHER'], in_ch=1, verify=True):\n",
" super().__init__()\n",
" if model not in TEACHER_REGISTRY:\n",
" raise ValueError('TEACHER UNKNOWN %r | pilihan: %s'\n",
" % (model, tuple(TEACHER_REGISTRY)))\n",
" if model not in TEACHER_CHANNELS:\n",
" raise ValueError('TEACHER_CHANNELS tidak punya %r' % (model,))\n",
" path = TEACHER_WEIGHTS[model]\n",
" if not os.path.exists(path):\n",
" raise FileNotFoundError('bobot guru tidak ada: %s' % path)\n",
"\n",
" self.model = model\n",
" self.in_ch = int(in_ch)\n",
" self.weights_path = path\n",
" self.skip_grids = tuple(sorted(TEACHER_CHANNELS[model], reverse=True))\n",
" self.grid_channels = {g: int(TEACHER_CHANNELS[model][g]) for g in self.skip_grids}\n",
"\n",
" self.encoder = TEACHER_REGISTRY[model](in_ch=self.in_ch)\n",
" self._load_weights(path)\n",
" self._freeze()\n",
" self.train(False)\n",
" if verify:\n",
" print('[teacher] %-9s kanal %-26s bobot %s'\n",
" % (model, dict(sorted(self.grid_channels.items(), reverse=True)),\n",
" os.path.basename(path)))\n",
"\n",
" def _load_weights(self, path):\n",
" ck = torch.load(path, map_location='cpu', weights_only=False)\n",
" if not isinstance(ck, dict) or 'encoder_state_dict' not in ck:\n",
" raise KeyError('%s tidak punya kunci encoder_state_dict'\n",
" % os.path.basename(path))\n",
" sd = ck['encoder_state_dict']\n",
" if all(k.startswith('module.') for k in sd):\n",
" sd = {k[len('module.'):]: v for k, v in sd.items()}\n",
"\n",
" target = self.encoder.state_dict()\n",
" missing = sorted(set(target) - set(sd))\n",
" unexpected = sorted(set(sd) - set(target))\n",
" if missing or unexpected:\n",
" raise RuntimeError(\n",
" '[teacher] %s: missing %d %s | unexpected %d %s'\n",
" % (self.model, len(missing), missing[:3],\n",
" len(unexpected), unexpected[:3]))\n",
"\n",
" self.encoder.load_state_dict(sd, strict=True)\n",
" self.epoch = int(ck.get('epoch', -1))\n",
" self.best_epoch = int(ck.get('best_epoch', -1))\n",
" self.best_val_loss = float(ck.get('best_val_loss', float('nan')))\n",
"\n",
" def _freeze(self):\n",
" self.encoder.eval()\n",
" for param in self.encoder.parameters():\n",
" param.requires_grad_(False)\n",
"\n",
" @torch.no_grad()\n",
" def forward(self, x, return_skips=True):\n",
" deep, skips = self.encoder(x, return_skips=True)\n",
" by_grid = {int(t.shape[-1]): t for t in skips}\n",
" missing = [g for g in self.skip_grids if g not in by_grid]\n",
" if missing:\n",
" raise RuntimeError('%s tidak punya grid %s; tersedia %s'\n",
" % (self.model, missing, sorted(by_grid, reverse=True)))\n",
" picked = [by_grid[g] for g in self.skip_grids]\n",
" for grid, tensor in zip(self.skip_grids, picked):\n",
" want = self.grid_channels[grid]\n",
" got = (int(tensor.shape[1]), int(tensor.shape[-1]))\n",
" if got != (want, grid):\n",
" raise RuntimeError('%s grid %d: tabel %d@%dx%d, model %d@%dx%d'\n",
" % (self.model, grid, want, grid, grid,\n",
" got[0], got[1], got[1]))\n",
" self.dropped_grids = tuple(sorted(set(by_grid) - set(self.skip_grids),\n",
" reverse=True))\n",
" return (deep, picked) if return_skips else deep\n",
"\n",
" def train(self, mode=True):\n",
" # mode=True intentional\n",
" return super().train(False)"
]
},
{
"cell_type": "markdown",
"id": "c1522886",
"metadata": {},
"source": [
"# Classification Model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4168e137",
"metadata": {},
"outputs": [],
"source": [
"class GeM(nn.Module):\n",
" \"\"\"Generalized Mean pooling: f = (mean x**p) ** (1/p).\n",
"\n",
" `mode` menentukan jalur, bukan p:\n",
"\n",
" mode='cls' : tanpa mask, p DILATIH. Dipakai kepala klasifikasi pada e4\n",
" (post-ReLU, 0% negatif), jadi clamp(min=eps) tidak\n",
" menyentuh apa pun dan p bebas bergerak 1..8.\n",
" mode='kd' : berbobot brain mask, p DIBEKUKAN di 1. Setara rata-rata\n",
" biasa. Lihat justifikasi di bawah.\n",
"\n",
" p=1 identik rata-rata (max|selisih| 5.662e-07). `clamp(p)` wajib: di p<1\n",
" gradien p membesar ~78x nilai output (terukur 14.87 vs 0.19), jadi p\n",
" dipercepat ke 0 dan p=0 berarti pembagian nol; tanpa batas atas, x**p\n",
" melewati batas fp16 di p=16 (2.1e+06 vs 65504).\n",
"\n",
" JUSTIFIKASI p=1 UNTUK KD (mode='kd'), diukur pada 278 irisan test:\n",
"\n",
" 1. AUC per kanal pooled turun monoton terhadap p:\n",
" p=1 (mean) g32 0.8460 / g16 0.8464\n",
" p=3 g32 0.7738 / g16 0.7970\n",
" p=8 g32 0.6702 / g16 0.7058\n",
" Jadi p>1 bukan sekadar \"bisa dipakai\", ia kalah 7-18 poin AUC.\n",
"\n",
" 2. Penyebabnya bukan tanda negatif. `signed_gem` dan `gem_odd` -- keduanya\n",
" mempertahankan tanda, ganjil, p=1 -> mean -- memberi angka identik dengan\n",
" p=3 biasa (0.7738). Yang merusak adalah pemusatan: corr(max|x|) naik\n",
" 0.6176 (p=1) -> 0.8225 (p=8), sedangkan sel terkuat bukan selalu lesi\n",
" (bisa vaskular/tepi tulang).\n",
"\n",
" 3. Untuk arm non-resnet, clamp(min=eps) juga membuang energi:\n",
" resenc energi negatif 0.000000 (sisa LeakyReLU 0.01)\n",
" efficientnetb3 0.387-0.412\n",
" swinv2tiny 0.500-0.536\n",
" umamba 0.488-0.549\n",
" transunet g16 0.729\n",
" Cls head tidak kena ini karena e4 0% negatif; skip KD tidak.\n",
"\n",
" Kesimpulan: di KD, p=1 dipilih karena pengukuran, bukan karena keterbatasan.\n",
" Keluarga fungsinya tetap GeM -- p=1 adalah titik di ujung bawahnya.\n",
" \"\"\"\n",
"\n",
" def __init__(self, mode='cls', p=3.0, eps=1e-6, p_min=1.0, p_max=8.0):\n",
" super().__init__()\n",
" if mode not in ('cls', 'kd'):\n",
" raise ValueError('mofde harus cls|kd, bukan %r' % (mode,))\n",
" self.mode = mode\n",
" self.eps = float(eps)\n",
" self.p_min, self.p_max = float(p_min), float(p_max)\n",
" if mode == 'cls':\n",
" self.p = nn.Parameter(torch.tensor(float(p), dtype=torch.float32))\n",
" else:\n",
" self.register_buffer('p', torch.tensor(1.0))\n",
"\n",
" def forward(self, x, mask=None):\n",
" if self.mode == 'cls':\n",
" exponent = self.p.clamp(self.p_min, self.p_max)\n",
" pooled = F.adaptive_avg_pool2d(x.clamp(min=self.eps).pow(exponent), 1)\n",
" return pooled.pow(1.0 / exponent).flatten(1)\n",
"\n",
" w = F.adaptive_avg_pool2d(mask.float(), x.shape[-2:]).clamp(min=self.eps)\n",
" return (w * x).sum((2, 3)) / w.sum((2, 3))\n",
"\n",
" def extra_repr(self):\n",
" if self.mode == 'cls':\n",
" return 'cls, p=%.4f (learned, clamp %.2f..%.2f)' % (\n",
" float(self.p.detach()), self.p_min, self.p_max)\n",
" return 'kd, p=1 fixed (masked mean)'\n",
"\n",
"\n",
"class ClassificationHead(nn.Module):\n",
" def __init__(self, in_ch, dropout=0.40):\n",
" super().__init__()\n",
" self.gem = GeM(mode='cls', p=CONFIG['GEM_P_INIT'], eps=CONFIG['EPS'],\n",
" p_min=CONFIG['GEM_P_MIN'], p_max=CONFIG['GEM_P_MAX'])\n",
" self.hidden = in_ch // 4\n",
" self.fc = nn.Sequential(\n",
" nn.Linear(in_ch, self.hidden),\n",
" nn.GELU(),\n",
" nn.Dropout(dropout),\n",
" nn.Linear(self.hidden, 1),\n",
" )\n",
"\n",
" def forward(self, x):\n",
" return self.fc(self.gem(x)).squeeze(-1)\n",
"\n",
"\n",
"class ClassificationModel(nn.Module):\n",
" def __init__(self, pretrained=True, in_ch=CONFIG['SLICE_CONTEXT'], dropout=CONFIG['DROPOUT'], encoder=CONFIG['STUDENT']):\n",
" super().__init__()\n",
" self.encoder = EncoderModule(encoder, pretrained, in_ch)\n",
" self.head = ClassificationHead(self.encoder.out_channels, dropout=dropout)\n",
"\n",
" def forward(self, x, return_skips=False):\n",
" c4, skips = self.encoder(x, return_skips=True)\n",
" cls_logits = self.head(c4)\n",
" if return_skips:\n",
" return cls_logits, skips\n",
" return cls_logits\n"
]
},
{
"cell_type": "markdown",
"id": "8d32e033",
"metadata": {},
"source": [
"# Distillation"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "2de29bfd",
"metadata": {},
"outputs": [],
"source": [
"def as_mask_4d(mask):\n",
" if mask.dim() == 3:\n",
" mask = mask.unsqueeze(1)\n",
" return mask.float()\n",
"\n",
"\n",
"def as_slice_4d(x):\n",
" return (x.unsqueeze(1) if x.dim() == 3 else x).float()\n",
"\n",
"\n",
"def valid_batch(mask, min_cells=32):\n",
" return as_mask_4d(mask).flatten(1).sum(1) >= float(min_cells)\n",
"\n",
"\n",
"class GlobalKDHead(nn.Module):\n",
" def __init__(self, student_channels, teacher_channels, grid):\n",
" super().__init__()\n",
" self.grid = int(grid)\n",
" self.pool = GeM(mode='kd', eps=CONFIG['EPS'])\n",
" self.proj = nn.Linear(student_channels, teacher_channels, bias=False)\n",
"\n",
" def forward(self, f_student, mask):\n",
" return self.proj(self.pool(f_student, mask))\n",
"\n",
" @torch.no_grad()\n",
" def pool_target(self, f_teacher, mask):\n",
" return self.pool(f_teacher.detach(), mask)\n",
"\n",
"\n",
"class KDModule(nn.Module):\n",
" def __init__(self, levels, teacher_arm):\n",
" super().__init__()\n",
" self.levels = {int(g): dict(v) for g, v in levels.items()}\n",
" self.grids = tuple(sorted(self.levels, reverse=True))\n",
" self.enabled = bool(self.grids) and bool(CONFIG['USE_DISTILL'])\n",
" self.stats = {}\n",
" self.valid = None\n",
"\n",
" if not self.enabled:\n",
" self.teacher = None\n",
" self.heads = nn.ModuleDict()\n",
" print('[KD] nonaktif (USE_DISTILL=%s, grid=%s)'\n",
" % (CONFIG['USE_DISTILL'], self.grids))\n",
" return\n",
" self.teacher = TeacherModule(teacher_arm, 1)\n",
" for param in self.teacher.parameters():\n",
" param.requires_grad_(False)\n",
"\n",
" self.heads = nn.ModuleDict({\n",
" str(g): GlobalKDHead(self.levels[g]['student_channels'],\n",
" self.levels[g]['teacher_channels'], g)\n",
" for g in self.grids})\n",
" print('[KD] pool gem-p1 | grid %-18s | adaptor %s param | guru %s'\n",
" % (self.grids,\n",
" '{:,}'.format(sum(p.numel() for p in self.heads.parameters())),\n",
" self.teacher.model))\n",
"\n",
" @torch.no_grad()\n",
" def build_stats(self, loader, max_batches=50):\n",
" if not self.enabled:\n",
" return {}\n",
" device = next(self.teacher.parameters()).device\n",
" sums = {g: 0.0 for g in self.grids}\n",
" sumsq = {g: 0.0 for g in self.grids}\n",
" count = {g: 0 for g in self.grids}\n",
"\n",
" for bi, batch in enumerate(loader):\n",
" if bi >= max_batches:\n",
" break\n",
" mask = as_mask_4d(batch[5].to(device))\n",
" dwi = as_slice_4d(batch[1].to(device))\n",
" _, skips = self.teacher(dwi)\n",
" by_grid = {int(t.shape[-1]): t for t in skips}\n",
" for g in self.grids:\n",
" v = self.heads[str(g)].pool_target(by_grid[g], mask)\n",
" sums[g] = sums[g] + v.sum(0).double()\n",
" sumsq[g] = sumsq[g] + v.pow(2).sum(0).double()\n",
" count[g] = count[g] + v.shape[0]\n",
" del skips, by_grid\n",
"\n",
" for g in self.grids:\n",
" n = max(count[g], 1)\n",
" mean = sums[g] / n\n",
" std = (sumsq[g] / n - mean.pow(2)).clamp(min=1e-12).sqrt()\n",
" self.stats[g] = (mean.float(), std.float())\n",
" dead = int((std < 1e-3).sum())\n",
" if dead:\n",
" print('[KD] PERINGATAN grid %d: %d kanal std ~0, targetnya jadi nol'\n",
" % (g, dead))\n",
" return self.stats\n",
"\n",
" def standardize(self, grid, v):\n",
" if grid not in self.stats:\n",
" return v\n",
" mean, std = self.stats[grid]\n",
" return (v - mean.to(v.device)) / std.to(v.device).clamp(min=1e-6)\n",
"\n",
" @torch.no_grad()\n",
" def activation_negative(self, loader, max_batches=5):\n",
" \"\"\"DIAGNOSTIK: pangsa |x|^p yang berada di nilai negatif, per grid.\n",
"\n",
" GeM membuang nilai negatif (clamp min=eps, eps**3 = 1e-18). Terukur:\n",
" resenc 0.000000 (sisa LeakyReLU 0.01), efficientnetb3 0.387-0.412,\n",
" swinv2tiny 0.500-0.536, umamba 0.488-0.549, transunet g16 0.729.\n",
" Dipakai hanya kalau ada yang mencoba mengubah p dari 1.\n",
" \"\"\"\n",
" if not self.enabled:\n",
" return {}\n",
" device = next(self.teacher.parameters()).device\n",
" neg, tot = {}, {}\n",
" for bi, batch in enumerate(loader):\n",
" if bi >= max_batches:\n",
" break\n",
" _, skips = self.teacher(as_slice_4d(batch[1].to(device)))\n",
" for t in skips:\n",
" g = int(t.shape[-1])\n",
" if g not in self.grids:\n",
" continue\n",
" a = t.float().abs().pow(3.0)\n",
" neg[g] = neg.get(g, 0.0) + float(a.masked_fill(t >= 0, 0).sum())\n",
" tot[g] = tot.get(g, 0.0) + float(a.sum())\n",
" return {g: neg[g] / max(tot[g], 1e-12) for g in neg}\n",
"\n",
" @torch.no_grad()\n",
" def teacher_norms(self, dwi, mask):\n",
" if not self.enabled:\n",
" return {}\n",
" mask = as_mask_4d(mask)\n",
" _, skips = self.teacher(dwi.float())\n",
" by_grid = {int(t.shape[-1]): t for t in skips}\n",
" return {g: float(self.heads[str(g)].pool_target(by_grid[g], mask)\n",
" .norm(dim=1).mean()) for g in self.grids}\n",
"\n",
" @torch.no_grad()\n",
" def teacher_targets(self, dwi, mask):\n",
" if not self.enabled:\n",
" return {}\n",
" mask = as_mask_4d(mask)\n",
" _, skips = self.teacher(as_slice_4d(dwi))\n",
" by_grid = {int(t.shape[-1]): t for t in skips}\n",
" out = {}\n",
" for g in self.grids:\n",
" if g not in by_grid:\n",
" raise RuntimeError('guru %s tidak punya grid %d'\n",
" % (self.teacher.model, g))\n",
" v = self.heads[str(g)].pool_target(by_grid[g], mask)\n",
" out[g] = (self.standardize(g, v)\n",
" if CONFIG['KD_STANDARDIZE'] else v).detach()\n",
" return out\n",
"\n",
" def student_vectors(self, student_skips, mask):\n",
" mask = as_mask_4d(mask)\n",
" by_grid = {int(t.shape[-1]): t for t in student_skips}\n",
" missing = [g for g in self.grids if g not in by_grid]\n",
" if missing:\n",
" raise RuntimeError('siswa tidak punya grid %s; tersedia %s'\n",
" % (missing, sorted(by_grid, reverse=True)))\n",
" return {g: self.heads[str(g)](by_grid[g], mask) for g in self.grids}\n",
"\n",
" def forward(self, student_skips, dwi, mask):\n",
" if not self.enabled:\n",
" self.valid = None\n",
" return {}, {}\n",
" self.valid = valid_batch(mask)\n",
" return (self.student_vectors(student_skips, mask),\n",
" self.teacher_targets(dwi, mask))\n"
]
},
{
"cell_type": "markdown",
"id": "cc49dc62",
"metadata": {},
"source": [
"# Loss"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f847b34c",
"metadata": {},
"outputs": [],
"source": [
"def classification_loss(cls_logits, cls_targets, pos_weight=1.0, smoothing=0.1):\n",
" targets = cls_targets.float()\n",
" targets = targets * (1.0 - smoothing) + 0.5 * smoothing\n",
" pos_weight = torch.as_tensor(\n",
" pos_weight,\n",
" device=cls_logits.device,\n",
" dtype=cls_logits.dtype,\n",
" )\n",
" return F.binary_cross_entropy_with_logits(cls_logits, targets, pos_weight=pos_weight)\n",
"\n",
"\n",
"def distillation_loss(student_vecs, teacher_vecs, weights, valid):\n",
" if not student_vecs:\n",
" return torch.zeros((), requires_grad=True), {}\n",
"\n",
" per_grid = {}\n",
" total, wsum = 0.0, 0.0\n",
" n_valid = valid.sum().clamp(min=1)\n",
" for grid, weight in weights.items():\n",
" cos = F.cosine_similarity(F.normalize(student_vecs[grid], dim=1),\n",
" F.normalize(teacher_vecs[grid], dim=1), dim=1)\n",
" per_grid[grid] = (1.0 - cos) * valid\n",
" total = total + weight * per_grid[grid].sum() / n_valid\n",
" wsum += weight\n",
" return total / max(wsum, CONFIG['EPS']), per_grid\n",
"\n",
"\n",
"def total_loss(cls_logits, cls_targets, student_vecs, teacher_vecs, weights, valid):\n",
" l_cls = classification_loss(cls_logits, cls_targets,\n",
" pos_weight=CONFIG['POS_WEIGHT'],\n",
" smoothing=CONFIG['SMOOTHING'])\n",
" l_kd, per_grid = distillation_loss(student_vecs, teacher_vecs, weights, valid)\n",
" parts = {\n",
" 'cls': float(CONFIG['ALPHA_CLS'] * l_cls),\n",
" 'kd': float(CONFIG['GAMMA_DISTILL'] * l_kd),\n",
" 'kd_raw': float(l_kd),\n",
" 'kd_grid': {g: float(v.mean()) for g, v in per_grid.items()},\n",
" }\n",
" total = CONFIG['ALPHA_CLS'] * l_cls + CONFIG['GAMMA_DISTILL'] * l_kd\n",
" return total, parts\n"
]
},
{
"cell_type": "markdown",
"id": "bfbe08cb",
"metadata": {},
"source": [
"# Dataset"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f9d657a8",
"metadata": {},
"outputs": [],
"source": [
"class StrokeDataset(Dataset):\n",
" def __init__(self, label_list, image_path_dict, phase=1, augment=False, jitter_prob=0.0, jitter_std=0.0,\n",
" slice_context=1, load_aux=None, cache_size=12):\n",
" if phase not in [1, 2, 3, 4]:\n",
" raise ValueError(\"Phase must be either 1 or 2 or 3.\")\n",
" if slice_context < 1 or slice_context % 2 == 0:\n",
" raise ValueError(f\"Slice Context must be odd and >= 1.\")\n",
" \n",
" self.labels = label_list\n",
" self.image_path = image_path_dict\n",
" self.phase = phase\n",
" self.augment = augment\n",
" self.slice_context = slice_context\n",
" self._cached_pid = None\n",
" self._cached_modalities = None\n",
" self._cached_imgs = None\n",
" self.load_aux = bool(CONFIG['USE_DISTILL']) if load_aux is None else bool(load_aux)\n",
" self.cache_size = int(cache_size)\n",
" self._cache = OrderedDict()\n",
" # ------------------------------------------\n",
" self.pid_to_idx = {}\n",
" for pid, _, _ in self.labels:\n",
" if pid not in self.pid_to_idx:\n",
" self.pid_to_idx[pid] = len(self.pid_to_idx)\n",
" self.jitter_prob = jitter_prob\n",
" self.jitter_std = jitter_std\n",
" self.phase2_transform = A.Compose([\n",
" A.RandomGamma(gamma_limit=(80, 120), p=0.3),\n",
" A.GaussNoise(std_range=(0.01, 0.05), p=0.2)\n",
" ])\n",
" self.phase3_transform = A.Compose([\n",
" A.HorizontalFlip(p=0.5),\n",
" A.Rotate(\n",
" limit=15, p=0.5,\n",
" border_mode=cv2.BORDER_CONSTANT,\n",
" fill=0,\n",
" fill_mask=0,\n",
" interpolation=cv2.INTER_LINEAR,\n",
" mask_interpolation=cv2.INTER_NEAREST\n",
" ),\n",
" A.RandomScale(\n",
" scale_limit=0.2, p=0.3,\n",
" interpolation=cv2.INTER_LINEAR,\n",
" mask_interpolation=cv2.INTER_NEAREST\n",
" ), \n",
" A.PadIfNeeded(\n",
" min_height=256, min_width=256,\n",
" border_mode=cv2.BORDER_CONSTANT,\n",
" fill=0,\n",
" fill_mask=0\n",
" ),\n",
" A.CenterCrop(256, 256),\n",
" A.RandomGamma(gamma_limit=(80, 120), p=0.3),\n",
" A.GaussNoise(std_range=(0.01, 0.05), p=0.2)\n",
" ])\n",
" # 2 + 3 di 1 pipeline\n",
" self.spatial_transform = A.Compose([\n",
" A.HorizontalFlip(p=0.5),\n",
" A.Affine(\n",
" scale=(0.8, 1.2),\n",
" rotate=(-15, 15),\n",
" interpolation=cv2.INTER_LINEAR,\n",
" mask_interpolation=cv2.INTER_NEAREST,\n",
" border_mode=cv2.BORDER_CONSTANT,\n",
" fill=0,\n",
" fill_mask=0,\n",
" p=0.7,\n",
" ),], additional_targets={\"dwi\": \"image\", \"brain\": \"image\"},\n",
" )\n",
" self.intensity_transform_ncct = A.Compose([\n",
" A.RandomGamma(\n",
" gamma_limit=(80, 120),\n",
" p=0.3,\n",
" ),\n",
" A.RandomBrightnessContrast(\n",
" brightness_limit=0.15,\n",
" contrast_limit=0.15,\n",
" p=0.5,\n",
" ),\n",
" A.GaussNoise(\n",
" std_range=(0.01, 0.03),\n",
" p=0.2,\n",
" ),\n",
" A.GaussianBlur(\n",
" blur_limit=(3, 3),\n",
" p=0.15,\n",
" ),\n",
" ])\n",
" \n",
" def __len__(self):\n",
" return len(self.labels)\n",
" \n",
" def _load_img(self, pid, modalities=['ncct', 'dwi', 'mask', 'brain']):\n",
" if self._cached_pid == pid and self._cached_modalities == modalities:\n",
" return self._cached_imgs\n",
" \n",
" paths = self.image_path[pid]\n",
" ct_img = nib.load(paths['ncct']) if 'ncct' in modalities else None\n",
" dwi_img = nib.load(paths['dwi']) if 'dwi' in modalities else None\n",
" mask_img = nib.load(paths['mask']) if 'mask' in modalities else None\n",
" brain_img = nib.load(paths['brain']) if 'brain' in modalities else None\n",
" \n",
" self._cached_pid = pid\n",
" self._cached_modalities = modalities\n",
" self._cached_imgs = (ct_img, dwi_img, mask_img, brain_img)\n",
" \n",
" return self._cached_imgs\n",
"\n",
" def _get_vols(self, pid):\n",
" \"\"\"Cache LRU per worker, file dibuka sekali (dipakai phase 4).\"\"\"\n",
" vols = self._cache.get(pid)\n",
" if vols is not None:\n",
" self._cache.move_to_end(pid)\n",
" return vols\n",
" mods = ('ncct', 'dwi', 'mask', 'brain') if self.load_aux else ('ncct',)\n",
" paths = self.image_path[pid]\n",
" vols = {m: nib.load(paths[m], keep_file_open=True) for m in mods}\n",
" self._cache[pid] = vols\n",
" while len(self._cache) > self.cache_size:\n",
" self._cache.popitem(last=False)\n",
" return vols\n",
" \n",
" @staticmethod\n",
" def _read_slice(img, z):\n",
" return np.asarray(img.dataobj[:, :, z], dtype=np.float32)\n",
" \n",
" def _load_phase_1(self, idx):\n",
" pid, z, _ = self.labels[idx]\n",
" _, dwi_img, _, _ = self._load_img(pid, ['dwi'])\n",
" dwi_slices = self._read_slice(dwi_img, z)\n",
" \n",
" if self.augment:\n",
" if np.random.random() > 0.5:\n",
" dwi_slices = np.flip(dwi_slices, axis=1).copy()\n",
" jitter = np.random.uniform(-0.05, 0.05)\n",
" dwi_slices = np.clip(dwi_slices + jitter, 0.0, 1.0)\n",
" \n",
" dwi_t = torch.from_numpy(dwi_slices.copy()).unsqueeze(0).float()\n",
" \n",
" return dwi_t, dwi_t\n",
" \n",
" def _load_phase_2(self, idx):\n",
" pid, z, label = self.labels[idx]\n",
" ct_img, dwi_img, _, _ = self._load_img(pid, ['ncct', 'dwi'])\n",
" ct_slices = self._read_slice(ct_img, z)\n",
" dwi_slices = self._read_slice(dwi_img, z)\n",
" \n",
" if self.augment and np.random.random() > 0.5:\n",
" ct_slices = np.flip(ct_slices, axis=1)\n",
" dwi_slices = np.flip(dwi_slices, axis=1)\n",
" if self.augment and np.random.random() < self.jitter_prob:\n",
" ct_slices = (\n",
" ct_slices + np.random.normal(\n",
" 0, self.jitter_std, ct_slices.shape\n",
" ).astype(np.float32)\n",
" )\n",
" ct_slices = np.clip(ct_slices, 0.0, 1.0)\n",
"\n",
" if self.augment:\n",
" ct_slices = self.phase2_transform(image=ct_slices)['image']\n",
" \n",
" ct_t = torch.from_numpy(ct_slices.copy()).unsqueeze(0).float()\n",
" dwi_t = torch.from_numpy(dwi_slices.copy()).unsqueeze(0).float()\n",
" label_t = torch.tensor(label, dtype=torch.float32)\n",
" \n",
" return ct_t, dwi_t, label_t\n",
"\n",
" def _load_phase_3(self, idx):\n",
" pid, z, _ = self.labels[idx]\n",
" ct_img, _, mask_img, _ = self._load_img(pid, ['ncct', 'mask'])\n",
" depth = ct_img.shape[2]\n",
" \n",
" if self.slice_context == 1:\n",
" ct_slices = self._read_slice(ct_img, z)\n",
" else:\n",
" half = (self.slice_context - 1) // 2\n",
" ct_slices = np.stack(\n",
" [self._read_slice(ct_img, min(max(z + d, 0), depth - 1))\n",
" for d in range(-half, half + 1)],\n",
" axis=-1,\n",
" )\n",
"\n",
" mask_slices = self._read_slice(mask_img, z)\n",
" aug = self.phase3_transform\n",
" \n",
" if self.augment:\n",
" augmented = aug(image=ct_slices, mask=mask_slices)\n",
" ct_slices = augmented['image']\n",
" mask_slices = augmented['mask']\n",
" \n",
" ct_t = torch.from_numpy(np.ascontiguousarray(ct_slices)).float()\n",
" mask_t = torch.from_numpy(np.ascontiguousarray(mask_slices)).float()\n",
" patient_idx = self.pid_to_idx[pid]\n",
" \n",
" if ct_t.ndim == 2:\n",
" ct_t = ct_t.unsqueeze(0)\n",
" else:\n",
" ct_t = ct_t.permute(2, 0, 1).contiguous()\n",
" if mask_t.ndim == 2:\n",
" mask_t = mask_t.unsqueeze(0)\n",
" \n",
" return ct_t, mask_t, patient_idx\n",
"\n",
" def _stack_neighbourhood(self, img, z):\n",
" if self.slice_context == 1:\n",
" return self._read_slice(img, z)\n",
" depth = img.shape[2]\n",
" half = (self.slice_context - 1) // 2\n",
" lo, hi = max(z - half, 0), min(z + half, depth - 1)\n",
" slab = np.asarray(img.dataobj[:, :, lo:hi + 1], dtype=np.float32)\n",
" idx = [min(max(z + d, 0), depth - 1) - lo for d in range(-half, half + 1)]\n",
" return slab[:, :, idx]\n",
"\n",
" def _load_phase_2_3(self, idx):\n",
" pid, z, label = self.labels[idx]\n",
" v = self._get_vols(pid)\n",
" ct_slices = self._stack_neighbourhood(v['ncct'], z)\n",
"\n",
" if self.load_aux:\n",
" dwi_slices = self._read_slice(v['dwi'], z)\n",
" mask_slices = self._read_slice(v['mask'], z)\n",
" brain_slices = self._read_slice(v['brain'], z)\n",
" if self.augment:\n",
" aug = self.spatial_transform(\n",
" image=ct_slices,\n",
" dwi=dwi_slices,\n",
" mask=mask_slices,\n",
" brain=brain_slices,\n",
" )\n",
" ct_slices = self.intensity_transform_ncct(image=aug['image'])['image']\n",
" dwi_slices = aug['dwi']\n",
" mask_slices = aug['mask']\n",
" brain_slices = aug['brain']\n",
" dwi_t = torch.from_numpy(np.ascontiguousarray(dwi_slices)).float()\n",
" mask_t = torch.from_numpy(np.ascontiguousarray(mask_slices)).float()\n",
" brain_t = torch.from_numpy(np.ascontiguousarray(brain_slices)).float()\n",
" else:\n",
" if self.augment:\n",
" aug = self.spatial_transform(image=ct_slices)\n",
" ct_slices = self.intensity_transform_ncct(image=aug['image'])['image']\n",
" dwi_t = mask_t = brain_t = torch.zeros(0)\n",
" \n",
" ct_t = torch.from_numpy(np.ascontiguousarray(ct_slices)).float()\n",
" if ct_t.ndim == 2:\n",
" ct_t = ct_t.unsqueeze(0)\n",
" else:\n",
" ct_t = ct_t.permute(2, 0, 1).contiguous()\n",
" label_t = torch.tensor(label, dtype=torch.float32)\n",
" patient_idx = self.pid_to_idx[pid]\n",
"\n",
" return ct_t, dwi_t, mask_t, label_t, patient_idx, brain_t\n",
" \n",
" def __getitem__(self, idx):\n",
" if self.phase == 1:\n",
" return self._load_phase_1(idx)\n",
" elif self.phase == 2:\n",
" return self._load_phase_2(idx)\n",
" elif self.phase == 3:\n",
" return self._load_phase_3(idx)\n",
" elif self.phase == 4:\n",
" return self._load_phase_2_3(idx)\n",
" \n",
" \n",
"def build_information(dataset_dir, split_name):\n",
" \"\"\"\n",
" Requires split.json file in dataset directory,\n",
" with labels.json file in each patient directory.\n",
" [dataset_dir]/\n",
" split.json\n",
" [split_name]/\n",
" [patient]/\n",
" labels.json\n",
" \"\"\"\n",
" label_list = []\n",
" path_dict = {}\n",
" split_json_path = os.path.join(dataset_dir, 'split.json')\n",
" if not os.path.exists(split_json_path):\n",
" raise FileNotFoundError(f\"Split file not found.\")\n",
" \n",
" with open(split_json_path, 'r') as f:\n",
" splits = json.load(f)\n",
"\n",
" if split_name not in splits:\n",
" raise FileNotFoundError(f\"Split '{split_name}' not found in split file.\")\n",
" \n",
" patients_in_split = splits[split_name]\n",
" for pid in tqdm(patients_in_split, desc=f\"Building {split_name} information\"):\n",
" patient_folder = os.path.join(dataset_dir, split_name, pid)\n",
" label_file = os.path.join(patient_folder, 'labels.json')\n",
" ct_path = os.path.join(patient_folder, 'ncct.nii')\n",
" dwi_path = os.path.join(patient_folder, 'dwi.nii')\n",
" mask_path = os.path.join(patient_folder, 'mask.nii')\n",
" brain_path = os.path.join(patient_folder, 'brain.nii')\n",
" if not os.path.exists(brain_path):\n",
" raise FileNotFoundError('brain.nii tidak ada: %s' % brain_path)\n",
" \n",
" path_dict[pid] = {\n",
" 'ncct': ct_path,\n",
" 'dwi': dwi_path,\n",
" 'mask': mask_path,\n",
" 'brain': brain_path\n",
" }\n",
" \n",
" with open(label_file, 'r') as f:\n",
" data = json.load(f)\n",
" if 'labels' in data:\n",
" for z_str, has_lesion in data['labels'].items():\n",
" z = int(z_str)\n",
" label_value = 1.0 if has_lesion else 0.0\n",
" label_list.append((pid, z, label_value))\n",
" \n",
" return label_list, path_dict"
]
},
{
"cell_type": "markdown",
"id": "8747c8e0",
"metadata": {},
"source": [
"# Scheduler & Optimizer"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f7ee2ff0",
"metadata": {},
"outputs": [],
"source": [
"def warmup_cosine_factor(step, warmup_steps, total_steps, min_ratio):\n",
" if warmup_steps > 0 and step < warmup_steps:\n",
" return float(step + 1) / float(warmup_steps)\n",
" if step >= total_steps:\n",
" return float(min_ratio)\n",
" span = max(total_steps - warmup_steps, 1)\n",
" progress = (step - warmup_steps) / float(span)\n",
" cosine = 0.5 * (1.0 + math.cos(math.pi * progress))\n",
" return float(min_ratio) + (1.0 - float(min_ratio)) * cosine\n",
"\n",
"\n",
"def build_optimizer_and_scheduler(model, kd_module, steps_per_epoch):\n",
" \"\"\"Tiga param group + satu LambdaLR dengan faktor PER GROUP.\n",
"\n",
" Base lr berbeda (encoder 1e-5, kepala & adaptor 1e-4) dan ujungnya harus\n",
" SAMA: semuanya turun ke CONFIG['MIN_LR'] absolut. LambdaLR mengalikan\n",
" FAKTOR terhadap base masing-masing, jadi satu faktor bersama membuat\n",
" encoder berakhir di 1e-8 (rasio 1:10 terjaga). Untuk lantai absolut yang\n",
" sama, tiap group diberi min_ratio = MIN_LR / base:\n",
"\n",
" encoder 1e-5 -> 1e-7 : min_ratio 0.01\n",
" head/kd 1e-4 -> 1e-7 : min_ratio 0.001\n",
"\n",
" Konsekuensinya rasio antar-group menyempit di akhir (1:10 -> 1:1). Itu\n",
" konsekuensi langsung dari \"semua ke 1e-7\"; kalau rasio harus tetap, pakai\n",
" min_ratio bersama dan encoder berhenti di 1e-8.\n",
"\n",
" Parameter dengan requires_grad=False (guru beku, buffer p) tidak masuk\n",
" optimizer: kalau ikut, Adam tetap membuat state untuk mereka.\n",
" \"\"\"\n",
" groups = [{'params': [p for p in model.encoder.parameters() if p.requires_grad],\n",
" 'lr': CONFIG['LR_ENCODER'], 'name': 'encoder'},\n",
" {'params': [p for p in model.head.parameters() if p.requires_grad],\n",
" 'lr': CONFIG['LR_CLS'], 'name': 'head'}]\n",
" if kd_module is not None and kd_module.enabled:\n",
" kd_params = [p for p in kd_module.heads.parameters() if p.requires_grad]\n",
" if kd_params:\n",
" groups.append({'params': kd_params, 'lr': CONFIG['LR_KD'], 'name': 'kd'})\n",
"\n",
" optimizer = torch.optim.AdamW(groups, weight_decay=CONFIG['WEIGHT_DECAY'])\n",
"\n",
" total_steps = int(steps_per_epoch) * int(CONFIG['EPOCHS'])\n",
" warmup = int(CONFIG['WARMUP_STEPS'])\n",
" if warmup >= total_steps:\n",
" print('[sched] PERINGATAN warmup %d >= total %d, cosine dilewati'\n",
" % (warmup, total_steps))\n",
"\n",
" bases = [grp['lr'] for grp in optimizer.param_groups]\n",
" lambdas = [lambda step, base=base: warmup_cosine_factor(\n",
" step, warmup, total_steps, CONFIG['MIN_LR'] / max(base, 1e-12))\n",
" for base in bases]\n",
" scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambdas,\n",
" last_epoch=-1)\n",
"\n",
" print('[sched] warmup %d step (%.2f epoch) | cosine %d step | total %d step'\n",
" % (warmup, warmup / max(steps_per_epoch, 1),\n",
" max(total_steps - warmup, 0), total_steps))\n",
" for grp, base in zip(optimizer.param_groups, bases):\n",
" print('[sched] %-8s base %.2e -> step0 %.2e -> lantai %.2e | %s param'\n",
" % (grp['name'], base, grp['lr'], CONFIG['MIN_LR'],\n",
" '{:,}'.format(sum(p.numel() for p in grp['params']))))\n",
" return optimizer, scheduler\n",
"\n",
"\n",
"def current_lrs(optimizer):\n",
" \"\"\"lr aktual per group, untuk log per epoch.\"\"\"\n",
" return {grp['name']: grp['lr'] for grp in optimizer.param_groups}"
]
},
{
"cell_type": "markdown",
"id": "4cb0e093",
"metadata": {},
"source": [
"# Graph"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "8180aac7",
"metadata": {},
"outputs": [],
"source": [
"def epoch_axis():\n",
" recorded = np.asarray(history.get('epoch', []), dtype=np.int64)\n",
" if recorded.size == 0:\n",
" return recorded\n",
" return np.arange(recorded[0], int(CONFIG['EPOCHS']) + 1, dtype=np.int64)\n",
"\n",
"def pad_to_axis(values, axis):\n",
" values = np.asarray(values, dtype=float)\n",
" if axis.size == 0:\n",
" return values\n",
" result = np.full(axis.size, np.nan)\n",
" n = min(values.size, axis.size)\n",
" result[:n] = values[:n]\n",
" if 0 < n < axis.size:\n",
" result[n:] = values[n - 1]\n",
" return result\n",
"\n",
"def metric_series(split, metric):\n",
" raw = [float(m.get(metric, float('nan'))) for m in history[split]]\n",
" return pad_to_axis(raw, epoch_axis())\n",
"\n",
"def kd_series(split, grid):\n",
" raw = [float(m.get('kd_grid_cosine', {}).get(grid, float('nan')))\n",
" for m in history[split]]\n",
" return pad_to_axis(raw, epoch_axis())\n",
"\n",
"def style_axis(ax, metric, ylabel=''):\n",
" ax.set_title(metric, fontsize=10)\n",
" ax.set_xlabel('epoch')\n",
" ax.set_ylabel(ylabel)\n",
" ax.grid(alpha=0.3)\n",
" axis = epoch_axis()\n",
" if axis.size:\n",
" ax.set_xlim(axis[0], axis[-1])\n",
" if best_epoch:\n",
" ax.axvline(best_epoch, color='0.35', lw=0.8, ls=':', zorder=0)\n",
" recorded = np.asarray(history.get('epoch', []), dtype=np.int64)\n",
" if recorded.size and recorded[-1] < int(CONFIG['EPOCHS']):\n",
" ax.axvspan(recorded[-1], int(CONFIG['EPOCHS']), color='0.93', zorder=0)\n",
" ax.text(recorded[-1], 0.5, ' early stop', transform=ax.get_xaxis_transform(),\n",
" fontsize=7, color='0.45', va='center')\n",
" \n",
"def plot_train_val(ax, metric, ylabel=''):\n",
" axis = epoch_axis()\n",
" ax.plot(axis, metric_series('train_metrics', metric),\n",
" color='tab:blue', label='train')\n",
" ax.plot(axis, metric_series('val_metrics', metric),\n",
" color='tab:orange', label='val')\n",
" style_axis(ax, metric, ylabel)\n",
" ax.legend(fontsize=8)\n",
" \n",
"def blank_panel(ax, message=None):\n",
"\n",
" if message:\n",
" ax.set_title(message, fontsize=10, color='0.45')\n",
" ax.set_xticks([])\n",
" ax.set_yticks([])\n",
" else:\n",
" ax.axis('off')\n",
" \n",
"def confusion_panel(ax, epoch_index):\n",
" confusion = history['val_metrics'][epoch_index].get('confusion')\n",
" if not confusion:\n",
" blank_panel(ax, 'confusion val: tidak tersedia')\n",
" return\n",
" matrix = np.array([[confusion['tn'], confusion['fp']],\n",
" [confusion['fn'], confusion['tp']]], dtype=np.float64)\n",
" ax.imshow(matrix, cmap='Blues')\n",
" max_count = matrix.max() if matrix.max() > 0 else 1.0\n",
" for (row, col), count in np.ndenumerate(matrix):\n",
" ax.text(col, row, '%d' % count, ha='center', va='center', fontsize=11,\n",
" color='white' if count > 0.6 * max_count else 'black')\n",
" ax.set_xticks([0, 1]); ax.set_yticks([0, 1])\n",
" ax.set_xticklabels(['pred 0', 'pred 1'])\n",
" ax.set_yticklabels(['true 0', 'true 1'])\n",
" ax.set_title('confusion val @ epoch %d (acc %.4f)'\n",
" % (epochs[epoch_index],\n",
" (matrix[0, 0] + matrix[1, 1]) / max(matrix.sum(), 1)), fontsize=10)\n",
" ax.grid(False)\n",
" \n",
"def new_figure(title):\n",
" fig, axes = plt.subplots(2, 2, figsize=(11, 7.5))\n",
" fig.suptitle('%s | %s' % (title, RUN_TAG), fontsize=11)\n",
" return fig, axes\n",
"\n",
"def save_figure(fig, filename):\n",
" fig.tight_layout(rect=(0, 0, 1, 0.96))\n",
" fig.savefig(os.path.join(CHECKPOINT_DIR, filename), dpi=150, bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"id": "b43eab99",
"metadata": {},
"source": [
"# Run"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "37811437",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"run : p2_resnet50-resenc-testclip5\n",
"log : /home/skibidi/PreThesis/[2]CLASSIFICATION/p2_resnet50-resenc-testclip5/train.log\n",
"mulai : 2026-10-27 22:04:22\n",
"cfg : student resnet50 | teacher resenc | USE_DISTILL False | grid (128, 64, 32) | GAMMA 5.00\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Building train information: 100%|██████████| 104/104 [00:00<00:00, 3510.75it/s]\n",
"Building val information: 100%|██████████| 22/22 [00:00<00:00, 4308.68it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[RadImageNet] 318/318 tensor loaded | strict=True | 0 missing / 0 unexpected\n",
"[KD] nonaktif (USE_DISTILL=False, grid=(128, 64, 32))\n",
"[run] train 852 batch | val 184 batch | device cuda\n",
"[sched] warmup 1500 step (1.76 epoch) | cosine 41100 step | total 42600 step\n",
"[sched] encoder base 1.00e-05 -> step0 6.67e-09 -> lantai 1.00e-07 | 23,508,032 param\n",
"[sched] head base 1.00e-04 -> step0 6.67e-08 -> lantai 1.00e-07 | 1,049,602 param\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 1/50: 100%|██████████| 852/852 [01:33<00:00, 9.12it/s]\n",
"Epoch 1/50: 100%|██████████| 184/184 [00:07<00:00, 24.28it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 1/50 | best 1 * | 102.1s | ETA 86.0m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.7056 | 0.5887 \n",
"Cls 0.7056 | 0.5887 \n",
"Acc 0.6774 | 0.7826 \n",
"Prec 0.5850 | 0.7125 [0.6239, 0.7873]\n",
"Rec 0.8117 | 0.8235 [0.7823, 0.8664]\n",
"F1 0.6800 | 0.7640 [0.7104, 0.8096]\n",
"AUC 0.7669 | 0.8855 [0.8547, 0.9163]\n",
"PR-AUC 0.6705 | 0.8282 [0.7706, 0.8846]\n",
"LR encoder 5.69e-06 | head 5.69e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 2/50: 100%|██████████| 852/852 [01:29<00:00, 9.52it/s]\n",
"Epoch 2/50: 100%|██████████| 184/184 [00:05<00:00, 31.90it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 2/50 | best 1 | 96.3s | ETA 81.8m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.6552 | 0.5527 \n",
"Cls 0.6552 | 0.5527 \n",
"Acc 0.7459 | 0.7880 \n",
"Prec 0.6656 | 0.7963 [0.7098, 0.8700]\n",
"Rec 0.8006 | 0.6773 [0.6133, 0.7422]\n",
"F1 0.7269 | 0.7320 [0.6758, 0.7787]\n",
"AUC 0.8175 | 0.8843 [0.8525, 0.9130]\n",
"PR-AUC 0.7240 | 0.8313 [0.7704, 0.8852]\n",
"LR encoder 1.00e-05 | head 1.00e-04\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 3/50: 100%|██████████| 852/852 [01:32<00:00, 9.20it/s]\n",
"Epoch 3/50: 100%|██████████| 184/184 [00:06<00:00, 30.20it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 3/50 | best 3 * | 99.7s | ETA 81.1m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.6232 | 0.5102 \n",
"Cls 0.6232 | 0.5102 \n",
"Acc 0.7669 | 0.7962 \n",
"Prec 0.6839 | 0.6999 [0.6081, 0.7745]\n",
"Rec 0.8337 | 0.9157 [0.8797, 0.9511]\n",
"F1 0.7514 | 0.7934 [0.7321, 0.8404]\n",
"AUC 0.8418 | 0.8865 [0.8552, 0.9153]\n",
"PR-AUC 0.7601 | 0.8354 [0.7734, 0.8903]\n",
"LR encoder 9.98e-06 | head 9.98e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 4/50: 100%|██████████| 852/852 [01:37<00:00, 8.74it/s]\n",
"Epoch 4/50: 100%|██████████| 184/184 [00:07<00:00, 23.55it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 4/50 | best 3 | 106.5s | ETA 81.4m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.6110 | 0.5068 \n",
"Cls 0.6110 | 0.5068 \n",
"Acc 0.7741 | 0.7908 \n",
"Prec 0.6920 | 0.7458 [0.6568, 0.8230]\n",
"Rec 0.8373 | 0.7742 [0.7268, 0.8244]\n",
"F1 0.7578 | 0.7598 [0.7111, 0.8000]\n",
"AUC 0.8504 | 0.8857 [0.8568, 0.9131]\n",
"PR-AUC 0.7583 | 0.8273 [0.7717, 0.8785]\n",
"LR encoder 9.95e-06 | head 9.95e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 5/50: 100%|██████████| 852/852 [01:31<00:00, 9.31it/s]\n",
"Epoch 5/50: 100%|██████████| 184/184 [00:05<00:00, 31.20it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 5/50 | best 3 | 98.4s | ETA 78.8m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.6009 | 0.4968 \n",
"Cls 0.6009 | 0.4968 \n",
"Acc 0.7810 | 0.7982 \n",
"Prec 0.6983 | 0.7523 [0.6624, 0.8279]\n",
"Rec 0.8487 | 0.7870 [0.7468, 0.8301]\n",
"F1 0.7662 | 0.7692 [0.7169, 0.8104]\n",
"AUC 0.8571 | 0.8879 [0.8565, 0.9165]\n",
"PR-AUC 0.7706 | 0.8363 [0.7733, 0.8906]\n",
"LR encoder 9.89e-06 | head 9.89e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 6/50: 100%|██████████| 852/852 [01:35<00:00, 8.90it/s]\n",
"Epoch 6/50: 100%|██████████| 184/184 [00:05<00:00, 31.20it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 6/50 | best 3 | 102.6s | ETA 77.1m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.5924 | 0.4856 \n",
"Cls 0.5924 | 0.4856 \n",
"Acc 0.7829 | 0.8010 \n",
"Prec 0.6979 | 0.7176 [0.6271, 0.7933]\n",
"Rec 0.8565 | 0.8808 [0.8452, 0.9204]\n",
"F1 0.7691 | 0.7909 [0.7326, 0.8347]\n",
"AUC 0.8633 | 0.8866 [0.8543, 0.9164]\n",
"PR-AUC 0.7854 | 0.8308 [0.7630, 0.8859]\n",
"LR encoder 9.81e-06 | head 9.81e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 7/50: 100%|██████████| 852/852 [01:32<00:00, 9.19it/s]\n",
"Epoch 7/50: 100%|██████████| 184/184 [00:03<00:00, 54.56it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 7/50 | best 3 | 97.1s | ETA 75.1m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.5834 | 0.4787 \n",
"Cls 0.5834 | 0.4787 \n",
"Acc 0.7889 | 0.8084 \n",
"Prec 0.7057 | 0.7461 [0.6565, 0.8231]\n",
"Rec 0.8583 | 0.8362 [0.8020, 0.8752]\n",
"F1 0.7746 | 0.7886 [0.7348, 0.8290]\n",
"AUC 0.8704 | 0.8902 [0.8590, 0.9189]\n",
"PR-AUC 0.7950 | 0.8408 [0.7790, 0.8913]\n",
"LR encoder 9.71e-06 | head 9.71e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 8/50: 100%|██████████| 852/852 [01:33<00:00, 9.10it/s]\n",
"Epoch 8/50: 100%|██████████| 184/184 [00:05<00:00, 32.32it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 8/50 | best 3 | 100.2s | ETA 73.0m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.5811 | 0.4868 \n",
"Cls 0.5811 | 0.4868 \n",
"Acc 0.7884 | 0.8050 \n",
"Prec 0.7041 | 0.7402 [0.6478, 0.8200]\n",
"Rec 0.8615 | 0.8378 [0.7986, 0.8826]\n",
"F1 0.7749 | 0.7860 [0.7290, 0.8298]\n",
"AUC 0.8720 | 0.8882 [0.8563, 0.9184]\n",
"PR-AUC 0.7973 | 0.8340 [0.7707, 0.8898]\n",
"LR encoder 9.60e-06 | head 9.59e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 9/50: 100%|██████████| 852/852 [01:41<00:00, 8.37it/s]\n",
"Epoch 9/50: 100%|██████████| 184/184 [00:07<00:00, 25.27it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 9/50 | best 3 | 110.3s | ETA 72.3m\n",
" [Train] | [Val] 95% CI (22 pasien)\n",
"Loss 0.5749 | 0.4952 \n",
"Cls 0.5749 | 0.4952 \n",
"Acc 0.7908 | 0.8037 \n",
"Prec 0.7099 | 0.7568 [0.6619, 0.8354]\n",
"Rec 0.8543 | 0.7965 [0.7614, 0.8406]\n",
"F1 0.7754 | 0.7761 [0.7257, 0.8173]\n",
"AUC 0.8762 | 0.8890 [0.8579, 0.9192]\n",
"PR-AUC 0.8126 | 0.8279 [0.7495, 0.8915]\n",
"LR encoder 9.46e-06 | head 9.46e-05\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 10/50: 100%|██████████| 852/852 [01:33<00:00, 9.12it/s]\n",
"Epoch 10/50: 0%| | 0/184 [00:00<?, ?it/s]\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[13], line 326\u001b[0m\n\u001b[1;32m 323\u001b[0m torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mreset_peak_memory_stats(device)\n\u001b[1;32m 325\u001b[0m train_metrics \u001b[38;5;241m=\u001b[39m run_epoch(model, kd, train_loader, device, epoch, optimizer\u001b[38;5;241m=\u001b[39moptimizer, scheduler\u001b[38;5;241m=\u001b[39mscheduler)\n\u001b[0;32m--> 326\u001b[0m val_metrics \u001b[38;5;241m=\u001b[39m \u001b[43mrun_epoch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mval_loader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepoch\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moptimizer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 328\u001b[0m epoch_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime() \u001b[38;5;241m-\u001b[39m epoch_start\n\u001b[1;32m 329\u001b[0m history[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mepoch\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mappend(epoch)\n",
"Cell \u001b[0;32mIn[13], line 115\u001b[0m, in \u001b[0;36mrun_epoch\u001b[0;34m(model, kd, loader, device, epoch, optimizer, scheduler)\u001b[0m\n\u001b[1;32m 112\u001b[0m preds_all, probs_all, labels_all, pids_all \u001b[38;5;241m=\u001b[39m [], [], [], []\n\u001b[1;32m 114\u001b[0m pbar \u001b[38;5;241m=\u001b[39m tqdm(loader, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mEpoch \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mepoch\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mCONFIG[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mEPOCHS\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 115\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m batch \u001b[38;5;129;01min\u001b[39;00m pbar:\n\u001b[1;32m 116\u001b[0m ct, dwi, mask, label, patient_idx, brain \u001b[38;5;241m=\u001b[39m batch\n\u001b[1;32m 117\u001b[0m ct \u001b[38;5;241m=\u001b[39m ct\u001b[38;5;241m.\u001b[39mto(device, non_blocking\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\u001b[38;5;241m.\u001b[39mfloat()\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/site-packages/tqdm/std.py:1187\u001b[0m, in \u001b[0;36mtqdm.__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1184\u001b[0m time \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_time\n\u001b[1;32m 1186\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1187\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m obj \u001b[38;5;129;01min\u001b[39;00m iterable:\n\u001b[1;32m 1188\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m obj\n\u001b[1;32m 1189\u001b[0m \u001b[38;5;66;03m# Update and possibly print the progress bar.\u001b[39;00m\n\u001b[1;32m 1190\u001b[0m \u001b[38;5;66;03m# Note: does not call self.update(1) for speed optimisation.\u001b[39;00m\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/site-packages/torch/utils/data/dataloader.py:708\u001b[0m, in \u001b[0;36m_BaseDataLoaderIter.__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sampler_iter \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 706\u001b[0m \u001b[38;5;66;03m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[39;00m\n\u001b[1;32m 707\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reset() \u001b[38;5;66;03m# type: ignore[call-arg]\u001b[39;00m\n\u001b[0;32m--> 708\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_next_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 709\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_yielded \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 710\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 711\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dataset_kind \u001b[38;5;241m==\u001b[39m _DatasetKind\u001b[38;5;241m.\u001b[39mIterable\n\u001b[1;32m 712\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_IterableDataset_len_called \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 713\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_yielded \u001b[38;5;241m>\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_IterableDataset_len_called\n\u001b[1;32m 714\u001b[0m ):\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/site-packages/torch/utils/data/dataloader.py:1458\u001b[0m, in \u001b[0;36m_MultiProcessingDataLoaderIter._next_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1455\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_data(data)\n\u001b[1;32m 1457\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_shutdown \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tasks_outstanding \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m-> 1458\u001b[0m idx, data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1459\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tasks_outstanding \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 1460\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dataset_kind \u001b[38;5;241m==\u001b[39m _DatasetKind\u001b[38;5;241m.\u001b[39mIterable:\n\u001b[1;32m 1461\u001b[0m \u001b[38;5;66;03m# Check for _IterableDatasetStopIteration\u001b[39;00m\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/site-packages/torch/utils/data/dataloader.py:1410\u001b[0m, in \u001b[0;36m_MultiProcessingDataLoaderIter._get_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1408\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pin_memory:\n\u001b[1;32m 1409\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pin_memory_thread\u001b[38;5;241m.\u001b[39mis_alive():\n\u001b[0;32m-> 1410\u001b[0m success, data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_try_get_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1411\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m success:\n\u001b[1;32m 1412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m data\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/site-packages/torch/utils/data/dataloader.py:1251\u001b[0m, in \u001b[0;36m_MultiProcessingDataLoaderIter._try_get_data\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 1238\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_try_get_data\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout\u001b[38;5;241m=\u001b[39m_utils\u001b[38;5;241m.\u001b[39mMP_STATUS_CHECK_INTERVAL):\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;66;03m# Tries to fetch data from `self._data_queue` once for a given timeout.\u001b[39;00m\n\u001b[1;32m 1240\u001b[0m \u001b[38;5;66;03m# This can also be used as inner loop of fetching without timeout, with\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1248\u001b[0m \u001b[38;5;66;03m# Returns a 2-tuple:\u001b[39;00m\n\u001b[1;32m 1249\u001b[0m \u001b[38;5;66;03m# (bool: whether successfully get data, any: data if successful else None)\u001b[39;00m\n\u001b[1;32m 1250\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1251\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_data_queue\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1252\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\u001b[38;5;28;01mTrue\u001b[39;00m, data)\n\u001b[1;32m 1253\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 1254\u001b[0m \u001b[38;5;66;03m# At timeout and error, we manually check whether any worker has\u001b[39;00m\n\u001b[1;32m 1255\u001b[0m \u001b[38;5;66;03m# failed. Note that this is the only mechanism for Windows to detect\u001b[39;00m\n\u001b[1;32m 1256\u001b[0m \u001b[38;5;66;03m# worker failures.\u001b[39;00m\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/queue.py:180\u001b[0m, in \u001b[0;36mQueue.get\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m remaining \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.0\u001b[39m:\n\u001b[1;32m 179\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Empty\n\u001b[0;32m--> 180\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnot_empty\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mremaining\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 181\u001b[0m item \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get()\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnot_full\u001b[38;5;241m.\u001b[39mnotify()\n",
"File \u001b[0;32m~/miniconda3/envs/pre_thesis/lib/python3.10/threading.py:324\u001b[0m, in \u001b[0;36mCondition.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 323\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m timeout \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m--> 324\u001b[0m gotit \u001b[38;5;241m=\u001b[39m \u001b[43mwaiter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m gotit \u001b[38;5;241m=\u001b[39m waiter\u001b[38;5;241m.\u001b[39macquire(\u001b[38;5;28;01mFalse\u001b[39;00m)\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[RadImageNet] 318/318 tensor loaded | strict=True | 0 missing / 0 unexpected\n",
"Test - threshold 0.50\n",
"run : p2_resnet50-resenc-testclip5\n",
"ckpt : epoch 3 | F1 val 0.7934 | AUC val 0.8865\n",
"henti : early stop di epoch 9 dari 50 -- kurva di grafik diulang datar\n",
"irisan: 1315 | pasien: 22\n",
"\n",
" precision recall f1-score support\n",
"\n",
" Negative 0.9472 0.6529 0.7730 824\n",
" Positive 0.6171 0.9389 0.7447 491\n",
"\n",
" accuracy 0.7597 1315\n",
" macro avg 0.7822 0.7959 0.7589 1315\n",
"weighted avg 0.8239 0.7597 0.7624 1315\n",
"\n",
"confusion (baris=true, kolom=pred)\n",
" pred 0 pred 1\n",
"true 0 538 286\n",
"true 1 30 461\n",
"\n",
"metrik nilai 95% CI (22 pasien)\n",
"Acc 0.7597 -\n",
"Prec 0.6171 [0.5052, 0.7170]\n",
"Rec 0.9389 [0.9091, 0.9675]\n",
"F1 0.7447 [0.6559, 0.8101]\n",
"AUC 0.8808 [0.8421, 0.9189]\n",
"PR-AUC 0.7480 [0.6321, 0.8613]\n"
]
}
],
"source": [
"class _TeeLog:\n",
" def __init__(self, notebook_stream, file_stream):\n",
" self.notebook_stream = notebook_stream\n",
" self.file_stream = file_stream\n",
" def write(self, text):\n",
" self.notebook_stream.write(text)\n",
" self.file_stream.write(text)\n",
" self.file_stream.flush()\n",
" return len(text)\n",
" def flush(self):\n",
" self.notebook_stream.flush()\n",
" self.file_stream.flush()\n",
" def isatty(self):\n",
" return False\n",
" \n",
"def bootstrap_ci(datas, draws=1000, seed=42, method='percentile'):\n",
" finite = np.asarray(datas, dtype=np.float64)\n",
" finite = finite[np.isfinite(finite)]\n",
" if finite.size < 2:\n",
" return float('nan'), float('nan')\n",
" interval = bootstrap((finite,), np.mean, n_resamples=draws, method=method,\n",
" vectorized=False, rng=np.random.default_rng(seed))\n",
" return (float(interval.confidence_interval.low),\n",
" float(interval.confidence_interval.high))\n",
" \n",
"def aggregate_per_patient(values, pids, draws=1000, seed=42):\n",
" values = np.asarray(values, dtype=np.float64)\n",
" pids = np.asarray(pids)\n",
" unique = np.array(sorted(set(pids.tolist())))\n",
" per_patient = np.array([values[pids == pid].mean() for pid in unique])\n",
" low, high = bootstrap_ci(per_patient, draws=draws, seed=seed)\n",
" return dict(mean=float(per_patient.mean()), ci_low=low, ci_high=high)\n",
" \n",
"def ci_per_metric(metrics, pids, draws=1000, seed=42):\n",
" return {k: aggregate_per_patient(v, pids, draws=draws, seed=seed)\n",
" for k, v in metrics.items()}\n",
"\n",
"def _cls_metrics_np(pred, label, prob):\n",
" tp = int(((pred == 1) & (label == 1)).sum())\n",
" tn = int(((pred == 0) & (label == 0)).sum())\n",
" fp = int(((pred == 1) & (label == 0)).sum())\n",
" fn = int(((pred == 0) & (label == 1)).sum())\n",
" acc = (tp + tn) / max(tp + tn + fp + fn, 1)\n",
" prec = tp / max(tp + fp, 1)\n",
" rec = tp / max(tp + fn, 1)\n",
" out = dict(accuracy=acc, precision=prec, recall=rec,\n",
" f1=2 * prec * rec / max(prec + rec, CONFIG['EPS']),\n",
" roc_auc=float('nan'), pr_auc=float('nan'))\n",
" if 0 < label.sum() < label.size:\n",
" out['roc_auc'] = float(roc_auc_score(label, prob))\n",
" out['pr_auc'] = float(average_precision_score(label, prob))\n",
" return out\n",
"\n",
"def calculate_metrics_cls(preds, labels, probs=None):\n",
" preds = preds.float()\n",
" labels = labels.float()\n",
" tp = ((preds == 1) & (labels == 1)).sum().item()\n",
" tn = ((preds == 0) & (labels == 0)).sum().item()\n",
" fp = ((preds == 1) & (labels == 0)).sum().item()\n",
" fn = ((preds == 0) & (labels == 1)).sum().item()\n",
" accuracy = (tp + tn) / max(tp + tn + fp + fn, 1)\n",
" precision = tp / max(tp + fp, 1)\n",
" recall = tp / max(tp + fn, 1)\n",
" f1 = (2 * precision * recall / max(precision + recall, CONFIG['EPS']))\n",
" roc_auc = float('nan')\n",
" pr_auc = float('nan')\n",
" if probs is not None:\n",
" y_true = labels.numpy().astype(np.int64)\n",
" y_score = probs.numpy().astype(np.float64)\n",
" if len(np.unique(y_true)) > 1:\n",
" roc_auc = float(roc_auc_score(y_true, y_score))\n",
" pr_auc = float(average_precision_score(y_true, y_score))\n",
"\n",
" counts = {'tp': int(tp), 'tn': int(tn), 'fp': int(fp), 'fn': int(fn)}\n",
" return accuracy, precision, recall, f1, roc_auc, pr_auc, counts\n",
"\n",
"def cluster_metric_ci(preds, labels, probs, pids, draws=500, seed=42):\n",
" preds = np.asarray(preds, dtype=np.int64)\n",
" labels = np.asarray(labels, dtype=np.int64)\n",
" probs = np.asarray(probs, dtype=np.float64)\n",
" pids = np.asarray(pids)\n",
" uniq = np.unique(pids)\n",
" if uniq.size < 2:\n",
" return {k: (float('nan'), float('nan')) for k in CI_KEYS}, int(uniq.size)\n",
" rows_of = {u: np.where(pids == u)[0] for u in uniq}\n",
" rng = np.random.default_rng(seed)\n",
" buckets = {k: [] for k in CI_KEYS}\n",
" for _ in range(draws):\n",
" pick = rng.choice(uniq, size=uniq.size, replace=True)\n",
" rows = np.concatenate([rows_of[u] for u in pick])\n",
" m = _cls_metrics_np(preds[rows], labels[rows], probs[rows])\n",
" for k in CI_KEYS:\n",
" if np.isfinite(m[k]):\n",
" buckets[k].append(m[k])\n",
" ci = {}\n",
" for k in CI_KEYS:\n",
" v = buckets[k]\n",
" if len(v) < 2:\n",
" ci[k] = (float('nan'), float('nan'))\n",
" else:\n",
" ci[k] = (float(np.percentile(v, 2.5)), float(np.percentile(v, 97.5)))\n",
" return ci, int(uniq.size)\n",
"\n",
"def run_epoch(model, kd, loader, device, epoch, optimizer=None, scheduler=None):\n",
" train = optimizer is not None\n",
" use_kd = kd is not None and kd.enabled\n",
" model.train(train)\n",
"\n",
" sum_loss = sum_cls = sum_kd = 0.0\n",
" kd_grid_totals = {}\n",
" samples = 0\n",
" preds_all, probs_all, labels_all, pids_all = [], [], [], []\n",
"\n",
" pbar = tqdm(loader, desc=f\"Epoch {epoch}/{CONFIG['EPOCHS']}\")\n",
" for batch in pbar:\n",
" ct, dwi, mask, label, patient_idx, brain = batch\n",
" ct = ct.to(device, non_blocking=True).float()\n",
" dwi = dwi.to(device, non_blocking=True).float()\n",
" label = label.to(device, non_blocking=True).float()\n",
" brain = brain.to(device, non_blocking=True).float()\n",
"\n",
" with torch.set_grad_enabled(train):\n",
" if use_kd:\n",
" logits, skips = model(ct, return_skips=True)\n",
" s_vec, t_vec = kd(skips, dwi, brain)\n",
" loss, parts = total_loss(logits, label, s_vec, t_vec,\n",
" DISTILL_GRID_WEIGHTS, kd.valid)\n",
" del s_vec, t_vec, skips\n",
" else:\n",
" logits = model(ct)\n",
" l_cls = classification_loss(\n",
" logits, label,\n",
" pos_weight=CONFIG['POS_WEIGHT'],\n",
" smoothing=CONFIG['SMOOTHING'] if train else 0.0)\n",
" loss = CONFIG['ALPHA_CLS'] * l_cls\n",
" parts = {'cls': float(loss), 'kd': 0.0, 'kd_raw': 0.0, 'kd_grid': {}}\n",
"\n",
" if train:\n",
" optimizer.zero_grad(set_to_none=True)\n",
" loss.backward()\n",
" clip_grad_norm_(model.parameters(), max_norm=CONFIG['GRAD_CLIP'])\n",
" if use_kd:\n",
" clip_grad_norm_(kd.heads.parameters(), max_norm=CONFIG['GRAD_CLIP'])\n",
" optimizer.step()\n",
" if scheduler is not None:\n",
" scheduler.step()\n",
"\n",
" bs = ct.size(0)\n",
" samples += bs\n",
" sum_loss += float(loss) * bs\n",
" sum_cls += parts['cls'] * bs\n",
" sum_kd += parts['kd'] * bs\n",
" for grid, value in parts['kd_grid'].items():\n",
" kd_grid_totals[grid] = kd_grid_totals.get(grid, 0.0) + value * bs\n",
"\n",
" probs = torch.sigmoid(logits.detach())\n",
" preds_all.append((probs >= 0.5).float().cpu())\n",
" probs_all.append(probs.cpu())\n",
" labels_all.append(label.detach().cpu())\n",
" pids_all.append(np.asarray(\n",
" patient_idx.cpu() if torch.is_tensor(patient_idx) else patient_idx\n",
" ).reshape(-1)) \n",
"\n",
" accuracy, precision, recall, f1, roc_auc, pr_auc, confusion = calculate_metrics_cls(\n",
" torch.cat(preds_all), torch.cat(labels_all), torch.cat(probs_all))\n",
" \n",
" ci, n_patient = {}, 0\n",
" if not train:\n",
" ci, n_patient = cluster_metric_ci(\n",
" torch.cat(preds_all).numpy(),\n",
" torch.cat(labels_all).numpy(),\n",
" torch.cat(probs_all).numpy(),\n",
" np.concatenate(pids_all),\n",
" draws=min(CONFIG['BOOTSTRAP_DRAWS'], 500),\n",
" seed=CONFIG['INIT_SEED'])\n",
" del preds_all, probs_all, labels_all, pids_all\n",
"\n",
" result = {\n",
" 'loss': sum_loss / max(samples, 1),\n",
" 'cls_loss': sum_cls / max(samples, 1),\n",
" 'kd_loss': sum_kd / max(samples, 1),\n",
" 'kd_grid_cosine': {g: v / max(samples, 1) for g, v in kd_grid_totals.items()},\n",
" 'accuracy': accuracy,\n",
" 'precision': precision,\n",
" 'recall': recall,\n",
" 'f1': f1,\n",
" 'roc_auc': roc_auc,\n",
" 'pr_auc': pr_auc,\n",
" 'confusion': confusion,\n",
" 'ci': ci,\n",
" 'n_patient': n_patient,\n",
" }\n",
" if optimizer is not None:\n",
" result['lr'] = current_lrs(optimizer)\n",
" return result\n",
"\n",
"\n",
"def checkpoint_payload(epoch, val_metrics):\n",
" return {\n",
" 'epoch': epoch,\n",
" 'model_state_dict': model.state_dict(),\n",
" 'optimizer_state_dict': optimizer.state_dict(),\n",
" 'scheduler_state_dict': scheduler.state_dict(),\n",
" 'kd_head_state_dict': kd.heads.state_dict() if kd.enabled else None,\n",
" 'kd_stats': ({int(g): [m.tolist(), s.tolist()] for g, (m, s) in kd.stats.items()}\n",
" if kd.enabled else None),\n",
" 'kd_levels': {str(g): dict(v) for g, v in DISTILL_LEVELS.items()},\n",
" 'kd_grid_weights': {str(g): float(w) for g, w in DISTILL_GRID_WEIGHTS.items()},\n",
" 'val_f1': val_metrics['f1'],\n",
" 'val_auc': val_metrics['roc_auc'],\n",
" 'val_ci': val_metrics.get('ci'),\n",
" 'best_epoch': best_epoch,\n",
" 'patience_counter': patience_counter,\n",
" 'history': history,\n",
" 'run_tag': RUN_TAG,\n",
" 'config': CONFIG,\n",
" 'split': splits,\n",
" }\n",
"\n",
"RUN_TAG = 'p2_%s-%s%s-testclip5' % (CONFIG['STUDENT'], CONFIG['TEACHER'],\n",
" '-kd' if CONFIG['USE_DISTILL'] else '')\n",
"CHECKPOINT_DIR = os.path.join(OUTPUT_DIR, RUN_TAG)\n",
"os.makedirs(CHECKPOINT_DIR, exist_ok=True)\n",
"\n",
"if isinstance(sys.stdout, _TeeLog):\n",
" LOG_STREAM = sys.stdout.file_stream\n",
"else:\n",
" LOG_STREAM = open(os.path.join(CHECKPOINT_DIR, LOG_NAME), 'a', encoding='utf-8')\n",
" sys.stdout = _TeeLog(sys.stdout, LOG_STREAM)\n",
"\n",
"print('run : %s' % RUN_TAG)\n",
"print('log : %s' % os.path.join(CHECKPOINT_DIR, LOG_NAME))\n",
"print('mulai : %s' % time.strftime('%Y-%m-%d %H:%M:%S'))\n",
"print('cfg : student %s | teacher %s | USE_DISTILL %s | grid %s | GAMMA %.2f'\n",
" % (CONFIG['STUDENT'], CONFIG['TEACHER'], CONFIG['USE_DISTILL'],\n",
" ENABLED_GRIDS, CONFIG['GAMMA_DISTILL']))\n",
"\n",
"train_dict, train_image_path = build_information(dataset_dir=DATASET_DIR, split_name='train')\n",
"val_dict, val_image_path = build_information(dataset_dir=DATASET_DIR, split_name='val')\n",
"\n",
"train_dataset = StrokeDataset(label_list=train_dict, image_path_dict=train_image_path,\n",
" augment=True, phase=4,\n",
" slice_context=CONFIG['SLICE_CONTEXT'])\n",
"val_dataset = StrokeDataset(label_list=val_dict, image_path_dict=val_image_path,\n",
" augment=False, phase=4,\n",
" slice_context=CONFIG['SLICE_CONTEXT'])\n",
"\n",
"g_train = torch.Generator().manual_seed(CONFIG['INIT_SEED'])\n",
"g_val = torch.Generator().manual_seed(CONFIG['INIT_SEED'] + 1)\n",
"\n",
"train_loader = DataLoader(train_dataset, batch_size=CONFIG['BATCH_SIZE'], shuffle=True,\n",
" num_workers=CONFIG['WORKERS'], pin_memory=True,\n",
" worker_init_fn=seed_worker, drop_last=True, generator=g_train)\n",
"val_loader = DataLoader(val_dataset, batch_size=CONFIG['BATCH_SIZE'], shuffle=False,\n",
" num_workers=CONFIG['WORKERS'], pin_memory=True,\n",
" worker_init_fn=seed_worker, generator=g_val)\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"seed_everything(CONFIG['INIT_SEED'])\n",
"\n",
"model = ClassificationModel(pretrained=True, dropout=CONFIG['DROPOUT']).to(device)\n",
"kd = KDModule(DISTILL_LEVELS, CONFIG['TEACHER']).to(device)\n",
"if kd.enabled:\n",
" kd.build_stats(train_loader)\n",
"\n",
"print('[run] train %d batch | val %d batch | device %s'\n",
" % (len(train_loader), len(val_loader), device))\n",
"\n",
"optimizer, scheduler = build_optimizer_and_scheduler(model, kd, len(train_loader))\n",
"\n",
"with open(os.path.join(DATASET_DIR, 'split.json')) as fh:\n",
" splits = json.load(fh)\n",
"\n",
"history = {\n",
" 'epoch': [],\n",
" 'lr': [],\n",
" 'best_epoch': 0,\n",
" 'train_metrics': [],\n",
" 'val_metrics': [],\n",
" 'kd_grids': list(ENABLED_GRIDS),\n",
"}\n",
"\n",
"start_epoch = 1\n",
"best_epoch = 0\n",
"best_val_f1 = 0.0\n",
"best_val_auc = 0.0\n",
"patience_counter = 0\n",
"\n",
"if IS_RESUME:\n",
" resume_path = os.path.join(CHECKPOINT_DIR, LAST_CHECKPOINT_NAME)\n",
" if os.path.exists(resume_path):\n",
" ck = torch.load(resume_path, map_location=device, weights_only=False)\n",
" if ck['split'] != splits:\n",
" raise SystemExit('split berbeda: %s vs %s' % (ck['split'], splits))\n",
" model.load_state_dict(ck['model_state_dict'])\n",
" optimizer.load_state_dict(ck['optimizer_state_dict'])\n",
" scheduler.load_state_dict(ck['scheduler_state_dict'])\n",
" if kd.enabled and ck.get('kd_head_state_dict') is not None:\n",
" kd.heads.load_state_dict(ck['kd_head_state_dict'])\n",
" if ck.get('kd_stats'):\n",
" kd.stats = {int(g): (torch.tensor(m), torch.tensor(s))\n",
" for g, (m, s) in ck['kd_stats'].items()}\n",
" start_epoch = int(ck['epoch']) + 1\n",
" best_epoch = int(ck.get('best_epoch', 0))\n",
" best_val_f1 = float(ck.get('val_f1') or 0.0)\n",
" best_val_auc = float(ck.get('val_auc') or 0.0)\n",
" history = ck.get('history') or history\n",
" patience_counter = float(ck.get('patience_counter') or 0.0)\n",
" print('[run] resume dari epoch %d | best %d | f1 %.4f'\n",
" % (start_epoch, best_epoch, best_val_f1))\n",
" else:\n",
" print('[run] tidak ada checkpoint, mulai dari awal')\n",
"\n",
"ROW = '%-7s %10s | %10s %s' \n",
"training_start = time.time()\n",
"for epoch in range(start_epoch, CONFIG['EPOCHS'] + 1):\n",
" if patience_counter >= CONFIG['PATIENCE']:\n",
" print('PATIENCE %d REACHED di epoch %d' % (CONFIG['PATIENCE'], epoch))\n",
" break\n",
"\n",
" epoch_start = time.time()\n",
" if torch.cuda.is_available():\n",
" torch.cuda.reset_peak_memory_stats(device)\n",
"\n",
" train_metrics = run_epoch(model, kd, train_loader, device, epoch, optimizer=optimizer, scheduler=scheduler)\n",
" val_metrics = run_epoch(model, kd, val_loader, device, epoch, optimizer=None)\n",
"\n",
" epoch_time = time.time() - epoch_start\n",
" history['epoch'].append(epoch)\n",
" history['lr'].append(current_lrs(optimizer))\n",
" history['train_metrics'].append(dict(train_metrics))\n",
" history['val_metrics'].append(dict(val_metrics))\n",
"\n",
" improved = val_metrics['f1'] > best_val_f1\n",
" if improved:\n",
" patience_counter = 0\n",
" best_val_f1 = val_metrics['f1']\n",
" best_val_auc = val_metrics['roc_auc']\n",
" best_epoch = epoch\n",
" history['best_epoch'] = epoch\n",
" torch.save(checkpoint_payload(epoch, val_metrics),\n",
" os.path.join(CHECKPOINT_DIR, BEST_CHECKPOINT_NAME))\n",
" else:\n",
" patience_counter += 1\n",
"\n",
" torch.save(checkpoint_payload(epoch, val_metrics),\n",
" os.path.join(CHECKPOINT_DIR, LAST_CHECKPOINT_NAME))\n",
"\n",
" elapsed = time.time() - training_start\n",
" done = epoch - start_epoch + 1\n",
" eta = (elapsed / max(done, 1)) * (CONFIG['EPOCHS'] - epoch)\n",
"\n",
" lr_now = current_lrs(optimizer)\n",
" print()\n",
" print('Epoch %3d/%d | best %d%s | %.1fs | ETA %.1fm'\n",
" % (epoch, CONFIG['EPOCHS'], best_epoch, ' *' if improved else '',\n",
" epoch_time, eta / 60.0))\n",
" print(ROW % ('', '[Train]', '[Val]',\n",
" '95%% CI (%d pasien)' % val_metrics['n_patient']))\n",
" for label, key, fmt in (('Loss', 'loss', '%.4f'), ('Cls', 'cls_loss', '%.4f'),\n",
" ('Acc', 'accuracy', '%.4f'), ('Prec', 'precision', '%.4f'),\n",
" ('Rec', 'recall', '%.4f'), ('F1', 'f1', '%.4f'),\n",
" ('AUC', 'roc_auc', '%.4f'), ('PR-AUC', 'pr_auc', '%.4f')):\n",
" tv, vv = train_metrics[key], val_metrics[key]\n",
" lo, hi = val_metrics['ci'].get(key, (float('nan'), float('nan')))\n",
" print(ROW % (label,\n",
" '-' if tv != tv else fmt % tv,\n",
" '-' if vv != vv else fmt % vv,\n",
" '' if (lo != lo or hi != hi) else '[%.4f, %.4f]' % (lo, hi)))\n",
" if kd.enabled or train_metrics['kd_grid_cosine']:\n",
" print(ROW % ('KD',\n",
" 'cls %.4f, kd %.4f' % (train_metrics['cls_loss'], train_metrics['kd_loss']),\n",
" 'cls %.4f, kd %.4f' % (val_metrics['cls_loss'], val_metrics['kd_loss']),\n",
" ''))\n",
" for grid in sorted(set(train_metrics['kd_grid_cosine'])\n",
" | set(val_metrics['kd_grid_cosine']), reverse=True):\n",
" print(ROW % ('g%d' % grid,\n",
" 'cos %.4f' % train_metrics['kd_grid_cosine'].get(grid, float('nan')),\n",
" 'cos %.4f' % val_metrics['kd_grid_cosine'].get(grid, float('nan')),\n",
" ''))\n",
" print('%-7s %s' % ('LR', ' | '.join('%s %.2e' % (k, v) for k, v in lr_now.items())))\n",
"\n",
"total_time = time.time() - training_start\n",
"print()\n",
"print('Best Epoch : %d | F1 (dipilih) %.4f | AUC %.4f'\n",
" % (best_epoch, best_val_f1, best_val_auc))\n",
"print('Epochs : %d -> %d' % (start_epoch, CONFIG['EPOCHS']))\n",
"print('Time Elapsed : %.1f menit (%.2f jam)' % (total_time / 60.0, total_time / 3600.0))\n",
"print('best checkpoint: %s' % os.path.join(CHECKPOINT_DIR, BEST_CHECKPOINT_NAME))\n",
"print('last checkpoint: %s' % os.path.join(CHECKPOINT_DIR, LAST_CHECKPOINT_NAME))\n",
"LOG_STREAM.flush()\n",
"if isinstance(sys.stdout, _TeeLog):\n",
" sys.stdout = sys.stdout.notebook_stream\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "69375cf9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAALkCAYAAADgYCuzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAqzxJREFUeJzs3Xd8VFX6x/HvTJKZSSCVkoTekV4VEFEUlAXWxYKiKEURLKAUdRULiLri6qqI5YcIKOJiY+0gFhREBBQQBKSFKiWQEJJA+szc3x9DRkICpExmhpnP+/XKi+SWM8/ckzGPzz3nXJNhGIYAAAAAAAACnNnXAQAAAAAAAHgDRRAAAAAAABAUKIIAAAAAAICgQBEEAAAAAAAEBYogAAAAAAAgKFAEAQAAAAAAQYEiCAAAAAAACAoUQQAAAAAAQFCgCAIAAAAAAIICRRAAQIU88cQTqlq1qq/DqDR79uyRyWTSnj17KtyWw+HQc889p0svvVTVq1dXXFycLr/8ci1fvrzigfqpJ554Qj///HOx7T179pTJZCr2tXXr1iLHZWRkaMSIEYqLi1NkZKQGDhyoQ4cOeSt8v/bpp5/q9ddfr5S209PT9cQTT+iPP/4o87nDhw9X69at3T+//fbbMplMSk1NLVM7hZ+907+6du1a5pgAACgU6usAAAAIFjk5OZo6daqGDx+uhx56SCEhIZo5c6Yuv/xyffPNN7riiit8HaLHTZkyRVWrVtXFF19cbF/37t31n//8p8i2Bg0aFPl50KBB2rx5s2bMmCGbzaZHH31Uffv21Zo1axQaGtxpzKeffqo1a9bonnvu8Xjb6enpmjJlilq3bq2WLVtWqK3+/ftr5cqViomJKdf5zzzzjC6//HL3z5GRkRWKBwAQ3II7ewAAwIvCw8O1a9cuxcbGurddeeWVat26tV566aVyF0EMw1B+fr6sVqunQvWKmJiYs97VX7lypb7++mt9/fXXuuqqqyRJzZs3V4sWLfTxxx/rxhtvLNPr5eTkKDw8vEIxo+xq1KihGjVqlPv8pk2bMvoDAOAxTIcBAFS6jRs3qk+fPqpSpYqio6M1cOBA7du3r8gxc+bMUatWrRQeHq5q1arpkksu0a+//lrq/YZh6D//+Y+aNWsmq9WqRo0a6aWXXiryGvv379eNN96o+Ph42Ww2NWzYUOPHj/fIeyycAvDVV1+pdevWstls6tSpk1atWuU+JiQkpEgBpHBb27ZtdfDgwTK/1qJFi9SuXTtZrVZ98cUXklyFgyuuuMJ9rQcPHqwjR44UOf/ZZ59VkyZNZLPZVKNGDfXu3Vu7d++W9NcUhHfffVdjxoxRbGysEhMT9cADD8hutxdpZ8uWLRowYICio6NVpUoV9e/fXzt37nTvN5lMkqQHH3zQPZVh6dKlpX6fX331lWJiYnTllVe6tzVv3lzt27fXokWLznru0qVLZTKZtHDhQg0cOFBRUVG64YYbJLlGOdxzzz1KTEyU1WpVp06d9M033xQ5f8WKFbr00ksVHR2tyMhItWnTRnPnzi1yzMKFC9WlSxeFh4erRo0auvvuu5WVlVUshm+//VaDBw9WZGSk6tevr+eee65YvCtXrtRVV12lqKgoRUZGqkuXLvr222/P+P6GDx+uuXPnavPmze5rO3z48CLtlff3YM+ePWrYsKEk6YYbbnC3XzglLC8vT4899pgaNWokq9WqOnXqFHnt050+Habwd2zu3LkaMWKEoqOjFRcXpwkTJhT7HQMAwNMoggAAKtWff/6pSy+9VEePHtW7776rGTNmaN26dbrssst0/PhxSdKPP/6oESNGqF+/flq0aJHeeecd9erVS+np6aXaL0ljx47VpEmTNGzYMC1cuNA95WTGjBnuY4YOHarff/9d06dP1+LFizVlyhQ5HA6PvddDhw7pnnvu0YMPPqgPP/xQVqtVffr0KfY/n6ey2+1atWqVWrRoUabXOnjwoO677z6NHz9eixcvVvv27bVy5Ur17NlT0dHR+uCDDzRz5kz9+uuvGjBggPu8d955R48//rhGjBihxYsXa9asWWrfvr0yMzOLtP/oo4/KbDbrww8/1F133aUXXnhBs2bNcu/ftWuXLr74YqWlpentt9/W/PnzlZKSol69eikvL0+S63/EJenee+/VypUrtXLlSnXs2NHdxrJly1SlShXZbDZddtll+vHHH4vEsHXrVjVv3txdTCnUokWLYmuHnMmoUaPUuHFjffLJJ3rggQeUn5+vK6+8Ul9++aX+9a9/6fPPP1fLli3Vv39/bdy4UZKUmZmp/v37KyoqSu+9954+/fRTjRo1qsjv24IFC/SPf/xDbdq00SeffKLnnntOH3/8sUaMGFEshrvuukvNmjXTJ598oquvvloPPfSQFi9e7N6/YsUK9ezZU3l5eZo1a5b+97//acCAAcUKhad6/PHH1a9fPzVq1Mh9bR9//HH3da/I70FiYqI+/vhjSa6pKIXtJyYmSpKuv/56vfjii7r99tu1cOFCPf/880WKP6X1yCOPyOl06sMPP9SDDz6oV155RY899lix4+6++26FhISoZs2aGjlypNLS0sr8WgAAuBkAAFTA5MmTjSpVqpxx//jx440qVaoYR48edW/bsmWLYTKZjOnTpxuGYRjPP/+8ERcXd8Y2zrU/KSnJMJlMxhtvvFFk+0MPPWQkJCQYDofDMAzDqFKlivs1S2v37t2GJGP37t1nPW7YsGGGJGPJkiXubenp6UZkZKTx8MMPn/G8f/3rX0ZISIixZs2aUsdU+FqrVq0qsv3SSy81Lr74YsPpdLq3bd682TCZTMbChQsNwzCM0aNHGx07djxj24Xv94Ybbiiy/bLLLjN69erl/nno0KFGo0aNjJycHPe2I0eOGFWrVjVee+019zZJxvPPP1/sdSZNmmTMnj3b+PHHH43333/f6Ny5sxEWFmb8/PPP7mN69+5t9OnTp9i5o0ePNpo2bXrG92AYhvHDDz8Ykoy77rqryPY5c+YYoaGhxubNm4ts79Kli/s9//rrr4Yk4/fffy+xbafTadSvX9+4+eabi2z/6quvDJPJZGzatKlIDA8++GCRcxs0aGCMGDHCve3iiy82WrZsadjt9rO+p9MNGzbMaNWqVbHtnvw9+Oijj4ps/+abbwxJxvz580sd11tvvWVIMlJSUoq03aNHjyLnPf7440ZERISRlpZmGIZhHDx40Lj77ruNTz/91Fi6dKnx73//24iKijLat29v5Ofnn/H1AQA4G0aCAAAq1fLly3XFFVcoLi7Ove2CCy5Qu3bt9NNPP0mSOnbsqLS0NA0fPlzffvutsrOzi7Rxrv3fffedJNcdarvd7v7q3bu3kpOT9eeff7rb+c9//qP/+7//U1JSksffa3R0dJF1PaKjo9W7d2+tXr26xOO//fZbTZ48WZMmTVKnTp3K9FrVqlVTly5d3D9nZ2drxYoVuuGGG+RwONzXoFmzZqpbt6576lDHjh3122+/acKECfrpp59UUFBQYvuFa3AUatmypfbv3+/++ZtvvtE//vEPhYaGul8rNjZWHTp0KDJN6UymTJmi22+/XT169NCgQYO0dOlS1apVS0899VSZroNhGEX63Ol0Ftnfv3//Ij9/8803atOmjZo1a1bkvCuvvNIdd+PGjRUVFaW7775bH374oVJSUoq0sX37du3du1c33nhjkTYuu+wymc1mrVmzpsjxp15Lk8mkFi1auK9ldna2Vq1apWHDhikkJKTE93hqf9rtdhmGccbr4enfg9MtWbJEERERuummm0p1/Nlce+21RX4eOHCgsrOz3SNyEhMT9frrr2vAgAG67LLL9M9//lPz58/X+vXr9cknn1T49QEAwYkiCACgUh07dkzx8fHFtsfHx7uHtV9xxRWaN2+eNm/erD59+qh69eoaOnRoqfenpqbKMAxVr15dYWFh7q/CtSQKiyAffPCBevXqpUcffVRNmzbVBRdc4B727wklLf4YHx9f4iNd161bp+uvv16DBw/WpEmTyvxap1/TY8eOyeFwaPz48UWuQVhYmPbt2+e+BsOHD9dLL72kr7/+Wj169FCNGjU0duxY5eTkFGnv9Cd5WCwW5ebmun9OTU3VtGnTir3W8uXL3a9VFoVriqxdu9a9LTY2VhkZGcWOPXbsmLuoNnfu3CKvf/vtt5/1OqWmpuq3334rFvfTTz/tjjs2NlbffvutIiMjNWTIECUkJKhnz57u/zkvXNvi2muvLdJGRESEHA5Hsfd/tmt57NgxOZ1O1apV64zXplevXkVeZ9myZWc81tO/B6c7evSoEhMTi01RKo+aNWsW+bmwr872COR+/fqpSpUqRX5PAAAoC54OAwCoVHFxcSWuiXH48GE1a9bM/fOtt96qW2+9Vampqfrss8/c/xM3e/bsc+6Pi4uTyWTSTz/9JIvFUuy1mjdvLsl1Z3nOnDmaNWuW1q5dq6efflqDBg3Stm3b1KhRowq/19NHDBS+z8K1FAolJSWpb9++uvjii4uss1EWp/9PaExMjEwmkx555BFdc801xY6vXr26JMlsNmvs2LEaO3asDhw4oPfff18PP/ywqlev7l5TojTi4uLUv3//Eh/P6qlHmF5wwQX67rvvZBhGkfe7detWtWnTRpJ09dVXFxl5Uvg+C51+neLi4tS2bVv379WZXHTRRfrqq6+Uk5OjH374QQ888ICuueYa7dy5012AefXVV4uMxil0toLG6WJiYmQ2m8+6MO4bb7zhXj9H+uv3+UztVebvQbVq1XTo0KFifVIep/934fDhw5JU7PMCAIAnUQQBAFSqSy65RDNnztSxY8fcT0bZtm2bfv/992J37SXX/6SNGDFCixYt0pYtW0q1v1evXpJcd6mvvvrqc8ZkNpt14YUX6umnn9bnn3+upKQkjxRBMjIy9P3337unxGRkZOi7777T6NGj3cccOnRIV111lerVq6cFCxYoLCyswq8ruUZSdOvWTVu2bNHTTz9dqnNq166t+++/X/Pnzy/xWp9N7969tWnTJnXo0OGM0zgkKSwsrMgIkjPJysrSl19+qQsvvNC9rW/fvnrqqae0ZMkS9e7dW5JrKspvv/2mhx56SJLrf8qrVatWprgXLVqkWrVqlapYER4ern79+mnnzp0aO3ascnNzdcEFF6hOnTratWtXkb4tj8J+e+edd3T//feXeC3PVPQ4fXTOqe1V9PegsJh4evu9e/fWv//9b3344YcaNGhQqdo/k08++aTI05kWLFigiIgId4GrJF9++aWysrKK/J4AAFAWFEEAABXmcDi0YMGCYtsvuugijR8/Xm+99ZauuuoqPfroo8rNzdVjjz2mevXquR+rOXnyZB09elQ9e/ZUzZo1tXHjRi1evFgTJkwo1f5mzZpp9OjRGjJkiB588EF16dJFBQUF2r59u3744Qd9+umnysjIUJ8+fTRkyBA1b95c+fn5euWVVxQTE1PkiSUVERcXpxEjRmjKlCmKiYnRs88+K8MwNG7cOElSTk6O+vbtq9TUVL388svatGmT+1yr1aoOHTpU6PWff/55XXHFFRo0aJBuuukmxcbGav/+/fr222912223qWfPnrrzzjsVGxurrl27KjY2VitWrNCGDRtKHNFxNlOmTNGFF16oPn36aNSoUYqPj1dycrKWLVumHj166Oabb5bkepLLZ599ph49eqhKlSpq3ry51q9fr+eff17XXnutGjRooIMHD+qFF15QcnKyPvroI/drdOvWTX369NHtt9+uF154QTabTY8++qjatm2r6667rlzXaOjQoXrjjTfUs2dPPfDAA2rWrJnS09P122+/KT8/X1OnTtXChQs1e/ZsXXvttapXr56Sk5P1yiuvqHv37rLZbJKkF198UYMHD1ZWVpb69++vKlWqaO/evVq4cKGeeeaZIqOczuXZZ5/VFVdcod69e+uee+5RbGys1q1bp+rVq5dYKCzUokULzZkzR++9956aNm2q6tWrq0GD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8ssv69VXX9WwYcMkSY0bN9Yll1yiPXv2FDnWU3nC66+/rrp16+rVV1+VyWTSBRdcoIMHD+qhhx7SpEmTdOjQIdntdl133XWqX7++JLnzlrS0NGVkZOjvf/+7GjduLElq0aJFueIA4B1MhwFQabZs2aLQ0FB16dLFva1atWpq3ry5tmzZIkm677779PTTT6t79+6aPHmyfv/9d/exd999t95//321b99e//znP/Xzzz97/T0AAADv2bJli/Ly8tSrV69zHuupPGHLli3q1q1bkdEb3bt314kTJ7R//361a9dOvXr1Ups2bXTDDTfozTff1LFjxyRJcXFxGj58uPr06aOrr75aL7/8sg4dOlSuOAB4B0UQAD51xx13aNeuXRoyZIg2btyozp0765VXXpEk9e3bV3v37tX48eN18OBB9erVSw888ICPIwYAAJUlPDy81Md6K08ICQnRt99+q6+++kotW7bUK6+8oubNm2v37t2SpLfeeksrV67UxRdfrA8++EDNmjXTqlWrPB4HAM+gCAKg0rRo0UJ2u12rV692bzt69Ki2bdumli1burfVrVtXd911lz7++GPdf//9evPNN937atSooWHDhundd9/VtGnTNHPmTK++BwAA4D1NmzZVeHi4lixZUqrjPZEntGjRQitXrpRhGO5tK1asUGRkpOrUqSNJMplM6t69u6ZMmaLffvtNFotFn3zyifv4Dh06aOLEifr555/VunVrzZ8/v8xxAPAO1gQBUGmaNm2qAQMGaOTIkXrjjTcUGRmphx9+WLVr19aAAQMkSePGjVPfvn3VrFkzHTt2TD/88IN7Lu2kSZPUqVMntWrVSnl5efryyy+ZZwsAQACz2Wx66KGH9M9//lMWi0Xdu3dXSkqKNm/eXGyKjKfyhHvuuUfTpk3TvffeqzFjxmjbtm2aPHmyJkyYILPZrNWrV2vJkiW66qqrVLNmTa1evVopKSlq0aKFdu/erZkzZ+of//iHatWqpW3btmnHjh0aOnSopy4JAA+jCAKgUr311lsaO3as/v73vys/P1+XXnqpFi1apLCwMEmSw+HQ6NGjtX//fkVFRelvf/ubXnrpJUmSxWLRxIkTtWfPHoWHh6tHjx56//33ffl2AABAJXv88ccVGhqqSZMm6eDBg0pMTNRdd91V7DhP5Qm1a9fWokWL9OCDD6pdu3aKi4vTiBEj9Nhjj0mSoqKi9OOPP2ratGnKzMxU/fr19cILL6hv3746fPiwtm7dqrlz5+ro0aNKTEzU6NGjdeedd1b4OgCoHCbj1HFfAAAAAAAAAYo1QQAAAAAAQFCgCAIAAAAgYDzzzDOqWrVqiV99+/b1dXgAfIzpMAAAAAACRlpamtLS0krcFx4ertq1a3s5IgD+hCIIAAAAAAAICkyHAQAAAAAAQYEiCAAAAAAACAoUQQAAAAAAQFAI9XUAnuB0OnXw4EFFRkbKZDL5OhwAAAKeYRg6fvy4atWqJbM5+O6pkHsAAOA9nsw7AqIIcvDgQdWtW9fXYQAAEHT+/PNP1alTx9dheB25BwAA3ueJvCMgiiCRkZGSXBckKirKx9GcX+x2uzIzM8953LFjxxQbG+uFiHA29IN/oB98jz7wvePHj6tt27buv8HBhtyjfEqbd0h8zv0BfeAf6Af/QD/4lifzjoAoghQOQ42KivJIImK327V8+XL16NFDoaEBcYnOyG63n/MYwzBUUFDAkF8fox/8A/3ge/SBfwnWPvBk7kHeURyfc9+jD/wD/eAf6Af/4YnrH3yTeEvBbrdr1apVpf5DDQAAUF7kHQAAeE9g324oJ5vNpokTJ/o6DACAH3A6nXI4HDIMw9eheJ3JZFJISEhQLnzqTeQdAIBTBWvuYTKZZDabZTabK3XEDUWQEhQUFOibb77RVVddpbCwMF+HAwDwkdzcXB07dkyGYQTl8NfC9x0bGyubzebrcAIWeQcAoBC5hyGLxaKYmJhKmyJKEaQETqdTO3bsUO/evX0dCgDAR5xOp44dO6YqVaqoWrVqQZuIHD16VMeOHVN8fDwjQioJeQcAQCL3kKT8/HylpqYqJSVFCQkJlXINKIKUwGq1aty4cb4OAwDgQ4XDUKtVq6bw8HBfh+Mz1apV04kTJ+RwOCiCVBLyDgCARO4huaaIhoWFae/evbLb7ZUyQpJspgQFBQVasGCBCgoKfB0KAMBHCoehBuNdmFMVXoNgm5fsTeQdAACJ3KNQZeceFEFKYBiG0tLSSPgAAEClI+8AAMB7KIKUwGKxaNSoUbJYLL4OBQCAIp588knl5uaW+byDBw+qZ8+eng8IFUbeAQDwV4GYdwRUEWTh7wc90k5+fr7mzZun/Px8j7QHAICnPPXUUyUmI3a7/azn1apVS0uXLq2kqFAR5B0AAH8ViHlHQC2M+vuBDN3s6yAAAAHJMAzlFDgq9TXCw0LOOg/4nnvukST17NlTISEhqlWrluLj47Vz506lpKRo06ZNGjJkiLZv3678/HzVrVtXM2fOVEJCgvbs2aPOnTsrNTVVkhQWFqannnpKn332mVJTU/Xoo49q+PDhlfr+AlFGdoGionwdBQAg0JB3VJ6AKoLsPHLCI+1YLBYNGTLEI20BAAJDToFDbZ9cUqmv8fukXoqwnPlP8+uvv64333xTS5cuVUxMjG6//XatW7dOy5YtU2RkpCTpxRdfVI0aNSRJzz33nJ588km9/vrrJbZntVq1cuVKbd26Vd26ddOtt96q0NCASg0qXVLKcdVNqFahNsg7AACnI++oPOWaDvPaa6+pQYMGstls6tKli3755ZczHtuzZ0/36q6nfvXv3999jGEYmjRpkhITExUeHq7evXtrx44dZY5rx2HPFEHy8/M1c+ZMhqUCAPzewIED3YmIJL333nvq0qWL2rdvrzlz5mjDhg1nPPfmm13jJy+44AKFhoYqOTm50uMtL3/NPZI8cAOGvAMAcL4IhLyjzGWXDz74QBMmTNCMGTPUpUsXTZs2TX369NG2bdtUs2bNYsd//PHHRf6oHz16VO3atdMNN9zg3vbcc89p+vTpmjt3rho2bKjHH39cffr00R9//CGbzVbq2I5m5evoiTxVq2ot69sqwmQyKS4uLugfTQQA+Et4WIh+n9Sr0l+jrKpUqeL+/qefftJrr72m5cuXq2bNmvriiy/0xBNPnPHcU//GhoSEnHN+r6/4c+7hiSIIeQcA4HTkHZWnzEWQF198USNHjtRtt90mSZoxY4YWLlyoOXPm6OGHHy52fFxcXJGf33//fUVERLgTEcMwNG3aND322GMaMGCAJOmdd95RfHy8Pv30U910001lim/74RPqVsEiSFhYmAYOHFihNgAAgcVkMp11yKi3REZGKiMjQzExMcX2paenq2rVqqpWrZry8/P15ptvej/ASuDPuYcnRqGSdwAATkfeUXnKNB0mPz9fa9euVe/evf9qwGxW7969tXLlylK1MXv2bN10003uCtLu3buVnJxcpM3o6Gh16dKl1G2eavvh42U+53R5eXmaNm2a8vLyKtwWAACeNH78ePXt21edOnVSSkpKkX19+vRR8+bN1apVK/Xs2VPt2rXzUZSe4++5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BElNTZXD4Sh2NyU+Pl5bt24t8ZzmzZtrzpw5atu2rTIyMvSf//xHF198sTZv3qw6depIcg1Hve6669SwYUPt3LlTjzzyiPr27auVK1cqJCSkWJtTp07VlClTim1PSUk5612UUFt9VZdkHFirI4cPSybTGY9NSEjQ0aNHz7g/UDgcDmVnZ5/1GMMwdOLECUmuO2vwDfrBP9APvkcf+Ifjx4975XXO99wjplpL2bKW6cT25cq21D/jceQdRfE59z36wD/QD/6BfvA9T+YdlT75tFu3burWrZv754svvlgtWrTQG2+8oaeeekqSdNNNN7n3t2nTRm3btlXjxo21dOlS9erVq1ibEydO1IQJE9w/Z2Zmqm7duqpRo4aioqLOHExcDxnmMJlz01XTmifF1CvxsJycHD388MN69tlnFR4eXta3fF6x2+3n/IUqrLrFxcXxofch+sE/0A++Rx/4B39ev8Kfcg9Tgy7SvmWKPJ6kqjVrlngMeUdxfM59jz7wD/SDf6AffM+TeUeZWqpevbpCQkJ0+PDhItsPHz6shISEUrURFhamDh06KCkp6YzHNGrUSNWrV1dSUlKJiYjVapXVai223Ww2y2w+yzInlnApvpV0aL3Mh36T4hqUeJjNZtO9994rm8129vYCgNlsLtUH+dTV8+E79IN/oB98jz7wPW9d+/M+96jtWo/MdPA3mc5wHHlHyfic+x594B/oB/9AP/iWJ697mf7SWiwWderUSUuWLHFvczqdWrJkSZE7LmfjcDi0ceNGJSYmnvGY/fv36+jRo2c9ptxqdXD9e/C3Mx4SEhKiZs2alTgcFgAAeM95n3vUau/6N2WblHeixEPIOwAA8J4y326YMGGC3nzzTc2dO1dbtmzR3XffraysLN12222SpKFDhxZZvOzJJ5/UN998o127dmndunW69dZbtXfvXt1xxx2SXAuXPfjgg1q1apX27NmjJUuWaMCAAWrSpIn69Onjobd5ilIUQbKzszVixIhSzVkFAACV67zOPSITpMhakgwp+fcSDyHvAADAe8o8sWbQoEFKSUnRpEmTlJycrPbt22vx4sXuBcv27dtXZCjnsWPHNHLkSCUnJys2NladOnXSzz//rJYtW0py3f34/fffNXfuXKWnp6tWrVq66qqr9NRTT5U47LTCand0/Xtwg+R0SiUMO7XZbJoyZYpsNpvnXx8AAJRJQOQeWw+6bsDUv7jYbvIOAAC8x2QEwHN+MjMzFR0drYyMjLMvjCpJjgJpah3JniuNWStVb+KdIP2U3W53P+bvTAzDUFpaGgsB+Rj94B/oB9+jD/xDZmamGjZsWLq/vQGoTLnHj89L3z8ttR4oDZztnQD9VGnyDonPuT+gD/wD/eAf6Aff82TeEdirb5UkJExKaOP6/gxTYrKzszV48GCGpQIAgIo7x1Rc8g4AALwn+Iog0jmTEZvNpldeeYVhqQAAoOIST+YdaTulnPRiu8k7AADwniAtghSuC1JyEcRkMik8PJyhTgAAoOKqVJNi6ru+P7Sh2G7yDgAAvCdIiyAn78gc2iA5HcV25+Tk6I477lBOTo6XAwMAAAHJPQp1XbFd5B0AAHhPcBZBqjeVwqpIBVlS6vZiu8PDwzVr1iyFh4f7IDgAABBwzjIVl7wDAADvCc4iiDlESmzn+r6EZMQwDOXk5CgAHpwDAAD8wVmKIOQdAAB4T3AWQSSp9pnXBcnNzdW9996r3NxcLwcFAAACUq32rn/T90lZR4vsIu8AAMB7grcIUnhH5kDxubkRERGaP3++IiIivBwUAAAISLZoqVoT1/en3YAh7wAAwHsogiRvlBwFRXY5nU7t379fTqfTB4EBAICAdIYpMeQdAAB4T/AWQWIbStZoyZEnHdlSZFdubq4mT57MsFQAAOA5ZyiCkHcAAOA9wVsEMZv/mp972uPqIiIiNHv2bIalAgAAz6lVuB4ZeQcAAL4SvEUQ6Yx3ZBwOh7Zv3y6Hw+GDoAAAQEBKaCOZzNLxQ1LmIfdm8g4AALyHIohUrAiSn5+v6dOnKz8/3wdBAQCAgGStKlVv7vr+0Hr3ZvIOAAC8hyKIJB3+Qyr4ax5ueHi4Xn31VYWHh/soMAAAEJBKuAFD3gEAgPcEdxEkpp4UUU1yFkiHN7s3OxwObdiwgWGpAADAs2qfXBfkwF/rgpB3AADgPcFdBDGZTrkj81cyUlBQoHfffVcFBQVnOBEAAKAcTh0JYhiSyDsAAPCm4C6CSKckI+vdm2w2m55//nnZbDbfxAQAAAJTfGvJHCplp0oZ+yWRdwAA4E0UQdyPq/trbq7dbteqVatkt9t9FBQAAAhIYTapZkvX9ydzD/IOAAC8hyJI4UiQlC1SfpYkVzKyaNEikhEAAOB5p03FJe8AAMB7KIJEJUpVEyTDKSVvlOQalvrkk08yLBUAAHjeaU+IIe8AAMB7KIJIxZIRu92uH374gTsyAADA805bHJW8AwAA76EIIhV7XB1zcwEAQKWp2VIKsUq5GVLaLvIOAAC8iCKIVOKw1IkTJzIsFQAAeF6oRUpo7fr+4G/kHQAAeBFFEElKbO/69+gOKTdTBQUFWrhwoQoKCnwaFgAACFCn3IAh7wAAwHsogkhS1RpSdF3X94c2yOl0aseOHXI6nb6NCwAABCZ3EWQ9eQcAAF5EEaTQKY+rs1qtGjdunKxWq29jAgAAganWyfXIDq2XNSyUvAMAAC+hCFLotGGpCxYsYFgqAACoHNWbSWERUv4JFRzeSt4BAICXUAQpdEoRxDAMpaWlyTAM38YEAAACU0iolNBWkmQ6+Bt5BwAAXkIRpFCt9q5/j+2RxX5Co0aNksVi8WlIAAAggJ28ARN6ZCN5BwAAXkIRpFB4rBTXSJJUsO9XzZs3T/n5+T4OCgAABKzarnVBnPvXkncAAOAlFEFOdfKOjOnQet/GAQAAAl9h3nF4o0yGw8fBAAAQHCiCnKpwWOrh3zVkyBCGpQIAgMoT11iyRMpkz9WtV3Um7wAAwAsogpzqZBHEOLBOM2fOZFgqAACoPGaze02yZe9NI+8AAMALKIKcKrGdJJNMxw8qMTJEJpPJ1xEBAIBAdvIGTJ2QFPIOAAC8gCLIqayRUvVmkqSrO9VRWFiYjwMCAAAB7WQRpLEtg7wDAAAvoAhyupPJyMqPX1deXp6PgwEAAAHtZN7hOPi78rIyfRwMAACBjyLI6U4mI42sGTKbuTwAAKASxTaQER6rEDkUkrrV19EAABDw+L/809XuKEmKz9utsN3fS04eWQcAACqJySRT4dPp1r0lZRzwcUAAAAQ2iiCnS2gjwxol5aZL82+UprWRfnhGSt/n68gAAEAAKqjT1fXNhvnStNbS/EHS1oWSw+7bwAAACEAUQU4XFi7HiCX6s/Y/ZITHSZkHpGX/lqa1leZdJ/3xmWTnEXYAAMAzTN3H6Y8Lxsmod7FkOKXti6X3B0svtZKWPCml7fZ1iAAABIxQXwfgj0JrNlPdkfMke5605Qtp3Vxp94/SziWuryo1pHY3Sx2HSdWb+DpcAABwHgu1WNXypimuH1J3uPKO9e9JJ5Kl5S+4vhpeJnUaJl3wdynU6tuAAQA4jzESpAS5ubmaNGmScu2G1GagNOwL6d510iXjpSo1pawU6efp0qudpC8nSIbh65ABAMB5yp135OZK1ZtKVz0tTdgi3TBXanyFJJO0e5m04HbXNN1Dv/s6ZAAAzlsUQUoQGhqqfv36KTT0lIEy1RpLvZ+QJvwhDfqv1PQqSSZpzWxp6bO+ChUAAJznSsw7Qi1Sq2ukIZ9IYzdIl/5TikyUThx2rVnGAqoAAJQLRZAShIaGqmvXrkWTkUIhYVKLv0u3fCT9/SXXtmXPSuvnezdIAAAQEM6ad0hSbH3pikele1ZJNS6Qjh9yFUJyM70bKAAAAYAiSAlyc3P14IMPuoalnk3n21xTZCTp83ulXUsrPTYAABBYSp13hMdIgz90Tc09vEn6aJjkKPBKjAAABIpyFUFee+01NWjQQDabTV26dNEvv/xyxmPffvttmUymIl82m63IMYZhaNKkSUpMTFR4eLh69+6tHTt2lCc0jwgLC9Ott96qsLCwcx98xSSp9fWS0y59MEQ6/EflBwgAQJAJ5NyjTHlHbH1p8AdSWIS083tpIWuTAQBQFmUugnzwwQeaMGGCJk+erHXr1qldu3bq06ePjhw5csZzoqKidOjQIffX3r17i+x/7rnnNH36dM2YMUOrV69WlSpV1KdPn3PfEakkISEhateunUJCQs59sNksDXhdqtdNyst0DU89nlz5QQIAECQCPfcoU94hSbU7SgPnSCaztO4d6acXKzdAAAACSJmLIC+++KJGjhyp2267TS1bttSMGTMUERGhOXPmnPEck8mkhIQE91d8fLx7n2EYmjZtmh577DENGDBAbdu21TvvvKODBw/q008/LdebqqicnByNGTNGOTk5pTshzCbdNF+q1kTK+NNVCMk7UblBAgAQJAI99yhz3iFJzftKf/u36/slT0obF1ROcAAABJgyFUHy8/O1du1a9e7d+68GzGb17t1bK1euPON5J06cUP369VW3bl0NGDBAmzdvdu/bvXu3kpOTi7QZHR2tLl26nLXNymSxWHTffffJYrGU/qSIONdiqRHVpEMbpP+NkJyOygsSAIAgEAy5R7nyDknqMkrqNsb1/ad3S3t/9nxwAAAEmDMsQ16y1NRUORyOIndTJCk+Pl5bt24t8ZzmzZtrzpw5atu2rTIyMvSf//xHF198sTZv3qw6deooOTnZ3cbpbRbuO11eXp7y8vLcP2dmulZHdzqdcjqdZXlLJTKZTGrSpIm7zVKLaSANmi/TvAEybV8s46t/yvjbc5LJVOGYKovT6ZRxjrnEhmG4v+A79IN/oB98jz7wD966/sGQe5Q775Ck3lNkOrZXpq1fyHh/sIzbvpaqN61QPJWpNHmHxOfcH9AH/oF+8A/0g+958tqXqQhSHt26dVO3bt3cP1988cVq0aKF3njjDT311FPlanPq1KmaMmVKse0pKSkemcubl5enN954Q3feeaesVmvZTrY2kPWK5xTzzViZfp2l46HVld3utgrHVFkcDoeys7PPeoxhGDpxwjW9x+THBZ1ARz/4B/rB9+gD/3D8+HFfh3BG51vuUaG8Q5K6P6W4tH2yHNkgx7vXK+3aD+QMr1ahmCpLafIOic+5P6AP/AP94B/oB9/zZN5RpiJI9erVFRISosOHDxfZfvjwYSUkJJSqjbCwMHXo0EFJSUmS5D7v8OHDSkxMLNJm+/btS2xj4sSJmjBhgvvnzMxM1a1bVzVq1FBUVFRZ3lKJnE6n7r77biUmJspsLscDdGoOkWFkyvTtY4pc+W9VrdNCavGPCsdVGex2+zl/oQqrbnFxcXzofYh+8A/0g+/RB/4hNLTS76NICo7co8J5hyQN+UjGnKsUemyPanx3n4yhn0th4RWKqzKUJu+Q+Jz7A/rAP9AP/oF+8D1P5h1laslisahTp05asmSJrrnmGkmuP9xLlizRmDFjStWGw+HQxo0b1a9fP0lSw4YNlZCQoCVLlrgTj8zMTK1evVp33313iW1YrdYS75SYzebyJw+ntVO3bt2KNXLxGCl9r0y/vinTJ3dK0XWkOp0rHJunmc3mUn2QT33MIHyHfvAP9IPv0Qe+561rHwy5h0fyjsh46ZYF0qzeMh1YI9Ond0k3zHU9xc6PlDbvkPic+wP6wD/QD/6BfvAtT173Mv9lnDBhgt58803NnTtXW7Zs0d13362srCzddptrysfQoUM1ceJE9/FPPvmkvvnmG+3atUvr1q3Trbfeqr179+qOO+6Q5Hoz48aN09NPP63PP/9cGzdu1NChQ1WrVi13suNt2dnZGjx4cKmGa56RyST97Vmp2d8ke670wRApK9VzQQIAECQCPffwSN4hudYCufk9KcQibflcWjHNI/EBABBIyjymZNCgQUpJSdGkSZOUnJys9u3ba/Hixe7Fxfbt21fkjsixY8c0cuRIJScnKzY2Vp06ddLPP/+sli1buo/55z//qaysLI0aNUrp6em65JJLtHjxYtlsNg+8xbKz2Wx65ZVXKv76IaHS9bOkmZdLR3dIC26XhnwimUM8E2hF7fhOId8+ruic9HMeGuVwyhziX3eTghH94B/oB9+jD3zPlOu9J6AFeu7hsbxDkupfLPX7j/TFfdL3T0m1O0mNLqt4u56Qny3zl+MVvfvHUh3O59z36AP/QD/4B/rBtzyZd5iMAFjiNjMzU9HR0crIyPDImiCGYSgnJ0fh4eGeGXZzZKv05hVSQZbU4wGp1+MVb7OitnwhfXSb5CzwdSQAgPNQZp6h6GePe+xv7/nGk7mHx/MOw5A+GyOtf1eKqC7dtVyKqlXxdisi74T03k3SnuW+jQMAcF7yZN7hnVXNzjM5OTm64447NGvWLEVERFS8wZoXSP+YLv1vhLT8P1KdC6Xmf6t4u+W1cYH08SjJcMjZ8lodbzP8rIcbhqHMzExFRUUxB86H6Af/QD/4Hn3gHzKOn5CevdrXYQQEj+cdJpPU/z/SoQ3S4Y3SR8Ol4QulkLCKt10euRnSf2+Q/lwtw1JVJ678j5xVE896Cp9z36MP/AP94B/oB9/zZN5BEaQE4eHhmjVrlsLDPbiqepuB0p+/SL+8IX0ySrrzRym2gefaL63186XPRkuGU2p3s5z9X5bjRNZZTzEMQ3lhaXKwGrJP0Q/+gX7wPfrAPzjDM30dQsColLwjLFwa9I70Rk/pz9XSt5Okv031XPullZ0mvXuddPA3yRYtx80fqSCy6TlP43Pue/SBf6Af/AP94HuezDuY1FSCwmGpHp8pdNXTrlEguRmuhVILcj3b/rmseUv69G5XAaTTcGnA6/6zPgkAAEGq0vKOuEbStTNc3696Xdr0sWfbP5esVGnuP1wFkIhq0rAvXWuUAADgQxRBSpCbm6t7771XubkeLlKEWlyPq4uoJiX/Ln31oGfbP5tVM6Qvx7m+73KX9PdpfvfYPAAAglGl5R2SdEE/6ZLxru8/v1dK2eb51yjJ8WTp7f6u6ThVarqm4yS29c5rAwBwFvxfcAkiIiI0f/58z8zLPV10ben62ZJM0rp3pHXzPP8ap/vpJWnxQ67vu491PbqXYVwAAPiFSs07JOnyx6QGPaT8E66RqHknKud1CmXsl97qJ6VslSJrSbd9JdVsUbmvCQBAKVEEKYHT6dT+/fvldDor5wUaXy5d8ajr+0UPuBYuqwyGIS19VvruCdfPlz0s9Z5CAQQAAD9S6XlHSKg0cI4UmSilbnM9PreyHg54bI/0Vl8pbacUU0+6bZFUvUnlvBYAAOVAEaQEubm5mjx5cuUMSy10yf1S0z6SPVf6cKiUc8yz7RuGtGSKtPTkImi9JkmXT6QAAgCAn/FK3lG1pnTD25I5VNr0P+mXmZ5/jaM7XSNA0ve51iMZvkiKa+j51wEAoAIogpQgIiJCs2fPrrxhqZJrPY7r3nDdJTm2R/rkbslTd4AMQ/r6Edc0GEnqM1Xqcb9n2gYAAB7llbxDkup1dS3SLrnyhD9/8VzbR7a6RoBkHpCqN3MVQGLqeq59AAA8hCJICRwOh7Zv3y6Hw1G5LxQeK904TwqxStu/kla8VPE2nQ7XwmerXnf93P8Fqds9FW8XAABUCq/lHZJrcfRW10pOu/ThMOlESsXbPLDOVQA5cViq2cpVAIlKrHi7AABUAoogJcjPz9f06dOVn59f+S9Wq73U/z+u779/WvrlzfLP07XnSR8Nl36bJ5nMrkfgXniHpyIFAACVwKt5h8kk/eMV12iN4wel+TdIGQfK397u5dLcq6WcNKlWR2n4l1LVGp6LFwAAD6MIUoLw8HC9+uqrCg8P984Ldhwqdb5dMpyuhVI/Gy0VlHFecN4Jaf4gacvnUohFuvEdqcMtlRMvAADwGK/nHdZI10hUW4x08Ddp5mXSnhVlb2frIund611PnWl4qTTscykizuPhAgDgSRRBSuBwOLRhwwbvDEst1P9F6conXSM41v9XeutvUvqfpTs3O02ad4206wcprIo0+EOpxdWVGi4AAPAMn+QdNS+QRi2V4ltLWSnSO/+QVs0o/WjUDe9LH9wqOfKk5v2lwR+5iisAAPg5iiAlKCgo0LvvvquCggLvvajJJHUfK936sRQe99edmd0/nv2848nS2/2l/b+67ugM+9z1CF4AAHBe8EneIbme3DLiG6n1QNcaIYsfkj65S8rPPvt5q9+QPrlTMhxSu5tdo0/DbN6JGQCACqIIUgKbzabnn39eNpsP/qA3vtx1ZyahrZR9VHrnGunnV0u+M5O2W5rTRzryh1Q1QbrtK6lOZ29HDAAAKsCneYelinT9LKnPM5IpRPr9fWnOVdKxvcWPNQxp6b+lr/7p+rnLXa71x0JCvRszAAAVQBGkBHa7XatWrZLdbvdNALH1XXdm2t7kusvyzaPS/0ZI+Vl/HXP4D2nO31yP141tIN2+WIpv6Zt4AQBAufk87zCZpG6jpaGfShHVpeSNrtGoO7//6xinU1o8UVr6jOvnno9If3tWMpNKAgDOL/zlKoHdbteiRYt8l4xIUli4dO0Mqe9zkjlU2vQ/afZVUtouaf+ak4+iS5ZqtpRu/9o1pBUAAJx3/CLvkFyLm965TKrVQco55lr09KdpkqPAtWj76v9zHfe3f0s9H3IVTwAAOM8wfrEENptNTz75pK/DcCUXXe6UEtpIHw6TDm+SZvaUHHapIEuqc6FrEVRWYgcA4LzlN3mHJEXXkW5bLC26X/rtXem7ydIvb0qZ+13TZa55XWp3k6+jBACg3BgJUgK73a4ffvjB93dkCtW/2HVnps6FUm6GqwDS6HJpyKcUQAAAOM/5Xd4RZpP+8arryXXmMFcBJMQqDXqXAggA4LxHEaQEPp+bW5KoWtLwhdKl/5Quvlca/IFkrerrqAAAQAX5Zd5hMkkXjpBuWyS1ucG1XsgF/XwdFQAAFcZ0mBLYbDZNnDjR12EUF2qVrnjU11EAAAAP8tu8Q5LqXuT6AgAgQDASpAQFBQVauHChCgoKfB0KAAAIcOQdAAB4D0WQEjidTu3YsUNOp9PXoQAAgABH3gEAgPcwHaYEVqtV48aN83UYAAAgCJB3AADgPYwEKUFBQYEWLFjAsFQAAFDpyDsAAPAeiiAlMAxDaWlpMgzD16EAAIAAR94BAID3MB2mBBaLRaNGjfJ1GAAAIAiQdwAA4D2MBClBfn6+5s2bp/z8fF+HAgAAAhx5BwAA3kMRBAAAAAAABAWmw5TAYrFoyJAhvg4DAAAEAfIOAAC8JyCKIIULiWVmZnqkvfz8fP33v//VLbfcIovF4pE2/ZXdbi/VdTtx4oTCwsK8EBHOhn7wD/SD79EHvnf8+HFJCtrFPD2Ze5B3lIzPue/RB/6BfvAP9INveTLvMBkBkL3s379fdevW9XUYAAAEnZ07d6pRo0a+DsPryD0AAPA+T+QdAVEEcTqdOnjwoCIjI2UymXwdTsDJzMxU3bp19eeffyoqKsrX4QQt+sE/0A++Rx/4h4yMDNWrV0/Hjh1TTEyMr8PxOnKPysXn3PfoA/9AP/gH+sH3PJl3BMR0GLPZrDp16vg6jIAXFRXFh94P0A/+gX7wPfrAP5jNwbnGOrmHd/A59z36wD/QD/6BfvA9T+QdwZm5AAAAAACAoEMRBAAAAAAABAWKIDgnq9WqyZMny2q1+jqUoEY/+Af6wffoA/9AP6Ay8fvle/SBf6Af/AP94Hue7IOAWBgVAAAAAADgXBgJAgAAAAAAggJFEAAAAAAAEBQoggAAAAAAgKBAEQQAAAAAAAQFiiBw+/HHH3X11VerVq1aMplM+vTTT4vsNwxDkyZNUmJiosLDw9W7d2/t2LHDN8EGqKlTp+rCCy9UZGSkatasqWuuuUbbtm0rckxubq5Gjx6tatWqqWrVqrr++ut1+PBhH0UcmP7v//5Pbdu2VVRUlKKiotStWzd99dVX7v30gfc9++yzMplMGjdunHsb/VD5nnjiCZlMpiJfF1xwgXs/fYCKIvfwPXIP3yPv8E/kHr7hjdyDIgjcsrKy1K5dO7322msl7n/uuec0ffp0zZgxQ6tXr1aVKlXUp08f5ebmejnSwLVs2TKNHj1aq1at0rfffquCggJdddVVysrKch8zfvx4ffHFF/roo4+0bNkyHTx4UNddd50Pow48derU0bPPPqu1a9dqzZo1uuKKKzRgwABt3rxZEn3gbb/++qveeOMNtW3btsh2+sE7WrVqpUOHDrm/fvrpJ/c++gAVRe7he+Qevkfe4X/IPXyr0nMPAyiBJOOTTz5x/+x0Oo2EhATj+eefd29LT083rFar8d577/kgwuBw5MgRQ5KxbNkywzBc1zwsLMz46KOP3Mds2bLFkGSsXLnSV2EGhdjYWGPWrFn0gZcdP37caNq0qfHtt98al112mTF27FjDMPgseMvkyZONdu3albiPPoCnkXv4B3IP/0De4TvkHr7ljdyDkSAold27dys5OVm9e/d2b4uOjlaXLl20cuVKH0YW2DIyMiRJcXFxkqS1a9eqoKCgSD9ccMEFqlevHv1QSRwOh95//31lZWWpW7du9IGXjR49Wv379y9yvSU+C960Y8cO1apVS40aNdItt9yiffv2SaIPUPnIPXyD3MO3yDt8j9zD9yo79wj1eMQISMnJyZKk+Pj4Itvj4+Pd++BZTqdT48aNU/fu3dW6dWtJrn6wWCyKiYkpciz94HkbN25Ut27dlJubq6pVq+qTTz5Ry5YttX79evrAS95//32tW7dOv/76a7F9fBa8o0uXLnr77bfVvHlzHTp0SFOmTFGPHj20adMm+gCVjtzD+8g9fIe8wz+Qe/ieN3IPiiCAnxo9erQ2bdpUZA4cvKd58+Zav369MjIytGDBAg0bNkzLli3zdVhB488//9TYsWP17bffymaz+TqcoNW3b1/3923btlWXLl1Uv359ffjhhwoPD/dhZAAqA7mH75B3+B65h3/wRu7BdBiUSkJCgiQVW3n38OHD7n3wnDFjxujLL7/UDz/8oDp16ri3JyQkKD8/X+np6UWOpx88z2KxqEmTJurUqZOmTp2qdu3a6eWXX6YPvGTt2rU6cuSIOnbsqNDQUIWGhmrZsmWaPn26QkNDFR8fTz/4QExMjJo1a6akpCQ+C6h05B7eRe7hW+Qdvkfu4Z8qI/egCIJSadiwoRISErRkyRL3tszMTK1evVrdunXzYWSBxTAMjRkzRp988om+//57NWzYsMj+Tp06KSwsrEg/bNu2Tfv27aMfKpnT6VReXh594CW9evXSxo0btX79evdX586ddcstt7i/px+878SJE9q5c6cSExP5LKDSkXt4B7mHfyLv8D5yD/9UGbkH02HgduLECSUlJbl/3r17t9avX6+4uDjVq1dP48aN09NPP62mTZuqYcOGevzxx1WrVi1dc801vgs6wIwePVrz58/XZ599psjISPfctujoaIWHhys6OlojRozQhAkTFBcXp6ioKN17773q1q2bunbt6uPoA8fEiRPVt29f1atXT8ePH9f8+fO1dOlSff311/SBl0RGRrrnoxeqUqWKqlWr5t5OP1S+Bx54QFdffbXq16+vgwcPavLkyQoJCdHNN9/MZwEeQe7he+Qevkfe4R/IPfyDV3KPij3ABoHkhx9+MCQV+xo2bJhhGK5H1T3++ONGfHy8YbVajV69ehnbtm3zbdABpqTrL8l466233Mfk5OQY99xzjxEbG2tEREQY1157rXHo0CHfBR2Abr/9dqN+/fqGxWIxatSoYfTq1cv45ptv3PvpA9849TF1hkE/eMOgQYOMxMREw2KxGLVr1zYGDRpkJCUluffTB6gocg/fI/fwPfIO/0Xu4X3eyD1MhmEYnqjYAAAAAAAA+DPWBAEAAAAAAEGBIggAAAAAAAgKFEEAAAAAAEBQoAgCAAAAAACCAkUQAAAAAAAQFCiCAAAAAACAoEARBAAAAAAABAWKIAAAAAAAIChQBAFw3lm6dKlMJpPS09N9HQoAAAgC5B5A4KAIAgAAAAAAggJFEAAAAAAAEBQoggAoM6fTqalTp6phw4YKDw9Xu3bttGDBAkl/DRdduHCh2rZtK5vNpq5du2rTpk1F2vjf//6nVq1ayWq1qkGDBnrhhReK7M/Ly9NDDz2kunXrymq1qkmTJpo9e3aRY9auXavOnTsrIiJCF198sbZt21a5bxwAAPgEuQcAT6EIAqDMpk6dqnfeeUczZszQ5s2bNX78eN16661atmyZ+5gHH3xQL7zwgn799VfVqFFDV199tQoKCiS5Eogbb7xRN910kzZu3KgnnnhCjz/+uN5++233+UOHDtV7772n6dOna8uWLXrjjTdUtWrVInE8+uijeuGFF7RmzRqFhobq9ttv98r7BwAA3kXuAcBjDAAog9zcXCMiIsL4+eefi2wfMWKEcfPNNxs//PCDIcl4//333fuOHj1qhIeHGx988IFhGIYxePBg48orryxy/oMPPmi0bNnSMAzD2LZtmyHJ+Pbbb0uMofA1vvvuO/e2hQsXGpKMnJwcj7xPAADgH8g9AHgSI0EAlElSUpKys7N15ZVXqmrVqu6vd955Rzt37nQf161bN/f3cXFxat68ubZs2SJJ2rJli7p3716k3e7du2vHjh1yOBxav369QkJCdNlll501lrZt27q/T0xMlCQdOXKkwu8RAAD4D3IPAJ4U6usAAJxfTpw4IUlauHChateuXWSf1WotkoyUV3h4eKmOCwsLc39vMpkkueYMAwCAwEHuAcCTGAkCoExatmwpq9Wqffv2qUmTJkW+6tat6z5u1apV7u+PHTum7du3q0WLFpKkFi1aaMWKFUXaXbFihZo1a6aQkBC1adNGTqezyDxfAAAQnMg9AHgSI0EAlElkZKQeeOABjR8/Xk6nU5dccokyMjK0YsUKRUVFqX79+pKkJ598UtWqVVN8fLweffRRVa9eXddcc40k6f7779eFF16op556SoMGDdLKlSv16quv6vXXX5ckNWjQQMOGDdPtt9+u6dOnq127dtq7d6+OHDmiG2+80VdvHQAA+AC5BwBPoggCoMyeeuop1ahRQ1OnTtWuXbsUExOjjh076pFHHnEPCX322Wc1duxY7dixQ+3bt9cXX3whi8UiSerYsaM+/PBDTZo0SU899ZQSExP15JNPavjw4e7X+L//+z898sgjuueee3T06FHVq1dPjzzyiC/eLgAA8DFyDwCeYjIMw/B1EAACx9KlS3X55Zfr2LFjiomJ8XU4AAAgwJF7ACgL1gQBAAAAAABBgSIIAAAAAAAICkyHAQAAAAAAQYGRIAAAAAAAIChQBAEAAAAAAEGBIggAAAAAAAgKFEEAAAAAAEBQoAgCAAAAAACCAkUQAAAAAAAQFCiCAAAAAACAoEARBAAAAAAABAWKIAAAAAAAIChQBAEAAAAAAEGBIggAAAAAAAgKFEEAAAAAAEBQoAgCAAAAAACCAkUQAAAAAAAQFCiCwC+8/vrr+uyzz8p0zvvvv6+33nqr0tqvLGlpaXrggQd04MABX4dSKebPn68lS5b4Ogx4kCc/P8nJyXrqqaeUl5fnkfYABJ7KzgnKqzR/v5OSkvTAAw8oJyenUmM5F1/mGg888IA2bdrk9df1hsWLF+ujjz7ydRjwIE/+tyMrK0uTJ09Wenq6R9pD5Qn1dQAAAsfBgwe1detWXX/99e5t//rXv9SjRw9deumlRY79+uuvtXnzZk2YMEGSdOLECX399dfasmWLjh8/roiICCUmJurKK69Uw4YN3W0dO3as2Ov269dPV1xxxVljS0tL0zPPPOP+2Wq1KiYmRo0bN1aPHj1Uo0YN975ff/1Vn332mZ5++mlJktPp1NKlS/Xrr7/q2LFjCgsLU/Xq1dW1a1d16dJFDzzwwFlf+8orr9SFF16oZ555RuPHj1ft2rXd8RT+fLrTY6iokmJs0KCBxowZ45H2SyshIUH16tXTjz/+qCuvvNKrrw0AFRETE6NJkyapSpUqvg7lnM6nWM8XmZmZWr58ue6//373ttdff121a9fWgAEDihx7+t/w/Px8fffdd9qwYYMyMjJktVoVHx+vSy+9VK1bt3a3tWvXrmKv27VrVw0cOPCc8Z36dz4sLEzR0dFq0KCBLrnkEtWpU8e9LykpSTNmzNBTTz2l8PBwSdKqVau0YsUKHT16VGazWXFxcWrXrp169ep1xtyrUOfOnXXTTTfpgQce0PDhw93v5/SfT1VSDBVRUozR0dH6//buNEqr+rDj+G9mWIZt2FdZHGSVzVgWQaJRDMY0qEk0uGRp3BvTpC+a5qRt2tMlaZt09ZyY2tSkJkYSlRgCLggqSIhbhGoAFSkMsosgAWWdGfqCw9OMDDDggno/n1c68zzP3HsZuP/7vf9779e//vU3/dnHok2bNhk9enQefPDBfOpTn3pHfzbHRgQB3jK//OUvM3LkyLRs2fKY33vbbbelrq4ul112WTp16pTXXnstL774Ynbu3Nngdeeff37GjRvX4GvH8vOuv/76dO/ePfv27cuGDRuyYMGC/Mu//EuuuuqqDBw4sNH3PPjgg3n88cfz8Y9/PL17986ePXuyZs2a0pm+v/zLvyy99plnnsns2bPzp3/6pw2W7/XXX2/yMr5dpk6dmsGDB5f+v1mzE7MLGDNmTO6+++6ce+65qaioOCHLAHAsamtr06xZs1RVVZ3oRWmS8vLy98yyvlc8+eSTOfnkk9OpU6djfu/06dPz0ksv5eKLL0737t2zc+fO1NTUHDLGGTduXM4///wGX2vRokWTf87B/XxtbW02b96cxx9/PDfddFM+9alPZfTo0YddrxkzZuTiiy/OKaecktra2mzYsCEbN25Mknz5y19OfX19kmT16tW57bbb8tWvfrU09mrevHmTl+/t9MbxYXn5ibngYcyYMfm3f/u3fOxjH0vr1q1PyDJwdCII70rLli3LHXfckU984hM5/fTTU19fn1mzZuXJJ59MeXl5xo4dm/379x/35+/cuTMzZszIsmXLUltbm/79++fiiy8uzQbYunVr7rnnntTU1KS2tjadOnXKxz72sQwdOjQ7d+7MPffck+XLl2fPnj3p0KFDzj333IwdO/a4lqW+vj533XVXampqct1116Vjx4751a9+lfnz52fbtm3p1KlTzjvvvPze7/1ekmT//v158MEH89RTT2XHjh1p06ZNRo4cmYsvvrhJ63bw7MRnPvOZzJgxI9u2bUt1dXWmTp1aGjDV1dVl5syZ+fWvf13a3jt27Mju3bvz+c9//rDr8eyzz+aKK6445m2wa9eurFq1Kn/4h3+YU045JUnSqVOn9O3b95DXtmzZ8k0N7Fq3bl16f+fOnXPqqafmlltuyZ133pmvfe1rje40ly1blgkTJmTUqFGlr/Xq1av037+7PJWVlYd8Lcm7IoK0atWq0eW65557snLlyuzatSudO3fOpEmT8oEPfOCwn7Nw4cIsWLAg27ZtS2VlZaqrq/O5z30uyYHfg0ceeSSPP/54duzYka5du+a8885rsO0GDRqUnTt3ZuXKlYcNTwAHvdVjgt27d2f69OlZsmRJKisrc84552TJkiUNzuh/4xvfyNixY/PKK69kyZIlGTFiRCZPnnzIDL7nnnuutC/t16/fYQ80D2fVqlW5//77s2bNmjRr1ix9+vTJpz/96bRu3Tq1tbWZNWtWFi9enD179qR379658MILS/vGI41H3jjb8OCZ9+uvvz733ntvNm3alF69emXq1Knp1q1baXmWLFmSOXPmZNOmTamqqsro0aMzadKkNxWsZ8+enccffzzXXnttevXqlWeffTazZ8/OK6+8kqqqqpx55pn50Ic+VHr9kfYxR9smTV3PuXPnZsGCBamtrc2oUaPSpk2bvPDCC6XZqY1ZvHhxJkyYcFzbYOnSpbnooosydOjQJAfGOL87O+OgFi1avKkxzu/u5zt16pTBgwdn2rRpueeee3Lqqac2elC+dOnSjBo1qkFA6NGjR+m/27Zt2+DzD37trZjB8VZqbHxYX1+fu+++Oy+++GJ27NiRjh07ZsKECfngBz942M955plnMmfOnLzyyitp0aJFTjrppPzBH/xBKfo88cQTmT9/frZu3ZqOHTtm4sSJOfPMM0vv79GjR6qqqvKb3/zmkJN2vHuIILzrLFq0KNOnT8+VV16ZU089NUkyf/78PPXUU6Wd2Pz587NkyZIMGDDguH7GT3/602zevDmf//znU1lZmXvvvTe33nprvvKVr6SioiL33HNP6urq8oUvfCEtWrTIpk2bSiX+gQceyKZNm3LNNdekTZs2eeWVV7Jv377SZ998883p1KlTLrvssqMuR21tbW6//fa8+uqrufHGG9O2bdv85je/yYwZM3LhhRdm0KBBWbZsWX7605+mffv2GTBgQJ599tksWLAgV155ZXr06JEdO3Zk/fr1TV63JNm3b1/mzZuXyy+/PGVlZbnjjjsyc+bMXHnllUmSRx55JIsWLcrUqVPTvXv3LFiwIEuXLi0FisZs2LAhu3fvTp8+fY75z6NFixZp2bJllixZkn79+r2jMxTKy8vzwQ9+MP/93/+dtWvXNhpe2rVrlxUrVmTChAkNBgMn0kMPPXTUe6985StfSceOHY/4mtra2vTu3TvnnHNOKisr89xzz2XatGnp3Llzo9tizZo1mTFjRi6//PL069cvu3btajB99+GHH86iRYtyySWXpEuXLlm5cmWmTZuWtm3bln5/mjVrll69eokgwFG9HWOCmTNnpqamJldddVXatm2b2bNnZ926dYdcmjh//vycd955h710b9u2bbntttsyYcKEnHHGGVm7dm1mzpzZ5HVbt25dbrnllowZMyYXX3xxysvLs2LFilLQmTVrVp599tlcdtll6dixY+bNm5fvfe97+drXvpbWrVsfdTzSmPvvvz9TpkxJmzZtMn369Nx5552lyyJXrlyZn/zkJ7nooovSv3//bNmypXT/i8mTJyc5cP+ErVu35gtf+MJR12///v35+c9/nmXLluXGG29Mly5dsnbt2vzoRz/K5MmTc9ppp6WmpiY/+9nP0qZNm4wZM+ao+5ijbZOmrOeiRYsyd+7cfOITn0h1dXUWL16cRx999IgzPHbu3JmXX3650XDRFO3atcvzzz+fESNGlE6WvFPOOuusPP3001m+fHlOO+20Rpdt5cqV2bp163HNcnk7LFq0KHffffcRX3PNNdekf//+R3zN/v370759+3z2s59N69ats3r16tx1111p165do9ti+/bt+fGPf5yPfexjGT58ePbs2dPg92/RokWZPXt2Pv7xj6dXr15Zv3597rrrrrRo0SJjxowpva5v375ZtWqVCPIuJoLwrrJw4cLcf//9ueqqqxoccC9YsCDnnntuRowYkST55Cc/mRdeeOG4fsbmzZuzdOnSfPGLX8zJJ5+cJLniiivyd3/3d1myZElGjRqVbdu2ZcSIEenZs2eSAzMGDtq2bVtOOumk0sH+G3cYHTt2bFLF37t3b2699dbU1tbmhhtuKBX1+fPnZ/To0aWqfPbZZ2f16tWZN29eBgwYkG3btqVdu3YZNGhQKioq0rFjx9LBalPWLTkw0+OTn/xkunTpkiQ588wzM3fu3NKyLVy4sMH2/vjHP57nnnvuiOvz6quvpry8/LgiQUVFRaZOnZq77rorjz32WHr37p3+/fvntNNOazDjIknuvffePPDAAw2+1pQd4ZEcPDu0devWRg/8p0yZkh/+8If567/+6/To0SP9+vXLsGHDSmd0ToTx48c3mF3RmDf+Ht5+++0NZrpcccUVGT58eIMzcBMnTswLL7yQZ555ptFtsW3btrRo0SJDhw4tDeQOHjjU1tbmoYceyvXXX1/6/evcuXNWrVqVxx9/vMHf6aqqqiNeYwzwdowJdu/enV//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Zs2apXv37sd1OUxjunbtmmeffTY1NTVp1apVHn300bz22muHjSDLli3Lli1b0r9//7Rq1SrPP/989u/fn65du6aysjJnn312ZsyYkfr6+lRXV2f37t2pqalJy5YtS2Fv69at2b59u5uiAkf0dowJKisrM3r06MyaNSutW7cu3Rj1eGaajB8/PvPnz8/MmTMzbty4rF27Nk899VST3z9p0qT80z/9U6ZPn57x48enWbNmWbFiRelpJRMmTCgtZ4cOHTJv3rzs3bu3dC+Lo41HjtWHP/zh3HrrrenQoUNGjhyZsrKyrF+/Phs3bswFF1yQJLnvvvvy29/+tkmX/o4YMSKXX355pk2blvLy8owaNSpnn312/v3f/z1z5swp3Rh14cKFpfHAkfYxLVu2POo2aYqJEyfmrrvuSu/evXPyySfnmWeeyYYNG446G3TgwIGlEwcHTZgwIQsXLszPf/7zjB07Ns2aNctzzz2XxYsX56qrriq97uabb84HPvCB9OnTJ61bt86mTZty33335ZRTTmkwftm7d+8hY5xmzZo1eX9/8HKx2travPLKK3nssceydOnSXHbZZYd9msv06dNTVVWVAQMGpH379tmxY0fmzp2bNm3aHNPlXY3ZunXrIeOY341sGzZsKD11JTkQIHr16nVcl8M0pkuXLnn66afzwgsvpFOnTnn66aezZs2aw/5Zr169uhTc2rZtm5deeimvvfZa6e/V+eefn5///OeprKzMkCFDUltbmzVr1mTXrl05++yzkxz4M1y7dm3p7wzvTiII7zrdunUrDXrKyspy4YUX5uyzz86OHTvyk5/8JGVlZRkzZkyGDx/e6GUWTTF16tTMmDEjt956a+rq6tK/f/9cffXVpemT9fX1+dnPfpbf/va3admyZYYMGVK68VmzZs1y33335dVXX03z5s1TXV2dT3/606XPfvXVV49pMHXWWWdl//79+a//+q9ce+21GT58eC666KLMnz8/M2bMSKdOnTJ16tTSdMRWrVrl4YcfzsyZM1NfX5+ePXvmqquuKk3VPNq6NcU555zTYHufccYZGTRo0FGvCx03blyefvrp0oyZ5MC1vtdcc03mzJmT+fPnp6ysLD179sz1119fuma3ZcuW6devXx599NHSNb8dOnTIuHHjMmnSpAY/Y/bs2Zk9e3aDr51xxhm55JJLmrRut9xyS5KUwtGAAQNy6aWXHvHM1+DBg7N48eI89NBD2b17d9q1a5cBAwZk8uTJb+qxgcmBe8O80V/8xV8kORB8/vVf/7XB9zp37pyvfe1rb+pn/q7zzjsvW7Zsyfe+9700b948Z5xxRoYNG3bYv1utWrXKb37zmzz44IOpra1Nly5dSk8qSpKPfOQjadu2bR5++OFs3bo1lZWV6d27d84999zSZyxevDiDBg1619yFHnj3ejvGBFOmTMn06dNz6623lh6Ru23btmO+PKVjx4753Oc+l1/84hdZuHBh+vTpkwsuuCB33nlnk97ftWvXXHfddbn//vtz0003pXnz5unbt29p1sRHP/rR7N+/P9OmTSs9Dvbaa68tHRAfbTxyrAYPHpyrr746c+bMySOPPJKKiop07dq1wX3Ktm/ffkw3tR41alRpHcrLyzNixIh85jOfyezZszN37ty0a9cu559/fimSH20fc7Rt0hSnn356tmzZklmzZpUekTt69OijzgYZO3Zs7r777vz+7/9+aTzUuXPnfOELX8gDDzyQW265JXV1denWrVs++9nPZsiQIQ227a9//evcf//92bt3b9q3b5+hQ4ce8uShJ5544pAbow4ePDjXXnttk9btpz/9aZIDvxvt27dPdXV1vvSlLx3x/jYDBw7Mk08+mcceeyyvv/56KX7ccMMNDe7ncjx+8YtfHPK1G2+8sfTfN998c4PvlZeX51vf+tab+pm/a/z48Vm3bl1+9KMfpaysLKeddlomTJiQ559/vtHXV1ZWZuXKlXn00UezZ8+edOzYMVOmTCndiHfcuHFp3rx55s2bl1mzZqVFixbp2bNng5lIS5cuTYcOHd7UDft5+5Xtf7M3AgDe9+rr6/Ptb387o0aNykc+8pHDvm7fvn35x3/8x3z6058+6s3ZKKba2tr8wz/8Q6688spD7ooPcCLs2bMnf/u3f5spU6Z4pGVB3XLLLWnXrl2uuOKKw75m//79uemmm3LWWWeVQhW80U033ZSJEye+qSf68PYzEwQ4xNatW7N8+fKccsopqa2tzcKFC7N169aj7vSbN2+eyy67LK+//vo7tKS812zbti2TJk0SQIATZt26dXn55ZfTp0+f7N69O3PmzEmSY7pslPeuvXv35rHHHsvgwYNTXl6exYsX58UXXyxddnw4ZWVlueSSS7Jx48Z3aEl5r3n99dczYsQIkew9wEwQ3vNeffXVfPvb3z7s99/4hAyObtu2bbn99tuzcePG7N+/Pz169MhHP/rRd/VNnu6+++4sWrSo0e+dfvrpTb5cBoD3rqaMCXbu3Jk777wzmzdvTkVFRXr37p0LL7ywwWNV3wrf+973smrVqka/N2nSpEMu9+SdsW/fvnz/+9/PunXrsm/fvnTr1i3nnXdeo0/Febc40hPhqqurm3y5DHCACMJ7Xl1d3RGvT+3YseObvm8D7347duwoPaL1jVq2bJl27dq9w0sEwDvt3TQm+O1vf5t9+/Y1+r236ubWFMPOnTuzc+fORr/XvHnzJj0pBfh/IggAAABQCEd+1AMAAADA+4QIAgAAABTC++LpMPX19Vm/fn3atWuXsrKyE704APC+t3///uzYsSO9evVKeXnxzqkYewDAO+etHHe8LyLI+vXr06dPnxO9GABQOGvWrEnv3r1P9GK844w9AOCd91aMO94XEeTgUx/WrFmTqqqqE7w0APD+t3379vTp06ewT14y9gCAd85bOe54X0SQg9NQq6qqDEQA4B1U1EtBjD0A4J33Vow7incRLwAAAFBIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAIzU70ArwV9u/fnyTZvn37CV4SACiGg/vcg/vgojH2AIB3zls57nhfRJAdO3YkSfr06XOClwQAimXHjh1p3779iV6Md5yxBwC8896KcUfZ/vfBKZz6+vqsX78+7dq1S1lZ2YleHAB439u/f3927NiRXr16pby8eFfXGnsAwDvnrRx3vC8iCAAAAMDRFO/UDQAAAFBIIggAAABQCCIIAAAAUAgiCAAAAFAIIggAAABQCCIIAAAAUAgiCAAAAFAI/wccuv1oqfDMVwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1100x750 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAALkCAYAAADgYCuzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8U1X/B/BPdppOulsolG3ZuyAgiGAVRFBBhkwFFMRBFaUqUwUV5ekDoiAUQX0QHKj4AxGtoEyrTFEoG2R0093s+/sjJBCatkmaNqH5vF+vvprce+7JSQ6lp997zveIBEEQQERERERERERUx4nd3QAiIiIiIiIiotrAIAgREREREREReQUGQYiIiIiIiIjIKzAIQkRERERERERegUEQIiIiIiIiIvIKDIIQERERERERkVdgEISIiIiIiIiIvAKDIERERERERETkFRgEISIiIiIiIiKvwCAIEZEX2Lx5M+69914EBwdDLpejcePGePLJJ3Hy5ElLGZFIhHfffbdW27V27VqIRCLk5ORYjp07dw733HMP/P39IRKJcPjwYfTt2xcPPPCAy1//22+/xQcffFDu+IQJE9CmTRuXv15lRCIRdu7c6ZK6Vq5ciXvvvReRkZEICAhA9+7d8d1337mkbk+UnJyMrVu3ljs+YcIEiESicl/btm2zKqfVajFz5kxERkbC19cXAwYMQHp6em0136Pt3LkTCxcurLH6582bh7179zp1nZ+fn+X5zp07IRKJ8Oeffzpcl61/I5GRkQ7XQ0REtwepuxtAREQ1a9asWXj77bcxbNgwrFq1CmFhYThz5gzWrFmDESNG4NChQ25r26BBg7Bv3z4EBQVZjs2ePRtnz57FV199hcDAQLRo0QIffPABJBKJy1//22+/xZ9//olp06ZZHZ89ezZKSkpc/nq15c0330RCQgKmTp0KPz8/fPnllxg6dCjWrl2L8ePHu7t5LpecnIwHHngAAwcOLHeuSZMm+N///md1LC4uzur5s88+iw0bNmDJkiWoX78+3nzzTdxzzz34+++/ERgYWKNt93Q7d+7Eu+++i1deeaVG6p8/fz78/Pxw5513VqueTp06Yd++feX61l7PPPMMRo8ebXkul8ur1R4iIvJcDIIQEdVhW7duxdtvv43Zs2djwYIFluN33XUXJk6ciP/7v/9zY+uAsLAwhIWFWR07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CwCEzZs3V1j/XXfdJdx5552C0Wi0HPv7778FkUgkbNmyxaoNw4cPt7q2T58+wj333GN57ujPjNncuXMFX1/fcsdd+e/g1v930tPTBZFIJCxcuNDudu3YsUMAIPzxxx9WdTdu3FjQ6/WWYykpKYJIJBKOHz9u9V6++OIL4ddffxWWL18uREZGCjExMUJeXl6lbSciotsTl8MQEdVx5innjrp06RLGjx+P+vXrQyqVQiaTYfv27VZLSjp16oS1a9fi3XffxbFjx8rVUdV5Z6WmpmLYsGGWu9K27N+/HwMGDEBISAikUilUKhWKi4ut2m+vXbt2oV+/fggODrYcu+OOO9C+fXvs3r3bquyAAQOsnrdq1crq7r4rPPTQQ5bHEokEQ4cOxe+//26z7NGjR/HUU09h4sSJVjMg7DVo0CCr59u3b8eDDz4IqVQKvV4PvV6PevXqoWPHjpZlDp06dUJeXh4mTJiAn376CaWlpTbrruqz2r59O+6++24EBwdbXksikaBPnz5WS2sq8txzz+Hpp59G3759MXToUPzwww+Ij4/HnDlzHPoMBEGwvL5er4fBYLA6b+szCg4ORr9+/ayuGzBgAA4dOgSDwYCQkBA0atQISUlJWLduXbl/I6WlpdizZw+GDx8Og8FgqaNFixaIiYkp9/7vvfdeq+e3fpZV/cwYjUartgqCUOln4sp/B7f65ZdfIAgCnnjiCbvKV2bw4MFWSZWHDRsGQRCQlpZmObZu3ToMHz4cd911F6ZNm4Yff/wRV65cwapVq6r9+kRE5HkYBCEiqqNCQkKgVCorne5eEaPRiAcffBC7d+/GggULsGPHDvzxxx+4//77oVarLeWWLVuGsWPH4r333kPbtm3RsGFDfPjhh3afd1Zubi6io6MrPH/x4kXce++9MBgMWLlyJfbs2YM//vgD4eHhVu2317Vr1xAREVHueEREBPLy8qyO3bzTDWDaZUKj0Tj8mhWRyWTllm5ERETg6tWr5cpeuHAB999/P7p164aVK1c6/FoqlcpqG1IAyMnJQXJyMmQymdXXrl278O+//wIA+vXrh08//RR///03EhISEBoainHjxjn8WeXk5ODbb78t91qffvqp5bUcIRaL8cgjj+D48eMoKysDANSrV89mnolr165Zgl6//vqr1evfc889VmVv/beRk5ODvLy8cu2eNGkS9Ho9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aVNh7ty5gk6ns2qjPZ/V1atXhSeeeEKIiooS5HK50KBBA2HYsGHCnj17LGWOHTsm9O7dW/D39xcACB9//LGQm5srPPjgg0KDBg0EuVwu+Pn5CX379hW2bdtW7v2o1WrhhRdeEMLDwwUfHx+hf//+VruHVMS8M8vNu82YaTQaYf78+ULz5s0FuVwuhIWFCXfffbfwySefCIIgCJmZmcKYMWOEJk2aCAqFQggPDxceeeQR4eTJk1b1/PHHH8LAgQOFwMBAwcfHR2jevLnw1FNPCf/++2+lbXjuueeERo0aWR2r6mfGFp1OJ0ybNk2IiIgQRCKR0KdPH8s5V/w72LVrl9CpUyfBx8fH6mfAYDAI77zzjtC8eXNBJpMJkZGRwogRIyy729i7O8yiRYuExMREITg4WPDz8xPGjh1rtUPO5s2bhe7duwv16tUTpFKpEBUVJTz++OPClStXKv1ciIjo9iUShCrSfxMREVGNE4lE2LFjR6V39+fNm4d3330XxcXFtdcwotuUSCTC4sWL8eKLL7q7KURE5EGYE4SIiIiIiIiIvAJzghAREXkZo9EIo9FY4XmJRGJzZxgiIiKi2x2XwxAREXkAe5bDuMqECROwbt26Cs/XVjuIiIiIahuDIERERF7m/PnzyMnJqfB8y5Yt4e/vX4stIiIiIqodDIIQERERERERkVdgYlQiIiIiIiIi8goMghARERERERGRV2AQhIiIiIiIiIi8AoMgREREREREROQVGAQhIiIiIiIiIq/AIAgREREREREReQUGQYiIiIiIiIjIKzAIQkRERERERERegUEQIiIiIiIiIvIKDIIQERERERERkVdgEISIiIiIiIiIvAKDIERERERERETkFRgEISIiIiIiIiKvwCAIEREREREREXkFBkGIiIiIiIiIyCswCEJEREREREREXoFBECIiIiIiIiLyCgyCEBEREREREZFXYBCEiIiIiIiIiLwCgyBERERERERE5BUYBCEiIiIiIiIir8AgCBERERERERF5BQZBiIiIiIiIiMgrMAhCRERERERERF6BQRAiIiIiIiIi8goMghARERERERGRV2AQhIiIiIiIiIi8AoMgREREREREROQVGAQhIiIiIiIiIq/AIAgREREREREReQUGQYiIiIiIiIjIKzAIQkRERERERERegUEQIiIiIiIiIvIKDIIQERER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9Gn88ssvSExMtJwfNWoUIiMjMXToUOzZswdnz57F119/jX379gEA5s6di88//xxz587F8ePHLcnFzPr164f3338fhw4dwp9//omnnnrKru1vmzdvjp9++gl79+7F8ePH8eSTTyIzM9NyXqlU4uWXX8ZLL72ETz75BGfOnMH+/fstWeDNJk2ahLfeeguCIFjtWkNERETuc/HiRSQmJiI9PR2ff/45li1bhueee67C8i+//DL27t2L6dOn4/Dhwzh16hS+++47S2LU2NhYjB8/Ho8//ji+/fZbnDt3Djt37sQXX3xhs77nn38eP/74I86dO4eDBw9ix44diIuLs1n2hRdeQGpqKl5//XWcPHkS69atw/vvv48XX3yx+h8EEdUaBkGICAAgFouxYcMGHDhwAG3atMGMGTOwePFiy3m5XI7t27cjPDwcAwcORNu2bfHWW29Z7nz07dsXX375JTZv3owOHTqgX79+Vju4vPfee4iJiUHv3r0xevRovPjii1CpVFW267XXXkOnTp2QkJCAvn37WgIxN5s9ezZeeOEFzJkzB3FxcRgxYkS5tbejRo2CVCrFqFGjoFQqq/FJERERkauMGzcOZWVl6NatG55++mk899xzlq1wbWnXrh1+/fVXnDx5Er1790bHjh0xZ84cREdHW8p8+OGHGDZsGKZNm4Y77rgDkydPttpC92YGgwFPP/004uLicN9996FFixb44IMPbJbt1KkTvvjiC2zYsAFt2rTBnDlzsGDBAuYZI7rNiIRbF+kTEdVB58+fR9OmTfHHH3+gU6dO7m4OERGR1+vbty86dOiA5ORkdzeFiLyI1N0NICKqSTqdDrm5uXjttdfQvXt3BkCIiIiIiLwYl8MQUZ22Z88eREVF4Y8//sCKFSvc3RwiIiIiInIjLochIiIiIiIiIq/AmSBERERERERE5BUYBCEiIiIiIiIir8AgCBERERERERF5BQZBiIiIiIiIiMgr1Jktco1GI65cuQJ/f3+IRCJ3N4eIiKhOEwQBRUVFiI6OhljsffdUOO4gIiKqPa4cd9SZIMiVK1cQExPj7mYQERF5lX///RcNGjRwdzNqHccdREREtc8V4446EwTx9/cHYPpQAgIC3Nya24der0dhYWGV5a5du4Z69erVQouoMuwHz8B+cD/2gfsVFRWhXbt2lt+/3objDufYO+4A+HPu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+PbbbzkHPhIeHm5fj24TGhqK2NhY+3HOg/f97W9/w7hx49C5c2ecP38ec+fOhVwux5133sn/FsgjGHv4H2MP/2PcERgYewQGn8QebdvAhoLJ5s2bRQCNbtOmTRNFUdqqbvbs2WJiYqKoVqvFG2+8UTxy5Ih/Bx1knH3+AMR//etf9nNqamrEhx9+WIyOjhZDQkLEW265Rbxw4YL/Bh2E7r33XrFz586iSqUS4+PjxRtvvFHcuHGj/XnOgX/U36ZOFDkPvjBx4kQxOTlZVKlUYocOHcSJEyeKx48ftz/POaC2Yuzhf4w9/I9xR+Bi7OF7vog9BFEURU9kbIiIiIiIiIiIAhl7ghARERERERFRu8AkCBERERERERG1C0yCEBEREREREVG7wCQIEREREREREbULTIIQERERERERUbvAJAgRERERERERtQtMghARERERERFRu8AkCBFddrZs2QJBEFBWVubvoRAREVE7wNiDKHgwCUJERERERERE7QKTIERERERERETULjAJQkRus1qtWLhwIbp06QKtVov09HR8+umnAOrKRdetW4f+/ftDo9Fg6NChyMvLc7jGZ599hr59+0KtViMtLQ2vvfaaw/MGgwFPPfUUUlNToVar0b17d+Tk5Dics3fvXgwaNAghISEYPnw4jhw54t1fnIiIiPyCsQcReQqTIETktoULF+L999/H8uXLceDAATzxxBOYPHkyvv/+e/s5Tz75JF577TXs3r0b8fHxGDduHEwmEwApgLjjjjswadIk/Pbbb3j++ecxe/ZsrFq1yv76qVOn4t///jeWLFmCQ4cO4e2330ZYWJjDOJ599lm89tpr2LNnDxQKBe69916f/P5ERETkW4w9iMhjRCIiN+j1ejEkJETctm2bw/H77rtPvPPOO8XNmzeLAMQ1a9bYnystLRW1Wq24du1aURRF8a677hJvuukmh9c/+eSTYp8+fURRFMUjR46IAMRNmzY5HYPtPf73v//Zj61bt04EINbU1Hjk9yQiIqLAwNiDiDyJlSBE5Jbjx4+juroaN910E8LCwuy3999/HydOnLCfN2zYMPvPMTEx6NWrFw4dOgQAOHToEK6++mqH61599dU4duwYLBYL9u/fD7lcjuuuu67ZsfTv39/+c3JyMgCgqKiozb8jERERBQ7GHkTkSQp/D4CILi+VlZUAgHXr1qFDhw4Oz6nVaodgpLW0Wq1L5ymVSvvPgiAAkNYMExERUfBg7EFEnsRKECJyS58+faBWq5Gfn4/u3bs73FJTU+3n7dixw/7zpUuXcPToUfTu3RsA0Lt3b/z0008O1/3pp5/Qs2dPyOVy9OvXD1ar1WGdLxEREbVPjD2IyJNYCUJEbgkPD8ff/vY3PPHEE7BarRgxYgTKy8vx008/ISIiAp07dwYAzJ8/H7GxsUhMTMSzzz6LuLg4TJgwAQDw17/+FYMHD8aCBQswceJEbN++HW+88QbefPNNAEBaWhqmTZuGe++9F0uWLEF6ejpOnz6NoqIi3HHHHf761YmIiMgPGHsQkScxCUJEbluwYAHi4+OxcOFC/P7774iKisJVV12FZ555xl4S+tJLL+Hxxx/HsWPHkJGRgW+++QYqlQoAcNVVV+Hjjz/GnDlzsGDBAiQnJ2P+/Pm455577O/x1ltv4ZlnnsHDDz+M0tJSdOrUCc8884w/fl0iIiLyM8YeROQpgiiKor8HQUTBY8uWLbj++utx6dIlREVF+Xs4REREFOQYexCRO9gThIiIiIiIiIjaBSZBiIiIiIiIiKhd4HIYIiIiIiIiImoXWAlCRERERERERO0CkyBERERERERE1C4wCUJERERERERE7QKTIERERERERETULjAJQkRERERERETtApMgRERERERERNQuMAlCRERERERERO0CkyBERERERERE1C4wCUJERERERERE7QKTIERERERERETULjAJQkRERERERETtApMgRERERERERNQuMAlCRERERERERO0CkyBERERERERE1C4wCUJEl5Xnn38eGRkZ9sf33HMPJkyY4LfxEBERUeASRREzZsxATEwMBEHA/v37/T0kIvIzJkGIiIiIiCgobdiwAatWrcJ//vMfXLhwATqdDuPGjUNKSgoEQcCXX37p7yESkY8xCUJEHmM0Gv09BCIiIiK7EydOIDk5GcOHD0dSUhKqqqqQnp6OZcuW+XtoROQnTIIQUauNHDkSWVlZmDlzJuLi4jB69Gjk5eXh5ptvRlhYGBITEzFlyhSUlJTYX2O1WvHKK6+ge/fuUKvV6NSpE1588UX780899RR69uyJkJAQdO3aFbNnz4bJZPLHr0dERESXsXvuuQePPvoo8vPzIQgC0tLScPPNN+OFF17ALbfc4u/hEZGfMAlCRG3y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",
"text/plain": [
"<Figure size 1100x750 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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6n0hIiLbkQhCGdNxExERWSE+Ph4TJ07E1atXre5CT5VHIpHg999/L/Xp/oIFC/DBBx8gLy+v8ipG9JiSSCRYtmwZ/vWvf4ldFSIiKgWHwxARUbllZmZi4cKF6NGjBzw8PHDs2DEsXrwYL774IhMgRERERFTlMAlCRETl5uzsjMuXL2Pjxo3IysqCv78/Ro8ejffff1/sqlEVotfrodfrS3xfJpOVuNQxERERkS1xOAwREZEDsmQ4jK2MGzfOOGGuOZVVDyIiIiImQYiIiMiurl27hoyMjBLfDwsLg4eHRyXWiIiIiBwVkyBERERERERE5BCkYleAiIiIiIiIiKgyMAlCRERERERERA6BSRAiIiIiIiIicghMghARERERERGRQ2AShIiIiIiIiIgcApMgREREREREROQQmAQhIiIiIiIiIofAJAgREREREREROQQmQYiIiIiIiIjIITAJQkREREREREQOgUkQIiIiIiIiInIITIIQERERERERkUNgEoSIiIiIiIiIHAKTIERERERERETkEJgEISIiIiIiIiKHwCQIERERERERETkEJkGIiIiIiIiIyCEwCUJEREREREREDoFJECIiIiIiIiJyCEyCEBEREREREZFDYBKEiIiIiIiIiBwCkyBERERERERE5BCYBCEiIiIiIiIih8AkCBERERERERE5BCZBiIiIiIiIiMghMAlCRERERERERA6BSRAiIiIiIiIicghMghARERERERGRQ2AShIiIiIiIiIgcApMgREREREREROQQmAQhIiIiIiIiIofAJAgREREREREROQQmQYiIiIiIiIjIITAJQkREREREREQOgUkQIiIiIiIiInIITIIQERERERERkUNgEoSIiIiIiIiIHAKTIERERERERETkEJgEISIiIiIiIiKHwCQIERERERERETkEJkGIiIiIiIiIyCEwCUJEREREREREDoFJECIiIiIiIiJyCEyCEBEREREREZFDYBKEiIiIiIiIiBwCkyBEVCa1Wi12FYiIiIgswriFiErDJAgRFdOtWzdERkZixowZ8PPzQ58+fbB//3506NABrq6uqFWrFmbPng2tVms8Rq/X4z//+Q8aNWoEV1dX1K1bF4sXL7bofO+88w6aNGkCNzc3NGjQANHR0dBoNMb3x40bh4EDB5ocM2PGDHTr1s0m5yciIqKqqyguiYyM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0Lp169SjRw9JV8bxaNWqlcuVTpJ09OhR59gi0pUrQLp27SofHx+tXr061zgjVx04cEDNmjW7Yc0AAABAQSEEQZErVaqUnn/+ef3f//2fFi9erGPHjmnHjh2aP3++pCsBQKlSpRQVFaUDBw5o06ZNGjZsmPr37+8cPPWP6tSpk958803t3btXu3fv1t/+9jeXv1BPnz5d77//vg4fPqyjR49q+fLlCg0NVXBwcK5tFWadDzzwgFJSUvTkk0+qY8eOCg8Pd86rXbu2du/erXXr1uno0aMaO3asdu3a9bu2f//99+udd95Rdna2evXqpfvuu08NGjRQ6dKldfHiRYWHh6tz586qVKlSnrc5XNW3b1+VL19ePXr00Ndff63jx49r8+bNevrpp/XTTz85l8vKytKgQYN08OBBff755xo/fryGDh0qDw8P+fn56cknn9SoUaO0du1aHTx4UIMHD9alS5ecv6gPHTpUycnJeuihh7R7927FxcXp3XffzfXL+O8xa9Ysffrpp4qLi1NcXJzmz5+vqVOnql+/ftdcJyQkRM2bN3cOFCpJVapUkY+Pj9544w398MMPWr16tSZNmuSy3o3qnzBhgqZNm6aZM2cqLi5O3377rd54441r1jF8+HCtXbtW06ZN0+HDhzVhwgTt3r3bZVDe0aNHa8CAAbnWnT9/vlq3bq1GjRrlmrdu3TqtXbtWx48f1/r169WxY0fVq1dPjz76qHOZUaNGadmyZXr77bcVHx+vN998U59++qmeeuopSf8LQNLS0jR//nwlJyfrzJkzOnPmjMttVgkJCTp16lSuAV4BAACAQuXmMUlgUZcvXzYvv/yyqVq1qvH29s71KNr8Pnr21347EGpeA6OeOnXKdO3a1fj5+ZnatWubzz//3GVg1Hnz5pmmTZsaPz8/ExgYaO68807z7bffOtfXH3xE7vXqvJbevXsbSebf//63S3tGRoaJjo42QUFBJjg42Dz55JPmhRdeME2aNLnu+/7WXXfdZaKiopyDiSYnJ5vz588bY4w5ffq0yyCj15OYmGgGDBhgypcvb+x2u6lRo4YZPHiwSUpKcqll3Lhxply5csbf398MHjzYZGRkOLeRnp5uhg0b5txGXo/I3bdvn+nataspXbq0CQgIMLfddps5duzYNff3Rsd55syZpmHDhqZ06dImMDDQNGvWzMyePdtc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",
"text/plain": [
"<Figure size 1100x750 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"\n",
"STAT_PANELS_CLS = ('accuracy', 'precision', 'recall', 'f1')\n",
"\n",
"best_epoch = int(history['best_epoch'])\n",
"epochs = np.asarray(history['epoch'])\n",
"GRIDS = sorted({g for m in history['train_metrics'] + history['val_metrics']\n",
" for g in m.get('kd_grid_cosine', {})}, reverse=True)\n",
" \n",
"if not history.get('epoch'):\n",
" print('NO HISTORY')\n",
"else:\n",
" epochs = np.asarray(history['epoch'], dtype=np.int64)\n",
" best_epoch_marker = int(history['best_epoch'])\n",
" use_kd = bool(CONFIG['USE_DISTILL'])\n",
" kd_grids = sorted({grid for split in ('train_metrics', 'val_metrics')\n",
" for metrics in history[split]\n",
" for grid in metrics.get('kd_grid_cosine', {})}, reverse=True)\n",
" best_index = (int(np.flatnonzero(epochs == best_epoch_marker)[0])\n",
" if best_epoch_marker in epochs.tolist() else len(epochs) - 1)\n",
" fig, axes = new_figure('Losses')\n",
" plot_train_val(axes[0, 0], 'loss')\n",
" plot_train_val(axes[0, 1], 'cls_loss')\n",
" if use_kd:\n",
" plot_train_val(axes[1, 0], 'kd_loss')\n",
" else:\n",
" blank_panel(axes[1, 0], 'kd_loss: kosong (USE_DISTILL=False)')\n",
" if use_kd and kd_grids:\n",
" for grid in kd_grids:\n",
" for split, linestyle, prefix in (('train_metrics', '-', 'train'),\n",
" ('val_metrics', '--', 'val')):\n",
" axes[1, 1].plot(epoch_axis(), kd_series(split, grid),\n",
" ls=linestyle, label='%s g%d' % (prefix, grid))\n",
" style_axis(axes[1, 1], 'kd_grid_cosine (cosine per grid)')\n",
" axes[1, 1].legend(fontsize=7, ncol=2)\n",
" else:\n",
" blank_panel(axes[1, 1], 'kd_grid_cosine: kosong (USE_DISTILL=False)')\n",
" save_figure(fig, f'{RUN_TAG}_loss.png')\n",
" fig, axes = new_figure('Classification')\n",
" for ax, metric in zip(axes.ravel(), STAT_PANELS_CLS):\n",
" plot_train_val(ax, metric)\n",
" save_figure(fig, f'{RUN_TAG}_cls.png')\n",
" fig, axes = new_figure('Ranking & confusion')\n",
" plot_train_val(axes[0, 0], 'roc_auc')\n",
" plot_train_val(axes[0, 1], 'pr_auc')\n",
" confusion_panel(axes[1, 0], best_index)\n",
" blank_panel(axes[1, 1])\n",
" save_figure(fig, f'{RUN_TAG}_confusion.png')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"id": "1537e512",
"metadata": {},
"source": [
"# Test"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "2d7de0b9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Building test information: 100%|██████████| 22/22 [00:00<00:00, 522.31it/s]\n",
"Test: 100%|██████████| 165/165 [00:05<00:00, 30.64it/s]\n"
]
},
{
"data": {
"image/png": "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wszMTFhaWopu3bqJAwcOVHmPmZmZYtSoUcLe3l4AEGPHjlXve9zngRBC/Prrr8LHx0coFAqN10B+fr6YM2eOuv0aN24sJkyYoD6vuqvDfPvtt2Ls2LHC0tJS2NjYiGnTpmms+vLNN9+Ijh07CisrK2FkZCSaNGkipk+fLjIzM6tsFyIienQSIaqYfpuIiBqMlStX4vPPP8eff/6JFi1aoLi4GNeuXYOHhweMjY2RkJCAZs2aVdntnxqmhIQEeHl5IT4+Hp6enpUeN27cOJw5c+axVysiaujKXlM7duzA888/r+twiIjoPhwOQ0RkIN5++22kpaWhU6dOmD59OkaMGAFvb2+UlJTg7Nmz2LRpExISEvDPP/9oZVUEIiIiIiJ9wyVyiYgMyEcffYRff/0Vhw8fRocOHWBpaQlbW1sMHToURkZG2LJlCxMgVOuUSiVKSkoq/SEiIiKqLRwOQ0RkoLKysnDjxg3I5XJ4eXmpV0ghw1Pd4TDa0qdPHxw+fLjS/XUVBxERERkeJkGIiIioTkVFRSE7O7vS/W3btlUvX0pERESkTUyCEBEREREREZFB4JwgRERERERERGQQmAQhIiIiIiIiIoPAJAgRERERERERGQQmQYiIiIiIiIjIIDAJQkREREREREQGgUkQIiIiIiIiIjIITIIQERERERERkUFgEoSIiIiIiIiIDAKTIERERERERERkEJgEISIiIiIiIiKDwCQIERERERERERkEJkGIiIiIiIiIyCAwCUJEREREREREBoFJECIiIiIiIiIyCEyCEBEREREREZFBYBKEiIiIiIiIiAwCkyBEREREREREZBCYBCEiIiIiIiIig8AkCBEREREREREZBCZBiIiIiIiIiMggMAlCRERERERERAaBSRAiIiIiIiIiMghMghARERERERGRQWAShIiIiIiIiIgMApMgRERERERERGQQmAQhIiIiIiIiIoPAJAgRERERERERGQQmQYiIiIiIiIjIIDAJQkREREREREQGgUkQIiIiIiIiIjIITIIQERERERERkUFgEoSIiIiIiIiIDAKTIERERERERERkEJgEISIiIiIiIiKDwCQIERERERERERkEJkGIiIiIiIiIyCAwCUJEREREREREBoFJECIiIiIiIiIyCEyCEBEREREREZFBYBKEiIiIiIiIiAwCkyBEREREREREZBCY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JyfnuY02bdqI0aNHax9XrlxZzJ07V2een376STg7O2sfz507V1SrVk37+OLFiwKAOH/+vBBCiK+++kp06NBBZx03b94UAMTFixfzjOOnn34SAERUVFSe03NkZ2cLR0dH8eeff2rbAIgNGzbozPfqq6+KqVOn6rT98ssvwsfHp8D1E5Vl7AlCRERERET5unz5Mnr37o2qVavCyclJe6rFjRs38px/6NChWLNmDRo3boxx48bh4MGD2mknT57ElStX4OjoCAcHBzg4OMDNzQ1paWkFnmIDAIGBgdr7bm5uqFWrFs6fPw8AOH/+PFq2bKkzf8uWLXH58mVkZ2ejffv2qFy5MqpWrYp+/fph1apVePToUUnSofXOO+/g+vXrOHz4MAClF0hAQABq166t3dfdu3dr99PBwUE7raB9tba2RsOGDXXa4uLiMGTIENSoUQPOzs5wcnLCw4cP830Ocpw8eRJTpkzRiWHIkCGIiYl57v0nKq04MCoREREREeUrODgYlStXxpIlS+Dr6wtZllG/fv18T1/p3Lkz/v33X2zduhU7duzAq6++iuHDh2PWrFl4+PAhmjRpkus0EgDw8PDQ2z44Ojri+PHjiIiIwN9//42JEydi0qRJ+Oeff0p82Vtvb2+88sorWL16NV566SWsXr0aQ4cO1U5/+PAhgoODMWPGjFzL+vj45LteOzs77TgkOQYMGID79+9j/vz5qFy5MmxsbBAYGFjoKUQPHz7E5MmT8eabb+aaZmtrW9guEpVJLIIQEREREVGe7t+/j4sXL2LJkiVo3bo1AGD//v2FLufh4YEBAwZgwIABaN26NT755BPMmjULAQEBWLt2LTw9PeHk5FSsWA4fPoxKlSoBUAZfvXTpEurUqQMAqFOnDg4cOKAz/4EDB1CzZk1YWFgAACwtLREUFISgoCCEhobCxcUFu3btyrNAYG1tjezs7EJj6tu3L8aNG4fevXvj2rVreOedd7TTAgICsH79evj7+8PS8vm+dh04cAALFy5Ely5dACiDyz47wKqVlVWumAMCAnDx4kVUr179ubZPVJbwdBgiIiIiIsqTq6srypcvjx9//BFXrlzBrl27EBISUuAyEydOxH//+19cuXIFZ8+exebNm7XFir59+8Ld3R3dunXDvn37EB0djYiICIwaNQq3bt0qcL1TpkxBeHg4zpw5g4EDB8Ld3R3du3cHAHz00UcIDw/HV199hUuXLmHFihX4/vvv8fHHHwMANm/ejP/7v/9DVFQU/v33X/z888+QZRm1atXKc1v+/v7Yu3cvbt++XeDVXN58802kpKRg6NChaNeuHXx9fbXThg8fjgcPHqB37974559/cPXqVWzfvh2DBg0qUoHlaTVq1MAvv/yC8+fP48iRI+jbt2+uy/X6+/sjPDwcsbGxSEhIAKA8Fz///DMmT56Ms2fP4vz581izZg2+/PLLYm2fqCxhEYSIiIiIiPKk0WiwZs0aHDt2DPXr18fYsWPx7bffFriMtbU1xo8fj4YNG+Lll1+GhYUF1qxZAwAoV64c9u7di0qVKuHNN99EnTp1MHjwYKSlpRXaM2T69OkYPXo0mjRpgtjYWPz555+wtrYGoPR4+O2337BmzRrUr18fEydOxJQpUzBw4EAAgIuLC/744w+88sorqFOnDhYvXoxff/0V9erVy3NbU6ZMwfXr11GtWrUCT9NxdHREcHAwTp48ib59++pM8/X1xYEDB5CdnY0OHTqgQYMGGDNmDFxcXKDRFO9rWFhYGBISEhAQEIB+/fph1KhR8PT01Jln9uzZ2LFjB/z8/PDCCy8AADp27IjNmzfj77//xosvvoiXXnoJc+fOReXKlYu1faKyRBJCCGMHQURERERElJeIiAi0a9cOCQkJJR6/g4goB3uCEBEREREREZFZYBGEiIiIiIiIiMwCT4chIiIiIiIiIrPAniBEREREREREZBZYBCEiIiIiIiIis8AiCBERERERERGZBRZBiIiIiIiIiMgssAhCRERERERERGaBRRAiIiIiIiIiMgssghARERERERGRWWARhIiIiIiIiIjMAosgRERERERERGQWWAQhIiIiIiIiIrPAIggRERERERERmQUWQYiIiIiIiIjILLAIQkRERERERERmgUUQIiIiIiIiIjILLIIQPYd+/fph6tSpxg6jTBg4cCC6d+9u1BgmTZqExo0bax+bQkymLiMjA/7+/jh69KixQyEiohLgZ5/+XLx4Ed7e3khJSTF2KM/N398f8+bNU3Wd77zzDmbPnq3qOomKgkUQKtMGDhwISZIgSRKsra1RvXp1TJkyBVlZWQCAiIgI7XRJkuDh4YEuXbrg9OnTha775MmT2Lp1K0aNGpVr2q+//goLCwsMHz4817Rnt+nl5YW3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CBERERERERGZBRZBiIiIiIiIiMgssAhCRERERERERGaBRRAiIiIiIiIiMgssghARERERERGRWWARhIiIiIiIiIjMAosgRERERERERGQWWAQhIiIiIiIiIrPAIggRERERERERmQUWQYiIiIiIiIjILLAIQkRERERERERmgUUQIiIiIiIiIjILLIIQERERERERkVlgEYSIiIiIiIiIzAKLIERERERERERkFlgEISIiIiIiIiKzwCIIEREREREREZkFFkGIiIiIiIiIyCywCEJEREREREREZoFFECIiIiIiIiIyCyyCEBEREREREZFZYBGEiIiIiIiIiMwCiyBEREREREREZBZYBDFFR34ElrYHHj0wdiREREREREREZQaLIKYm5hTw1yfArUjg6i5jR0NERERERERUZrAIYkpkGdgS8uSxhZXxYiEiIiIiIiIqY1gEMSVRK4Fb/zx5nPkY2DgciFxivJiIiIiIiIiIyghLYwdA/5OZBuyeptu24QPlb9RKoNkQw8dEREREREREVIawJ4ip+GcpkHIHcKoI+AYYOxoiIiIiIiKiMoc9QUxBegqwb7Zyv+1nwLHlutPtPQweEhXicQJwLQK4shOQLIBXJgD/HlDaEqKB9lMAn0bGjpKIiIiIiIiewiKIKTixEnj8AChfHWjUG9g0wtgR0bNkGYg5AVwJVwoft/4BhPxk+vEVuvP/EwZ0+AqwdTZsnERERERERJQvFkGMTc4GDi9S7gcOBywsgfpvAWfWKwWRk78aNz59yM4C0hIBe3djR6IrKwOI3qvcrxEEPE5UCh6XtgNXw4FH93Xn96gNxF946nEdQJKAu+eUosiJlcCo44Crv9JzJHofkBILvNAXSEtSCiTW9obaOyIiIiIiIrNn9CLIggUL8O233yI2NhaNGjXCd999h2bNmuU7/7x587Bo0SLcuHED7u7uePvttzFt2jTY2toaMGoVXdgCJP4L2LkCDd9R2rrOBl4aDljZla0iSHamsj97ZgLJt4FB24BKzQ0bgywrBZhybsrjzMdK745z/wUubQPSk5V2t2rK8yJnPVnW2hGo2gaoHqTcXPyA5DvAnRNAhSaAozdwdBmweawyv8gGto0HUmKAO1EAhNL+1yfKX+dKwOgoQGOh//0mIiIiIiIi4xZB1q5di5CQECxevBjNmzfHvHnz0LFjR1y8eBGenp65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DZ1fnRYtWoSMjAy8/fbbOusJDQ3FpEmTDBn6EyyCEBEREREREZk8oxdBAGDEiBH5nv4SERGh8/j69ev6D6i4WAQhIiIiIiIiMnk8sVcNQhg7AiIiIiIiIiIqBIsgamBPECIiIiIiIiKTxyKIGlgEISIiIiIiIjJ5LIKogafDEBEREREREZk8FkHUwJ4gRERERERERCaPRRA1sAhCREREREREZPJYBFEDiyBEREREREREJo9FEDVwTBAiIiIiIiIik8ciiBrYE4SIiIiIiIjI5LEIogYWQYiIiIiIiIhMHosgamARhIiIiIiIiMjksQiiCo4JQkRERERERGTqWARRA3uCEBEREREREZk8FkHUwCIIERERERERkcljEUQFEosgRERERERERCaPRRAiIiIiIiIiMgssghARERERERGRWWARhIiIiIiIiIjMAosgRERERERERGQWWAQhIiIiIiIiIrPAIggRERERERERmQUWQYiIiIiIiIjILLAIQkRERERERERmgUUQIiIiIiIiIjILLIIQERERERERkVlgEYSIiIiIiIiIzAKLIERERERERERkFlgEISIiIiIiIiKzwCIIEREREREREZkFFkGIiIiIiIiIyCywCEJEREREREREZoFFECIiIiIiIiIyCyyCEBEREREREZFZYBGEiIiIiIiIiMwCiyBEREREREREZBZYBCEiIiIiIiIis2ASRZAFCxbA398ftra2aN68OSIjIwucf926dahduzZsbW3RoEEDbN261UCREhERkakaOHAgJEmCJEmwtrZG9erVMWXKFGRlZRk7NCIig8qWBQ5dvY//Rt3Goav3kS0LY4dEZDKMXgRZu3YtQkJCEBoaiuPHj6NRo0bo2LEj7t69m+f8Bw8eRO/evTF48GCcOHEC3bt3R/fu3XHmzBkDR05ERESmplOnToiJicHly5fx0UcfYdKkSfj2229zzZeRkWGE6IjIlCUnJ2P79u1ITk42dijPZduZGLSasQu9lxzG6DVR6L3kMFrN2IVtZ2KMHVqRlJXngUyX0Ysgc+bMwZAhQzBo0CDUrVsXixcvRrly5bBs2bI8558/fz46deqETz75BHXq1MFXX32FgIAAfP/99waOPDcBydghEBERmTUbGxt4e3ujcuXKGDp0KP044pMAABNrSURBVIKCgrBp0yYMHDgQ3bt3xzfffANf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",
"text/plain": [
"<Figure size 1100x750 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import (classification_report, confusion_matrix,\n",
" roc_curve, precision_recall_curve)\n",
"import matplotlib.pyplot as plt\n",
"\n",
"TEST_THRESHOLD = 0.50\n",
"TEST_LOG_NAME = 'test.log'\n",
"\n",
"if 'RUN_TAG' not in globals():\n",
" RUN_TAG = 'p2_%s-%s%s' % (CONFIG['STUDENT'], CONFIG['TEACHER'],\n",
" '-kd' if CONFIG['USE_DISTILL'] else '')\n",
"if 'CHECKPOINT_DIR' not in globals():\n",
" CHECKPOINT_DIR = os.path.join(OUTPUT_DIR, RUN_TAG)\n",
"\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"checkpoint_path = os.path.join(CHECKPOINT_DIR, BEST_CHECKPOINT_NAME)\n",
"if not os.path.exists(checkpoint_path):\n",
" raise FileNotFoundError('checkpoint belum ada: %s' % checkpoint_path)\n",
"checkpoint = torch.load(checkpoint_path, map_location=device, weights_only=False)\n",
"if checkpoint.get('run_tag') != RUN_TAG:\n",
" raise SystemExit('checkpoint %r bukan untuk run %r'\n",
" % (checkpoint.get('run_tag'), RUN_TAG))\n",
"\n",
"eval_model = ClassificationModel(pretrained=True, dropout=CONFIG['DROPOUT']).to(device)\n",
"eval_model.load_state_dict(checkpoint['model_state_dict'])\n",
"eval_model.eval()\n",
"\n",
"test_labels, test_paths = build_information(dataset_dir=DATASET_DIR, split_name='test')\n",
"test_dataset = StrokeDataset(label_list=test_labels, image_path_dict=test_paths,\n",
" augment=False, phase=4,\n",
" slice_context=CONFIG['SLICE_CONTEXT'])\n",
"test_loader = DataLoader(test_dataset, batch_size=CONFIG['BATCH_SIZE'], shuffle=False,\n",
" num_workers=CONFIG['WORKERS'], pin_memory=True,\n",
" worker_init_fn=seed_worker, drop_last=False)\n",
"\n",
"probs_test, labels_test, pids_test = [], [], []\n",
"with torch.no_grad():\n",
" for batch in tqdm(test_loader, desc='Test'):\n",
" ct, _, _, label, patient_idx, _ = batch\n",
" logits = eval_model(ct.to(device, non_blocking=True).float())\n",
" probs_test.append(torch.sigmoid(logits.detach()).cpu().reshape(-1))\n",
" labels_test.append(label.detach().cpu().reshape(-1))\n",
" pids_test.append(np.asarray(patient_idx).reshape(-1))\n",
"\n",
"probs_test = torch.cat(probs_test).numpy().astype(np.float64)\n",
"labels_test = torch.cat(labels_test).numpy().astype(np.int64)\n",
"pids_test = np.concatenate(pids_test)\n",
"preds_test = (probs_test >= TEST_THRESHOLD).astype(np.int64)\n",
"\n",
"accuracy, precision, recall, f1, roc_auc, pr_auc, counts = calculate_metrics_cls(\n",
" torch.from_numpy(preds_test), torch.from_numpy(labels_test),\n",
" torch.from_numpy(probs_test))\n",
"test_ci, n_test_patient = cluster_metric_ci(\n",
" preds_test, labels_test, probs_test, pids_test,\n",
" draws=min(CONFIG['BOOTSTRAP_DRAWS'], 1000),\n",
" seed=CONFIG.get('BOOTSTRAP_SEED', 42))\n",
"\n",
"report = classification_report(labels_test, preds_test,\n",
" target_names=['Negative', 'Positive'],\n",
" digits=4, zero_division=0)\n",
"matrix = confusion_matrix(labels_test, preds_test, labels=[0, 1])\n",
"\n",
"poin = (('Acc', 'accuracy', accuracy), ('Prec', 'precision', precision),\n",
" ('Rec', 'recall', recall), ('F1', 'f1', f1),\n",
" ('AUC', 'roc_auc', roc_auc), ('PR-AUC', 'pr_auc', pr_auc))\n",
"\n",
"n_epoch = len(history.get('epoch', [])) if 'history' in globals() else 0\n",
"total_epoch = int(CONFIG['EPOCHS'])\n",
"baris = ['Test - threshold %.2f' % TEST_THRESHOLD,\n",
" 'run : %s' % RUN_TAG,\n",
" 'ckpt : epoch %d | F1 val %.4f | AUC val %.4f'\n",
" % (checkpoint['epoch'], checkpoint['val_f1'], checkpoint['val_auc']),\n",
" 'henti : %s'\n",
" % (('early stop di epoch %d dari %d -- kurva di grafik diulang datar'\n",
" % (n_epoch, total_epoch)) if 0 < n_epoch < total_epoch\n",
" else 'selesai %d/%d epoch' % (n_epoch, total_epoch)),\n",
" 'irisan: %d | pasien: %d' % (labels_test.size, n_test_patient),\n",
" '',\n",
" report.rstrip(),\n",
" '',\n",
" 'confusion (baris=true, kolom=pred)',\n",
" ' pred 0 pred 1',\n",
" 'true 0 %8d %8d' % (matrix[0, 0], matrix[0, 1]),\n",
" 'true 1 %8d %8d' % (matrix[1, 0], matrix[1, 1]),\n",
" '',\n",
" 'metrik nilai 95%% CI (%d pasien)' % n_test_patient]\n",
"for nama, kunci, nilai in poin:\n",
" if kunci in test_ci:\n",
" low, high = test_ci[kunci]\n",
" baris.append('%-9s %.4f [%.4f, %.4f]' % (nama, nilai, low, high))\n",
" else:\n",
" baris.append('%-9s %.4f -' % (nama, nilai))\n",
"\n",
"print('\\n'.join(baris))\n",
"with open(os.path.join(CHECKPOINT_DIR, TEST_LOG_NAME), 'a', encoding='utf-8') as log_file:\n",
" log_file.write('\\n'.join(baris) + '\\n\\n')\n",
"\n",
"fig, axes = new_figure('Test @ threshold %.2f' % TEST_THRESHOLD)\n",
"\n",
"axes[0, 0].imshow(matrix, cmap='Blues')\n",
"for (row, kolom), jumlah in np.ndenumerate(matrix):\n",
" axes[0, 0].text(kolom, row, '%d' % jumlah, ha='center', va='center', fontsize=11,\n",
" color='white' if jumlah > 0.6 * matrix.max() else 'black')\n",
"axes[0, 0].set_xticks([0, 1]); axes[0, 0].set_yticks([0, 1])\n",
"axes[0, 0].set_xticklabels(['pred 0', 'pred 1'])\n",
"axes[0, 0].set_yticklabels(['true 0', 'true 1'])\n",
"axes[0, 0].set_title('confusion (acc %.4f)' % accuracy, fontsize=10)\n",
"axes[0, 0].grid(False)\n",
"\n",
"fpr, tpr, _ = roc_curve(labels_test, probs_test)\n",
"axes[0, 1].plot(fpr, tpr, color='tab:blue')\n",
"axes[0, 1].plot([0, 1], [0, 1], color='0.7', ls='--', lw=0.8)\n",
"axes[0, 1].set_title('ROC (AUC %.4f)' % roc_auc, fontsize=10)\n",
"axes[0, 1].set_xlabel('false positive rate')\n",
"axes[0, 1].set_ylabel('true positive rate')\n",
"axes[0, 1].grid(alpha=0.3)\n",
"\n",
"precision_curve, recall_curve, _ = precision_recall_curve(labels_test, probs_test)\n",
"axes[1, 0].plot(recall_curve, precision_curve, color='tab:orange')\n",
"axes[1, 0].axhline(labels_test.mean(), color='0.7', ls='--', lw=0.8)\n",
"axes[1, 0].set_title('PR (AP %.4f, baseline %.4f)'\n",
" % (pr_auc, labels_test.mean()), fontsize=10)\n",
"axes[1, 0].set_xlabel('recall')\n",
"axes[1, 0].set_ylabel('precision')\n",
"axes[1, 0].grid(alpha=0.3)\n",
"\n",
"punya_ci = [(nama, kunci, nilai) for nama, kunci, nilai in poin if kunci in test_ci]\n",
"nama_metrik = [nama for nama, _, _ in punya_ci]\n",
"nilai_metrik = np.asarray([nilai for _, _, nilai in punya_ci])\n",
"kunci_metrik = [kunci for _, kunci, _ in punya_ci]\n",
"low_metrik = np.asarray([test_ci[kunci][0] for kunci in kunci_metrik])\n",
"high_metrik = np.asarray([test_ci[kunci][1] for kunci in kunci_metrik])\n",
"aksis_y = np.arange(len(nama_metrik))\n",
"axes[1, 1].errorbar(nilai_metrik, aksis_y,\n",
" xerr=[nilai_metrik - low_metrik, high_metrik - nilai_metrik],\n",
" fmt='o', color='tab:blue', ecolor='0.45', capsize=3)\n",
"axes[1, 1].set_yticks(aksis_y)\n",
"axes[1, 1].set_yticklabels(nama_metrik)\n",
"axes[1, 1].set_xlim(0, 1)\n",
"axes[1, 1].set_title('metrik + 95%% CI (%d pasien)' % n_test_patient, fontsize=10)\n",
"axes[1, 1].grid(alpha=0.3)\n",
"\n",
"save_figure(fig, '%s_test.png' % RUN_TAG)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "pre_thesis",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.20"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

Xet Storage Details

Size:
453 kB
·
Xet hash:
e6ef24f2437ce3f76b04f8223945b281f662ffa8290b1877cc231c247fdcff6e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.