{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install -qU ../input/for-pydicom/python_gdcm-3.0.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl ../input/for-pydicom/pylibjpeg-1.4.0-py3-none-any.whl --find-links frozen_packages --no-index","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:43:31.962325Z","iopub.execute_input":"2022-09-26T16:43:31.963047Z","iopub.status.idle":"2022-09-26T16:43:41.104286Z","shell.execute_reply.started":"2022-09-26T16:43:31.962935Z","shell.execute_reply":"2022-09-26T16:43:41.103087Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_files = [f'../input/vit-3d-folds/vit 3d best without softmax/best_fold_vit3d{i}.pth' for i in range(2)]","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:43:41.106692Z","iopub.execute_input":"2022-09-26T16:43:41.107355Z","iopub.status.idle":"2022-09-26T16:43:41.114104Z","shell.execute_reply.started":"2022-09-26T16:43:41.107313Z","shell.execute_reply":"2022-09-26T16:43:41.113158Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_files","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:43:41.116486Z","iopub.execute_input":"2022-09-26T16:43:41.116839Z","iopub.status.idle":"2022-09-26T16:43:41.129223Z","shell.execute_reply.started":"2022-09-26T16:43:41.116805Z","shell.execute_reply":"2022-09-26T16:43:41.128075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Libraries\n! pip install '../input/einops/einops-0.3.0-py2.py3-none-any.whl'\n\nimport os\nimport re\nimport gc\nimport cv2\nimport wandb\nfrom PIL import Image\nimport random\nimport math\nimport shutil\nimport glob\nfrom tqdm import tqdm\nfrom pprint import pprint\nfrom time import time\nimport warnings\nimport pandas as pd\nimport numpy as np\nimport seaborn as sns\nimport matplotlib as mpl\nfrom matplotlib import cm\nimport matplotlib.patches as patches\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nfrom matplotlib.offsetbox import AnnotationBbox, OffsetImage\nfrom matplotlib.colors import ListedColormap, LinearSegmentedColormap\nfrom matplotlib.patches import Rectangle\nfrom IPython.display import display_html\nplt.rcParams.update({'font.size': 16})\n\n# Environment check\nwarnings.filterwarnings(\"ignore\")\nos.environ[\"WANDB_SILENT\"] = \"true\"\nCONFIG = {'competition': 'RSNA_SpineFructure', '_wandb_kernel': 'aot'}\n\n# Custom colors\nclass clr:\n    S = '\\033[1m' + '\\033[94m'\n    E = '\\033[0m'\n    \nmy_colors = [\"#5EAFD9\", \"#449DD1\", \"#3977BB\", \n             \"#2D51A5\", \"#5C4C8F\", \"#8B4679\",\n             \"#C53D4C\", \"#E23836\", \"#FF4633\", \"#FF5746\"]\nCMAP1 = ListedColormap(my_colors)\n\nprint(clr.S+\"Notebook Color Schemes:\"+clr.E)\nsns.palplot(sns.color_palette(my_colors))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:43:41.133382Z","iopub.execute_input":"2022-09-26T16:43:41.133746Z","iopub.status.idle":"2022-09-26T16:44:11.400244Z","shell.execute_reply.started":"2022-09-26T16:43:41.133694Z","shell.execute_reply":"2022-09-26T16:44:11.399002Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom as dicom\ndef load_dicom(path,img_size=224):\n    img=dicom.dcmread(path)\n    img.PhotometricInterpretation='YBR_FULL'\n    data=img.pixel_array\n    data=cv2.resize(data,(224,224))\n    return data","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:11.402338Z","iopub.execute_input":"2022-09-26T16:44:11.403051Z","iopub.status.idle":"2022-09-26T16:44:11.590267Z","shell.execute_reply.started":"2022-09-26T16:44:11.40301Z","shell.execute_reply":"2022-09-26T16:44:11.589285Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport cv2\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset, DataLoader\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.utils import shuffle\n\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\n\nfrom torch import nn\nfrom torch import Tensor\nfrom torch.utils.data import Subset\n\nfrom PIL import Image\nimport pandas as pd\nimport numpy as np\n\nfrom torchvision.transforms import Compose, Resize, ToTensor\nfrom torch.optim.lr_scheduler import StepLR\nimport torch.optim as optim\n\nfrom einops import rearrange, reduce, repeat\nfrom einops.layers.torch import Rearrange, Reduce","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:11.591797Z","iopub.execute_input":"2022-09-26T16:44:11.592146Z","iopub.status.idle":"2022-09-26T16:44:12.504824Z","shell.execute_reply.started":"2022-09-26T16:44:11.592108Z","shell.execute_reply":"2022-09-26T16:44:12.50384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# PyTorch\nimport torch\nfrom torch.utils.data import TensorDataset, DataLoader, Dataset\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torch.optim import lr_scheduler\nfrom torch.utils.data.sampler import SubsetRandomSampler, RandomSampler, SequentialSampler\nfrom torch.optim.lr_scheduler import StepLR, ReduceLROnPlateau, CosineAnnealingLR\nimport torchvision\nimport torchvision.transforms as transforms\nimport albumentations\n\nfrom sklearn.model_selection import GroupKFold, train_test_split, StratifiedKFold\nfrom sklearn.metrics import roc_auc_score, cohen_kappa_score, confusion_matrix","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.506261Z","iopub.execute_input":"2022-09-26T16:44:12.507053Z","iopub.status.idle":"2022-09-26T16:44:12.514062Z","shell.execute_reply.started":"2022-09-26T16:44:12.507014Z","shell.execute_reply":"2022-09-26T16:44:12.512815Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_dir='../input/rsna-2022-cervical-spine-fracture-detection/test_images'","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.515815Z","iopub.execute_input":"2022-09-26T16:44:12.516612Z","iopub.status.idle":"2022-09-26T16:44:12.525671Z","shell.execute_reply.started":"2022-09-26T16:44:12.516575Z","shell.execute_reply":"2022-09-26T16:44:12.524624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import glob\nimport numpy as np\n\ndef load_dicom_3d(patient_id,num_imgs=56,img_size=224):\n    files=sorted(glob.glob(f\"{data_dir}/{patient_id}/*.dcm\"))\n    middle=len(files)//2\n    num_imgs2=num_imgs//2\n    p1=max(0,middle-num_imgs2)\n    p2=min(len(files),middle+num_imgs2)\n    img3d=np.stack([load_dicom(f) for f in files[p1:p2]]).T\n    if img3d.shape[-1]<num_imgs:\n        n_zero=np.zeros((img_size,img_size,num_imgs-img3d.shape[-1]))\n        img3d=np.concatenate((img3d,n_zero),axis=-1)\n    \n    if np.min(img3d)<np.max(img3d):\n        img3d=img3d-np.min(img3d)\n        img3d=img3d/np.max(img3d)\n        \n    return np.expand_dims(img3d,0)\n","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.527098Z","iopub.execute_input":"2022-09-26T16:44:12.527652Z","iopub.status.idle":"2022-09-26T16:44:12.538243Z","shell.execute_reply.started":"2022-09-26T16:44:12.527616Z","shell.execute_reply":"2022-09-26T16:44:12.537211Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data=load_dicom_3d(\"1.2.826.0.1.3680043.22327\")\ndata.shape","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.539708Z","iopub.execute_input":"2022-09-26T16:44:12.540096Z","iopub.status.idle":"2022-09-26T16:44:12.690611Z","shell.execute_reply.started":"2022-09-26T16:44:12.540061Z","shell.execute_reply":"2022-09-26T16:44:12.689467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from einops import rearrange, repeat\nfrom einops.layers.torch import Rearrange\n\n# helpers\n\ndef pair(t):\n    return t if isinstance(t, tuple) else (t, t)\n\n# classes\n\nclass PreNorm(nn.Module):\n    def __init__(self, dim, fn):\n        super().__init__()\n        self.norm = nn.LayerNorm(dim)\n        self.fn = fn\n    def forward(self, x, **kwargs):\n        return self.fn(self.norm(x), **kwargs)\n\nclass FeedForward(nn.Module):\n    def __init__(self, dim, hidden_dim, dropout = 0.):\n        super().__init__()\n        self.net = nn.Sequential(\n            nn.Linear(dim, hidden_dim),\n            nn.GELU(),\n            nn.Dropout(dropout),\n            nn.Linear(hidden_dim, dim),\n            nn.Dropout(dropout)\n        )\n    def forward(self, x):\n        return self.net(x)\n\nclass Attention(nn.Module):\n    def __init__(self, dim, heads = 8, dim_head = 64, dropout = 0.):\n        super().__init__()\n        inner_dim = dim_head *  heads\n        project_out = not (heads == 1 and dim_head == dim)\n\n        self.heads = heads\n        self.scale = dim_head ** -0.5\n\n        self.attend = nn.Softmax(dim = -1)\n        self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False)\n\n        self.to_out = nn.Sequential(\n            nn.Linear(inner_dim, dim),\n            nn.Dropout(dropout)\n        ) if project_out else nn.Identity()\n\n    def forward(self, x):\n        qkv = self.to_qkv(x).chunk(3, dim = -1)\n        q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> b h n d', h = self.heads), qkv)\n\n        dots = torch.matmul(q, k.transpose(-1, -2)) * self.scale\n\n        attn = self.attend(dots)\n\n        out = torch.matmul(attn, v)\n        out = rearrange(out, 'b h n d -> b n (h d)')\n        return self.to_out(out)\n\nclass Transformer(nn.Module):\n    def __init__(self, dim, depth, heads, dim_head, mlp_dim, dropout = 0.):\n        super().__init__()\n        self.layers = nn.ModuleList([])\n        mlp_dim = 2048\n        for _ in range(depth):\n            #print (dim, mlp_dim)\n            self.layers.append(nn.ModuleList([\n                PreNorm(dim, Attention(dim, heads = heads, dim_head = dim_head, dropout = dropout)),\n                PreNorm(dim, FeedForward(dim, mlp_dim, dropout = dropout))\n            ]))\n    def forward(self, x):\n        for attn, ff in self.layers:\n            x = attn(x) + x\n            x = ff(x) + x\n        return x","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.693064Z","iopub.execute_input":"2022-09-26T16:44:12.69349Z","iopub.status.idle":"2022-09-26T16:44:12.711219Z","shell.execute_reply.started":"2022-09-26T16:44:12.693436Z","shell.execute_reply":"2022-09-26T16:44:12.710102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Model(nn.Module):\n    def __init__(self, *, image_size, patch_size, num_classes, dim, depth, heads, mlp_dim, channels = 3, dropout = 0., emb_dropout = 0.):\n        super().__init__()\n        assert image_size % patch_size == 0, 'image dimensions must be divisible by the patch size'\n        num_patches = (image_size // patch_size) *(image_size // patch_size)* 2\n        patch_dim = channels * patch_size ** 3\n\n        self.patch_size = patch_size\n\n        self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim))\n        self.patch_to_embedding = nn.Linear(patch_dim, dim)\n        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))\n        self.dropout = nn.Dropout(emb_dropout)\n        #print (mlp_dim)\n        self.transformer = Transformer(dim, depth, heads, mlp_dim, dropout)\n        #print (dim)\n        self.to_cls_token = nn.Identity()\n\n        self.mlp_head = nn.Sequential(\n            nn.LayerNorm(dim),\n            nn.Linear(dim, mlp_dim),\n            nn.GELU(),\n            nn.Dropout(dropout),\n            nn.Linear(mlp_dim, num_classes),\n            nn.Dropout(dropout),\n            # add the line for sigmoid layer \n        )\n\n    def forward(self, img, mask = None):\n        p = self.patch_size\n        #print (img.shape)\n        x = rearrange(img, 'b c (h p1) (w p2) (d p3) -> b (h w d) (p1 p2 p3 c)', p1 = p, p2 = p, p3 = p)\n        #print (x.shape)\n        x = self.patch_to_embedding(x)\n        #print (x.shape)\n        cls_tokens = self.cls_token.expand(img.shape[0], -1, -1)\n        #print (cls_tokens.shape)\n        x = torch.cat((cls_tokens, x), dim=1)\n        #print (x.shape)\n        #print (self.pos_embedding.shape)\n        x += self.pos_embedding\n        x = self.dropout(x)\n\n        x = self.transformer(x)\n\n        x = self.to_cls_token(x[:, 0])\n        return self.mlp_head(x)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.713033Z","iopub.execute_input":"2022-09-26T16:44:12.71351Z","iopub.status.idle":"2022-09-26T16:44:12.730834Z","shell.execute_reply.started":"2022-09-26T16:44:12.713449Z","shell.execute_reply":"2022-09-26T16:44:12.729543Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.737465Z","iopub.execute_input":"2022-09-26T16:44:12.737904Z","iopub.status.idle":"2022-09-26T16:44:12.774907Z","shell.execute_reply.started":"2022-09-26T16:44:12.737869Z","shell.execute_reply":"2022-09-26T16:44:12.773797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_model(model_file):\n    model = Model(\n        image_size = 224,\n        patch_size = 28,\n        num_classes = 8,\n        dim = 768,\n        depth = 2,\n        heads = 16,\n        mlp_dim = 1536,\n        channels = 1,\n        dropout = 0.1,\n        emb_dropout = 0.1\n    )\n    model.to(device)\n    try:\n        model.load_state_dict(torch.load(model_file),strict=True)\n    except:\n        state_dict=torch.load(model_file)\n        state_dict = {k[7:] if k.startswith('module.') else k: state_dict[k] for k in state_dict.keys()}\n        model.load_state_dict(state_dict, strict=True)\n    model.eval()\n    print()\n    return model \nmodels=[load_model(model) for model in model_files]\nlen(models)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:12.776793Z","iopub.execute_input":"2022-09-26T16:44:12.777347Z","iopub.status.idle":"2022-09-26T16:44:19.415337Z","shell.execute_reply.started":"2022-09-26T16:44:12.777302Z","shell.execute_reply":"2022-09-26T16:44:19.414334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data import TensorDataset, DataLoader, Dataset\n\nclass RSNADataset(Dataset):\n    \n    def __init__(self, csv, mode, transform=None):\n        self.csv = csv\n        self.mode = mode\n        self.transform = transform\n        \n    def __len__(self):\n        return self.csv.shape[0]\n        \n    def __getitem__(self, index):\n        # Set Random Seed\n\n        dt = self.csv.iloc[index, :]\n        study_paths = glob.glob(f\"test_DICOM/{dt.StudyInstanceUID}/*\")\n        study_paths.sort()\n        \n        # Load images\n        stacked_image=load_dicom_3d(dt.StudyInstanceUID)\n        #print(\"need to sqz shape\",stacked_image.shape)\n        \n        if self.mode==\"test\":\n            return torch.tensor(stacked_image).float()\n        else:\n            targets = torch.tensor(dt[target_cols]).float()\n            return {\"X\": torch.tensor(stacked_image).float(),\"y\":targets}","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.416976Z","iopub.execute_input":"2022-09-26T16:44:19.417724Z","iopub.status.idle":"2022-09-26T16:44:19.42657Z","shell.execute_reply.started":"2022-09-26T16:44:19.417668Z","shell.execute_reply":"2022-09-26T16:44:19.42552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.428006Z","iopub.execute_input":"2022-09-26T16:44:19.428365Z","iopub.status.idle":"2022-09-26T16:44:19.584876Z","shell.execute_reply.started":"2022-09-26T16:44:19.428327Z","shell.execute_reply":"2022-09-26T16:44:19.583847Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df_1=pd.read_csv('../input/data-files/id1.csv')","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.588215Z","iopub.execute_input":"2022-09-26T16:44:19.588533Z","iopub.status.idle":"2022-09-26T16:44:19.597589Z","shell.execute_reply.started":"2022-09-26T16:44:19.588497Z","shell.execute_reply":"2022-09-26T16:44:19.59641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_dataset=RSNADataset(csv=test_df_1,mode='test')\nvalidloader = DataLoader(valid_dataset, batch_size=8)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.599166Z","iopub.execute_input":"2022-09-26T16:44:19.599546Z","iopub.status.idle":"2022-09-26T16:44:19.606447Z","shell.execute_reply.started":"2022-09-26T16:44:19.599511Z","shell.execute_reply":"2022-09-26T16:44:19.604597Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bad = np.array([['1.2.826.0.1.3680043.10197_C1', '1.2.826.0.1.3680043.10197','C1'],['1.2.826.0.1.3680043.10454_C1', '1.2.826.0.1.3680043.10454','C1'],['1.2.826.0.1.3680043.10690_C1', '1.2.826.0.1.3680043.10690','C1']], dtype=np.object)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.608171Z","iopub.execute_input":"2022-09-26T16:44:19.608959Z","iopub.status.idle":"2022-09-26T16:44:19.616158Z","shell.execute_reply.started":"2022-09-26T16:44:19.608924Z","shell.execute_reply":"2022-09-26T16:44:19.61516Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"debug = False\ntrain_df = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/train.csv\").head(10000)\ntest_df = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/test.csv\")\nif(test_df.values[0][0] == bad[0][0]):\n    test_df = pd.DataFrame({\"row_id\": ['1.2.826.0.1.3680043.22327_C1', '1.2.826.0.1.3680043.25399_C1', '1.2.826.0.1.3680043.5876_C1'],\n                           \"StudyInstanceUID\": ['1.2.826.0.1.3680043.22327', '1.2.826.0.1.3680043.25399', '1.2.826.0.1.3680043.5876'],\n                           \"prediction_type\": [\"C1\", \"C1\", \"C1\"]})\ndirs = [\"../input/rsna-2022-cervical-spine-fracture-detection/train_images\",  \"../input/rsna-2022-cervical-spine-fracture-detection/test_images\"]\nmeans = list(train_df.mean(numeric_only=True).to_dict().values())\ntest_df","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.617833Z","iopub.execute_input":"2022-09-26T16:44:19.618302Z","iopub.status.idle":"2022-09-26T16:44:19.643065Z","shell.execute_reply.started":"2022-09-26T16:44:19.618265Z","shell.execute_reply":"2022-09-26T16:44:19.642055Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def valid():\n    preds= []\n    with torch.no_grad():\n        for data in tqdm(validloader):\n            data = data.to(device)\n            for model in models:\n                l = model(data)\n                sig = nn.Sigmoid()\n                output= sig(l)\n                preds.append(output)\n        return torch.cat(preds).cpu().numpy().squeeze()","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.644746Z","iopub.execute_input":"2022-09-26T16:44:19.645094Z","iopub.status.idle":"2022-09-26T16:44:19.65132Z","shell.execute_reply.started":"2022-09-26T16:44:19.64506Z","shell.execute_reply":"2022-09-26T16:44:19.650116Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_dataset=RSNADataset(csv=test_df,mode='test')\nvalidloader = DataLoader(valid_dataset, batch_size=8)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:44:19.653065Z","iopub.execute_input":"2022-09-26T16:44:19.653451Z","iopub.status.idle":"2022-09-26T16:44:19.662303Z","shell.execute_reply.started":"2022-09-26T16:44:19.653417Z","shell.execute_reply":"2022-09-26T16:44:19.661356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid()","metadata":{"execution":{"iopub.status.busy":"2022-09-26T16:46:02.116588Z","iopub.execute_input":"2022-09-26T16:46:02.117688Z","iopub.status.idle":"2022-09-26T16:46:03.27596Z","shell.execute_reply.started":"2022-09-26T16:46:02.117648Z","shell.execute_reply":"2022-09-26T16:46:03.274546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"slice_of_dataframe=len(valid())//len(models)\ndf=pd.DataFrame(data=valid(),columns=[f'frac_C{i+1}' for i in range(0,8)])","metadata":{"execution":{"iopub.status.busy":"2022-09-26T17:11:43.574637Z","iopub.execute_input":"2022-09-26T17:11:43.575575Z","iopub.status.idle":"2022-09-26T17:11:46.041903Z","shell.execute_reply.started":"2022-09-26T17:11:43.575529Z","shell.execute_reply":"2022-09-26T17:11:46.040779Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"size = slice_of_dataframe\nk = len(models)\n\nfor i in range(k):\n    data= df[size*i:size*(i+1)]\n    data.to_csv(f'frac_{i+1}.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-09-26T17:13:10.795796Z","iopub.execute_input":"2022-09-26T17:13:10.796161Z","iopub.status.idle":"2022-09-26T17:13:10.805831Z","shell.execute_reply.started":"2022-09-26T17:13:10.79613Z","shell.execute_reply":"2022-09-26T17:13:10.804816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import glob\npath = \"./*.csv\"\nfiles=[]\nfor fname in glob.glob(path):\n    files.append(fname)\nfor i in files:\n    k=pd.read_csv(i)\n    j= k.mean(axis=0)\n    l= j.to_frame().reset_index()\n    #l.to_csv(f'frac_{i[7]}.csv', index=False)\n    print(l.head())","metadata":{"execution":{"iopub.status.busy":"2022-09-26T17:31:14.306788Z","iopub.execute_input":"2022-09-26T17:31:14.307254Z","iopub.status.idle":"2022-09-26T17:31:14.340016Z","shell.execute_reply.started":"2022-09-26T17:31:14.307214Z","shell.execute_reply":"2022-09-26T17:31:14.338825Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data=pd.read_csv('./frac_c.csv')\ndata.head()","metadata":{"execution":{"iopub.status.busy":"2022-09-26T17:28:30.577171Z","iopub.execute_input":"2022-09-26T17:28:30.577682Z","iopub.status.idle":"2022-09-26T17:28:30.593519Z","shell.execute_reply.started":"2022-09-26T17:28:30.577641Z","shell.execute_reply":"2022-09-26T17:28:30.592548Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f1= pd.DataFrame(\n    data=valid(), columns=[f'1.2.826.0.1.3680043.22327_C{i+1}' for i in range(0, 8)]\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df1= df_pred_f1.mean(axis=0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f1= df1.to_frame().reset_index()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f1= df_pred_f1.rename(columns= {0: 'fractured','index':'row_id'})","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f1.to_csv(\"vit_f1.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df_2=pd.read_csv('../input/data-files/id2.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_dataset=RSNADataset(csv=test_df_2,mode='test')\nvalidloader = DataLoader(valid_dataset, batch_size=8)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def valid():\n    preds= []\n    with torch.no_grad():\n        for data in tqdm(validloader):\n            data = data.to(device)\n            for model in models:\n                l = model(data)\n                sig = nn.Sigmoid()\n                output= sig(l)\n                preds.append(output)\n        return torch.cat(preds).cpu().numpy().squeeze()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f2= pd.DataFrame(\n    data=valid(), columns=[f'1.2.826.0.1.3680043.25399_C{i+1}' for i in range(0, 8)]\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2= df_pred_f2.mean(axis=0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f2= df2.to_frame().reset_index()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f2= df_pred_f2.rename(columns= {0: 'fractured','index':'row_id'})","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f2.to_csv(\"vit_f2.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df_3=pd.read_csv('../input/data-files/id3.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_dataset=RSNADataset(csv=test_df_3,mode='test')\nvalidloader = DataLoader(valid_dataset, batch_size=8)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def valid():\n    preds= []\n    with torch.no_grad():\n        for data in tqdm(validloader):\n            data = data.to(device)\n            for model in models:\n                l = model(data)\n                sig = nn.Sigmoid()\n                output= sig(l)\n                preds.append(output)\n        return torch.cat(preds).cpu().numpy().squeeze()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f3= pd.DataFrame(\n    data=valid(), columns=[f'1.2.826.0.1.3680043.5876_C{i+1}' for i in range(0, 8) ]\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df3= df_pred_f3.mean(axis=0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df3","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f3= df3.to_frame().reset_index()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f3= df_pred_f3.rename(columns= {0: 'fractured','index':'row_id'})","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred_f3.to_csv(\"vit_f3.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.concat(map(pd.read_csv, ['./vit_f1.csv', './vit_f2.csv','./vit_f3.csv']), ignore_index=True)\nprint(df)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.drop('Unnamed: 0', inplace=True, axis=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['row_id'] = df['row_id'].replace(['1.2.826.0.1.3680043.22327_C8','1.2.826.0.1.3680043.25399_C8','1.2.826.0.1.3680043.5876_C8'],['1.2.826.0.1.3680043.22327_patient_overall','1.2.826.0.1.3680043.25399_patient_overall','1.2.826.0.1.3680043.5876_patient_overall'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.to_csv('submission.csv',index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}