{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Introduction\n\nAs mentioned [here](https://www.kaggle.com/c/alaska2-image-steganalysis/discussion/146610#823749), SRNet is a top NN for steganalysis. I would like to check the out-of-box performance of SRNet on this dataset. You can find the model and pretrained weight [here](https://www.kaggle.com/naivelamb/srnet-model-weight).\n\nIf you like it, please upvote the notebook and the dataset. "},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nimport sys\nfrom scipy import misc\nfrom glob import glob\n\nfrom PIL import Image, ImageOps\nimport cv2\n\nfrom tqdm.notebook import tqdm\n\nimport albumentations as albu\nfrom albumentations.pytorch import ToTensor\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import DataLoader, Dataset, sampler\n\nsys.path.append('/kaggle/input/srnet-model-weight/')\n\nfrom model import Srnet","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"BATCH_SIZE = 40\nTESTPATH = '/kaggle/input/alaska2-image-steganalysis/Test/'\nCHKPT = '/kaggle/input/srnet-model-weight/SRNet_model_weights.pt'\n\ndf_sub = pd.read_csv('/kaggle/input/alaska2-image-steganalysis/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Dataset and transform"},{"metadata":{"trusted":true},"cell_type":"code","source":"def transform_test():\n    transform = albu.Compose([\n        albu.Normalize(mean=(0.485,0.456,0.406), std=(0.229,0.224,0.225)),\n        ToTensor()\n    ])\n    return transform","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class AlaskaDataset(Dataset):\n    def __init__(self, df, data_folder, transform):\n        self.df = df\n        self.root = data_folder\n        self._transorm = transform\n\n    def __getitem__(self, idx):\n        image_id = self.df.Id.iloc[idx]\n        image_path = os.path.join(self.root, image_id)\n        img = cv2.imread(image_path)\n        augment = self._transorm(image=img)\n        img = augment['image']\n        img = torch.mean(img, axis=0, keepdim=True) # SRNet requres input image to be one channel\n        return img\n\n    def __len__(self):\n        return len(self.df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# build dataset\ntest_transform = transform_test()\ntest_dataset = AlaskaDataset(df_sub, TESTPATH, test_transform)\ntest_data = DataLoader(\n    test_dataset,\n    batch_size = BATCH_SIZE,\n    num_workers=2,\n    shuffle=False\n    )","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Srnet().cuda()\nckpt = torch.load(CHKPT)\nmodel.load_state_dict(ckpt['model_state_dict'])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Predict"},{"metadata":{"trusted":true},"cell_type":"code","source":"all_outputs = []\nmodel.eval()\nwith torch.no_grad():\n    for inputs in tqdm(test_data):\n        inputs = inputs.cuda()\n        outputs = model(inputs)\n        pred = outputs.data.cpu().numpy()\n        # the output of SRNet is log_softmax, convert it to probability\n        pred = np.exp(pred[:, 1])/ (np.exp(pred[:, 0]) + np.exp(pred[:, 1]))\n        all_outputs.append(pred)\nall_outputs = np.concatenate(all_outputs)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_sub['Label']= all_outputs\ndf_sub.to_csv('submission.csv', index=None)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_sub.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# What to do next?\n\n1. Try to finetune SRNet on the provided dataset. \n2. Design your own network structure! "}],"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}