{"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":"markdown","source":"# Import","metadata":{}},{"cell_type":"code","source":"package_path = \"../input/efficientnet-pytorch/EfficientNet-PyTorch/EfficientNet-PyTorch-master/\"\nimport sys \nsys.path.append(package_path)","metadata":{"execution":{"iopub.status.busy":"2021-12-14T12:59:18.895505Z","iopub.execute_input":"2021-12-14T12:59:18.895715Z","iopub.status.idle":"2021-12-14T12:59:18.899910Z","shell.execute_reply.started":"2021-12-14T12:59:18.895691Z","shell.execute_reply":"2021-12-14T12:59:18.899222Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\nimport cv2\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nfrom pathlib import Path\nimport matplotlib.pyplot as plt\n\nimport torch\nimport torch.nn as nn\nfrom tqdm import tqdm\nimport torchvision.transforms as tfs\nfrom albumentations.pytorch import ToTensorV2\nfrom torch.utils.data import Dataset, DataLoader\nfrom albumentations import RandomResizedCrop, Transpose, HorizontalFlip, VerticalFlip, ShiftScaleRotate, Normalize, Compose, Resize\nimport efficientnet_pytorch","metadata":{"execution":{"iopub.status.busy":"2021-12-14T12:59:18.909625Z","iopub.execute_input":"2021-12-14T12:59:18.909837Z","iopub.status.idle":"2021-12-14T12:59:22.715654Z","shell.execute_reply.started":"2021-12-14T12:59:18.909813Z","shell.execute_reply":"2021-12-14T12:59:22.714947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGE_SIZE = (256, 256)\nBATCH_SIZE = 64\nPATH_SAMPLE_SUBMISSION = '../input/cassava-leaf-disease-classification/sample_submission.csv'\nBASE_PATH = Path('../input/cassava-leaf-disease-classification')\nTEST_IMG_DIR = BASE_PATH /'test_images'","metadata":{"execution":{"iopub.status.busy":"2021-12-14T12:59:22.717420Z","iopub.execute_input":"2021-12-14T12:59:22.717667Z","iopub.status.idle":"2021-12-14T12:59:22.722205Z","shell.execute_reply.started":"2021-12-14T12:59:22.717633Z","shell.execute_reply":"2021-12-14T12:59:22.721494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models_states = ['../input/train-effnet-fold-0-cassava-leaf-disease-clf', '../input/train-effnet-fold-1-cassava-leaf-disease-clf',\n                 '../input/train-effnet-fold-2-cassava-leaf-disease-clf',\n                 '../input/train-effnet-fold-3-cassava-leaf-disease-clf', '../input/train-effnet-fold-4-cassava-leaf-disease-clf']","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:43.645651Z","iopub.execute_input":"2021-12-14T13:01:43.646397Z","iopub.status.idle":"2021-12-14T13:01:43.650669Z","shell.execute_reply.started":"2021-12-14T13:01:43.646355Z","shell.execute_reply":"2021-12-14T13:01:43.649662Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data","metadata":{}},{"cell_type":"code","source":"test = pd.read_csv(PATH_SAMPLE_SUBMISSION)\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:45.740047Z","iopub.execute_input":"2021-12-14T13:01:45.740607Z","iopub.status.idle":"2021-12-14T13:01:45.757657Z","shell.execute_reply.started":"2021-12-14T13:01:45.740567Z","shell.execute_reply":"2021-12-14T13:01:45.755653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = test.image_id.values\nX_test","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:45.896034Z","iopub.execute_input":"2021-12-14T13:01:45.896354Z","iopub.status.idle":"2021-12-14T13:01:45.903619Z","shell.execute_reply.started":"2021-12-14T13:01:45.896320Z","shell.execute_reply":"2021-12-14T13:01:45.902568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data_gen","metadata":{}},{"cell_type":"code","source":"class Data_gen(Dataset):\n    def __init__(self, path:str, image_names:str, transforms:Compose):\n        self.path = path\n        self.image_names = image_names\n        self.transforms = transforms\n    \n        \n    def __len__(self):\n        return len(self.image_names)\n\n    def __getitem__(self, index):\n        x = cv2.imread(os.path.join(self.path, self.image_names[index]))\n        x = cv2.cvtColor(x, cv2.COLOR_BGR2RGB)\n\n        if self.transforms:\n            x = self.transforms(image=x)['image']\n        return x","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:46.240454Z","iopub.execute_input":"2021-12-14T13:01:46.240866Z","iopub.status.idle":"2021-12-14T13:01:46.254930Z","shell.execute_reply.started":"2021-12-14T13:01:46.240824Z","shell.execute_reply":"2021-12-14T13:01:46.254099Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Transform","metadata":{}},{"cell_type":"code","source":"transforms_valid = Compose(\n    [\n\n    Resize(*IMAGE_SIZE),\n    Normalize(\n        mean=[0.485, 0.456, 0.406],\n        std=[0.229, 0.224, 0.225],\n    ),\n    ToTensorV2()\n    ],\n    p=1\n)","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:46.517980Z","iopub.execute_input":"2021-12-14T13:01:46.518939Z","iopub.status.idle":"2021-12-14T13:01:46.523995Z","shell.execute_reply.started":"2021-12-14T13:01:46.518900Z","shell.execute_reply":"2021-12-14T13:01:46.523022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_set = Data_gen(TEST_IMG_DIR, X_test, transforms_valid)\ntest_loader = DataLoader(test_set, batch_size=BATCH_SIZE, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:46.663348Z","iopub.execute_input":"2021-12-14T13:01:46.663539Z","iopub.status.idle":"2021-12-14T13:01:46.670486Z","shell.execute_reply.started":"2021-12-14T13:01:46.663516Z","shell.execute_reply":"2021-12-14T13:01:46.667315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Change device","metadata":{}},{"cell_type":"code","source":"device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\ndevice","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:46.955730Z","iopub.execute_input":"2021-12-14T13:01:46.956660Z","iopub.status.idle":"2021-12-14T13:01:46.966145Z","shell.execute_reply.started":"2021-12-14T13:01:46.956605Z","shell.execute_reply":"2021-12-14T13:01:46.965364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{}},{"cell_type":"code","source":"models = []\nfor m in models_states:\n    \n    effnet = efficientnet_pytorch.EfficientNet.from_name(\"efficientnet-b0\")\n    effnet._fc = nn.Linear(in_features=1280, out_features=5, bias=True)\n\n    states = torch.load(f\"{m}/mobnet.torch\")\n    effnet.load_state_dict(states['model_state_dict'])\n    models.append(effnet)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:47.753900Z","iopub.execute_input":"2021-12-14T13:01:47.754151Z","iopub.status.idle":"2021-12-14T13:01:51.511812Z","shell.execute_reply.started":"2021-12-14T13:01:47.754124Z","shell.execute_reply":"2021-12-14T13:01:51.511106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Get predicts","metadata":{}},{"cell_type":"code","source":"def inference(models, test_loader, device):\n    res = []\n    for images in test_loader:\n        x_batch = images.to(device)\n        buffer_preds = []\n        \n        for model in models:\n            \n            model.to(device)\n            model.eval()\n            \n            with torch.no_grad():\n                logits = model(x_batch)\n            \n            buffer_preds.append(logits)\n        \n        _, avg_predicted = (np.sum(buffer_preds)/len(buffer_preds)).max(1)\n        avg_predicted = avg_predicted.tolist()\n        res.extend(avg_predicted)\n    \n    \n    return res","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:51.514603Z","iopub.execute_input":"2021-12-14T13:01:51.515060Z","iopub.status.idle":"2021-12-14T13:01:51.521666Z","shell.execute_reply.started":"2021-12-14T13:01:51.515021Z","shell.execute_reply":"2021-12-14T13:01:51.520687Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result = inference(models, test_loader, device)\nresult","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:51.524163Z","iopub.execute_input":"2021-12-14T13:01:51.524424Z","iopub.status.idle":"2021-12-14T13:01:57.634895Z","shell.execute_reply.started":"2021-12-14T13:01:51.524392Z","shell.execute_reply":"2021-12-14T13:01:57.634170Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test['label'] = result\ntest","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:57.637052Z","iopub.execute_input":"2021-12-14T13:01:57.638442Z","iopub.status.idle":"2021-12-14T13:01:57.648005Z","shell.execute_reply.started":"2021-12-14T13:01:57.638392Z","shell.execute_reply":"2021-12-14T13:01:57.647290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2021-12-14T13:01:57.649622Z","iopub.execute_input":"2021-12-14T13:01:57.649897Z","iopub.status.idle":"2021-12-14T13:01:57.657005Z","shell.execute_reply.started":"2021-12-14T13:01:57.649862Z","shell.execute_reply":"2021-12-14T13:01:57.656300Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}