{"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 numpy as np\nimport pandas as pd\n\nlabel_dic = {\n    0: 'healthy', \n    1: 'scab',\n    2: 'rust',\n    3: 'frog_eye_leaf_spot',\n    4: 'complex', \n    5: 'powdery_mildew'\n}","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-05-22T17:14:49.701587Z","iopub.execute_input":"2021-05-22T17:14:49.701913Z","iopub.status.idle":"2021-05-22T17:14:49.710427Z","shell.execute_reply.started":"2021-05-22T17:14:49.701837Z","shell.execute_reply":"2021-05-22T17:14:49.709515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!apt install ../input/pyturbojpeg/libturbojpeg_1.4.2-0ubuntu3.4_amd64.deb\n!pip install ../input/pyturbojpeg/PyTurboJPEG-1.4.1","metadata":{"execution":{"iopub.status.busy":"2021-05-22T17:14:49.715971Z","iopub.execute_input":"2021-05-22T17:14:49.716231Z","iopub.status.idle":"2021-05-22T17:15:22.179834Z","shell.execute_reply.started":"2021-05-22T17:14:49.716207Z","shell.execute_reply":"2021-05-22T17:15:22.178832Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport albumentations as A\nimport cv2, torch\nimport torchvision.transforms as transforms\nfrom tqdm.notebook import tqdm\nfrom torch.utils.data import Dataset, DataLoader\nfrom turbojpeg import TurboJPEG\n\ndevice = torch.device('cuda' if torch.cuda.is_available else 'cpu')\n\n#######################################\n\nfrom albumentations.pytorch import ToTensor\n\ndef transform_valid():\n    \n    augmentation_pipeline = A.Compose(\n        [\n            A.SmallestMaxSize(224),\n            A.RandomCrop(224, 224),\n            A.Normalize(\n                mean=[0.485, 0.456, 0.406],\n                std=[0.229, 0.224, 0.225]\n                ),\n            ToTensor() \n        ],\n        p = 1\n    )\n    return lambda img:augmentation_pipeline(image=np.array(img))['image']\n\n######################################\n\njpeg_reader = TurboJPEG()\n\ndef read_img(img):\n    with open(img, \"rb\") as f:\n        return jpeg_reader.decode(f.read(), 0) ","metadata":{"execution":{"iopub.status.busy":"2021-05-22T17:15:42.881769Z","iopub.execute_input":"2021-05-22T17:15:42.882146Z","iopub.status.idle":"2021-05-22T17:15:45.959341Z","shell.execute_reply.started":"2021-05-22T17:15:42.88211Z","shell.execute_reply":"2021-05-22T17:15:45.958301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\n\nsys.path.append(\"../input/efficientnet-pytorch/EfficientNet-PyTorch/EfficientNet-PyTorch-master\")\n\nfrom efficientnet_pytorch import model as enet\n\nmodel = enet.EfficientNet.from_name('efficientnet-b0')\n\nimport torch.nn as nn\n\nmodel._fc = nn.Linear(in_features=model._fc.in_features, out_features=6)\n\nmodel.load_state_dict(torch.load('../input/pytorch-efficientnet/best_model.pth'))\n\nmodel = model.to(device)","metadata":{"execution":{"iopub.status.busy":"2021-05-22T17:16:00.080578Z","iopub.execute_input":"2021-05-22T17:16:00.080933Z","iopub.status.idle":"2021-05-22T17:16:00.26317Z","shell.execute_reply.started":"2021-05-22T17:16:00.080899Z","shell.execute_reply":"2021-05-22T17:16:00.262229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from glob import glob\nclasses = 6\nvalid_image_list = glob('../input/plant-pathology-2021-fgvc8/test_images/*.jpg')\n\ndef to_lab(preds):\n    return ((preds > 0) + torch.nn.functional.one_hot(preds.argmax(1), 6) != 0).long()\n\nmodel.eval()\npredict_list = []\nimage_name_list = []\nfor i, image in tqdm(enumerate(valid_image_list)) :\n    image_name = image[48:]\n    \n    img = read_img(image)\n    img = transform_valid()(img)\n    \n    result_list = torch.FloatTensor(np.zeros((classes))).to(device)\n    img = img.to(device)\n    img = img.reshape(-1, 3, 224, 224)\n    with torch.set_grad_enabled(False):\n        predict = model(img)\n    #predict = predict.reshape(-1)\n    #result_list += (predict > 0).nonzero().reshape(-1)\n    predict_list.append(list(to_lab(predict).reshape(-1).nonzero().reshape(-1).cpu().numpy()))\n    #predict_list.append(result_list)\n    image_name_list.append(image_name)\n    \n#predict_list = np.array(predict_list)\nimage_name_list = np.array(image_name_list)\nprint(image_name_list)\n\nsubmission_df = pd.DataFrame()\nsubmission_df['image'] = image_name_list\nsubmission_df['label_id'] = predict_list\nsubmission_df['labels'] = submission_df['label_id'].apply(lambda x: \" \".join([label_dic[i] for i in x]))\ndel submission_df['label_id']\nsubmission_df.head()","metadata":{"execution":{"iopub.status.busy":"2021-05-22T17:18:06.092428Z","iopub.execute_input":"2021-05-22T17:18:06.092746Z","iopub.status.idle":"2021-05-22T17:18:06.450834Z","shell.execute_reply.started":"2021-05-22T17:18:06.092715Z","shell.execute_reply":"2021-05-22T17:18:06.449967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df.to_csv(\"submission.csv\", index = False)","metadata":{"execution":{"iopub.status.busy":"2021-05-22T17:18:29.84125Z","iopub.execute_input":"2021-05-22T17:18:29.841585Z","iopub.status.idle":"2021-05-22T17:18:29.984424Z","shell.execute_reply.started":"2021-05-22T17:18:29.841554Z","shell.execute_reply":"2021-05-22T17:18:29.983585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}