{"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":"import os\nimport gc\nimport cv2\nimport copy\nimport time\nimport random\nimport string\nimport joblib\nimport tifffile\nimport numpy as np \nimport pandas as pd \nimport torch\nfrom torch import nn\nimport seaborn as sns\nfrom torchvision import models\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn.model_selection import train_test_split\nfrom tqdm.notebook import tqdm\nfrom torch.optim import lr_scheduler\nimport warnings\nwarnings.filterwarnings(\"ignore\")\ngc.enable()","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":3.063995,"end_time":"2022-07-08T14:24:41.045696","exception":false,"start_time":"2022-07-08T14:24:37.981701","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:10:14.389837Z","iopub.execute_input":"2022-07-30T03:10:14.391034Z","iopub.status.idle":"2022-07-30T03:10:18.860796Z","shell.execute_reply.started":"2022-07-30T03:10:14.3909Z","shell.execute_reply":"2022-07-30T03:10:18.858166Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"debug = False\ngenerate_new = True\ntest_df = pd.read_csv(\"../input/mayo-clinic-strip-ai/test.csv\")\ndirs = [\"../input/mayo-clinic-strip-ai/train/\", \"../input/mayo-clinic-strip-ai/test/\"]\ntest_df","metadata":{"papermill":{"duration":0.02504,"end_time":"2022-07-08T14:24:41.073811","exception":false,"start_time":"2022-07-08T14:24:41.048771","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:10:18.863985Z","iopub.execute_input":"2022-07-30T03:10:18.865114Z","iopub.status.idle":"2022-07-30T03:10:18.908395Z","shell.execute_reply.started":"2022-07-30T03:10:18.865065Z","shell.execute_reply":"2022-07-30T03:10:18.907028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_df = pd.DataFrame({\"image_id\" : [\"006388_0\", \"008e5c_0\", \"00c058_0\", \"01adc5_0\", \"01adc5_0\"], \"patient_id\" : [\"006388\", \"008e5c\", \"00c058\", \"01adc5\", \"01adc5\"]})","metadata":{"execution":{"iopub.status.busy":"2022-07-30T03:10:18.913969Z","iopub.execute_input":"2022-07-30T03:10:18.917269Z","iopub.status.idle":"2022-07-30T03:10:18.926049Z","shell.execute_reply.started":"2022-07-30T03:10:18.917205Z","shell.execute_reply":"2022-07-30T03:10:18.92451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"try:\n    os.mkdir(\"../test/\")\nexcept:\n    pass\nfor i in tqdm(range(test_df.shape[0])):\n    img_id = test_df.iloc[i].image_id\n\n    img = cv2.resize(tifffile.imread(dirs[1] + img_id + \".tif\"), (224, 224))\n\n    np.save(f\"../test/{img_id}.npy\", img)\n    del img\n    gc.collect()","metadata":{"papermill":{"duration":69.477711,"end_time":"2022-07-08T14:25:50.554416","exception":false,"start_time":"2022-07-08T14:24:41.076705","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:17:43.940813Z","iopub.execute_input":"2022-07-30T03:17:43.941275Z","iopub.status.idle":"2022-07-30T03:19:08.883196Z","shell.execute_reply.started":"2022-07-30T03:17:43.941228Z","shell.execute_reply":"2022-07-30T03:19:08.881822Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from PIL import Image\n\nfrom torchvision import transforms as T\nclass ImgDataset(Dataset):\n    def __init__(self, df):\n        self.df = df \n        self.train = 'label' in df.columns\n        self.transform_val = T.Compose([T.PILToTensor(),\n                                    T.ConvertImageDtype(torch.float32),\n                                    T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])\n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, index):\n        if(generate_new):\n            paths = [\"../test/\", \"../train/\"]\n        else:\n            paths = [\"../input/jpg-images-strip-ai/test/\", \"../input/jpg-images-strip-ai/train/\"]\n\n        image = np.load(paths[self.train] + self.df.iloc[index].image_id + \".npy\")\n\n        label = 0\n#         try:\n#             if len(image.shape) == 5:\n#                 image = image.squeeze().transpose(0, 2, 1)\n#             image = cv2.resize(image, (224, 224, 3))\n#         except:\n#             image = np.zeros((224, 224, 3))\n        if(self.train):\n            label = {\"CE\" : 0, \"LAA\": 1}[self.df.iloc[index].label]\n        patient_id = self.df.iloc[index].patient_id\n        return self.transform_val(Image.fromarray(image)), label, patient_id","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:19:13.037639Z","iopub.execute_input":"2022-07-30T03:19:13.03814Z","iopub.status.idle":"2022-07-30T03:19:13.051035Z","shell.execute_reply.started":"2022-07-30T03:19:13.038094Z","shell.execute_reply":"2022-07-30T03:19:13.049299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def predict(model, dataloader):\n    model.cuda()\n    model.eval()\n    dataloader = dataloader\n    outputs = []\n    s = nn.Softmax(dim=1)\n    ids = []\n    for item in tqdm(dataloader, leave=False):\n        patient_id = item[2][0]\n        try:\n            images = item[0].cuda().float()\n            ids.append(patient_id)\n            output = model(images)\n            outputs.append(s(output.cpu()[:,:2])[0].detach().numpy())\n        except:\n            ids.append(patient_id)\n            outputs.append(s(torch.tensor([[1, 1]]).float())[0].detach().numpy())\n    return np.array(outputs), ids","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:11:05.060421Z","iopub.execute_input":"2022-07-30T03:11:05.06077Z","iopub.status.idle":"2022-07-30T03:11:05.073727Z","shell.execute_reply.started":"2022-07-30T03:11:05.060713Z","shell.execute_reply":"2022-07-30T03:11:05.072301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nmodel = torch.jit.load('../input/vit-masking-pytorch-training-inference/vit_model16_2e4.pt')\nbatch_size = 1\ntest_loader = DataLoader(\n    ImgDataset(test_df), \n    batch_size=batch_size, \n    shuffle=False, \n    num_workers=1\n)","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:19:16.461059Z","iopub.execute_input":"2022-07-30T03:19:16.461624Z","iopub.status.idle":"2022-07-30T03:19:16.88749Z","shell.execute_reply.started":"2022-07-30T03:19:16.461592Z","shell.execute_reply":"2022-07-30T03:19:16.886196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nanss, ids = predict(model, test_loader)","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-30T03:19:18.861122Z","iopub.execute_input":"2022-07-30T03:19:18.861835Z","iopub.status.idle":"2022-07-30T03:19:19.628064Z","shell.execute_reply.started":"2022-07-30T03:19:18.861799Z","shell.execute_reply":"2022-07-30T03:19:19.62637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prob = pd.DataFrame({\"CE\" : anss[:,0], \"LAA\" : anss[:,1], \"id\" : ids}).groupby(\"id\").mean()\nsubmission = pd.read_csv(\"../input/mayo-clinic-strip-ai/sample_submission.csv\")\nsubmission.CE = prob.CE.to_list()\nsubmission.LAA = prob.LAA.to_list()","metadata":{"execution":{"iopub.status.busy":"2022-07-30T03:19:29.010538Z","iopub.execute_input":"2022-07-30T03:19:29.010977Z","iopub.status.idle":"2022-07-30T03:19:29.03019Z","shell.execute_reply.started":"2022-07-30T03:19:29.010943Z","shell.execute_reply":"2022-07-30T03:19:29.028591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2022-07-30T03:19:31.148256Z","iopub.execute_input":"2022-07-30T03:19:31.14879Z","iopub.status.idle":"2022-07-30T03:19:31.162394Z","shell.execute_reply.started":"2022-07-30T03:19:31.148756Z","shell.execute_reply":"2022-07-30T03:19:31.160669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv(\"submission.csv\", index = False)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T03:11:12.821989Z","iopub.status.idle":"2022-07-30T03:11:12.823044Z","shell.execute_reply.started":"2022-07-30T03:11:12.822756Z","shell.execute_reply":"2022-07-30T03:11:12.822784Z"},"trusted":true},"execution_count":null,"outputs":[]}]}