{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install tez","metadata":{"execution":{"iopub.status.busy":"2023-08-29T04:08:20.2357Z","iopub.execute_input":"2023-08-29T04:08:20.236053Z","iopub.status.idle":"2023-08-29T04:08:31.439316Z","shell.execute_reply.started":"2023-08-29T04:08:20.23602Z","shell.execute_reply":"2023-08-29T04:08:31.438367Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Collecting tez\n  Downloading tez-0.7.2-py3-none-any.whl (19 kB)\nCollecting tqdm>=4.64.0\n  Downloading tqdm-4.66.1-py3-none-any.whl (78 kB)\n\u001b[K     |████████████████████████████████| 78 kB 3.8 MB/s eta 0:00:011\n\u001b[?25hCollecting loguru>=0.6.0\n  Downloading loguru-0.7.0-py3-none-any.whl (59 kB)\n\u001b[K     |████████████████████████████████| 59 kB 5.5 MB/s  eta 0:00:01\n\u001b[?25hCollecting accelerate>=0.12.0\n  Downloading accelerate-0.20.3-py3-none-any.whl (227 kB)\n\u001b[K     |████████████████████████████████| 227 kB 50.9 MB/s eta 0:00:01\n\u001b[?25hRequirement already satisfied: psutil in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (5.7.0)\nRequirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (20.1)\nRequirement already satisfied: torch>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (1.6.0)\nRequirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (1.18.5)\nRequirement already satisfied: pyyaml in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (5.3.1)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from packaging>=20.0->accelerate>=0.12.0->tez) (1.14.0)\nRequirement already satisfied: pyparsing>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging>=20.0->accelerate>=0.12.0->tez) (2.4.7)\nRequirement already satisfied: future in /opt/conda/lib/python3.7/site-packages (from torch>=1.6.0->accelerate>=0.12.0->tez) (0.18.2)\nInstalling collected packages: tqdm, loguru, accelerate, tez\n  Attempting uninstall: tqdm\n    Found existing installation: tqdm 4.45.0\n    Uninstalling tqdm-4.45.0:\n      Successfully uninstalled tqdm-4.45.0\nSuccessfully installed accelerate-0.20.3 loguru-0.7.0 tez-0.7.2 tqdm-4.66.1\n\u001b[33mWARNING: You are using pip version 20.2.4; however, version 23.2.1 is available.\nYou should consider upgrading via the '/opt/conda/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n","output_type":"stream"}]},{"cell_type":"code","source":"pip install --upgrade pip\n","metadata":{"execution":{"iopub.status.busy":"2023-08-25T03:46:03.314023Z","iopub.execute_input":"2023-08-25T03:46:03.314458Z","iopub.status.idle":"2023-08-25T03:46:11.415756Z","shell.execute_reply.started":"2023-08-25T03:46:03.314409Z","shell.execute_reply":"2023-08-25T03:46:11.414877Z"},"trusted":true},"execution_count":18,"outputs":[{"name":"stdout","text":"Requirement already satisfied: pip in /opt/conda/lib/python3.7/site-packages (23.2.1)\n\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n\u001b[0mNote: you may need to restart the kernel to use updated packages.\n","output_type":"stream"}]},{"cell_type":"code","source":"%%capture\n!cp -r ../input/acceleratemaster/ .\n!pip uninstall -y accelerate\n!cd acceleratemaster && python setup.py install\n","metadata":{"execution":{"iopub.status.busy":"2023-08-29T04:09:31.368022Z","iopub.execute_input":"2023-08-29T04:09:31.368408Z","iopub.status.idle":"2023-08-29T04:09:35.507909Z","shell.execute_reply.started":"2023-08-29T04:09:31.36837Z","shell.execute_reply":"2023-08-29T04:09:35.506697Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"!pip install tez\n!pip install efficientnet-pytorch","metadata":{"execution":{"iopub.status.busy":"2023-08-25T03:46:15.174682Z","iopub.execute_input":"2023-08-25T03:46:15.175093Z"},"trusted":true},"execution_count":null,"outputs":[{"name":"stdout","text":"Requirement already satisfied: tez in /opt/conda/lib/python3.7/site-packages (0.7.2)\nRequirement already satisfied: loguru>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from tez) (0.7.0)\nCollecting accelerate>=0.12.0 (from tez)\n  Obtaining dependency information for accelerate>=0.12.0 from https://files.pythonhosted.org/packages/10/d3/5382aa337d3e67214003a17b06bfc07cf0334356b4e8aaf3b12b0d38c83f/accelerate-0.20.3-py3-none-any.whl.metadata\n  Using cached accelerate-0.20.3-py3-none-any.whl.metadata (17 kB)\nRequirement already satisfied: tqdm>=4.64.0 in /opt/conda/lib/python3.7/site-packages (from tez) (4.66.1)\nRequirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (1.17.5)\nRequirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (20.1)\nRequirement already satisfied: psutil in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (5.7.0)\nRequirement already satisfied: pyyaml in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (5.3.1)\nRequirement already satisfied: torch>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from accelerate>=0.12.0->tez) (1.6.0)\nRequirement already satisfied: pyparsing>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging>=20.0->accelerate>=0.12.0->tez) (2.4.7)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from packaging>=20.0->accelerate>=0.12.0->tez) (1.14.0)\nRequirement already satisfied: future in /opt/conda/lib/python3.7/site-packages (from torch>=1.6.0->accelerate>=0.12.0->tez) (0.18.2)\nUsing cached accelerate-0.20.3-py3-none-any.whl (227 kB)\n","output_type":"stream"}]},{"cell_type":"code","source":"%%capture\n!cp -r ../input/tez-lib/ .\n!cd tez-lib && pip install . --no-deps\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tez_path = '../input/tez-lib/'\n#effnet_path = '../input/efficientnet-pytorch/'\nimport sys\nsys.path.append(tez_path)\n#sys.path.append(effnet_path)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-08-29T04:22:02.895209Z","iopub.execute_input":"2023-08-29T04:22:02.895635Z","iopub.status.idle":"2023-08-29T04:22:02.900262Z","shell.execute_reply.started":"2023-08-29T04:22:02.895581Z","shell.execute_reply":"2023-08-29T04:22:02.899304Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport albumentations\nimport pandas as pd\nimport numpy as np\nimport tez\nfrom tez.datasets import ImageDataset\n\nimport torch\nimport torch.nn as nn\nfrom torch.nn import functional as F\n\nfrom efficientnet_pytorch import EfficientNet\nfrom sklearn import metrics, model_selection, preprocessing","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2023-08-29T04:22:22.88796Z","iopub.execute_input":"2023-08-29T04:22:22.888302Z","iopub.status.idle":"2023-08-29T04:22:22.914476Z","shell.execute_reply.started":"2023-08-29T04:22:22.888269Z","shell.execute_reply":"2023-08-29T04:22:22.912333Z"},"trusted":true},"execution_count":12,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)","\u001b[0;32m<ipython-input-12-97560a8ab924>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtez\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtez\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mImageDataset\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tez/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCallback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTez\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTezConfig\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mModel\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tez/callbacks/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mCallbackRunner\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mearly_stopping\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mEarlyStopping\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mprogress\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mProgress\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tez/callbacks/early_stopping.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0maccelerate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlogging\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_logger\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtez\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0menums\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtez\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCallback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'accelerate'"],"ename":"ModuleNotFoundError","evalue":"No module named 'accelerate'","output_type":"error"}]},{"cell_type":"code","source":"class LeafModel(tez.Model):\n    def __init__(self, num_classes):\n        super().__init__()\n\n        self.effnet = EfficientNet.from_name(\"efficientnet-b4\")\n        self.dropout = nn.Dropout(0.1)\n        self.out = nn.Linear(1792, num_classes)\n        self.step_scheduler_after = \"epoch\"\n\n    def forward(self, image, targets=None):\n        batch_size, _, _, _ = image.shape\n\n        x = self.effnet.extract_features(image)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        outputs = self.out(self.dropout(x))\n        return outputs, None, None","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# augmentations taken from: https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta\ntest_aug = albumentations.Compose([\n    albumentations.RandomResizedCrop(256, 256),\n    albumentations.Transpose(p=0.5),\n    albumentations.HorizontalFlip(p=0.5),\n    albumentations.VerticalFlip(p=0.5),\n    albumentations.HueSaturationValue(\n        hue_shift_limit=0.2, \n        sat_shift_limit=0.2,\n        val_shift_limit=0.2, \n        p=0.5\n    ),\n    albumentations.RandomBrightnessContrast(\n        brightness_limit=(-0.1,0.1), \n        contrast_limit=(-0.1, 0.1), \n        p=0.5\n    ),\n    albumentations.Normalize(\n        mean=[0.485, 0.456, 0.406], \n        std=[0.229, 0.224, 0.225], \n        max_pixel_value=255.0, \n        p=1.0\n    )\n], p=1.)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dfx = pd.read_csv(\"../input/cassava-leaf-disease-classification/sample_submission.csv\")\nimage_path = \"../input/cassava-leaf-disease-classification/test_images/\"\ntest_image_paths = [os.path.join(image_path, x) for x in dfx.image_id.values]\n# fake targets\ntest_targets = dfx.label.values\ntest_dataset = ImageDataset(\n    image_paths=test_image_paths,\n    targets=test_targets,\n    resize=None,\n    augmentations=test_aug,\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dfx = pd.read_csv(\"../input/cassava-leaf-disease-classification/train.csv\")\nmodel = LeafModel(num_classes=train_dfx.label.nunique())\nmodel.load(\"../input/leafmodel/model.bin\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# run inference 5 times\nfinal_preds = None\nfor j in range(5):\n    preds = model.predict(test_dataset, batch_size=32, n_jobs=-1, device=\"cuda\")\n    temp_preds = None\n    for p in preds:\n        if temp_preds is None:\n            temp_preds = p\n        else:\n            temp_preds = np.vstack((temp_preds, p))\n    if final_preds is None:\n        final_preds = temp_preds\n    else:\n        final_preds += temp_preds\nfinal_preds /= 5","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_preds = final_preds.argmax(axis=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dfx.label = final_preds","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dfx.to_csv(\"submission.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}