{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-08-09T08:48:31.57386Z","iopub.execute_input":"2021-08-09T08:48:31.574226Z","iopub.status.idle":"2021-08-09T08:48:31.58021Z","shell.execute_reply.started":"2021-08-09T08:48:31.57417Z","shell.execute_reply":"2021-08-09T08:48:31.579266Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('../input/siim-covid19-detection/sample_submission.csv')\n\nif df.shape[0] == 2477:\n    fast_sub = True\n    fast_df = pd.DataFrame(([['00086460a852_study', 'negative 1 0 0 1 1'], \n                         ['000c9c05fd14_study', 'negative 1 0 0 1 1'], \n                         ['65761e66de9f_image', 'none 1 0 0 1 1'], \n                         ['51759b5579bc_image', 'none 1 0 0 1 1']]), \n                       columns=['id', 'PredictionString'])\n    fast_df.to_csv('submission.csv', index=False)\nelse:\n    fast_sub = False","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:48:31.836334Z","iopub.execute_input":"2021-08-09T08:48:31.83661Z","iopub.status.idle":"2021-08-09T08:48:31.854102Z","shell.execute_reply.started":"2021-08-09T08:48:31.836582Z","shell.execute_reply":"2021-08-09T08:48:31.85316Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if fast_sub:\n    blabla","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:48:32.730256Z","iopub.execute_input":"2021-08-09T08:48:32.730591Z","iopub.status.idle":"2021-08-09T08:48:32.73452Z","shell.execute_reply.started":"2021-08-09T08:48:32.730561Z","shell.execute_reply":"2021-08-09T08:48:32.733384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install /kaggle/input/library/addict-2.4.0-py3-none-any.whl\n!pip install /kaggle/input/library/yapf-0.31.0-py2.py3-none-any.whl\n!pip install /kaggle/input/library/pycocotools-2.0.2-cp37-cp37m-linux_x86_64.whl\n!pip install /kaggle/input/library/mmcv_full-1.3.4-cp37-cp37m-manylinux1_x86_64.whl\n!pip install /kaggle/input/mmpycocotools/mmpycocotools-12.0.3-cp37-cp37m-linux_x86_64.whl\n!pip install /kaggle/input/universenet1/UniverseNet -f ./ --no-index\n#!pip install ../input/mmdetection/mmdetection -f ./ --no-index","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:48:32.921492Z","iopub.execute_input":"2021-08-09T08:48:32.921776Z","iopub.status.idle":"2021-08-09T08:50:51.635175Z","shell.execute_reply.started":"2021-08-09T08:48:32.921747Z","shell.execute_reply":"2021-08-09T08:50:51.634254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!conda install '../input/gdcm-notebook/libjpeg-turbo-2.1.0-h7f98852_0.tar.bz2' -c conda-forge -y\n!conda install '../input/gdcm-notebook/libgcc-ng-9.3.0-h2828fa1_19.tar.bz2' -c conda-forge -y\n!conda install '../input/gdcm-notebook/gdcm-2.8.9-py37h500ead1_1.tar.bz2' -c conda-forge -y\n!conda install '../input/gdcm-notebook/conda-4.10.1-py37h89c1867_0.tar.bz2' -c conda-forge -y\n!conda install '../input/gdcm-notebook/certifi-2020.12.5-py37h89c1867_1.tar.bz2' -c conda-forge -y\n!conda install '../input/gdcm-notebook/openssl-1.1.1k-h7f98852_0.tar.bz2' -c conda-forge -y","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:50:51.638692Z","iopub.execute_input":"2021-08-09T08:50:51.638973Z","iopub.status.idle":"2021-08-09T08:51:34.356582Z","shell.execute_reply.started":"2021-08-09T08:50:51.638944Z","shell.execute_reply":"2021-08-09T08:51:34.355582Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\nsys.path.append(\"/kaggle/input/universenet1/UniverseNet\")\n\nfrom mmdet.apis import init_detector, inference_detector, show_result_pyplot\nimport mmcv\nfrom mmcv import Config\nfrom mmdet.models import build_detector\nfrom mmcv.runner import load_checkpoint\nfrom mmcv.parallel import MMDataParallel\nfrom mmdet.apis import single_gpu_test\nfrom mmdet.datasets import build_dataloader, build_dataset\nimport pickle\nimport pandas as pd\nimport os\nimport json\nimport numpy as np\nimport glob\nimport pickle\nfrom mmcv import Config\n\nfrom PIL import Image\nimport pydicom\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\n\nimport torch\nfrom tqdm import tqdm","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:34.358908Z","iopub.execute_input":"2021-08-09T08:51:34.359298Z","iopub.status.idle":"2021-08-09T08:51:34.365915Z","shell.execute_reply.started":"2021-08-09T08:51:34.359256Z","shell.execute_reply":"2021-08-09T08:51:34.365086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def format_prediction_string(prefix, boxes, scores, none_score):\n    pred_strings = []\n    for j in zip(scores, boxes):\n        pred_strings.append(\"{0} {1:.4f} {2} {3} {4} {5}\".format(prefix, j[0], j[1][0], j[1][1], j[1][2], j[1][3]))\n\n    return \" \".join(pred_strings) + f\" none {none_score} 0 0 1 1\"\n\ndef format_prediction_string_class(scores):\n    pred_strings = []\n    \n    return f\"negative {scores[0]} 0 0 1 1 typical {scores[1]} 0 0 1 1 indeterminate {scores[2]} 0 0 1 1 atypical {scores[3]} 0 0 1 1\"\n\ndef gen_test_annotation(annotation_path):\n    study_paths = glob.glob(\"/kaggle/input/siim-covid19-detection/test/*\")\n    test_anno_list = []\n    duplicate_idxs = []\n    images = []\n    i = 0\n    flag = 0\n    image2study = {}\n    \n    for study_path in tqdm(study_paths):\n        imgs = glob.glob(study_path + \"/*/*\")\n        \n        if len(imgs) > 1:\n            flag = 1\n            dups = []\n            \n        for img in imgs:\n            if flag == 1:\n                dups.append(i)\n            \n            if img.endswith('dcm'):\n                img_info = {}\n                img_info['filename'] = img\n                images.append(img)\n                img_info['studyname'] = study_path.split(\"/\")[-1]\n                img_size = pydicom.read_file(img).pixel_array.shape\n                img_info['width'] = img_size[1]\n                img_info['height'] = img_size[0]\n                test_anno_list.append(img_info)\n                \n            i += 1\n        if flag == 1:\n            duplicate_idxs.append(dups)\n            flag = 0\n    with open(annotation_path, 'wb') as f:\n        pickle.dump(test_anno_list, f, protocol=pickle.HIGHEST_PROTOCOL)\n    return images, duplicate_idxs","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:34.367716Z","iopub.execute_input":"2021-08-09T08:51:34.368284Z","iopub.status.idle":"2021-08-09T08:51:34.381211Z","shell.execute_reply.started":"2021-08-09T08:51:34.368247Z","shell.execute_reply":"2021-08-09T08:51:34.380379Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    images, duplicate_idxs = gen_test_annotation(annotation_path=\"/kaggle/working/detection_test.pickle\")","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:34.38254Z","iopub.execute_input":"2021-08-09T08:51:34.382891Z","iopub.status.idle":"2021-08-09T08:51:39.538476Z","shell.execute_reply.started":"2021-08-09T08:51:34.382854Z","shell.execute_reply":"2021-08-09T08:51:39.537557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"config_file = '/kaggle/input/detectorsconfigs/detectors_cascade_rcnn_r50_1x_coco.py'\ncfg = Config.fromfile(config_file)\ncfg.data.test.test_mode = True\ndistributed = False","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.539788Z","iopub.execute_input":"2021-08-09T08:51:39.540124Z","iopub.status.idle":"2021-08-09T08:51:39.583326Z","shell.execute_reply.started":"2021-08-09T08:51:39.540085Z","shell.execute_reply":"2021-08-09T08:51:39.582522Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = build_dataset(cfg.data.test)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.584586Z","iopub.execute_input":"2021-08-09T08:51:39.58487Z","iopub.status.idle":"2021-08-09T08:51:39.589471Z","shell.execute_reply.started":"2021-08-09T08:51:39.584844Z","shell.execute_reply":"2021-08-09T08:51:39.588458Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom\nimport numpy as np\nfrom PIL import Image\nfrom pydicom.pixel_data_handlers import apply_voi_lut\n\ndef read_xray(path, voi_lut=True, fix_monochrome=True):\n    # Original from: https://www.kaggle.com/raddar/convert-dicom-to-np-array-the-correct-way\n    dicom = pydicom.read_file(path)\n\n    # VOI LUT (if available by DICOM device) is used to transform raw DICOM data to\n    # \"human-friendly\" view\n    if voi_lut:\n        data = apply_voi_lut(dicom.pixel_array, dicom)\n    else:\n        data = dicom.pixel_array\n\n    # depending on this value, X-ray may look inverted - fix that:\n    if fix_monochrome and dicom.PhotometricInterpretation == \"MONOCHROME1\":\n        data = np.amax(data) - data\n\n    data = data - np.min(data)\n    data = data / np.max(data)\n    data = (data * 255).astype(np.uint8)\n\n    return data\n\n\ndef resize(array, size, keep_ratio=False, resample=Image.LANCZOS):\n    # Original from: https://www.kaggle.com/xhlulu/vinbigdata-process-and-resize-to-image\n    im = Image.fromarray(array)\n\n    if keep_ratio:\n        im.thumbnail((size, size), resample)\n    else:\n        im = im.resize((size, size), resample)\n\n    return im","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.592586Z","iopub.execute_input":"2021-08-09T08:51:39.593267Z","iopub.status.idle":"2021-08-09T08:51:39.608944Z","shell.execute_reply.started":"2021-08-09T08:51:39.593222Z","shell.execute_reply":"2021-08-09T08:51:39.608011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data.dataset import Dataset\nfrom PIL import Image\nimport os\nimport albumentations\nfrom albumentations.pytorch.transforms import ToTensorV2\nimport numpy as np\nimport glob\n\nclass_num = 4\n\ndef data_transforms():\n    return albumentations.Compose([\n                albumentations.Resize(640, 640),\n                albumentations.CenterCrop(512, 512),\n                albumentations.Normalize(),\n                ToTensorV2(),\n            ])\n\n\nclass CustomDataset(Dataset):\n    def __init__(self, transform, split):\n        self.transform = transform\n        self.split = split\n\n        self.data = images\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        dcm_img_path = self.data[idx]\n\n        xray = read_xray(dcm_img_path)\n\n        #img = np.asarray(resize(xray, size=640))\n        img = np.stack((xray,) * 3, axis=-1)\n        img = self.transform(image=img)[\"image\"]\n\n        return img","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.611292Z","iopub.execute_input":"2021-08-09T08:51:39.611726Z","iopub.status.idle":"2021-08-09T08:51:39.621923Z","shell.execute_reply.started":"2021-08-09T08:51:39.611684Z","shell.execute_reply":"2021-08-09T08:51:39.620589Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nfrom tqdm import tqdm\nimport numpy as np\nimport sys\nfrom torch import nn\nimport torch.nn.functional as F\n\ndef test_model(model, dataloader):\n    model.eval()\n    tst_outs = []\n\n    for inputs in tqdm(dataloader):\n        inputs = inputs.cuda()\n                \n        with torch.set_grad_enabled(False):\n            outputs = model(inputs)\n            tst_outs.extend(outputs.cpu().numpy())\n\n    return np.array(tst_outs)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.623619Z","iopub.execute_input":"2021-08-09T08:51:39.624028Z","iopub.status.idle":"2021-08-09T08:51:39.634197Z","shell.execute_reply.started":"2021-08-09T08:51:39.623989Z","shell.execute_reply":"2021-08-09T08:51:39.63337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\nfrom torch import nn\nimport torch.nn.functional as F\n\nsys.path.append(\"/kaggle/input/pytorch-img-models/pytorch-image-models\")\nfrom timm.models.efficientnet import *\n\nclass Net_v2m(nn.Module):\n    def __init__(self,):\n        super(Net_v2m, self).__init__()\n\n        e = tf_efficientnetv2_m_in21ft1k(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 4)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(176, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(304, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(512, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 48, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 80, 64, 64])\n        x = self.b4(x)  # ; torch.Size([8, 160, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 176, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 304, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 512, 16, 16])\n        mask3 = self.mask3(x)\n        x = self.b8(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask4 = self.mask4(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.635464Z","iopub.execute_input":"2021-08-09T08:51:39.635833Z","iopub.status.idle":"2021-08-09T08:51:39.657808Z","shell.execute_reply.started":"2021-08-09T08:51:39.635797Z","shell.execute_reply":"2021-08-09T08:51:39.656896Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Net_v2s(nn.Module):\n    def __init__(self,):\n        super(Net_v2s, self).__init__()\n\n        e = tf_efficientnetv2_s_in21ft1k(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n\n        self.b7 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 4)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(160, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(256, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 48, 128, 128\n        x = self.b3(x)  # ; torch.Size([8, 64, 64, 64])\n        x = self.b4(x)  # ; torch.Size([8, 128, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 160, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 256, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask3 = self.mask3(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.658728Z","iopub.execute_input":"2021-08-09T08:51:39.659997Z","iopub.status.idle":"2021-08-09T08:51:39.681423Z","shell.execute_reply.started":"2021-08-09T08:51:39.659941Z","shell.execute_reply":"2021-08-09T08:51:39.680533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n\n        e = tf_efficientnet_b7(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(2560, 4)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(384, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(640, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 64, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 48, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 80, 64, 64])\n        #mask = self.mask(x)\n        x = self.b4(x)  # ; torch.Size([8, 160, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 224, 32, 32])\n        #mask1 = self.mask1(x)\n\n\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 384, 16, 16])\n        #mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 640, 16, 16])\n        #mask3 = self.mask3(x)\n\n        x = self.b8(x)  # ; torch.Size([8, 2560, 16, 16])\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.684914Z","iopub.execute_input":"2021-08-09T08:51:39.685265Z","iopub.status.idle":"2021-08-09T08:51:39.704085Z","shell.execute_reply.started":"2021-08-09T08:51:39.685235Z","shell.execute_reply":"2021-08-09T08:51:39.702851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Net_v2l(nn.Module):\n    def __init__(self,):\n        super(Net_v2l, self).__init__()\n\n        e = tf_efficientnetv2_l_in21ft1k(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 4)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(384, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(640, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 64, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 96, 64, 64])\n        #mask = self.mask(x)\n        x = self.b4(x)  # ; torch.Size([8, 192, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 224, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 384, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 640, 16, 16])\n        mask3 = self.mask3(x)\n        x = self.b8(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask4 = self.mask4(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.706616Z","iopub.execute_input":"2021-08-09T08:51:39.707024Z","iopub.status.idle":"2021-08-09T08:51:39.728826Z","shell.execute_reply.started":"2021-08-09T08:51:39.706984Z","shell.execute_reply":"2021-08-09T08:51:39.727858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Net_v2l_dp(nn.Module):\n    def __init__(self,):\n        super(Net_v2l_dp, self).__init__()\n\n        e = tf_efficientnetv2_l_in21ft1k(pretrained=False, drop_rate=0.5, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 4)\n\n        # self.mask = nn.Sequential(\n        #    nn.Conv2d(384, 128, kernel_size=1),\n        #    nn.BatchNorm2d(128),\n        #    nn.ReLU(inplace=True),\n        #    nn.Conv2d(128, 1, kernel_size=1)\n        # )\n\n        #self.mask = nn.Sequential(\n        #    nn.Conv2d(136, 128, kernel_size=3, padding=1),\n        #    nn.BatchNorm2d(128),\n        #    nn.ReLU(inplace=True),\n        #    nn.Conv2d(128, 128, kernel_size=3, padding=1),\n        #    nn.BatchNorm2d(128),\n        #    nn.ReLU(inplace=True),\n        #    nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        #)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(384, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(640, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 64, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 96, 64, 64])\n        #mask = self.mask(x)\n        x = self.b4(x)  # ; torch.Size([8, 192, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 224, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 384, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 640, 16, 16])\n        mask3 = self.mask3(x)\n        x = self.b8(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask4 = self.mask4(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.730561Z","iopub.execute_input":"2021-08-09T08:51:39.73101Z","iopub.status.idle":"2021-08-09T08:51:39.751424Z","shell.execute_reply.started":"2021-08-09T08:51:39.730967Z","shell.execute_reply":"2021-08-09T08:51:39.750559Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\n\nsys.path.append(\"/kaggle/input/pytorch-img-models/pytorch-image-models\")\nfrom timm.models.efficientnet import *\n\nmodel = Net_v2s()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/effnetv2s/effb7_567_fold0_pen_True_effv2_s.pth\"))\n\neff_model = model.cuda()\n\ntransforms = data_transforms()\nimage_datasets = CustomDataset(transforms, \"val\")\ndataloader = torch.utils.data.DataLoader(image_datasets, batch_size=8, shuffle=False, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:39.752643Z","iopub.execute_input":"2021-08-09T08:51:39.753015Z","iopub.status.idle":"2021-08-09T08:51:40.714248Z","shell.execute_reply.started":"2021-08-09T08:51:39.752978Z","shell.execute_reply":"2021-08-09T08:51:40.713186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.nn import Softmax\n\nif not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    softmax = Softmax(dim=1)\n    class_probs_fold0_v2s = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:40.715639Z","iopub.execute_input":"2021-08-09T08:51:40.716011Z","iopub.status.idle":"2021-08-09T08:51:47.215483Z","shell.execute_reply.started":"2021-08-09T08:51:40.715973Z","shell.execute_reply":"2021-08-09T08:51:47.214228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/v2m-fold2/effb7_567_fold2_pen_True_effv2_m.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:47.217222Z","iopub.execute_input":"2021-08-09T08:51:47.217701Z","iopub.status.idle":"2021-08-09T08:51:49.108858Z","shell.execute_reply.started":"2021-08-09T08:51:47.21764Z","shell.execute_reply":"2021-08-09T08:51:49.10786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    softmax = Softmax(dim=1)\n    class_probs_fold2_v2m = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:49.110795Z","iopub.execute_input":"2021-08-09T08:51:49.111342Z","iopub.status.idle":"2021-08-09T08:51:56.125178Z","shell.execute_reply.started":"2021-08-09T08:51:49.111302Z","shell.execute_reply":"2021-08-09T08:51:56.124165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/v2l-2run-38-57-7028/effb7_567_fold0_pen_True_38_57_70_28.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:56.128484Z","iopub.execute_input":"2021-08-09T08:51:56.128812Z","iopub.status.idle":"2021-08-09T08:51:57.97634Z","shell.execute_reply.started":"2021-08-09T08:51:56.128777Z","shell.execute_reply":"2021-08-09T08:51:57.975365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    softmax = Softmax(dim=1)\n    class_probs_fold0_v2m_40_8 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:51:57.978288Z","iopub.execute_input":"2021-08-09T08:51:57.97865Z","iopub.status.idle":"2021-08-09T08:52:04.679203Z","shell.execute_reply.started":"2021-08-09T08:51:57.97861Z","shell.execute_reply":"2021-08-09T08:52:04.678265Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/fold2-v2l-zh/epoch_16_map_0_4100732758362897_acc_0_6763948497854076_25678_fold2.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:04.680659Z","iopub.execute_input":"2021-08-09T08:52:04.68101Z","iopub.status.idle":"2021-08-09T08:52:07.774962Z","shell.execute_reply.started":"2021-08-09T08:52:04.680969Z","shell.execute_reply":"2021-08-09T08:52:07.774079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    softmax = Softmax(dim=1)\n    class_probs_fold2_v2l = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:07.780314Z","iopub.execute_input":"2021-08-09T08:52:07.780569Z","iopub.status.idle":"2021-08-09T08:52:14.52005Z","shell.execute_reply.started":"2021-08-09T08:52:07.780542Z","shell.execute_reply":"2021-08-09T08:52:14.519106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def data_transforms_640():\n    return albumentations.Compose([\n            albumentations.Resize(768, 768),\n            albumentations.CenterCrop(640, 640),\n            albumentations.Normalize(),\n            ToTensorV2()])\n\ntransforms_640 = data_transforms_640()\nimage_datasets_640 = CustomDataset(transforms_640, \"val\")\ndataloader_640 = torch.utils.data.DataLoader(image_datasets_640, batch_size=8, shuffle=False, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:14.522958Z","iopub.execute_input":"2021-08-09T08:52:14.523314Z","iopub.status.idle":"2021-08-09T08:52:14.529225Z","shell.execute_reply.started":"2021-08-09T08:52:14.523281Z","shell.execute_reply":"2021-08-09T08:52:14.528351Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"../input/fold4-zh-640/epoch_16_map_0_3983837154847605_acc_0_6742808798646361_25678_fold4.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:14.530431Z","iopub.execute_input":"2021-08-09T08:52:14.530911Z","iopub.status.idle":"2021-08-09T08:52:17.70852Z","shell.execute_reply.started":"2021-08-09T08:52:14.530874Z","shell.execute_reply":"2021-08-09T08:52:17.707671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_640)\n    softmax = Softmax(dim=1)\n    class_probs_fold4_v2l = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:17.710222Z","iopub.execute_input":"2021-08-09T08:52:17.710537Z","iopub.status.idle":"2021-08-09T08:52:25.270804Z","shell.execute_reply.started":"2021-08-09T08:52:17.71051Z","shell.execute_reply":"2021-08-09T08:52:25.269877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/effnetv2m/effb7_567_fold0_pen_True_effv2_m.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:25.272422Z","iopub.execute_input":"2021-08-09T08:52:25.272802Z","iopub.status.idle":"2021-08-09T08:52:26.97005Z","shell.execute_reply.started":"2021-08-09T08:52:25.272761Z","shell.execute_reply":"2021-08-09T08:52:26.969161Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    class_probs_fold0_v2m = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:26.971699Z","iopub.execute_input":"2021-08-09T08:52:26.972024Z","iopub.status.idle":"2021-08-09T08:52:33.152095Z","shell.execute_reply.started":"2021-08-09T08:52:26.97199Z","shell.execute_reply":"2021-08-09T08:52:33.150667Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l()\nmodel = torch.nn.DataParallel(model)\n#model.load_state_dict(torch.load(\"/kaggle/input/fold4-v2l-zh/epoch_19_map_0_39456114410957094_acc_0_6759729272419628_25678_fold4 (2).pth\"), strict=False)\nmodel.load_state_dict(torch.load(\"/kaggle/input/fold4-v2l-zh-39-86/epoch_17_map_0_39859854665148814_acc_0_6785109983079526_25678_fold4.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:33.15453Z","iopub.execute_input":"2021-08-09T08:52:33.155419Z","iopub.status.idle":"2021-08-09T08:52:36.627567Z","shell.execute_reply.started":"2021-08-09T08:52:33.155371Z","shell.execute_reply":"2021-08-09T08:52:36.626706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def data_transforms_768():\n    return albumentations.Compose([\n            albumentations.Resize(840, 840),\n            albumentations.CenterCrop(768, 768),\n            albumentations.Normalize(),\n            ToTensorV2()])\n\ntransforms = data_transforms_768()\nimage_datasets_768 = CustomDataset(transforms, \"val\")\ndataloader_768 = torch.utils.data.DataLoader(image_datasets_768, batch_size=8, shuffle=False, num_workers=4)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:36.62927Z","iopub.execute_input":"2021-08-09T08:52:36.629605Z","iopub.status.idle":"2021-08-09T08:52:36.635054Z","shell.execute_reply.started":"2021-08-09T08:52:36.629569Z","shell.execute_reply":"2021-08-09T08:52:36.634228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_768)\n    softmax = Softmax(dim=1)\n    class_probs_v2l_768 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:36.636393Z","iopub.execute_input":"2021-08-09T08:52:36.636962Z","iopub.status.idle":"2021-08-09T08:52:44.047832Z","shell.execute_reply.started":"2021-08-09T08:52:36.636924Z","shell.execute_reply":"2021-08-09T08:52:44.045469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/classification-zh-2mdls/epoch_17_map_0_40384593503201205_acc_0_6772532188841202_5678_fold2.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:44.055023Z","iopub.execute_input":"2021-08-09T08:52:44.055758Z","iopub.status.idle":"2021-08-09T08:52:46.018833Z","shell.execute_reply.started":"2021-08-09T08:52:44.055701Z","shell.execute_reply":"2021-08-09T08:52:46.017874Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_768)\n    softmax = Softmax(dim=1)\n    class_probs_v2m_768_fold2 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:46.020701Z","iopub.execute_input":"2021-08-09T08:52:46.021085Z","iopub.status.idle":"2021-08-09T08:52:53.102295Z","shell.execute_reply.started":"2021-08-09T08:52:46.021046Z","shell.execute_reply":"2021-08-09T08:52:53.101408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/classification-zh-2mdls/epoch_15_map_0_39708936566083836_acc_0_6742808798646361_5678_fold4.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:53.103824Z","iopub.execute_input":"2021-08-09T08:52:53.104243Z","iopub.status.idle":"2021-08-09T08:52:54.848507Z","shell.execute_reply.started":"2021-08-09T08:52:53.104196Z","shell.execute_reply":"2021-08-09T08:52:54.847588Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_768)\n    softmax = Softmax(dim=1)\n    class_probs_v2m_768_fold4 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:52:54.850129Z","iopub.execute_input":"2021-08-09T08:52:54.850463Z","iopub.status.idle":"2021-08-09T08:53:02.70326Z","shell.execute_reply.started":"2021-08-09T08:52:54.850435Z","shell.execute_reply":"2021-08-09T08:53:02.701868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/fold0-zh-v2l-768/epoch_11_map_0_40329406304269155_acc_0_7054263565891473_25678_fold0.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:02.704858Z","iopub.execute_input":"2021-08-09T08:53:02.705233Z","iopub.status.idle":"2021-08-09T08:53:06.205888Z","shell.execute_reply.started":"2021-08-09T08:53:02.705191Z","shell.execute_reply":"2021-08-09T08:53:06.204698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def data_transforms_640():\n    return albumentations.Compose([\n            albumentations.Resize(680, 680),\n            albumentations.CenterCrop(640, 640),\n            albumentations.Normalize(),\n            ToTensorV2()])","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:06.207696Z","iopub.execute_input":"2021-08-09T08:53:06.208329Z","iopub.status.idle":"2021-08-09T08:53:06.216218Z","shell.execute_reply.started":"2021-08-09T08:53:06.208286Z","shell.execute_reply":"2021-08-09T08:53:06.213963Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_768)\n    softmax = Softmax(dim=1)\n    class_probs_v2l_768_fold0 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:06.217911Z","iopub.execute_input":"2021-08-09T08:53:06.219338Z","iopub.status.idle":"2021-08-09T08:53:13.547542Z","shell.execute_reply.started":"2021-08-09T08:53:06.219294Z","shell.execute_reply":"2021-08-09T08:53:13.546586Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2m()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/v2m-zh-680-640-map40-92/map_0.4092974646073342_5678_fold2_im680to640_effv2_m.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:13.54903Z","iopub.execute_input":"2021-08-09T08:53:13.549403Z","iopub.status.idle":"2021-08-09T08:53:15.208027Z","shell.execute_reply.started":"2021-08-09T08:53:13.549361Z","shell.execute_reply":"2021-08-09T08:53:15.207214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_640)\n    softmax = Softmax(dim=1)\n    class_probs_v2m_zh_640 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:15.209681Z","iopub.execute_input":"2021-08-09T08:53:15.209995Z","iopub.status.idle":"2021-08-09T08:53:21.974981Z","shell.execute_reply.started":"2021-08-09T08:53:15.20996Z","shell.execute_reply":"2021-08-09T08:53:21.973496Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l_dp()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/effv2m-fold2-zh-40-44/epoch_19_map_0_4044418221269606_acc_0_6652360515021459_5678_fold2.pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:21.976709Z","iopub.execute_input":"2021-08-09T08:53:21.977093Z","iopub.status.idle":"2021-08-09T08:53:25.153623Z","shell.execute_reply.started":"2021-08-09T08:53:21.977049Z","shell.execute_reply":"2021-08-09T08:53:25.1527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader_768)\n    softmax = Softmax(dim=1)\n    class_probs_v2l_zh_780_fold2 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:25.155469Z","iopub.execute_input":"2021-08-09T08:53:25.155826Z","iopub.status.idle":"2021-08-09T08:53:32.81025Z","shell.execute_reply.started":"2021-08-09T08:53:25.155788Z","shell.execute_reply":"2021-08-09T08:53:32.809262Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net_v2l()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/fold4-v2l-zh/epoch_19_map_0_39456114410957094_acc_0_6759729272419628_25678_fold4 (2).pth\"), strict=False)\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:32.811719Z","iopub.execute_input":"2021-08-09T08:53:32.812068Z","iopub.status.idle":"2021-08-09T08:53:36.051184Z","shell.execute_reply.started":"2021-08-09T08:53:32.812029Z","shell.execute_reply":"2021-08-09T08:53:36.050361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    softmax = Softmax(dim=1)\n    class_probs_v2l_zh_512_fold4 = softmax(torch.tensor(class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:36.052996Z","iopub.execute_input":"2021-08-09T08:53:36.053347Z","iopub.status.idle":"2021-08-09T08:53:42.59304Z","shell.execute_reply.started":"2021-08-09T08:53:36.053309Z","shell.execute_reply":"2021-08-09T08:53:42.59207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Net()\nmodel = torch.nn.DataParallel(model)\n#model.load_state_dict(torch.load(\"/kaggle/input/tf-eff-b7/effb7_5_6_7.pth\"))\nmodel.load_state_dict(torch.load(\"/kaggle/input/effb7-fold0/effb7_5_6_7_38_87.pth\"))\neff_model = model.cuda()\n\nif not fast_sub:\n    class_scores = test_model(eff_model, dataloader)\n    class_probs_fold0_b7 = softmax(torch.tensor(class_scores))\n    \n    #40.8, 39.9, 39.9, 40.1, 39.8\n    #class_probs = (class_probs_v2_40_8 + class_probs_fold2_v2m + class_probs_s + class_probs_m + class_probs_b7) / 5\n    #class_probs = (class_probs_fold0_b7 + class_probs_fold0_v2m + class_probs_fold0_v2s + class_probs_fold2_v2m + class_probs_fold2_v2l +  + class_probs_fold0_v2m_40_8 + class_probs_v2l_768 + class_probs_v2m_768_fold2 + class_probs_v2m_512_fold4 + class_probs_v2l_768_fold0 + class_probs_v2m_zh_640 + class_probs_v2l_zh_780_fold2 + class_probs_v2l_zh_780_fold4) / 14\n    class_probs = (class_probs_fold0_b7 + class_probs_fold0_v2m + class_probs_fold0_v2s + class_probs_fold2_v2m + class_probs_fold2_v2l + class_probs_fold4_v2l + class_probs_fold0_v2m_40_8 + class_probs_v2l_768 + class_probs_v2m_768_fold2 + class_probs_v2m_768_fold4 + class_probs_v2l_768_fold0 + class_probs_v2m_zh_640 + class_probs_v2l_zh_780_fold2 + class_probs_v2l_zh_512_fold4) / 14","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:42.594761Z","iopub.execute_input":"2021-08-09T08:53:42.595114Z","iopub.status.idle":"2021-08-09T08:53:51.324938Z","shell.execute_reply.started":"2021-08-09T08:53:42.595074Z","shell.execute_reply":"2021-08-09T08:53:51.323892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class binary_Net_b7(nn.Module):\n    def __init__(self):\n        super(binary_Net_b7, self).__init__()\n        e = tf_efficientnet_b7(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(2560, 1)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(384, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(640, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n        \n        self.mask4 = nn.Sequential(\n            nn.Conv2d(2560, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 64, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 48, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 80, 64, 64])\n        #mask = self.mask(x)\n        x = self.b4(x)  # ; torch.Size([8, 160, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 224, 32, 32])\n        #mask1 = self.mask1(x)\n\n\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 384, 16, 16])\n        #mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 640, 16, 16])\n        #mask3 = self.mask3(x)\n\n        x = self.b8(x)  # ; torch.Size([8, 2560, 16, 16])\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:51.328647Z","iopub.execute_input":"2021-08-09T08:53:51.328976Z","iopub.status.idle":"2021-08-09T08:53:51.352119Z","shell.execute_reply.started":"2021-08-09T08:53:51.328939Z","shell.execute_reply":"2021-08-09T08:53:51.351233Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class binary_Net_v2s(nn.Module):\n    def __init__(self,):\n        super(binary_Net_v2s, self).__init__()\n\n        e = tf_efficientnetv2_s_in21ft1k(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n\n        self.b7 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 1)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(160, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(256, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 24, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 48, 128, 128\n        x = self.b3(x)  # ; torch.Size([8, 64, 64, 64])\n        x = self.b4(x)  # ; torch.Size([8, 128, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 160, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 256, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask3 = self.mask3(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:51.355795Z","iopub.execute_input":"2021-08-09T08:53:51.356132Z","iopub.status.idle":"2021-08-09T08:53:51.377839Z","shell.execute_reply.started":"2021-08-09T08:53:51.356102Z","shell.execute_reply":"2021-08-09T08:53:51.376735Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class binary_Net_v2l(nn.Module):\n    def __init__(self,):\n        super(binary_Net_v2l, self).__init__()\n\n        e = tf_efficientnetv2_l_in21ft1k(pretrained=False, drop_rate=0.3, drop_path_rate=0.2)\n\n        self.b0 = nn.Sequential(\n            e.conv_stem,\n            e.bn1,\n            e.act1,\n        )\n        self.b1 = e.blocks[0]\n        self.b2 = e.blocks[1]\n        self.b3 = e.blocks[2]\n        self.b4 = e.blocks[3]\n        self.b5 = e.blocks[4]\n        self.b6 = e.blocks[5]\n        self.b7 = e.blocks[6]\n\n        self.b8 = nn.Sequential(\n            e.conv_head,  # 384, 1536\n            e.bn2,\n            e.act2,\n        )\n\n        self.logit = nn.Linear(1280, 1)\n\n        self.mask1 = nn.Sequential(\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask2 = nn.Sequential(\n            nn.Conv2d(384, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask3 = nn.Sequential(\n            nn.Conv2d(640, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n        self.mask4 = nn.Sequential(\n            nn.Conv2d(1280, 224, kernel_size=3, padding=1),\n            nn.BatchNorm2d(224),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(224, 128, kernel_size=3, padding=1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(128, 1, kernel_size=1, padding=0),\n        )\n\n    # @torch.cuda.amp.autocast()\n    def forward(self, x):\n        batch_size = len(x)\n        x = self.b0(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b1(x)  # ; torch.Size([8, 32, 256, 256])\n        x = self.b2(x)  # ; torch.Size([8, 64, 128, 128])\n        x = self.b3(x)  # ; torch.Size([8, 96, 64, 64])\n        #mask = self.mask(x)\n        x = self.b4(x)  # ; torch.Size([8, 192, 32, 32])\n        x = self.b5(x)  # ; torch.Size([8, 224, 32, 32])\n        mask1 = self.mask1(x)\n        # ------------\n        # -------------\n        x = self.b6(x)  # ; torch.Size([8, 384, 16, 16])\n        mask2 = self.mask2(x)\n        x = self.b7(x)  # ; torch.Size([8, 640, 16, 16])\n        mask3 = self.mask3(x)\n        x = self.b8(x)  # ; torch.Size([8, 1280, 16, 16])\n        mask4 = self.mask4(x)\n        x = F.adaptive_avg_pool2d(x, 1).reshape(batch_size, -1)\n        # x = F.dropout(x, 0.5, training=self.training)\n        logit = self.logit(x)\n        return logit","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:51.379472Z","iopub.execute_input":"2021-08-09T08:53:51.379915Z","iopub.status.idle":"2021-08-09T08:53:51.401632Z","shell.execute_reply.started":"2021-08-09T08:53:51.379871Z","shell.execute_reply":"2021-08-09T08:53:51.400529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = binary_Net_v2s()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/bin-fold4-v2s/effb7_567_bin_fold4_pen_True_s_ap.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:51.403473Z","iopub.execute_input":"2021-08-09T08:53:51.403861Z","iopub.status.idle":"2021-08-09T08:53:54.420738Z","shell.execute_reply.started":"2021-08-09T08:53:51.403824Z","shell.execute_reply":"2021-08-09T08:53:54.419711Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.nn import Sigmoid\n\nif not fast_sub:\n    bin_class_scores = test_model(eff_model, dataloader)\n    sigmoid = Sigmoid()\n    bin_class_probs_f4_v2s = sigmoid(torch.tensor(bin_class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:53:54.422575Z","iopub.execute_input":"2021-08-09T08:53:54.422949Z","iopub.status.idle":"2021-08-09T08:54:00.845107Z","shell.execute_reply.started":"2021-08-09T08:53:54.422918Z","shell.execute_reply":"2021-08-09T08:54:00.844167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = binary_Net_b7()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/binaryclass/effb7_5_bin_fold0_pen_True.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:00.846909Z","iopub.execute_input":"2021-08-09T08:54:00.847338Z","iopub.status.idle":"2021-08-09T08:54:07.352553Z","shell.execute_reply.started":"2021-08-09T08:54:00.847293Z","shell.execute_reply":"2021-08-09T08:54:07.351699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    bin_class_scores = test_model(eff_model, dataloader)\n    sigmoid = Sigmoid()\n    bin_class_probs_f0_b7 = sigmoid(torch.tensor(bin_class_scores))","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:07.354001Z","iopub.execute_input":"2021-08-09T08:54:07.354394Z","iopub.status.idle":"2021-08-09T08:54:14.300453Z","shell.execute_reply.started":"2021-08-09T08:54:07.354351Z","shell.execute_reply":"2021-08-09T08:54:14.299595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = binary_Net_v2l()\nmodel = torch.nn.DataParallel(model)\nmodel.load_state_dict(torch.load(\"/kaggle/input/v2l-bin-fold2/effb7_567_bin_fold2_pen_True_l_ap.pth\"))\neff_model = model.cuda()","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:14.301969Z","iopub.execute_input":"2021-08-09T08:54:14.302354Z","iopub.status.idle":"2021-08-09T08:54:23.597333Z","shell.execute_reply.started":"2021-08-09T08:54:14.302311Z","shell.execute_reply":"2021-08-09T08:54:23.59644Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    bin_class_scores = test_model(eff_model, dataloader)\n    sigmoid = Sigmoid()\n    bin_class_probs_f2_v2l = sigmoid(torch.tensor(bin_class_scores))\n    bin_class_probs = (bin_class_probs_f4_v2s.squeeze() + bin_class_probs_f0_b7.squeeze() + bin_class_probs_f2_v2l.squeeze()) / 3","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:23.598926Z","iopub.execute_input":"2021-08-09T08:54:23.59926Z","iopub.status.idle":"2021-08-09T08:54:30.040616Z","shell.execute_reply.started":"2021-08-09T08:54:23.599225Z","shell.execute_reply":"2021-08-09T08:54:30.039671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sys.path.append(\"/kaggle/input/wbf-ensemble/Weighted-Boxes-Fusion\")\n\nfrom ensemble_boxes import *\n\n#weights = [1, 0.8, 0.8, 1, 1, 1, 1]\nweights = [1, 2, 2, 3, 2, 2, 2.5]\niou_thr = 0.5\nskip_box_thr = 0\nnew_boxes_list = []\nnew_scores = []","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:30.042051Z","iopub.execute_input":"2021-08-09T08:54:30.042441Z","iopub.status.idle":"2021-08-09T08:54:30.711775Z","shell.execute_reply.started":"2021-08-09T08:54:30.042399Z","shell.execute_reply":"2021-08-09T08:54:30.710929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nconfig_file_det = \"/kaggle/input/newconfigs/detectors_cascade_rcnn_r50_1x_coco_updated.py\"\nconfig_file_uni = \"/kaggle/input/newconfigs/universenet50_gfl_fp16_4x4_mstrain_480_960_1x_coco.py\"\nconfig_file_uni101_pseudo = \"/kaggle/input/uni101-pseudo-config/uni101_pseudo.py\"\n\ncfg_det = Config.fromfile(config_file_det)\ncfg_det.data.test.test_mode = True\n\ncfg_uni = Config.fromfile(config_file_uni)\ncfg_uni.data.test.test_mode = True\n\ncfg_uni101_pseudo = Config.fromfile(config_file_uni101_pseudo)\ncfg_uni101_pseudo.data.test.test_mode = True\n\ndistributed = False\n'''","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:30.71303Z","iopub.execute_input":"2021-08-09T08:54:30.713549Z","iopub.status.idle":"2021-08-09T08:54:30.721451Z","shell.execute_reply.started":"2021-08-09T08:54:30.713508Z","shell.execute_reply":"2021-08-09T08:54:30.720544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"config_file_det = \"/kaggle/input/newconfigs/detectors_cascade_rcnn_r50_1x_coco_updated.py\"\nconfig_file_uni = \"/kaggle/input/uni50-ms/uni50_ms.py\"\nconfig_file_uni101_pseudo = \"/kaggle/input/uni101-pseudo-ms/uni101_pseudo_ms.py\"\ncfg_det = Config.fromfile(config_file_det)\ncfg_det.data.test.test_mode = True\n\ncfg_uni = Config.fromfile(config_file_uni)\ncfg_uni.data.test.test_mode = True\n\ncfg_uni101_pseudo = Config.fromfile(config_file_uni101_pseudo)\ncfg_uni101_pseudo.data.test.test_mode = True\n\ndistributed = False","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:30.722829Z","iopub.execute_input":"2021-08-09T08:54:30.723187Z","iopub.status.idle":"2021-08-09T08:54:30.80028Z","shell.execute_reply.started":"2021-08-09T08:54:30.723152Z","shell.execute_reply":"2021-08-09T08:54:30.799529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = build_dataset(cfg_uni.data.test)\ndata_loader = build_dataloader(\n    dataset,\n    samples_per_gpu=1,\n    workers_per_gpu=1,\n    dist=distributed,\n    shuffle=False)\n\ndataset_RS = build_dataset(cfg_det.data.test)\ndata_loader_RS = build_dataloader(\n    dataset_RS,\n    samples_per_gpu=1,\n    workers_per_gpu=1,\n    dist=distributed,\n    shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:30.801439Z","iopub.execute_input":"2021-08-09T08:54:30.801782Z","iopub.status.idle":"2021-08-09T08:54:30.809127Z","shell.execute_reply.started":"2021-08-09T08:54:30.801744Z","shell.execute_reply":"2021-08-09T08:54:30.808245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')\n\n    #DIR_WEIGHTS = '/kaggle/input/universenet-model-weights'\n    #WEIGHTS_FILE = f'{DIR_WEIGHTS}/universenet50_gfl_54_6.pth'\n    DIR_WEIGHTS = '/kaggle/input/detmodel'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/detectors_54_8.pth'\n    \n    #DIR_WEIGHTS = '/kaggle/input/detectors-no-cos'\n    #WEIGHTS_FILE = f'{DIR_WEIGHTS}/epoch_12_detector_rcnn.pth'\n    \n    model = build_detector(cfg_det.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_det = single_gpu_test(model, data_loader_RS, False, None, 0.5)\n    \n    \n    DIR_WEIGHTS = '/kaggle/input/universenet-model-weights'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/universenet50_gfl_54_6.pth'\n    \n    #DIR_WEIGHTS = '/kaggle/input/detmodel'\n    #WEIGHTS_FILE = f'{DIR_WEIGHTS}/fold0_55_2.pth'\n    \n    model = build_detector(cfg_uni.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni = single_gpu_test(model, data_loader, False, None, 0.5)\n    \n    DIR_WEIGHTS = '/kaggle/input/uni101-pseudo'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/map_55.pth'\n    \n    model = build_detector(cfg_uni101_pseudo.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n    \n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni101_pseudo_fold4 = single_gpu_test(model, data_loader, False, None, 0.5)\n    \n    DIR_WEIGHTS = '/kaggle/input/uni101-pseudo-fold0'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/epoch_15.pth'\n    \n    model = build_detector(cfg_uni101_pseudo.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni101_pseudo_fold0 = single_gpu_test(model, data_loader, False, None, 0.5)\n    \n    DIR_WEIGHTS = '/kaggle/input/uni101-pseudo-fold1'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/epoch_14.pth'\n    \n    model = build_detector(cfg_uni101_pseudo.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni101_pseudo_fold1 = single_gpu_test(model, data_loader, False, None, 0.5)\n    \n    DIR_WEIGHTS = '/kaggle/input/uni101-pseudo-fold2'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/uni101_pseudo_fold2.pth'\n    \n    model = build_detector(cfg_uni101_pseudo.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni101_pseudo_fold2 = single_gpu_test(model, data_loader, False, None, 0.5)\n    \n    DIR_WEIGHTS = '/kaggle/input/uni101-pseudo-fold3'\n    WEIGHTS_FILE = f'{DIR_WEIGHTS}/epoch_17.pth'\n    \n    model = build_detector(cfg_uni101_pseudo.model, train_cfg=None, test_cfg=None)\n    checkpoint = load_checkpoint(model, WEIGHTS_FILE, map_location='cuda')\n\n    model.CLASSES = dataset.CLASSES\n\n    #!cp \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train.pickle\" \"/kaggle/input/mmdetection20513/mmdetection/mmdetection/Wheatdetection/annotations/detection_train0.pickle\"\n    model = MMDataParallel(model, device_ids=[0])\n    outputs_uni101_pseudo_fold3 = single_gpu_test(model, data_loader, False, None, 0.5)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:54:30.810485Z","iopub.execute_input":"2021-08-09T08:54:30.811004Z","iopub.status.idle":"2021-08-09T08:56:45.737258Z","shell.execute_reply.started":"2021-08-09T08:54:30.810967Z","shell.execute_reply":"2021-08-09T08:56:45.736251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in tqdm(range(len(outputs_uni))):\n    width = dataset.data_infos[i][\"width\"]\n    height = dataset.data_infos[i][\"height\"]\n    div = np.array([width, height, width, height])\n    outputs_det[i][0][:, :4][np.where(outputs_det[i][0][:, :4] / div > 1)] = 1\n    outputs_uni[i][0][:, :4][np.where(outputs_uni[i][0][:, :4] / div > 1)] = 1\n    outputs_uni101_pseudo_fold4[i][0][:, :4][np.where(outputs_uni101_pseudo_fold4[i][0][:, :4] / div > 1)] = 1\n    outputs_uni101_pseudo_fold0[i][0][:, :4][np.where(outputs_uni101_pseudo_fold0[i][0][:, :4] / div > 1)] = 1\n    outputs_uni101_pseudo_fold1[i][0][:, :4][np.where(outputs_uni101_pseudo_fold1[i][0][:, :4] / div > 1)] = 1\n    outputs_uni101_pseudo_fold2[i][0][:, :4][np.where(outputs_uni101_pseudo_fold2[i][0][:, :4] / div > 1)] = 1\n    outputs_uni101_pseudo_fold3[i][0][:, :4][np.where(outputs_uni101_pseudo_fold3[i][0][:, :4] / div > 1)] = 1\n    \n    boxes_list = [outputs_det[i][0][:, :4] / div, outputs_uni[i][0][:, :4] / div, outputs_uni101_pseudo_fold4[i][0][:, :4] / div, outputs_uni101_pseudo_fold0[i][0][:, :4] / div, outputs_uni101_pseudo_fold1[i][0][:, :4] / div, outputs_uni101_pseudo_fold2[i][0][:, :4] / div, outputs_uni101_pseudo_fold3[i][0][:, :4] / div]\n    scores_list = [outputs_det[i][0][:, -1], outputs_uni[i][0][:, -1], outputs_uni101_pseudo_fold4[i][0][:, -1], outputs_uni101_pseudo_fold0[i][0][:, -1], outputs_uni101_pseudo_fold1[i][0][:, -1], outputs_uni101_pseudo_fold2[i][0][:, -1], outputs_uni101_pseudo_fold3[i][0][:, -1]]\n    labels_list = [len(outputs_det[i][0]) * [0], len(outputs_uni[i][0]) * [0], len(outputs_uni101_pseudo_fold4[i][0]) * [0], len(outputs_uni101_pseudo_fold0[i][0]) * [0], len(outputs_uni101_pseudo_fold1[i][0]) * [0], len(outputs_uni101_pseudo_fold2[i][0]) * [0], len(outputs_uni101_pseudo_fold3[i][0]) * [0]]\n    #boxes, scores, labels = weighted_boxes_fusion(boxes_list, scores_list, labels_list, weights=weights,\n    #                                              iou_thr=iou_thr, skip_box_thr=skip_box_thr)\n    boxes, scores, labels = non_maximum_weighted(boxes_list, scores_list, labels_list, weights=weights,\n                                                  iou_thr=iou_thr, skip_box_thr=skip_box_thr)\n    \n    new_scores.append(scores)\n    new_boxes_list.append(boxes * div)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:56:45.738842Z","iopub.execute_input":"2021-08-09T08:56:45.739362Z","iopub.status.idle":"2021-08-09T08:56:48.793574Z","shell.execute_reply.started":"2021-08-09T08:56:45.739318Z","shell.execute_reply":"2021-08-09T08:56:48.792452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    probabilities = np.array(class_probs)\n    duplicate_study_names = []\n\n    for duplicate in duplicate_idxs:\n        probabilities[duplicate] = np.mean(probabilities[duplicate], axis=0)\n        duplicate_study_names.append(dataset.data_infos[duplicate[0]][\"studyname\"])","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:56:48.79599Z","iopub.execute_input":"2021-08-09T08:56:48.796263Z","iopub.status.idle":"2021-08-09T08:56:48.801182Z","shell.execute_reply.started":"2021-08-09T08:56:48.796235Z","shell.execute_reply":"2021-08-09T08:56:48.800175Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not fast_sub:\n    results_study = []\n    results_image = []\n    classes = [\"negative\", \"typical\", \"indeterminate\", \"atypical\"]\n    i = 0\n    j = 0\n    \n    duplicates = {}\n    duplicate_study_names = {el:True for el in duplicate_study_names}\n\n    for images_info, result in zip(dataset.data_infos, new_boxes_list):\n        boxes = result\n        scores = new_scores[i]\n        none_score = bin_class_probs.view(bin_class_probs.shape[0])[i]\n        i += 1\n        pred_string = format_prediction_string(\"opacity\", boxes, scores, none_score)\n\n        image_name = (images_info['filename']).split(\"/\")[-1].split(\".\")[0]\n        result_image = {\n            'id': image_name + \"_image\",\n            'PredictionString': pred_string\n        }\n        results_image.append(result_image)\n    \n        study_name = images_info['studyname']\n        if study_name in duplicate_study_names:\n            if study_name not in duplicates:\n                duplicates[study_name] = True\n            else:\n                j += 1\n                continue\n\n        result_study = {\n            'id': study_name + \"_study\",\n            'PredictionString': format_prediction_string_class(probabilities[j])\n        }\n    \n        results_study.append(result_study)\n        j += 1\n        \n    results = []\n    results.extend(results_study)\n    results.extend(results_image)\n    # save result\n    test_df = pd.DataFrame(results, columns=['id', 'PredictionString'])\n    test_df.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:56:48.802853Z","iopub.execute_input":"2021-08-09T08:56:48.803612Z","iopub.status.idle":"2021-08-09T08:56:48.847474Z","shell.execute_reply.started":"2021-08-09T08:56:48.803573Z","shell.execute_reply":"2021-08-09T08:56:48.846671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"execution":{"iopub.status.busy":"2021-08-09T08:56:48.848875Z","iopub.execute_input":"2021-08-09T08:56:48.849229Z","iopub.status.idle":"2021-08-09T08:56:48.874504Z","shell.execute_reply.started":"2021-08-09T08:56:48.849194Z","shell.execute_reply":"2021-08-09T08:56:48.873425Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}