{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"from __future__ import print_function, division\nimport pandas as pd\nimport torch.optim as optim\nimport torch.nn as nn\nimport os\nimport torch\nimport pandas as pd\nfrom skimage import io, transform\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset, DataLoader\nfrom torchvision import transforms, utils\nfrom skimage import io\nfrom sklearn.model_selection import train_test_split\nfrom torch.optim.lr_scheduler import ReduceLROnPlateau\nimport albumentations as A\nimport cv2\nplt.ion()   # interactive mode\n\n# Ignore warnings\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\n# CUDA for PyTorch\nuse_cuda = torch.cuda.is_available()\ndevice = torch.device(\"cuda:0\" if use_cuda else \"cpu\")\ntorch.backends.cudnn.benchmark = True\n\n%cd /kaggle/input/effnetfolder/EfficientNet-PyTorch\n\n\nmodel_full_name = 'efficientnet-b4-e10'\nmodel_name = 'efficientnet-b4'\nfolder_name = 'effnetmodelv23'\nfrom efficientnet_pytorch import EfficientNet\n%cd /kaggle/working","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Augmentation # define new augmentation here\nclass ToTensor(object):\n    def __call__(self, image, force_apply=True):\n        output = image.transpose((2, 0, 1))\n        return torch.from_numpy(output)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class TestDataset(Dataset):\n\n    def __init__(self, root_dir, transform=None):\n        \"\"\"\n        Args:\n            root_dir (string): Directory with all the images.\n            transform (callable, optional): Optional transform to be applied\n                on a sample.\n        \"\"\"\n        self.root_dir = root_dir\n        self.transform = transform\n        self.images = os.listdir(root_dir)\n\n    def __len__(self):\n        return len(self.images)\n\n    def __getitem__(self, idx):\n        if torch.is_tensor(idx):\n            idx = idx.tolist()\n\n        img_path = os.path.join(self.root_dir, self.images[idx])\n        image = io.imread(img_path)\n        \n        if self.transform:\n            image = self.transform(image = image)\n\n        return self.images[idx], image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform = A.Compose([\n    A.CenterCrop(width=512, height=512),\n    A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0),\n    ToTensor()\n])\n\ntest_image = TestDataset(root_dir = '../input/cassava-leaf-disease-classification/test_images/', transform = transform)\ntestloader = DataLoader(test_image, batch_size = 4, shuffle=False, num_workers=1)\n\n# load model\nmodel = EfficientNet.from_name(model_name, num_classes = 5).to(device)\n\nPATH = '../input/' + folder_name + '/' + model_full_name + '.pt'\nmodel.load_state_dict(torch.load(PATH))\nmodel.eval()\n\nnames = []\npredicted = []\nfor names_batch, images_batch in testloader:\n    images_batch = images_batch.to(device).float()\n    output = model(images_batch)\n    output = torch.max(output, 1)[1].cpu().detach().numpy()\n    names.extend(list(names_batch))\n    predicted.extend(output)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# export \nresult = pd.DataFrame(list(zip(names, predicted)), columns = ['image_id', 'label'])\n\nresult.to_csv('submission.csv', index=False)","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}