{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Build Subset — PHASE 1 (LOCAL, máy bạn)\n", "\n", "Chạy trên **Windows local** (data đã nằm sẵn ổ D, nhanh, không timeout).\n", "\n", "**Việc:** lọc → stratified sampling 40k/5k/5k → xuất **bundle** gồm:\n", "- `manifest_{train,val,test}.json` + `.csv` (đường dẫn PhysioNet + ảnh đã chọn)\n", "- `reports/files/pXX/pSUBJ/sSTUDY.txt` (giữ **cấu trúc + tên gốc** PhysioNet)\n", "- `vqa/{vqa.json,vqa_val.json,vqa_test.json}` (đã lọc, `image_path` trỏ path gốc)\n", "\n", "→ Zip bundle, **upload lên Google Drive**, sang PHASE 2 (Colab) tải ảnh + upload HF.\n", "\n", "> Giữ **nguyên cấu trúc gốc** `files/pXX/pSUBJ/sSTUDY/.jpg` → tải đứt vẫn đối chiếu được manifest. Không cần GPU. Không tải ảnh ở bước này." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 0. Config (local paths)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OK SPLIT: D:\\USTH\\KLTN\\cxr-vlm-data\\mimic-cxr-2.0.0-split.csv\n", " OK META: D:\\USTH\\KLTN\\cxr-vlm-data\\mimic-cxr-2.0.0-metadata.csv\n", " OK CHEX: D:\\USTH\\KLTN\\cxr-vlm-data\\mimic-cxr-2.0.0-chexpert.csv\n", " OK REPORTS: D:\\USTH\\KLTN\\cxr-vlm-data\\mimic-cxr-reports\n", " OK VQA_TRAIN: D:\\USTH\\KLTN\\cxr-vlm-data\\mimic-ext-mimic-cxr-vqa-a-complex-diverse-and-large-scale-visual-question-answering-dataset-for-chest-x-ray-images-1.0.0\\MIMIC-Ext-MIMIC-CXR-VQA\\dataset\\train.json\n" ] } ], "source": [ "from pathlib import Path\n", "\n", "DATA_DIR = Path(r\"D:\\USTH\\KLTN\\cxr-vlm-data\")\n", "CXR_ROOT = DATA_DIR / \"mimic-cxr-reports\" # files/p10../sXXXX.txt\n", "\n", "SPLIT_CSV = DATA_DIR / \"mimic-cxr-2.0.0-split.csv\"\n", "META_CSV = DATA_DIR / \"mimic-cxr-2.0.0-metadata.csv\"\n", "CHEXPERT_CSV = DATA_DIR / \"mimic-cxr-2.0.0-chexpert.csv\"\n", "\n", "_VQA_DIR = (DATA_DIR\n", " / \"mimic-ext-mimic-cxr-vqa-a-complex-diverse-and-large-scale-visual-question-answering-dataset-for-chest-x-ray-images-1.0.0\"\n", " / \"MIMIC-Ext-MIMIC-CXR-VQA\" / \"dataset\")\n", "VQA_TRAIN, VQA_VALID, VQA_TEST = _VQA_DIR/\"train.json\", _VQA_DIR/\"valid.json\", _VQA_DIR/\"test.json\"\n", "\n", "# Bundle output (sẽ zip cái này rồi upload lên Drive)\n", "BUNDLE = Path(r\"D:\\USTH\\KLTN\\subset_bundle\")\n", "BUNDLE.mkdir(parents=True, exist_ok=True)\n", "\n", "N_TRAIN, N_VAL, N_TEST = 40_000, 5_000, 5_000\n", "SEED = 42\n", "JPG_BASE_URL = \"https://physionet.org/files/mimic-cxr-jpg/2.1.0\"\n", "\n", "for n, p in [(\"SPLIT\",SPLIT_CSV),(\"META\",META_CSV),(\"CHEX\",CHEXPERT_CSV),\n", " (\"REPORTS\",CXR_ROOT),(\"VQA_TRAIN\",VQA_TRAIN)]:\n", " print(f\" {'OK ' if p.exists() else 'MISSING'} {n}: {p}\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ready\n" ] } ], "source": [ "import re, json, shutil\n", "import numpy as np, pandas as pd\n", "import matplotlib.pyplot as plt, seaborn as sns\n", "sns.set_theme(style=\"whitegrid\"); plt.rcParams[\"figure.dpi\"]=110\n", "np.random.seed(SEED)\n", "\n", "CHEXPERT_LABELS = [\"Atelectasis\",\"Cardiomegaly\",\"Consolidation\",\"Edema\",\n", " \"Enlarged Cardiomediastinum\",\"Fracture\",\"Lung Lesion\",\"Lung Opacity\",\n", " \"No Finding\",\"Pleural Effusion\",\"Pleural Other\",\"Pneumonia\",\n", " \"Pneumothorax\",\"Support Devices\"]\n", "print(\"ready\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Load metadata + parser ALL-CAPS" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "images: 377110 | studies: 227835 | split: {'train': 368960, 'test': 5159, 'validate': 2991}\n" ] } ], "source": [ "split_df = pd.read_csv(SPLIT_CSV); meta_df = pd.read_csv(META_CSV); chex_df = pd.read_csv(CHEXPERT_CSV)\n", "for d in (split_df, meta_df, chex_df):\n", " d[\"subset\"] = \"p\" + d[\"subject_id\"].astype(str).str[:2]\n", "img = split_df.merge(meta_df[[\"dicom_id\",\"ViewPosition\"]], on=\"dicom_id\", how=\"left\")\n", "print(\"images:\", len(img), \"| studies:\", img.study_id.nunique(),\n", " \"| split:\", img.split.value_counts().to_dict())" ] }, { "cell_type": "code", "execution_count": 4, "id": "3b0c846e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "parser ok — exact-header FINDINGS / IMPRESSION only\n" ] } ], "source": [ "# Parser: CHỈ lấy đúng header \"FINDINGS\" và \"IMPRESSION\".\n", "# Không gom CONCLUSION / WET READ / view-desc / FINDINGS AND IMPRESSION.\n", "SECTION_RE = re.compile(r'^[ \\t]*([A-Z][A-Z ,/()\\.\\-]{1,70}?):\\s*', re.MULTILINE)\n", "\n", "def parse_report(txt):\n", " \"\"\"Trả về (findings, impression). Chỉ section có header == đúng\n", " 'FINDINGS' / 'IMPRESSION' (sau strip+upper) mới được tính.\"\"\"\n", " m = list(SECTION_RE.finditer(txt))\n", " if not m:\n", " return None, None\n", " f = i_ = None\n", " for idx, mm in enumerate(m):\n", " hdr = mm.group(1).strip().upper()\n", " s = mm.end()\n", " e = m[idx+1].start() if idx+1 < len(m) else len(txt)\n", " body = txt[s:e].strip()\n", " if hdr == \"FINDINGS\" and f is None:\n", " f = body or None\n", " elif hdr == \"IMPRESSION\" and i_ is None:\n", " i_ = body or None\n", " return f, i_\n", "\n", "print(\"parser ok — exact-header FINDINGS / IMPRESSION only\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Filter: (a) frontal PA>AP 1 ảnh/study → (b) cả findings+impression → (c) IQR outlier" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(a) frontal studies: 218,139 {'AP': 132267, 'PA': 85872}\n" ] } ], "source": [ "# (a) frontal, ưu tiên PA\n", "frontal = img[img.ViewPosition.isin([\"PA\",\"AP\"])].copy()\n", "frontal[\"vr\"] = (frontal.ViewPosition==\"AP\").astype(int) # PA=0 ưu tiên\n", "frontal = (frontal.sort_values([\"study_id\",\"vr\"])\n", " .drop_duplicates(\"study_id\", keep=\"first\").reset_index(drop=True))\n", "print(f\"(a) frontal studies: {len(frontal):,} {frontal.ViewPosition.value_counts().to_dict()}\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "missing report files: 1,053\n", "(b) có cả 2 phần: 116,641 / 218,139\n" ] } ], "source": [ "# (b) parse report (local SSD -> nhanh, vài phút cho ~150k study)\n", "recs=[]; miss=0\n", "for r in frontal.itertuples(index=False):\n", " p = CXR_ROOT/\"files\"/r.subset/f\"p{r.subject_id}\"/f\"s{r.study_id}.txt\"\n", " try: f,i_ = parse_report(p.read_text(encoding=\"utf-8\",errors=\"ignore\"))\n", " except FileNotFoundError: f=i_=None; miss+=1\n", " recs.append((r.study_id,f,i_))\n", "rep = pd.DataFrame(recs, columns=[\"study_id\",\"findings\",\"impression\"])\n", "rep[\"findings_len\"]=rep.findings.str.split().str.len()\n", "rep[\"impression_len\"]=rep.impression.str.split().str.len()\n", "pool = frontal.merge(rep, on=\"study_id\")\n", "both = pool[pool.findings.notna() & pool.impression.notna()].copy()\n", "print(f\"missing report files: {miss:,}\")\n", "print(f\"(b) có cả 2 phần: {len(both):,} / {len(pool):,}\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cutoff findings=102w impression=42w\n", "(c) eligible pool: 108,783 {'train': 106756, 'test': 1187, 'validate': 840}\n" ] } ], "source": [ "# (c) IQR outlier (Q3+1.5*IQR) cho cả findings & impression\n", "def iqr_hi(s):\n", " q1,q3=s.quantile(.25),s.quantile(.75); return q3+1.5*(q3-q1)\n", "f_hi,i_hi = iqr_hi(both.findings_len), iqr_hi(both.impression_len)\n", "print(f\"cutoff findings={f_hi:.0f}w impression={i_hi:.0f}w\")\n", "elig = both[(both.findings_len<=f_hi)&(both.impression_len<=i_hi)\n", " &(both.findings_len>=2)&(both.impression_len>=1)].copy()\n", "print(f\"(c) eligible pool: {len(elig):,} {elig.split.value_counts().to_dict()}\")" ] }, { "cell_type": "markdown", "id": "98ce6f5d", "metadata": {}, "source": [ "## 3. CheXpert label + stratum + cờ has_vqa" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "VQA total: 377391 | eligible có VQA: 76,939/108,783 (70.7%)\n", "stratum\n", "No Finding 51726\n", "Atelectasis 7302\n", "Support Devices 7043\n", "Cardiomegaly 6558\n", "None 6533\n", "Lung Opacity 6050\n", "Edema 5758\n", "Pneumonia 5362\n", "Pleural Effusion 3981\n", "Pneumothorax 2165\n", "Consolidation 1966\n", "Lung Lesion 1953\n", "Fracture 1380\n", "Enlarged Cardiomediastinum 604\n", "Pleural Other 402\n" ] } ], "source": [ "label_cols=[c for c in chex_df.columns if c in CHEXPERT_LABELS]\n", "elig = elig.merge(chex_df[[\"study_id\"]+label_cols], on=\"study_id\", how=\"left\")\n", "\n", "# tầng = nhãn positive HIẾM nhất của study (bảo toàn nhãn hiếm)\n", "rare_order = list((elig[label_cols]==1).mean().sort_values().index)\n", "def stratum(row):\n", " for lab in rare_order:\n", " if row.get(lab)==1: return lab\n", " return \"No Finding\" if row.get(\"No Finding\")==1 else \"None\"\n", "elig[\"stratum\"]=elig.apply(stratum,axis=1)\n", "\n", "# VQA\n", "vqa_all = pd.concat([\n", " pd.DataFrame(json.load(open(VQA_TRAIN,encoding=\"utf-8\"))).assign(vqa_split=\"train\"),\n", " pd.DataFrame(json.load(open(VQA_VALID,encoding=\"utf-8\"))).assign(vqa_split=\"valid\"),\n", " pd.DataFrame(json.load(open(VQA_TEST ,encoding=\"utf-8\"))).assign(vqa_split=\"test\"),\n", "], ignore_index=True)\n", "vqa_ids = set(vqa_all.image_id.astype(str))\n", "elig[\"has_vqa\"] = elig.dicom_id.astype(str).isin(vqa_ids)\n", "print(\"VQA total:\", len(vqa_all), \"| eligible có VQA:\",\n", " f\"{elig.has_vqa.sum():,}/{len(elig):,} ({elig.has_vqa.mean()*100:.1f}%)\")\n", "print(elig.stratum.value_counts().to_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Stratified sampling + carve split (patient-disjoint)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " + bù 4,160? val từ train pool\n", " + bù test từ train pool\n", "train=40,000 val=5,000 test=5,000\n", "patient-disjoint OK\n" ] } ], "source": [ "def stratified_pick(df, n, seed=SEED):\n", " if n>=len(df): return df.copy()\n", " prop=df.stratum.value_counts(normalize=True)\n", " alloc=(prop*n).round().astype(int)\n", " while alloc.sum()!=n:\n", " diff=n-alloc.sum()\n", " k=alloc.idxmax() if diff<0 else alloc.idxmin()\n", " alloc[k]+=int(np.sign(diff))\n", " picks=[]\n", " for s,k in alloc.items():\n", " g=df[df.stratum==s]; k=min(k,len(g))\n", " gv,gn=g[g.has_vqa],g[~g.has_vqa]\n", " tv=min(k,len(gv))\n", " sel=gv.sample(tv,random_state=seed)\n", " if k-tv>0: sel=pd.concat([sel,gn.sample(k-tv,random_state=seed)])\n", " picks.append(sel)\n", " out=pd.concat(picks)\n", " if len(out)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subset=pd.concat([tr,va,te],ignore_index=True)\n", "def prev(d): return (d[label_cols]==1).mean()*100\n", "cmp=pd.DataFrame({\"raw_full(%)\":prev(chex_df),\"eligible(%)\":prev(elig),\"subset(%)\":prev(subset)})\n", "cmp[\"|Δ| subset-elig\"]=(cmp[\"subset(%)\"]-cmp[\"eligible(%)\"]).abs().round(2)\n", "cmp[\"|Δ| elig-raw\"]=(cmp[\"eligible(%)\"]-cmp[\"raw_full(%)\"]).abs().round(2)\n", "print(cmp.round(2).to_string())\n", "ax=cmp[[\"raw_full(%)\",\"eligible(%)\",\"subset(%)\"]].plot(kind=\"bar\",figsize=(14,4),\n", " color=[\"#bbb\",\"#888\",\"#4C72B0\"])\n", "ax.set_title(\"CheXpert prevalence\"); ax.set_ylabel(\"% positive\")\n", "plt.xticks(rotation=40,ha=\"right\"); plt.tight_layout(); plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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xTB58uQ4OARqsU+YMCGce+65bnNJkpT1hgwZEh5//PFwxhlnhPbt24evv/463HnnneGjjz4KI0aMiFnyZOEdffTR4bjjjltpwpEkSVImMnAmSZJUSmSV9ejRIzz44IOxlvauu+4aB4pY46xNmzZxcIjg2tChQ0OvXr3CRRddFOrUqRMHkiiP0K1bN7e5JEnKaqzXQtCMPlHv3r3jbbvttlto2LBhuPDCC8P48ePDtttuG7777ruwxx57xIw0SZKkbGDgTJIkqQz69OkT1zZjNvWwYcPCuuuuG8sUcTuL7oLbBw4cGK6//voYSGMmdr9+/WKwTZIkKZv99ttvMfu+c+fOBW7ffPPN8zPtyTgD2fiSJEnZwsCZJElSGTAQdOKJJ8af4hBYu+OOO9y+kiQp59DPSS1ZnXjttdfi76233jpmndFnIjON23/99dewww47hMsuuyzsuOOOaXjXkiRJq2fgTJIkSZIkSeU2ceLE8MADD4R99903Zpk99thjYfny5THz/rbbbgs///xzLGXdvXv3MHLkyNCqVasyvxbPy/pp6dK8efO0vXamWbhwYZg2bVq630aVR/lUpHO/0AoeH/7H40PmtId0nzcz4fMnmfAlYeBMkiRJkiRJ5UJ22TnnnBM23XTTMGjQoHhbz549w1FHHRXXg02wDlqnTp3CvffeG9d/lSRJyjQGziRJkiRJklRmzz77bLj66qvDVlttFR588MHQsGHDePuWW24Zf1Kx1mvbtm3LPeudWePlyVirCHPnzk3r62eKunXrpv270P8yzfwuMoPHhxU8PmROe8iE82a6s+JLo+S5aZIkSZIkSVIK1nPt169f6NChQ3jyySfDhhtumH/fiy++GN59992VtteSJUvyg2uSJEmZxsCZJEmSJEmSSo31zCi5ePTRR8e1y+rVq1fg/ieeeCJcd911YenSpfm3zZo1K3z44Ycx0CZJkpSJLNUoSZIkSZKkUvn2229jttnmm28ejj322PDZZ58VuL958+bhvPPOC2eeeWb8fcIJJ4Rffvkl3HPPPbFc4+mnn+4WlyRJGcnAmSRJkiRJkkplzJgxMZPs66+/Dscff/xK9w8YMCB07do1rnlGsKxPnz6hZs2aoWPHjuHiiy8O6667rltckiTlZuCMjhCp959//nnsAGH69OnhxhtvDO+//3789z777BP69u0bNthgg/K/Y0mSJEmSJKVVr1694s/q7LnnnvFHkiSpSqxxxgKvLPyaat68eeGUU04JM2bMCAMHDgxXXHFFfBydqWXLlpX3/UqSJEmSJEmSJEmZlXH222+/xSyyJk2ahJkzZ+bfPmLEiDBnzpwwcuTIsNFGG8Xbtt5669ClS5cwevTocMghh1TMO5ckSZIkSZIkSVKx1ltvvVC7dm230JoInF177bWhWbNmoX379uHee+/Nv33cuHGhbdu2+UEztGnTJrRo0SKMHTvWwJkkSZIkSZIkSdIasNZaa4VqS5eExd9PTcv2rtWoRaheu27I+cDZ3//+9/DGG2+EF198MTz//PMF7psyZUro1KnTSn9D4Iz7JEmSJEmSJEmStGb8Pntq+P7xK9OyuZt2HxDqNGsdcjpwNmvWrJhtdumll8aMs8JY42ydddZZ6fZ69eqFadOmhfJavnx5mDRpUsgGzZs3T/dbyHkLFy6skHal7Ldo0aL4O1uOD1LCtlu56DdUr16uJV0lSZIkSZJUhZR6JOnyyy8P2223XejWrVuR9+fl5RX7t9WqVSvty0mSJEmSJEmSJEmZl3E2fPjw8NFHH4UXXnghLF26NH8md/Kbn/r164cFCxas9Lfz58+P95UXs8ZbtWoVssXcuXPT/RZyWt26dbOqPajyJJlmtgdlG9tu5Zo4cWIlv4IkSZIkSZKqbODslVdeiQGw/ffff6X7tt9++3DeeeeFli1bFlk6j9vatm1bvncrSZIkSZIkSZIkZULgjLXNCmeTPf300/k/TZo0CTVq1AgPPPBA+PHHH8OGG24YH/PFF1+EqVOnht69e1fsu5ckSZIkSZIkSZLSETjbfPPNV7pt7Nix8fe2224batasGdc+e/LJJ8Opp54aM9AWL14cbr311tCmTZvQuXPninrfkiRJkiRJkiRJUoWqXrFPF0LDhg3DE088ERo3bhz69u0bBg0aFHbdddfw0EMPxcCaJEmSJEmSJEmSlInKHck6//zz40+qLbbYIjz88MPlfWpJkiRJkiRJkiQpezPOJEmSJEmSJEmSpGxk4EySJEmSJEmSJEkycCZJkiRJkiRJkiStYMaZJEmSJEmSJEmSZOBMkiRJkiRJkiRJWsGMM0mSJEmSJEmSJMnAmSRJkiRJkiRJkrSCGWeSJEmSJEmSJEmSgTNJkiRJkiRJkiRpBTPOJEmSJEmSJEmSJANnkiRJkiRJKoulS5eGRx99NBx66KFhp512CgcccEAYNGhQmD9/fv5jpk+fHs4999zQvn37+HPJJZeEn376yQ0uSZIyVs10vwFJkiRJkiRlnyFDhoTHH388nHHGGTEo9vXXX4c777wzfPTRR2HEiBFhwYIF4ZRTTgn169cPAwcOjP++5ZZbQq9evcKoUaNCjRo10v0RJEmSVmLgTJIkSZIkSaWyaNGiGDTr0aNH6N27d7xtt912Cw0bNgwXXnhhGD9+fPj000/DnDlzwsiRI8NGG20UH7P11luHLl26hNGjR4dDDjnErS5JkjKOa5xJkiRJkiSpVH777bfQtWvX0Llz5wK3b7755vH37Nmzw7hx40Lbtm3zg2Zo06ZNaNGiRRg7dqxbXJIkZSQzziTlhObNm4clS5ak+21IkiRJUpXQuHHj0L9//5Vuf+211/Izy6ZMmRI6deq00mMInHGfJElSJjJwJqlYBKIoq5ENmMFYu3btdL8NSZIkSaqyJk6cGB544IGw7777htatW4d58+aFddZZZ6XH1atXL0ybNq1cr7V8+fIwadKkkM7Jm1ph4cKF5f4+VTHlU5HO/UIreHz4H48PtodMaQv0G6pXL3kBRgNnkopF0Gz48OFZsYVOPPHEsP7666f7bUiSJElSlcSaZuecc07YdNNNw6BBg+JteXl5xT6+WrVqa/DdSZIklZyBM0mSJEmSJJXZs88+G66++uqw1VZbhQcffDA0bNgw3l6/fv2wYMGClR4/f/78eF95MGu8VatWIZ3mzp2b1tfPFHXr1k37d6H/ZZr5XWQGjw8reHywPWRKWyArvjRKnpsmSZIkSZIkpbjjjjtCv379QocOHcKTTz4ZNtxww/z7WrZsWWRZJm7bYost3I6SJCkjGTiTlBPWW2891ziTJEmSpDWI9czuvffecPTRR4ehQ4fGtctSdezYMUyYMCH8+OOP+bd98cUXYerUqfE+SZKkTGSpRkk5Ya211grVli4Ji7+fGrJBrUYtQvXaddP9NiRJkiSpTL799tuYbbb55puHY489Nnz22WcF7m/evHno1q1bzEI79dRTw3nnnRcWL14cbr311tCmTZvQuXNnt7wkScpIBs4k5YzfZ08N3z9+ZcgGTbsPCHWatU7325AkSZKkMhkzZkxYunRp+Prrr8Pxxx+/0v0DBgwIXbt2DU888UQYOHBg6Nu3b6wSstdee8X/r1nTISlJkpSZ7KVIkiRJkiSpVHr16hV/Voe1zB5++GG3riRJyhqucSZJkiRJkiRJkiSZcSZJkqSK0Lhx41h+SZIkSZIkKZtZqlGSJEnl1qBBg1Bt6ZKwePqX5X6uWo1ahOq16/qtSJIkSZKkNc7AmSRJUhW2ZMmSMGfOnHI/T9OmTcPvs6eG7x+/svzP1X1AqNOsdbmfR5IkSZIkqbQMnEmSJFVhBM2GDx9e7ufp06dPhbwfSZIkSZKkdKpe1j98+umnwyGHHBJ22GGHcNBBB4XHHnss5OXl5d8/d+7c0Ldv37DbbruFnXfeOZx11llh2rRpFfW+JUmS0mrp0qXh0UcfDYceemjYaaedwgEHHBAGDRoU5s+fn/+Y6dOnh3PPPTe0b98+/lxyySXhp59+Suv7liRJkiRJUgVnnD355JNhwIAB4cwzzwy77rpr+Oijj8LgwYPjQBGDQ8uWLQs9e/YMP//8c7jiiitCjRo1wl133RW6d+8eXnrppbDOOuuU5WUlSZIyxpAhQ8Ljjz8ezjjjjBgU+/rrr8Odd94Z+0UjRowICxYsCKecckqoX79+GDhwYPz3LbfcEnr16hVGjRoV+0eSJEmSJEnK8sDZ8uXLw9ChQ8Phhx8eLrzwwngbWWVTp04NTzzxRAycvfLKK+Hzzz8Pzz//fGjdesX6FO3atYszsRlIYsBIkiQpWy1atCgGzXr06BF69+6d3x9q2LBh7B+NHz8+fPrpp7EM4siRI8NGG20UH7P11luHLl26hNGjR8fMfUmSJEmSJGV5qcZq1aqFYcOG5QfNEmuttVb4/fff4/+PGzcuNGvWLD9ohkaNGsXg2dixYyvifUuSJKXNb7/9Frp27Ro6d+5c4PbNN988/p49e3bsD7Vt2zY/aIY2bdqEFi1a2B+SJEmSJEnKlYwzAmdbbrll/H/WNPv111/DmDFjYnYZpRgxZcqU0LJly5X+loEistHKg4y3SZMmhWzQvHnzdL+FnLdw4ULXzqsktt/KZ/tVkrmEbDm3ZRv6DdWrl3lJ12I1btw49O/ff6XbX3vttfzMMvpDnTp1KrI/xH2Z0B/K5GN9Lh8j3e/dXrat9KsK+2GmHuNz+fieqW2rsvpDkiRJuapMa5wlPvjgg3DyySfH/992221juSLMmzcvbLrppis9vl69enEdNEmSpFwzceLE8MADD4R99903Zt3THypqXVf6Q7k8YChJkiRJklRlA2fMmGZdsx9++CHcfffd4ZhjjgnPPPNMzERbVcZaeTBLqlWrViFbzJ07N91vIafVrVs3q9pDtrH9Vi7br1JnI3ssq7xg1prAmmbnnHNOnDg0aNCgeFu29Icy9Vify8dI93u3l20r/arKfpiJx/hcPr5nattaU/0hSZKkXFGzvGWK+MGOO+4YyxGNGjUq1K9fPyxYsGClx5Ntxn2SJEm54tlnnw1XX3112GqrrcKDDz4YGjZsGG+3PyRJkiRJkpR9Sl3kmrJDL7zwQpg+ffpK2WeUI5o5c2Zc32zq1Kkr/S1libbYYovyvWNJkqQMcccdd4R+/fqFDh06hCeffDJsuOGG+ffRHyqqJKP9IUmSJEmSpBwKnFFa6IorrgiPPPJIgds//PDDmFHGmh4dO3YM3377bZg8eXL+/bNnzw4TJkyI90mSJGU71jO79957w9FHHx2GDh0a1y5LRZ+Hvs+PP/6Yf9sXX3wRJxfZH5IkSZIkScqRUo1klfXo0SOWImrQoEHYddddw9dffx3XOGvTpk0cPCK4xgBSr169wkUXXRTq1KkT7rzzzrD++uuHbt26Vc4nkSRJWkOYIES22eabbx6OPfbY8NlnnxW4v3nz5rHPQxbaqaeeGs4777ywePHicOutt8b+UufOnf2uJEmSJEmScmWNsz59+sS1zUaMGBGGDRsW1l133XDooYfG22vXrh0fw+0DBw4M119/fQyktW/fPpYyItgmSZKUzcaMGROWLl0aJw8df/zxK90/YMCA0LVr1/DEE0/E/lDfvn1jH2mvvfaK/1+zZrmWmZUkSZIkSVIlKdOoTfXq1cOJJ54Yf4pDYI2Z2JIkSbmGrHp+Voe1XR9++OE18p4kSZIkSZKUhjXOJEmSJEmSJEmSpFxk4EySJEmSJEmSJEkycCZJkiRJkiRJkiStYMaZJEmSJEmSJEmSZOBMkiRJkiRJ5TVr1qywyy67hHfeeafA7TfccEPYZpttVvp54IEH3OiSJCkj1Uz3G5AkSZIkSVL2mjlzZjj99NPDr7/+utJ9kyZNCh07dgznn39+gds33njjNfgOJUmSSs7AmSRJkiRJkkpt+fLl4fnnnw+DBw8u9jEEznr27Bl22mknt7AkScoKrnEmSZIkKWM1b948NG7cON1vQ5JUhMmTJ4f+/fuHo446Ktx0000r3T9jxozw22+/hVatWrn9JElS1jDjTJIkSVKFW7JkSZgzZ065n2ejjTYKtWvXrpD3JEmqWJRbHDNmTGjSpEkYP358kdlm4DEE2DgvbLXVVuHCCy8Me++9d7mz3ZLnT9fEDq2wcOHCMG3aNDdHmi1atCj+Tud+oRU8PvyPxwfbQ6a0BfoN1auXPI/MwJkkSZKkCsfg6PDhw8v9PCeeeGJYf/31K+Q9SZIq1nrrrbfK+7/88sv4e/78+WHgwIFxUsUTTzwRzjrrrDB06NCw1157+ZVIkqSMY+BMkiRJkiRJFY4SjjvssEOB7LKOHTuGI488Mtx+++3lCpwxazzdJSDnzp2b1tfPFHXr1k37d6H/ZZr5XWQGjw8reHywPWRKW5g4cWKpHu8aZ5IkSZIkSapwzZo1W6kk41prrRX22GOPuD6aJElSJjJwJkmSJCmjy4C5xpkkZafXXnst/hRGycaGDRum5T1JkiStjqUaJUmSJGUsMhOqLV0SFn8/tVzPU6tRi1C9dt0Ke1+SpNV76aWXwrvvvht23XXXsM4668TbFi5cGMaOHRs6dOjgJpQkSRnJwJkkSZKkjPb77Knh+8evLNdzNO0+INRp1rrC3pMkafXOPPPM8MYbb4SePXuGM844IyxdujQ88MADMXh2wQUXuAklSVJGslSjJEmSJEmSKlzr1q3Dk08+GerWrRv69u0bfzbYYIPw1FNPhebNm7vFJUlSRjLjTJIkSZIkSeVC6cXJkyevdPsOO+wQHnnkEbeuJEnKGgbOJEmSJEmSJCmLNW7cONSuXTvdb0OScoKBM0mSJEmSJEnKYgTN6tQIYfH0L9P2Hmo1ahGq166btteXpIpi4EySJEmSJEmSstzvs6eG7x+/Mm2v37T7gFCnWeu0vb4kVZTqFfZMkiRJkiRJkiRJUhYzcCZJkiRJkiRJkiQZOJMkSZIkSZIkSZJWMONMkiRJkiRJkiRJMnAmSZIkSZIkSZIkrWDGmSRJkiRJkiRJkmTgTJIkSZIkSZIkSSpHxtnSpUvDo48+Gg499NCw0047hQMOOCAMGjQozJ8/P/8x06dPD+eee25o3759/LnkkkvCTz/9VJaXkyRJkiRJkiRJkipdzbL80ZAhQ8Ljjz8ezjjjjBgU+/rrr8Odd94ZPvroozBixIiwYMGCcMopp4T69euHgQMHxn/fcsstoVevXmHUqFGhRo0aFf9JJEmSJEmSJEmSpDUZOFu0aFEMmvXo0SP07t073rbbbruFhg0bhgsvvDCMHz8+fPrpp2HOnDlh5MiRYaONNoqP2XrrrUOXLl3C6NGjwyGHHFKe9yxJkiRJkiRJkiSlv1Tjb7/9Frp27Ro6d+5c4PbNN988/p49e3YYN25caNu2bX7QDG3atAktWrQIY8eOrYj3LUmSJEmSJEmSJKU346xx48ahf//+K93+2muv5WeWTZkyJXTq1GmlxxA44z5JkiRJkiRJkiQpJ9Y4K2zixInhgQceCPvuu29o3bp1mDdvXlhnnXVWely9evXCtGnTyvVay5cvD5MmTQrZoHnz5ul+Czlv4cKF5W5TKprtt/LZfpWUQEa2nNuyDf2G6tVLnWAvVfo5dsmSJW5lSZIkVZjatWuHP9yekpQZgTPWNDvnnHPCpptuGgYNGhRvy8vLK/bx1apVK+9LSpIkSWscwS7W8S0vypkzsCFJkqTcUVF9xbJq2rRp2l5bknJNuQJnzz77bLj66qvDVlttFR588MHQsGHDeHv9+vXDggULVnr8/Pnz433lwazxVq1ahWwxd+7cdL+FnFa3bt2sag/ZxvZbuWy/Ss0081hWOciKlyoKAyHDhw8v9/OceOKJYf3116+Q9yRJkqTc6iuWVZ8+fdL22pKUa8pcu+iOO+4I/fr1Cx06dAhPPvlk2HDDDfPva9myZZHl87htiy22KPu7lSRJkrLceuutZ8aZJEmSJEm5lHHGemb33ntvOProo8P1118fatYs+DQdO3aMj/nxxx/zA2pffPFFmDp1aujdu3fFvHNJkiQpC6211lqh2tIlYfH3U8v9XLUatQjVa9etkPclSZIkSZLKEDj79ttvY7bZ5ptvHo499tjw2WefrbTYebdu3WIW2qmnnhrOO++8sHjx4nDrrbeGNm3ahM6dO7vdJUmSVKX9Pntq+P7xK8v9PE27Dwh1mrWukPckSZIkSZLKEDgbM2ZMWLp0afj666/D8ccfv9L9AwYMCF27dg1PPPFEGDhwYOjbt28sRbPXXnvF/y+cnSZJkiRJkiRJkiRlglJHsXr16hV/Voe1zB5++OGyvi9JkiRJkiRliVmzZoXDDz883H777WH33XfPv33u3LnhpptuCm+++WasSNShQ4dw+eWXx4pFkiRJmah6ut+AJEmSJEmSstfMmTPDaaedFn799dcCty9btiz07NkzjB8/PlxxxRWxMtG0adNC9+7dw/z589P2fiVJklbFuomSJEmSJEkqteXLl4fnn38+DB48uMj7X3nllfD555/Hx7RuvWJNznbt2oUDDjggjBgxokQVjSRJktY0M84kSZIkSZJUapMnTw79+/cPRx11VCzHWNi4ceNCs2bN8oNmaNSoUQyejR071i0uSZIykhlnkiRJkiRJKrWNN944jBkzJjRp0iSWYyxsypQpoWXLlivd3qJFi5iNVt5st0mTJoV0cY22/1m4cGEswVmV2R7+x/Zge0hle7A9ZEpboN9QvXrJ88gMnEmSJEmSJKnU1ltvvVXeP2/evLDpppuudHu9evVc40ySJGUsA2eSJEmSJEmqcHl5ecXeV61atXI9N7PGW7VqFdJp7ty5aX39TFG3bt20fxeZwPawgu3B9pDK9mB7yJS2MHHixFI93jXOJEmSJEmSVOHq168fFixYsNLt8+fPj/dJkiRlIgNnkiRJkiRJqnCsbzZ16tSVbmeNky222MItLkmSMpKBM0mSpHKaNWtW2GWXXcI777yzUrmWvn37ht122y3svPPO4ayzzqryC6dLkqSqo2PHjuHbb78NkydPzr9t9uzZYcKECfE+SZKkTGTgTJIkqRxmzpwZTjvttPDrr78WuH3ZsmWhZ8+eYfz48eGKK64IAwcOjEGz7t27x/JEkiRJue7ggw+OmWW9evUKzz//fHjllVfCqaeeGtZff/3QrVu3dL89SZKkItUs+mZJkiStyvLly+MA0ODBg4u8n4Ghzz//PD6mdevW8bZ27dqFAw44IIwYMSIOIEmSJOWyWrVqhWHDhsUJRNdff32oVq1aaN++fejXr19o0KBBut+eJElSkQycSZIklQElh/r37x9OOOGEsPvuu4czzjijwP3jxo0LzZo1yw+aoVGjRjF4NnbsWANnkiQpp3To0KFAScZE48aNwx133JGW9yRJklQWBs4kSZLKYOONNw5jxowJTZo0ieUYC5syZUpo2bLlSre3aNEiZqOVN9tt0qRJobyaN28eMtXChQszaj04t1VubK9Ma1cVbdGiRfF3RRwfcl1V2Fbuh+mRiW2LfkP16q7UIUmSVFIGziRJkspgvfXWW+X98+bNC5tuuulKt9erV881ziRJkiRJkjKUgTNJkqRKkJeXV+x9rO9RHswab9WqVagIc+fODZmobt26FfYZK4rbKvu3Vya2q4qUZLjk8mesKFVlW7kfrnmZ2LYmTpyY7rcgSZKUVczVlyRJqgT169cPCxYsWOn2+fPnx/skSZIkSZKUeQycSZIkVQLWN5s6depKt7O+0hZbbOE2lyRJkiRJykAGziRJkipBx44dw7fffhsmT56cf9vs2bPDhAkT4n2SJEmSJEnKPAbOJEmSKsHBBx8cM8t69eoVnn/++fDKK6+EU089Nay//vqhW7dubnNJkiRJkqQMVDPdb0CSJCkX1apVKwwbNiwMHDgwXH/99aFatWqhffv2oV+/fqFBgwbpfnuSJEmSJEkqgoEzSZKkcurQoUOBkoyJxo0bhzvuuMPtK0mSJEmSlCUs1ShJkiRJkiRJkiQZOJMkSZIkSZIkSZJWMONMkiRJkiRJkiRJMnAmSZIkSZIkSZIkrWDGmSRJkiRJkiRJkmTgTJIkSZIkSZIkSVrBjDNJkiRJkiRJkiSpIgJns2bNCrvsskt45513Ctw+d+7c0Ldv37DbbruFnXfeOZx11llh2rRpbnRJkiRJkiRJkiTlXuBs5syZ4bTTTgu//vprgduXLVsWevbsGcaPHx+uuOKKMHDgwBg06969e5g/f35537MkSZIkSZIkSZJU4WqW5Y+WL18enn/++TB48OAi73/llVfC559/Hh/TunXreFu7du3CAQccEEaMGBF69epVvnctSZIkSZIkSZIkZULG2eTJk0P//v3DUUcdFW666aaV7h83blxo1qxZftAMjRo1isGzsWPHlu8dS5IkSZIkSZIkSZmScbbxxhuHMWPGhCZNmsRyjIVNmTIltGzZcqXbW7RoEbPRyoNst0mTJoVs0Lx583S/hZy3cOFC186rJLbfymf7rTyNGzcOtWvXDtlg0003DYsWLcqac1u2od9QvXq5l3SVJEmSJElSFVGmwNl66623yvvnzZsXBwILq1evnmucSZIqHUGzGjVqhDlz5mT81mYyytprrx3PkdliyZIlYdasWel+G5IkScoS7du3D7/99ttKt7/11ltho402Sst7kiRJqtDA2erk5eUVe1+1atXK9dzMGm/VqlXIFnPnzk33W8hpdevWzar2kG1sv5XL9lu5ZsyYEYYPHx4yXZ8+fcJaYVmo/tPUkA1qNWoR6jZsGBo2bBiywcSJE9P9FiRJkkJV75cTNLvyyivD9ttvX6qJ2ZIkSTkTOKtfv35YsGDBSrfPnz8/3idJkv7n99lTw/ePX5kVm6Rp9wGhTrP/rWEqSZIkrUpSkvyggw4KjRo1cmNJkqSMVymLfrC+2dSpK8+cnzZtWthiiy0q4yUlSZIkSZKUYb788suwwQYbGDSTJElVO3DWsWPH8O2334bJkyfn3zZ79uwwYcKEeJ8kSZIkSZKqRuCM6kNnn312aNu2bdh5553DhRdeGMeJJEmSqkypxoMPPjgMHTo09OrVK1x00UWhTp064c477wzrr79+6NatW2W8pCRJkiRJkjKwVOPPP/8cunbtGk4//fTw1VdfhbvuuiucfPLJ4dlnnw316tUr0/MuX748vwxkOjRv3jxtr51pFi5cGKtMVWW2h/+xPdgeUtkebA+Z0hboN1SvXj29gbNatWqFYcOGhYEDB4brr78+VKtWLbRv3z7069cvNGjQoDJeUpIkSZIkSRnmpptuCuuss05o1apV/Pef/vSnsNVWW4UTTjghPPfcc+Gkk05K91uUJEmq2MBZhw4dCpRkTDRu3Djccccd5X16SZIkSZKkrMC67kwe1v8QKCusXbt2sXxjeTLGmDWeBOPSZe7cuWl9/UxRt27dtH8XmcD2sILtwfaQyvZge8iUtjBx4sRSPb5SMs4kSZIkSZKyxZIlS8KcOXPK/TxNmzYN4Y/FYfHM/5b7uWo1ahGq164bshklGl977bUYKNt8880LlEv6448/QsOGDdP6/iRJkopi4EySJEmSJFVpBM2GDx9e7ufp06dPyJs9NXz/+JXlfq6m3QeEOs1ah2y21lprhWuuuSYcddRR4YYbbsi//Y033giLFy+OVYwkSZIyjYEzSZIkSZIkVTjWNjvttNPCQw89FNZbb73QsWPHuNzHXXfdFfbZZ5/4b0mSpExj4EySJEmSJEmV4sILLwyNGjUKI0eODE888UQsz9itW7dw3nnnucUlSVJGMnAmSZIkSZKkSlGjRo3QvXv3+CNJkpQNqqf7DUiSJEmSJEmSJEmZwMCZJEmSJEmSJEmSZOBMkiRJkiRJkiRJWsGMM0mSJEmSJEmSJMnAmSRJkiRJkiRJkrSCGWeSJEmSJEmSJEmSgTNJkiRJkiRJkiRpBTPOJEmSJEmSJEmSJANnkiRJkiRJkiRJ0go1//9vSZIkSVIWa9y4cahdu3a630ZWcFtJkiRJKo6BM0mSJEnKAQ0aNAjVli4Ji6d/We7nqtWoRaheu27IVW4rSZIkScUxcCZJkiRJabRkyZIwZ86ccj9P06ZNw++zp4bvH7+y/M/VfUCo06x1yDRuK0mSJEmVzcCZJEmSJKURQbPhw4eX+3n69OkTcp3bSpIkSVJlq17pryBJkiRJkiRJkiRlAQNnkiRJkiRJkiRJkoEzSZIkSZIkSZIkaQUzziRJkiRJkiRJkiQDZ5IkSZIkSZIkSdIKZpxJkiRJkiRJkiRJBs4kSZIkSZIkSZKkFcw4kyRJkiRJkiRJkgycSZIkSZIkSZIkSWsg4+y9994Lxx13XNhpp53C3nvvHe64446wdOnSynxJSZKkjGJ/SJIkVXX2hyRJUjaptMDZxx9/HHr16hWaNGkS7rzzznDiiSeGBx98MAwePLiyXlKSJCmj2B+SJElVnf0hSZKUbWpW1hMTLNtiiy3C7bffHqpVqxb22muvUKtWrXDTTTeFnj17hsaNG1fWS0uSJGUE+0OSJKmqsz8kSZKyTaVknP3+++9h/Pjx4cADD4xBs8TBBx8cli1bFsaNG1cZLytJkpQx7A9JkqSqzv6QJEnKRpUSOJs+fXr4448/QsuWLQvcTpZZnTp1wpQpUyrjZSVJkjKG/SFJklTV2R+SJEnZqFpeXl5eRT/pRx99FI477ri4phklGlPtvvvu4YADDgjXXXddqZ93woQJIZuQbcdPJWziSrEiOzAvhCx5vyFuW95ulrzfLGP7rfQNbPut1M2bPcdfj71rRrt27cKalg39oYrcVyq0LWfgMdJtlQPbKwPbVcZuqwzdXm6r9GyvXG9XValt2R/KvWuOjLiWyND9ek2zPeRvCNuD7SF1x7A92B4yri2UtD9UKWucLV++PFSm6tUrJVGu0qSWq8x81WJDzha81ezavtknu7av7VfZ2n5tu5WlsvskudIfqrh9peLacqae491W2b29MrVdZeK2yuTt5bZKx/bK/XaVy23L/lDlSn97Tv+1RCbv12ta+reD7SGT2B48PtgeMudcUdr+UKUEzho0aBB/L1iwYKX7uK1+/fpZMztKkiSpLOwPSZKkqs7+kCRJykaVkrrVvHnzUKNGjTBt2rQCt8+aNSssXrw4bLHFFpXxspIkSRnD/pAkSarq7A9JkqRsVCmBs1q1aoVddtklvPrqqwVS4P7xj3+EmjVrhl133bUyXlaSJClj2B+SJElVnf0hSZKUjSptsbBzzjknfPHFF+H8888Pb775ZnjggQfCLbfcErp16xaaNm1aWS8rSZKUMewPSZKkqs7+kCRJyjbV8vLy8irryd94441w5513hq+++ipsuOGG4eijjw7nnntuLOMoSZJUFdgfkiRJVZ39IUmSlE0qNXAmSZIkSZIkSZIkhapeqlGSJEmSJEmSJEnKJgbOJEmSJEmSJEmSJANnkiRJkiRJkiRJ0gpmnEmSJEmSJEmSJEkGziRJkiRJkiRJkqQVzDiTJEmSJEmSJEmSDJxJkiRJkiRJkiRJK5hxJkmSJEmSJEmSJBk4kyRJkiRJkiRJklYw40ySJEk5Y9myZaGqy8vLS/dbUJZbvnx5ut+CJEmSJKWNgTNJ+v8caFQ2s/1KK9SoUSMsXbq0Sm+OatWqpfstZCwDQiXbRtWrr7hM/P333+NvzzFS+bkfScplc+fODZ9//nm634YkVRgDZyq3f/7zn+H555+P/+/FgLLRiBEjwvfff+9Ao7J2gJNjrwPl0grvvPNOOOGEE8IXX3xRpTfJsGHDwltvvRX/3/7Zim1ANmISEEoNoLl9CmZrso2+++67cPHFF4fRo0fH26ryOYa2UjjgapupPLm4bZPjT1XejyTltkcffTTst99+YezYsWHJkiXpfjsqg6o+8VC52w8rj5rl+mtVCV9//XWcvd2iRYsiZ5TcddddYdNNNw1HHnmkFwPKOm+88UYYOHBgaNKkSWjatGm6345U5qwAggTTpk0LG220Udhmm23COuus49ZUlejQFx6I/PXXX8Nnn30W1l9//VAVFBU4/+GHH8KTTz4Z9tprr9CxY0f7Z/+/ndCfnTFjRrjnnnviIHaDBg3CiSeeGJo3bx7vq+qTENgGmDJlSrj66qvDH3/8ETbbbLMqvV1oJ8l2mTVrVtwmjRs3DmuttVa631pOWbx4cTx2b7jhhvnbO7WPk82Sz8Hnmj17dnj//fdDo0aNwpZbblllzlNacz7++ONQq1ateB3QrFmzeFtVPoar8r322mth0qRJ4dNPPw29e/cOhx9+eKhdu7abPss8+OCD4fXXXw+bbLJJ2HPPPcNRRx3lsaOKYBzpxx9/jH2wNm3aeL4oxMCZikVplkGDBsVsnCFDhhQZOKOz37Bhw/wDaq5c4KhqzKapWbNm2HnnnWP7TQZhbcPKJhxv582bF6666qqY/UsAeOrUqaFdu3bxwqVDhw7pfotShWH26rPPPhsn6tStW7fA7VygJ8fv7bbbLtSvXz/8+9//DocddlhOX/QV/mzJNuBYsN566+XfV9XObRMmTIgXfmuvvXaBbTRq1Kg4WWb77bePQbNx48aFMWPGhJNPPjn07Nkzp9tKUYr6vGeddVbMVOQ8Qv+fyRhVaZsURrBjwYIF4brrrgvvvfde3I8InB133HGhS5cu6X57OeG+++6L+2a9evXifnnooYfGrOFcOWYln+O2226LGRm0HyY6bb311uH444+Pn1Uqr2+++SZceeWV4auvvor/XrRoUejevXs4/fTTC4zXSBWNNnf33XfHvueNN94Y25uyx08//RSuvfba8Mknn8Sxgw8++CC8/PLLMYDWvn37dL89VSIm8zBRbuLEiXFCGONK999/f9htt93c7ilyozeqSsFsgxdeeCFcf/314ZBDDom3cVHDATXV7rvvHj766KM4cJUrFzjKTVxAPP3003H2MEEzLiA4QbRq1Sr861//io+xDSvb3HHHHTEz+N57740/ZFIQRKDEFrdLuYL2zDH8r3/9a34wiAt1BoW+/PLL/OM3x3iCRmRdIZcHivhsZMBwHJg+fXqBc1jbtm3D+PHjq9y5jeDGnXfeGT788MMCt8+fPz8888wzcSY099N23n333RgguuWWW2L/tqpsp1WVjevVq1e8naoSderUidukKq8LR5bZueeeG/773/+Gv/zlLzHIuvHGG4d+/fqFkSNHhoULF6b7LWZtG2Tb9e3bN25HAkjMbmfSA9eeDz/8cAxYZnPJ01Scu/72t7/FwUn6amQEM8mDQH5yDSKVFf0djk9MaqYaEOc3Avu0M/YnqTLL+THhZttttw0///xznBSAqtxvyJZzMEESxgu4ruL/OW4MHjw4nqM4P910003569wqN4NmnDfoazGBiaA3k8SYMKeCqsbVoUosWQ+EkyEDDFzQ7LDDDnGBzwEDBoSHHnoonHHGGXF2bpKhw2xefpLZTVImIkvhnHPOiScDThDJmmYMCtF+Cfwy+Chl8jpmhQdmGCh/6aWXYim2XXbZJWyxxRZh//33j8HgOXPmxAFk27WyGYONBIORzJimzd96661xsJXjOG39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o5qM98pLLrkk3sPq1avnX5wklRM33nhjzKuUJJUOBGRz5syJOcLMnZQklU2FtxtLUhmycOHCQr3Dse2228bX6vKvf/0r5gdJ0pp04IEHxnc2CvC+9PDDD8dQcvABfebMmdGysU6dOunCCy+M4Iz2MWD2WX7FmSSpbHKmmSSVLgcccEDMIG7ZsqXv0ZJUhrlqIkmSVAbRNnbixIkRihGarVixItrCVKpUKR155JHpjTfeSKeddlqqWrVqXJ9B5MxYMDSTJEmSVp82bdr48kpSGWerRqkCYB4XLbqaNm2a9txzz/jet2/ftHTp0oLr0Hrw4osvjioGrsOJ3n333VfofrL5Ya+//nrMy9lvv/3S/vvvny666KL01VdfpX/+858xU4cKB9oZMmcnF9e56aabonUY1+GrXbt26cEHHyx0vRNOOCG+pk6dmjp37pz22muvdNBBB6V+/fqlb7/9tuBYTjzxxPjzlVdeGce1qhlnVFfcdtttqXXr1nFfBx98cLQ143hKgud58803x58PPfTQOMbRo0fH4z355JMrXT97jZYvX15wXK+99loMBd5nn31iJ1qfPn1i8TsXi9t33313vE61a9eO587f3yeffFKi45VUvlFBtuGGG6Y333wzvfjii9EOhioz5p5dccUVMfcsPzSTJEmSJEnST7PiTKoAzjnnnDR9+vQImmhj+Pbbb0coNnfu3Pi+ZMmSGGJLtcIxxxwTA2snT54c4RqtEC+99NJC93fWWWel3XffPV1wwQVpypQpady4cWnx4sVp9uzZcfuOHTumUaNGxe8ZjLvjjjvG7Xr06JFmzZqVjj322LiMwIjQ7LLLLkubbrpptDLI8LhnnHFG3Bdh3DPPPJPuueeetM4668T9MsuM+xs+fHhcp379+qt8/j179owqDOb/EHa988476a677krz5s1LI0aMKPbrSIhHCPn000/HHCGeGyHjNddckyZMmBD3n/nmm2/iMQkQ11tvvYLLzz333BgMzN/JggUL0v333x+vCcFadj1ej7Fjx0YVyfHHHx+z3Ph7Ikjkcm4vSbwfMkOBAP6tt96KjQVHH310tGbMZG0ZDc0kSZIkSZKKx+BMKucIp6hEOO644yK0ydDKi6qsL774Ig0cODACofHjx6dtttkmfs/1+/fvH5VPnTp1SrvuumvBbXfeeec0bNiw+DO/I5Sj2mzo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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sel_imgs=set(subset.dicom_id.astype(str))\n", "vqa_sel=vqa_all[vqa_all.image_id.astype(str).isin(sel_imgs)].copy()\n", "def ans_type(a):\n", " if not isinstance(a,list) or not a: return \"no answer\"\n", " x=str(a[0]).strip().lower(); return x if x in (\"yes\",\"no\") else \"open\"\n", "vqa_all[\"ans_type\"]=vqa_all.answer.apply(ans_type)\n", "vqa_sel[\"ans_type\"]=vqa_sel.answer.apply(ans_type)\n", "fig,axes=plt.subplots(1,3,figsize=(16,4))\n", "for ax,col in zip(axes,[\"semantic_type\",\"content_type\",\"ans_type\"]):\n", " a=vqa_all[col].value_counts(normalize=True)*100\n", " b=vqa_sel[col].value_counts(normalize=True)*100\n", " pd.DataFrame({\"full(%)\":a,\"subset(%)\":b}).fillna(0).plot(kind=\"bar\",ax=ax,color=[\"#888\",\"#DD8452\"])\n", " ax.set_title(col); ax.tick_params(axis=\"x\",rotation=30)\n", "plt.suptitle(f\"VQA dist full vs subset (n_sel={len(vqa_sel):,})\"); plt.tight_layout(); plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Xuất bundle: manifest + reports + vqa (giữ cấu trúc gốc PhysioNet)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train: 40,000 manifest rows\n", "val: 5,000 manifest rows\n", "test: 5,000 manifest rows\n" ] } ], "source": [ "chex_lookup = chex_df.set_index(\"study_id\")[label_cols].to_dict(orient=\"index\")\n", "\n", "def build_manifest(df, start, split):\n", " rows=[]\n", " for k,r in enumerate(df.itertuples(index=False), start=start):\n", " sp=f\"files/{r.subset}/p{r.subject_id}/s{r.study_id}\" # path gốc PhysioNet\n", " labs=chex_lookup.get(r.study_id,{})\n", " rows.append({\n", " \"study_name\":f\"Study_{k}\",\"split\":split,\n", " \"subject_id\":int(r.subject_id),\"study_id\":int(r.study_id),\"subset\":r.subset,\n", " \"physionet_study_path\":sp,\"dicom_id\":r.dicom_id,\n", " \"image_filename\":f\"{r.dicom_id}.jpg\",\"view\":r.ViewPosition,\n", " \"image_relpath\":f\"{sp}/{r.dicom_id}.jpg\", # path ảnh trong package (giữ gốc)\n", " \"report_relpath\":f\"{sp}.txt\", # path report trong package (giữ gốc)\n", " \"jpg_url\":f\"{JPG_BASE_URL}/{sp}/{r.dicom_id}.jpg\",\n", " \"has_vqa\":bool(r.has_vqa),\n", " \"chexpert\":{l:(None if pd.isna(labs.get(l)) else int(labs.get(l))) for l in label_cols},\n", " })\n", " return rows\n", "\n", "manifests={\"train\":build_manifest(tr,1,\"train\"),\n", " \"val\": build_manifest(va,N_TRAIN+1,\"val\"),\n", " \"test\": build_manifest(te,N_TRAIN+N_VAL+1,\"test\")}\n", "\n", "for sp,rows in manifests.items():\n", " json.dump(rows, open(BUNDLE/f\"manifest_{sp}.json\",\"w\"), indent=2)\n", " flat=[]\n", " for x in rows:\n", " d={k:v for k,v in x.items() if k!=\"chexpert\"}\n", " d.update({f\"chex_{k}\":v for k,v in x[\"chexpert\"].items()}); flat.append(d)\n", " pd.DataFrame(flat).to_csv(BUNDLE/f\"manifest_{sp}.csv\", index=False)\n", " print(f\"{sp}: {len(rows):,} manifest rows\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "reports copied: 50,000 | missing: 0\n", "→ cấu trúc: bundle/reports/files/pXX/pSUBJ/sSTUDY.txt\n" ] } ], "source": [ "# Copy report đã chọn -> bundle/reports/.txt (giữ nguyên cấu trúc + tên)\n", "n_ok=n_miss=0\n", "for sp,rows in manifests.items():\n", " for x in rows:\n", " src=CXR_ROOT/x[\"report_relpath\"] # files/pXX/.../sSTUDY.txt\n", " dst=BUNDLE/\"reports\"/x[\"report_relpath\"]\n", " dst.parent.mkdir(parents=True, exist_ok=True)\n", " if src.exists():\n", " shutil.copy(src, dst); n_ok+=1\n", " else: n_miss+=1\n", "print(f\"reports copied: {n_ok:,} | missing: {n_miss:,}\")\n", "print(\"→ cấu trúc: bundle/reports/files/pXX/pSUBJ/sSTUDY.txt\")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train: vqa 102,941 mẫu -> vqa.json\n", "val: vqa 12,189 mẫu -> vqa_val.json\n", "test: vqa 11,880 mẫu -> vqa_test.json\n" ] } ], "source": [ "# Lọc + remap VQA theo ảnh đã chọn -> bundle/vqa/{vqa.json,vqa_val.json,vqa_test.json}\n", "# image_path trỏ thẳng path gốc trong package: files/pXX/pSUBJ/sSTUDY/.jpg\n", "VQA_OUT={\"train\":\"vqa.json\",\"val\":\"vqa_val.json\",\"test\":\"vqa_test.json\"}\n", "(BUNDLE/\"vqa\").mkdir(parents=True,exist_ok=True)\n", "for sp,rows in manifests.items():\n", " d2path={str(x[\"dicom_id\"]): x[\"image_relpath\"] for x in rows}\n", " d2name={str(x[\"dicom_id\"]): x[\"study_name\"] for x in rows}\n", " vq=vqa_all[vqa_all.image_id.astype(str).isin(d2path)].copy()\n", " vq[\"study_name\"]=vq.image_id.astype(str).map(d2name)\n", " vq[\"image_path\"]=vq.image_id.astype(str).map(d2path) # path gốc\n", " cols=[c for c in [\"study_name\",\"image_path\",\"question\",\"answer\",\"semantic_type\",\n", " \"content_type\",\"subject_id\",\"study_id\",\"image_id\",\"template\",\n", " \"template_program\",\"template_arguments\"] if c in vq.columns]\n", " json.dump(vq[cols].to_dict(orient=\"records\"),\n", " open(BUNDLE/\"vqa\"/VQA_OUT[sp],\"w\"), indent=2, default=str)\n", " print(f\"{sp}: vqa {len(vq):,} mẫu -> {VQA_OUT[sp]}\")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BUNDLE zip: D:\\USTH\\KLTN\\subset_bundle.zip (49.7 MB)\n", "\n", "→ Upload file zip này lên Google Drive, rồi chạy build_subset_colab.ipynb\n" ] } ], "source": [ "# Zip toàn bộ bundle -> 1 file để upload Drive\n", "zip_path = shutil.make_archive(str(BUNDLE.parent/\"subset_bundle\"), \"zip\", BUNDLE)\n", "sz = Path(zip_path).stat().st_size/1e6\n", "print(f\"BUNDLE zip: {zip_path} ({sz:,.1f} MB)\")\n", "print(\"\\n→ Upload file zip này lên Google Drive, rồi chạy build_subset_colab.ipynb\")" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "======================================================\n", " PHASE 1 (LOCAL) DONE\n", "======================================================\n", " eligible pool : 108,783\n", " train/val/test: 40,000/5,000/5,000\n", " VQA mẫu subset: 127,010\n", " bundle dir : D:\\USTH\\KLTN\\subset_bundle\n", " Next: upload subset_bundle.zip -> Drive -> PHASE 2 (Colab)\n", "======================================================\n" ] } ], "source": [ "print(\"=\"*54)\n", "print(\" PHASE 1 (LOCAL) DONE\")\n", "print(\"=\"*54)\n", "print(f\" eligible pool : {len(elig):,}\")\n", "print(f\" train/val/test: {len(tr):,}/{len(va):,}/{len(te):,}\")\n", "print(f\" VQA mẫu subset: {len(vqa_sel):,}\")\n", "print(f\" bundle dir : {BUNDLE}\")\n", "print(\" Next: upload subset_bundle.zip -> Drive -> PHASE 2 (Colab)\")\n", "print(\"=\"*54)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.11.7" } }, "nbformat": 4, "nbformat_minor": 5 }