{"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 pandas as pd\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn.model_selection import train_test_split\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nimport torchvision.models as models\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nfrom torchvision import transforms as T\nimport gc ","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:56:16.375742Z","iopub.execute_input":"2021-07-26T18:56:16.376078Z","iopub.status.idle":"2021-07-26T18:56:19.477178Z","shell.execute_reply.started":"2021-07-26T18:56:16.376005Z","shell.execute_reply":"2021-07-26T18:56:19.476149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\")\n#folder_path_256 = \"../input/resized-plant2021/img_sz_256\"\n#data_paths_256 = os.listdir(folder_path_256)\ntrain_df_cp = train_df.copy()\ntrain_df_cp['label_list'] = train_df_cp['labels'].str.split(' ')","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:57:59.630559Z","iopub.execute_input":"2021-07-26T18:57:59.630919Z","iopub.status.idle":"2021-07-26T18:58:00.089431Z","shell.execute_reply.started":"2021-07-26T18:57:59.630888Z","shell.execute_reply":"2021-07-26T18:58:00.088554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def lbl_lgc(col,lbl_list):\n    if col in lbl_list:\n        res = 1 \n    else:\n        res = 0\n    return res","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lbls = ['healthy','complex','rust','frog_eye_leaf_spot','powdery_mildew','scab']\nfor x in lbls:\n    train_df_cp[x]=0\n\n\nfor x in lbls:\n    train_df_cp[x] = np.vectorize(lbl_lgc)(x,train_df_cp['label_list'])","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:58:27.596205Z","iopub.execute_input":"2021-07-26T18:58:27.59656Z","iopub.status.idle":"2021-07-26T18:58:27.635688Z","shell.execute_reply.started":"2021-07-26T18:58:27.596522Z","shell.execute_reply":"2021-07-26T18:58:27.634886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Plant_Dataset(Dataset):\n  def __init__(self,folder_path,data_paths,data_df=train_df_cp,size=224,transforms=None, train=True):\n    self.folder_path = folder_path\n    self.data_paths = data_paths\n    self.data_df = data_df\n    self.transforms = transforms\n    self.train = train\n    self.size = size\n\n  def __getitem__(self, idx):\n    img_path = os.path.join(self.folder_path,self.data_paths[idx])\n    image = cv2.imread(img_path)\n    image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)\n    image = cv2.resize(image, (self.size, self.size), interpolation=cv2.INTER_AREA)\n    image = np.asarray(image)\n\n    if self.train: #for train or validation data\n     #label = self.data_df.loc[self.data_df['image']==self.data_paths[idx]].values[0][1]\n      j = 0\n      vector = [0]*6\n      values = self.data_df.loc[self.data_df['image']==self.data_paths[idx]].values\n      for i in range(3,9):\n        num = values[0][i]\n        vector[j] = num\n        j = j+1\n     \n      vector=np.asarray(vector)\n      \n    \n    if self.transforms:\n       image = self.transforms(image=image)['image']\n\n    if self.train:\n     return image,vector #train or validation data\n    else:\n      return image,self.data_paths[idx] #test data\n\n\n  def __len__(self):\n    return len(self.data_paths)  ","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:58:30.412232Z","iopub.execute_input":"2021-07-26T18:58:30.412544Z","iopub.status.idle":"2021-07-26T18:58:30.421814Z","shell.execute_reply.started":"2021-07-26T18:58:30.412513Z","shell.execute_reply":"2021-07-26T18:58:30.420953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def submission(images,predictions):\n  str_preds = []\n  img_names = []\n  j=0  \n  for vec in predictions:\n    labels = []\n    for i in range(len(vec[0])):\n      if vec[0][i]==1:\n       labels.append(lbls[i])\n         \n    l = ' '.join(labels)\n    str_preds.append(l) \n    img_names.append(images[j][0])\n    j += 1\n    \n  output = pd.DataFrame({'image': img_names, 'labels': str_preds})\n  output.to_csv('submission.csv',index=False)     ","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:58:33.360089Z","iopub.execute_input":"2021-07-26T18:58:33.360432Z","iopub.status.idle":"2021-07-26T18:58:33.366829Z","shell.execute_reply.started":"2021-07-26T18:58:33.360399Z","shell.execute_reply":"2021-07-26T18:58:33.365472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def model_test(model,test_loader):\n model.eval()\n images = []\n predictions = []   \n treshold = 0.5\n for i ,(img,img_name) in enumerate(test_loader):\n    images.append(img_name)\n    img = img.float()\n    img = img.cuda()\n    \n    with torch.no_grad():\n      output = torch.sigmoid(model(img)).float()\n    \n    output = torch.where(output > treshold, 1,0)\n    predictions.append(output)\n    \n    del img\n    del output\n    \n    gc.collect() \n    torch.cuda.empty_cache()\n    \n    \n return images,predictions","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:58:34.905439Z","iopub.execute_input":"2021-07-26T18:58:34.905773Z","iopub.status.idle":"2021-07-26T18:58:34.913666Z","shell.execute_reply.started":"2021-07-26T18:58:34.905741Z","shell.execute_reply":"2021-07-26T18:58:34.912736Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_model(path,model,optimizer):\n  checkpoint = torch.load(path)\n  model.load_state_dict(checkpoint['model_state_dict'])\n  optimizer.load_state_dict(checkpoint['optimizer_state_dict'])\n  epoch = checkpoint['epoch']\n  train_loss = checkpoint['train_loss']\n  val_loss = checkpoint['val_loss']\n  train_acc = checkpoint['train_acc']\n  val_acc = checkpoint['val_acc']\n  return train_loss,val_loss,train_acc,val_acc,epoch","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:58:36.535228Z","iopub.execute_input":"2021-07-26T18:58:36.535544Z","iopub.status.idle":"2021-07-26T18:58:36.540844Z","shell.execute_reply.started":"2021-07-26T18:58:36.535513Z","shell.execute_reply":"2021-07-26T18:58:36.539625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_path = \"../input/plant-pathology-2021-fgvc8/test_images\"\ntest_data_paths = os.listdir(test_path)","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:59:44.157245Z","iopub.execute_input":"2021-07-26T18:59:44.157567Z","iopub.status.idle":"2021-07-26T18:59:44.163088Z","shell.execute_reply.started":"2021-07-26T18:59:44.157535Z","shell.execute_reply":"2021-07-26T18:59:44.162295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gc.collect() \ntorch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2021-07-26T18:59:55.49856Z","iopub.execute_input":"2021-07-26T18:59:55.498921Z","iopub.status.idle":"2021-07-26T18:59:55.609864Z","shell.execute_reply.started":"2021-07-26T18:59:55.498891Z","shell.execute_reply":"2021-07-26T18:59:55.608693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"transforms = A.Compose([A.Normalize(),ToTensorV2()])","metadata":{"execution":{"iopub.status.busy":"2021-07-26T19:00:19.540778Z","iopub.execute_input":"2021-07-26T19:00:19.541101Z","iopub.status.idle":"2021-07-26T19:00:19.547695Z","shell.execute_reply.started":"2021-07-26T19:00:19.541071Z","shell.execute_reply":"2021-07-26T19:00:19.546827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = Plant_Dataset(test_path,test_data_paths,transforms=transforms,train=False)\ntest_loader = DataLoader(test_data, batch_size=1, shuffle=False,num_workers=0)","metadata":{"execution":{"iopub.status.busy":"2021-07-26T19:00:21.367367Z","iopub.execute_input":"2021-07-26T19:00:21.367721Z","iopub.status.idle":"2021-07-26T19:00:21.373916Z","shell.execute_reply.started":"2021-07-26T19:00:21.367686Z","shell.execute_reply":"2021-07-26T19:00:21.371142Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = models.vgg19_bn(pretrained=False)\nmodel.classifier[6] = nn.Linear(4096,6)\noptimi = optim.AdamW(model.parameters(), lr=1e-4)\n#load_model(model1_path,model,optimi)","metadata":{"execution":{"iopub.status.busy":"2021-07-26T19:15:39.279745Z","iopub.execute_input":"2021-07-26T19:15:39.280098Z","iopub.status.idle":"2021-07-26T19:15:39.753152Z","shell.execute_reply.started":"2021-07-26T19:15:39.280065Z","shell.execute_reply":"2021-07-26T19:15:39.752168Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"load_model('../input/model-5/vgg19bn_1',model,optimi)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-07-26T19:16:34.372537Z","iopub.execute_input":"2021-07-26T19:16:34.372936Z","iopub.status.idle":"2021-07-26T19:16:34.422141Z","shell.execute_reply.started":"2021-07-26T19:16:34.3729Z","shell.execute_reply":"2021-07-26T19:16:34.421162Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"images,predictions = model_test(model,test_loader)\nsubmission(images,predictions)","metadata":{"execution":{"iopub.status.busy":"2021-07-26T19:16:39.60752Z","iopub.execute_input":"2021-07-26T19:16:39.607888Z","iopub.status.idle":"2021-07-26T19:16:41.562076Z","shell.execute_reply.started":"2021-07-26T19:16:39.607856Z","shell.execute_reply":"2021-07-26T19:16:41.561118Z"},"trusted":true},"execution_count":null,"outputs":[]}]}