{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":13836,"databundleVersionId":1718836,"isSourceIdPinned":false},{"sourceType":"kernelVersion","sourceId":320911796,"isSourceIdPinned":false}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport cv2\nimport torch\nimport timm\nimport albumentations as A\nfrom torch.utils.data import Dataset, DataLoader","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tst_form = A.Compose([\n    A.Resize(380, 380),\n    A.Normalize(mean=[0.485, 0.456, 0.406],\n                std=[0.229, 0.224, 0.225]),\n    A.pytorch.ToTensorV2()\n])\n\nclass tst_ds(Dataset):\n    def __init__(self, df, pth, transform = None):\n        self.df = df.reset_index(drop = True)\n        self.pth = pth\n        self.transform = transform\n    def __len__(self):\n        return len(self.df)\n    def __getitem__(self, idx):\n        image_id = self.df.iloc[idx]['image_id']\n        image = cv2.imread(os.path.join(self.pth, image_id))\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        if self.transform:\n            image = self.transform(image=image)['image']\n        return image\n\n\ntst_img_pth = '/kaggle/input/competitions/cassava-leaf-disease-classification/test_images'\ntst_pth = '/kaggle/input/competitions/cassava-leaf-disease-classification/sample_submission.csv'\ntst_df = pd.read_csv(tst_pth)\ntst = tst_ds(tst_df, tst_img_pth, tst_form)\ntst_dl = DataLoader(tst, batch_size = 16, shuffle = False, num_workers = 2)\n\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nmodel_pth = '/kaggle/input/notebooks/skyed22/cassava-f'\n\nall_preds = []\n\nfor fold in range(3):\n    model = timm.create_model('efficientnet_b4', pretrained=False, num_classes=5)\n    model.load_state_dict(torch.load(os.path.join(model_pth,f'model{fold}.pth'), map_location=device))\n    model.to(device)\n    model.eval()\n    \n    fold_preds = []\n    with torch.no_grad():\n        for images in tst_dl:\n            images = images.to(device)\n            outputs = model(images)\n            fold_preds.append(outputs.softmax(1).cpu().numpy())\n    \n    fold_preds = np.concatenate(fold_preds)\n    all_preds.append(fold_preds)\n\n\nfinal_preds = np.mean(all_preds, axis=0).argmax(1)\n\n\nsubmission = pd.DataFrame({'image_id': tst_df['image_id'], 'label': final_preds})\nsubmission.to_csv(os.path.join('/kaggle','working','submission.csv'), index=False) # pd -> csv\nprint(submission.head())","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}