{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"!pip install -q efficientnet_pytorch","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os\nimport cv2\nimport glob\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tqdm\nimport torch\nimport torch.nn.functional as F\nimport torch.nn as nn\nfrom torch.utils.data.dataset import Dataset\nfrom torch.utils.data import DataLoader\nimport albumentations as A\nfrom albumentations.pytorch import ToTensor\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score\nfrom transformers import get_cosine_schedule_with_warmup\nfrom efficientnet_pytorch import EfficientNet","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class SIIMDataset(Dataset):\n    def __init__(self, df, data_path , mode= 'train', transform = None , size=256):\n        self.df = df\n        self.image_ids = df['image_name'].tolist()\n        self.data_path = data_path\n        self.mode= mode\n        self.transform = transform\n        self.size = size\n        \n    def __len__(self):\n        return len(self.image_ids)\n    \n    def __getitem__(self , idx):\n        image_id = self.image_ids[idx]\n        image_path = os.path.join(self.data_path , image_id + '.jpg')\n        image = cv2.imread(image_path)\n        image = cv2.resize(image, (self.size,self.size))\n        image = cv2.cvtColor(image , cv2.COLOR_BGR2RGB)\n        \n        if self.transform:\n            aug = self.transform(image=image)\n            image= aug['image']\n            \n        data = {}\n        data['image'] = image\n        data['image_id'] = image_id\n        \n        \n        if self.mode == 'test':\n            return data\n        else:\n            label = self.df.loc[self.df['image_name'] == image_id , 'target'].values[0]\n            data['label'] = torch.tensor(label)\n            return data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_transforms = A.Compose([A.Normalize(),\n                             ToTensor()])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plotimgs(dataset):\n    f , ax = plt.subplots(1,3)\n    for p in range(3):\n        idx = np.random.randint(0 , len(dataset))\n        data = dataset[idx]\n        img = data['image']\n        ax[p].imshow(np.transpose(img,(1,2,0)), interpolation = 'nearest')\n        ax[p].set_title(idx)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_path = '../input/siim-isic-melanoma-classification/'\ntest_path = '../input/siim-isic-melanoma-classification/jpeg/test'\ndevice = 'cuda:0'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.read_csv('../input/siim-isic-melanoma-classification/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"testdata = SIIMDataset(test_df ,test_path, mode='test' , transform = valid_transforms , size = 256)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_loader = DataLoader(testdata , batch_size = 64 , shuffle = False )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class CustomNet(nn.Module):\n    def __init__(self , num_classes):\n        super().__init__()\n        self.model = EfficientNet.from_pretrained('efficientnet-b3')\n        #self.gem = GeM()\n        self.out = nn.Linear(1536, num_classes)\n    \n    def forward(self,x):\n        x = self.model.extract_features(x)\n        x = F.avg_pool2d(x, x.size()[2:]).reshape(-1, 1536)\n        #x = gem(x)\n        return self.out(x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = CustomNet(num_classes = 1)\nmodel.load_state_dict(torch.load('../input/pytorch-baseline-siim-isic/model.pth'))\nmodel.to(device)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.eval()\npreds = []\nt= tqdm.tqdm_notebook(test_loader, total=len(test_loader))\nwith torch.no_grad():\n    for bi,data in enumerate(t):\n        images = data['image'].cuda()\n        preds.extend(model(images).squeeze().detach().cpu().numpy())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample = pd.read_csv(img_path + 'sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def sigmoid(x):\n    return 1/(1 + np.exp(-x))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample.target = sigmoid(np.array(preds))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample.to_csv('submission.csv', index = False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}