{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":13836,"databundleVersionId":1718836,"sourceType":"competition"}],"dockerImageVersionId":30664,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# `MODULES`","metadata":{}},{"cell_type":"code","source":"# basic\nimport pandas as pd\nimport numpy as np\n\nimport json\n\n# visualisation\nimport matplotlib.pyplot as plt\nfrom PIL import Image\n\n# sklearn\nfrom sklearn.model_selection import train_test_split\n\n# pytorch\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.nn import functional as F\nfrom torch.utils.data import Dataset, DataLoader\nfrom torchvision import models\nimport torchvision.transforms as transforms\n\n# augmentations\nimport albumentations\nfrom albumentations.pytorch.transforms import ToTensorV2","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:43:35.057878Z","iopub.execute_input":"2024-03-04T15:43:35.058255Z","iopub.status.idle":"2024-03-04T15:43:35.065158Z","shell.execute_reply.started":"2024-03-04T15:43:35.058224Z","shell.execute_reply":"2024-03-04T15:43:35.063923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## `Datasets`","metadata":{}},{"cell_type":"code","source":"BASE_DIR = \"/kaggle/input/cassava-leaf-disease-classification\"\n\ntrain = pd.read_csv(f\"{BASE_DIR}/train.csv\")\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:08:21.608573Z","iopub.execute_input":"2024-03-04T15:08:21.608946Z","iopub.status.idle":"2024-03-04T15:08:21.642568Z","shell.execute_reply.started":"2024-03-04T15:08:21.608915Z","shell.execute_reply":"2024-03-04T15:08:21.641641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with open(f\"{BASE_DIR}/label_num_to_disease_map.json\") as f:\n    mapping = json.loads(f.read())\n    mapping = {int(k): v for k, v in mapping.items()}\nmapping","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:11:32.475356Z","iopub.execute_input":"2024-03-04T15:11:32.475722Z","iopub.status.idle":"2024-03-04T15:11:32.485316Z","shell.execute_reply.started":"2024-03-04T15:11:32.475693Z","shell.execute_reply":"2024-03-04T15:11:32.484514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"labels_name\"] = train[\"label\"].map(mapping)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:12:13.596092Z","iopub.execute_input":"2024-03-04T15:12:13.596516Z","iopub.status.idle":"2024-03-04T15:12:13.617245Z","shell.execute_reply.started":"2024-03-04T15:12:13.596476Z","shell.execute_reply":"2024-03-04T15:12:13.615954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"labels_name\"].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:24:53.730657Z","iopub.execute_input":"2024-03-04T15:24:53.731029Z","iopub.status.idle":"2024-03-04T15:24:53.744889Z","shell.execute_reply.started":"2024-03-04T15:24:53.730999Z","shell.execute_reply":"2024-03-04T15:24:53.743402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Data is skewed. Majority of labels are for CMD**","metadata":{}},{"cell_type":"code","source":"def plot_images(class_id, label, total_images = 10):\n    plot_list = train[train[\"label\"] == class_id].sample(total_images)[\"image_id\"].tolist()\n    \n    labels = [label for i in range(total_images)]\n    size = int(np.sqrt(total_images))\n    if size**2 < total_images:\n        size += 1\n    \n    plt.figure(figsize=(20, 20))\n    \n    for index, (image_id, label) in enumerate(zip(plot_list, labels)):\n        plt.subplot(size, size, index+1)\n        image = Image.open(f\"{BASE_DIR}/train_images/{image_id}\")\n        plt.imshow(image)\n        plt.title(label, fontsize=14)\n        plt.axis(\"off\")\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:20:43.858105Z","iopub.execute_input":"2024-03-04T15:20:43.858504Z","iopub.status.idle":"2024-03-04T15:20:43.866594Z","shell.execute_reply.started":"2024-03-04T15:20:43.858470Z","shell.execute_reply":"2024-03-04T15:20:43.865448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_images(0, mapping[0], 10)\nplot_images(0, mapping[1], 10)\nplot_images(0, mapping[2], 10)\nplot_images(0, mapping[3], 10)\nplot_images(0, mapping[4], 10)","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:22:41.127145Z","iopub.execute_input":"2024-03-04T15:22:41.127539Z","iopub.status.idle":"2024-03-04T15:22:53.153482Z","shell.execute_reply.started":"2024-03-04T15:22:41.127508Z","shell.execute_reply":"2024-03-04T15:22:53.152392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## `Augmentation`","metadata":{}},{"cell_type":"code","source":"def get_transforms(flag = True):\n    if flag:\n        pass\n    else:\n        pass","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:40:24.207345Z","iopub.execute_input":"2024-03-04T15:40:24.207763Z","iopub.status.idle":"2024-03-04T15:40:24.213038Z","shell.execute_reply.started":"2024-03-04T15:40:24.207729Z","shell.execute_reply":"2024-03-04T15:40:24.211848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## `Dataset Loader`","metadata":{}},{"cell_type":"code","source":"class CassavaDataset(Dataset):\n    def __init__(self):\n        super().__init__()\n        pass\n    \n    def __len__(self):\n        return len(self, image_ids)\n    \n    def __getitems__(self, idx):\n        return dataset[idx]","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:42:31.057740Z","iopub.execute_input":"2024-03-04T15:42:31.058142Z","iopub.status.idle":"2024-03-04T15:42:31.064135Z","shell.execute_reply.started":"2024-03-04T15:42:31.058109Z","shell.execute_reply":"2024-03-04T15:42:31.063073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## `Transfer Learning`","metadata":{}},{"cell_type":"code","source":"#Resnet150\n\ncriterion = nn.CrossEntropyLoss()\n#optimizer = torch.optim.Adam(lr=1e-3)","metadata":{"execution":{"iopub.status.busy":"2024-03-04T15:47:35.261228Z","iopub.execute_input":"2024-03-04T15:47:35.261612Z","iopub.status.idle":"2024-03-04T15:47:35.266571Z","shell.execute_reply.started":"2024-03-04T15:47:35.261581Z","shell.execute_reply":"2024-03-04T15:47:35.265511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}