{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"\n! pip install '../input/efficientnet-pytorch/EfficientNet-PyTorch/EfficientNet-PyTorch-master/'\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nimport gc\nimport cv2\nimport time\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\n\nimport torch\nimport torch.nn as nn\nimport albumentations as A\n\n\nfrom efficientnet_pytorch import EfficientNet","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\neffnet_b1=EfficientNet.from_pretrained('efficientnet-b1',\n                                       weights_path='../input/efficientnet-pytorch/efficientnet-b1-dbc7070a.pth',\n                                       include_top=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nCFG = {\n    \"IMG_SIZE\": 384,\n    \"BATCH_SIZE\": 16,\n    \"IMG_FOLDER\": \"../input/cassava-leaf-disease-classification/train_images\",\n    \"EPOCHS\": 10,\n    \"NUM_FOLDS\": 5,\n    \"device\": device\n}\nprint(device)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"class CassavaModel(nn.Module):\n    def __init__(self, _backbone):\n        super(CassavaModel, self).__init__()\n        self._backbone=_backbone\n        self._backbone._fc=nn.Linear(in_features=_backbone._fc.in_features, \n                                     out_features=5,\n                                     bias=True)      \n        \n    def forward(self, x):\n        x=self._backbone(x)\n        return x","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"models=[]\nfor model_name in os.listdir('../input/enesemble'):\n    model_path=os.path.join('../input/enesemble', model_name)\n    model=CassavaModel(effnet_b1)\n    model.load_state_dict(torch.load(model_path))\n    model=model.to(device)\n    models.append(model)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def read_image(imgpath):\n    img=cv2.imread(imgpath)\n    img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    return img\n\ndef val_augmentation():\n    transform=A.Compose([\n        A.Resize(CFG[\"IMG_SIZE\"], CFG[\"IMG_SIZE\"], p=1.0),\n        A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225))\n    ])\n    return transform","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_folder=\"../input/cassava-leaf-disease-classification/test_images\"\nclass TestDataset(torch.utils.data.Dataset):\n    def __init__(self, augmentation):\n        self.test_images=os.listdir(test_folder)\n        self.augmentation=augmentation\n    def __len__(self):\n        return len(self.test_images)\n    def __getitem__(self, idx):\n        image_id=self.test_images[idx]\n        image_path=os.path.join(test_folder, image_id)\n        img=read_image(image_path)\n        if self.augmentation:\n            img=self.augmentation(image=img)['image']\n        img=torch.tensor(img).permute(2, 1, 0)\n        return (image_id, img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"val_transform=val_augmentation()\npred=nn.Softmax(dim=1)\ntest_dataset=TestDataset(val_transform)\ntest_dataloader=torch.utils.data.DataLoader(test_dataset, \n                                            shuffle=False,\n                                            pin_memory=True,\n                                            batch_size=16,\n                                            num_workers=4)\n\n\n\nsubmission_data=[]\nwith torch.no_grad():\n    for (image_id,img) in test_dataloader:\n        img=img.to(device)\n        yout=torch.zeros(img.shape[0], 5).to(device)\n        for model in models:\n            yout+=model(img)\n        yout/=5\n        yout=pred(yout)\n        ypred=torch.argmax(yout, dim=1).cpu().numpy()\n        \n        for i in range(img.shape[0]):\n            submission_data.append({\n                'image_id': image_id[i],\n                'label': ypred[i]\n            })","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df=pd.DataFrame.from_dict(submission_data)\nsubmission_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}