{"cells":[{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# ===============\n# Unet+Resnet50\n# ===============\nimport os\nimport gc\nimport json\nimport time\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom contextlib import contextmanager\nfrom sklearn.metrics import cohen_kappa_score\nimport torch\nfrom torch.utils.data import DataLoader\n\nimport sys\n\nsys.path.append(\"../input/aptos-src\")\nfrom util import seed_torch\nfrom metric import OptimizedKappaRounder\nfrom model import ResNet\nfrom logger import setup_logger, LOGGER\n\n\nimport os\nimport cv2\nimport torch\nimport random\nimport pydicom\nimport numpy as np\nfrom torch.utils.data import Dataset\n\n\nclass APTOSDatasetTest(Dataset):\n\n    def __init__(self,\n                 df,\n                 img_size,\n                 image_path,\n                 id_colname=\"id_code\",\n                 target_colname=\"diagnosis\",\n                 transforms=None,\n                 means=[0.485, 0.456, 0.406],\n                 stds=[0.229, 0.224, 0.225]\n                 ):\n        self.df = df\n        self.img_size = img_size\n        self.image_path = image_path\n        self.transforms = transforms\n        self.means = np.array(means)\n        self.stds = np.array(stds)\n        self.id_colname = id_colname\n        self.target_colname = target_colname\n\n    def __len__(self):\n        return self.df.shape[0]\n\n    def __getitem__(self, idx):\n        cur_idx_row = self.df.iloc[idx]\n        img_id = cur_idx_row[self.id_colname]\n        img_name = img_id + \".png\"\n        img_path = os.path.join(self.image_path, img_name)\n\n        img = cv2.imread(img_path)\n        img = cv2.resize(img, (self.img_size, self.img_size))\n\n        if self.transforms is not None:\n            augmented = self.transforms(image=img)\n            img = augmented['image']\n\n        img = img / 255\n        img -= self.means\n        img /= self.stds\n        img = img.transpose((2, 0, 1))\n\n        return torch.Tensor(img), img_id\n\n\ndef test(model, valid_loader, device, batch_size, last=False):\n    model.eval()\n    ids = []\n    preds_cat = []\n    with torch.no_grad():\n\n        for step, (features, img_id) in enumerate(valid_loader):\n            features = features.to(device)\n\n            logits = model(features)\n            \n            ids.extend(img_id)\n            preds_cat.append(logits)\n\n        ids = np.array(ids).reshape(-1)\n        all_preds = torch.cat(preds_cat).float().cpu().numpy()\n\n    return all_preds, ids\n\n\n# ===============\n# Constants\n# ===============\nDATA_DIR = \"../input/aptos2019-blindness-detection/\"\nIMAGE_PATH = \"../input/aptos2019-blindness-detection/test_images/\"\nLOGGER_PATH = \"log.txt\"\nTRAIN_PATH = os.path.join(DATA_DIR, \"train.csv\")\nTEST_PATH = os.path.join(DATA_DIR, \"test.csv\")\nID_COLUMNS = \"id_code\"\nTARGET_COLUMNS = \"diagnosis\"\n\n# ===============\n# Settings\n# ===============\nseed = 0\ndevice = \"cuda:0\"\nimg_size = 256\nbatch_size = 64\nmodel_path = \"../input/exp1-resnet50/exp1_resnet50_fold0.pth\"\n\nsetup_logger(out_file=LOGGER_PATH)\nseed_torch(seed)\n\n\n@contextmanager\ndef timer(name):\n    t0 = time.time()\n    yield\n    LOGGER.info(f'[{name}] done in {time.time() - t0:.0f} s')\n\n\nwith timer('load data'):\n    df = pd.read_csv(TEST_PATH)\n\nwith timer('preprocessing'):\n    test_augmentation = None\n    test_dataset = APTOSDatasetTest(df, img_size, IMAGE_PATH, id_colname=ID_COLUMNS,\n                               transforms=test_augmentation)\n    test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=2, pin_memory=True)\n\n    del df\n    gc.collect()\n\nwith timer('create model'):\n    model = ResNet(num_classes=1, pretrained=None)\n    model.load_state_dict(torch.load(model_path))\n    model.to(device)\n\nwith timer('predict'):\n    test_pred, ids = test(model, test_loader, device, batch_size)\n\n    optR = OptimizedKappaRounder()\n    coefficients = [0.5867620312940832, 1.3155473393431514, 2.5984588076287, 3.1550712728719525]\n    test_pred = optR.predict(test_pred, coefficients)\n    \n    sub_df = pd.DataFrame({ID_COLUMNS: ids, TARGET_COLUMNS: test_pred})\n    LOGGER.info(sub_df.head())\n    sub_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}