{"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":"! cp -a ../input/depend/. ./","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-12-04T12:03:28.287939Z","iopub.execute_input":"2021-12-04T12:03:28.288536Z","iopub.status.idle":"2021-12-04T12:03:29.241818Z","shell.execute_reply.started":"2021-12-04T12:03:28.288483Z","shell.execute_reply":"2021-12-04T12:03:29.240336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# update the libraries\nimport os\nfor path, _, files in os.walk('./'):\n    for file in files:\n        file_dir = os.path.join(path, file)\n        if 'xyz' in file_dir:\n            print(file_dir)\n            new_path = file_dir.replace('xyz', 'tar.gz')\n            cmd = f'mv {file_dir} {new_path}'\n            ! {cmd}","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:03:29.245077Z","iopub.execute_input":"2021-12-04T12:03:29.245956Z","iopub.status.idle":"2021-12-04T12:03:32.249929Z","shell.execute_reply.started":"2021-12-04T12:03:29.245891Z","shell.execute_reply":"2021-12-04T12:03:32.248786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! rm ./mmcv1317/mmcv-full-1.3.17.tar.gz\n! cp ../input/mmcv1317whl/mmcv_full-1.3.17-cp37-cp37m-linux_x86_64.whl ./mmcv1317/\n!ls ./mmcv1317","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:03:32.253106Z","iopub.execute_input":"2021-12-04T12:03:32.253449Z","iopub.status.idle":"2021-12-04T12:03:36.016158Z","shell.execute_reply.started":"2021-12-04T12:03:32.253388Z","shell.execute_reply":"2021-12-04T12:03:36.014887Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ../input/work-dir/pytest_runner-5.3.1-py3-none-any.whl\n!pip install --no-index --find-links ./addict240 addict\n!pip install --no-index --find-links ./pycocotools pycocotools\n!pip install --no-index --find-links ./yapf0310 yapf\n!pip install --no-index --find-links ./mmdet2180 mmdet\n!pip install --no-index --find-links ./mmcv1317 mmcv-full","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:03:36.019898Z","iopub.execute_input":"2021-12-04T12:03:36.020241Z","iopub.status.idle":"2021-12-04T12:05:07.773320Z","shell.execute_reply.started":"2021-12-04T12:03:36.020201Z","shell.execute_reply":"2021-12-04T12:05:07.772297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\nimport pandas as pd\nimport numpy as np\n# import cupy as cp\nfrom glob import glob\nimport os\nimport cv2\nimport gc\nfrom tqdm.notebook import tqdm\nimport pickle\nfrom itertools import groupby\nfrom pycocotools import mask as mutils\nfrom pycocotools import _mask as coco_mask\nimport matplotlib.pyplot as plt\nimport os\nimport base64\nimport typing as t\nimport zlib\nimport random\nrandom.seed(0)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:07.775339Z","iopub.execute_input":"2021-12-04T12:05:07.775627Z","iopub.status.idle":"2021-12-04T12:05:08.101934Z","shell.execute_reply.started":"2021-12-04T12:05:07.775583Z","shell.execute_reply":"2021-12-04T12:05:08.100872Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Cfg:\n    # Library versions\n    ADDICT_VER = \"2.4.0\"\n    MMCV_VER = \"1.3.17\"\n    MMDETECTION_VER = \"2.18.0\"\n    PYCOCOTOOLS_VER = \"1.0.0\"\n    YAPF_VER = \"0.31.0\"\n    # Config name\n    MODEL_CFG = \"maskrcnn_resnet101\"\n    # Which checkout to be used?\n    CHECKPOINT = \"epoch_23\"\n    # How many samples it visualizes\n    NUM_VISUALIZE_SAMPLES = 3\n    TRAIN_OR_TEST = \"test\"\n    # Dataset directory\n    DATA_DIR = \"../input/sartorius-cell-instance-segmentation\"\n    # Rirectory which contains numpy converted masks\n    MASK_DIR = \"masks\"\n    # ???\n    IMG_DIR = f\"imgs\"\n    # Leave the bboxes which score is larger than this value\n    SCORE_TH = 0.3\n    FOLD = 0\n    # Train data ratio\n    TRAIN_RATIO = 0.95\n    NUM_GPUS = 1\n    FIRST_RUN = True\n    \n    \nCFG = Cfg()","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:08.103512Z","iopub.execute_input":"2021-12-04T12:05:08.103869Z","iopub.status.idle":"2021-12-04T12:05:08.111872Z","shell.execute_reply.started":"2021-12-04T12:05:08.103811Z","shell.execute_reply":"2021-12-04T12:05:08.110920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! mkdir ./cfg","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:08.113495Z","iopub.execute_input":"2021-12-04T12:05:08.114183Z","iopub.status.idle":"2021-12-04T12:05:08.936252Z","shell.execute_reply.started":"2021-12-04T12:05:08.114142Z","shell.execute_reply":"2021-12-04T12:05:08.935079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Generate custom dataset for test","metadata":{}},{"cell_type":"code","source":"def load_meta_info(cfg):\n    meta_info_path = os.path.join(cfg.DATA_DIR, f\"{cfg.TRAIN_OR_TEST}/*\")\n    print(f\"Loading file names from {meta_info_path}\")\n    df  = pd.DataFrame(glob(meta_info_path), columns=[\"image_path\"])\n    df[\"id\"] = df.image_path.map(lambda x: x.split(\"/\")[-1].split(\".\")[0])\n    print(f\"Loaded {len(df)} file names\")\n    display(df.head())\n    return df\n\n\ndf = load_meta_info(CFG)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:08.942753Z","iopub.execute_input":"2021-12-04T12:05:08.945397Z","iopub.status.idle":"2021-12-04T12:05:09.000419Z","shell.execute_reply.started":"2021-12-04T12:05:08.945345Z","shell.execute_reply":"2021-12-04T12:05:08.999221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def read_img(cfg, image_id, image_size=None):\n    filename = os.path.join(f\"{cfg.DATA_DIR}\", f\"{cfg.TRAIN_OR_TEST}\", f\"{image_id}.png\")\n    assert os.path.exists(filename)\n    img = cv2.imread(filename, cv2.IMREAD_UNCHANGED)\n    if image_size is not None:\n        img = cv2.resize(img, (image_size, image_size))\n    if img.dtype == \"uint16\":\n        img = (img/256).astype(\"uint8\")\n    return img\n\ndef print_masked_img(cfg, image_id, mask):\n    img   = read_img(cfg, image_id)\n    print(img.shape)\n    clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))\n    img2  = clahe.apply(img)\n    img3  = cv2.equalizeHist(img)\n    img   = np.stack([img, img2, img3],axis=-1) \n    plt.figure(figsize=(15, 15))\n    plt.subplot(1, 3, 1)\n    plt.imshow(img)\n    plt.title(\"Image\")\n    plt.axis(\"off\")\n    plt.subplot(1, 3, 2)\n    plt.imshow(mask,cmap=\"inferno\")\n    plt.title(\"Mask\")\n    plt.axis(\"off\")   \n    plt.subplot(1, 3, 3)\n    plt.imshow(img)\n    plt.imshow(mask, alpha=0.4, cmap=\"inferno\")\n    plt.title(\"Image + Mask\")\n    plt.axis(\"off\")\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:34:33.556781Z","iopub.execute_input":"2021-12-04T12:34:33.557755Z","iopub.status.idle":"2021-12-04T12:34:33.572316Z","shell.execute_reply.started":"2021-12-04T12:34:33.557682Z","shell.execute_reply":"2021-12-04T12:34:33.571266Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def pickle_test_anns(cfg, df):\n    out_image_dir = f\"{cfg.TRAIN_OR_TEST}/\"\n    !mkdir -p {out_image_dir}\n    test_anns = []\n    for idx in tqdm(range(len(df))):\n        image_id = df.iloc[idx][\"id\"]\n        img = read_img(cfg, image_id)\n        test_ann = {\n            \"filename\": image_id + \".png\",\n            \"width\": img.shape[1],\n            \"height\": img.shape[0],\n            \"ann\": {\n                \"bboxes\": None,\n                \"labels\": None,\n                \"masks\": None\n            }\n        }\n        test_anns.append(test_ann)\n    with open(f\"{cfg.TRAIN_OR_TEST}/test_anns.pkl\", \"wb\") as f:\n        pickle.dump(test_anns, f)\n    return test_anns\n        \n        \ntest_anns = pickle_test_anns(CFG, df)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:09.018113Z","iopub.execute_input":"2021-12-04T12:05:09.019189Z","iopub.status.idle":"2021-12-04T12:05:09.988592Z","shell.execute_reply.started":"2021-12-04T12:05:09.019143Z","shell.execute_reply":"2021-12-04T12:05:09.987451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writefile ./cfg/{Cfg.MODEL_CFG}.py\nmodel = dict(\n    type='MaskRCNN',\n    backbone=dict(\n        type='ResNet',\n        depth=101,\n        num_stages=4,\n        out_indices=(0, 1, 2, 3),\n        frozen_stages=1,\n        norm_cfg=dict(type='BN', requires_grad=True),\n        norm_eval=True,\n        style='pytorch',\n        init_cfg=dict(type='Pretrained',\n                      checkpoint='torchvision://resnet101')),\n    neck=dict(\n        type='FPN',\n        in_channels=[256, 512, 1024, 2048],\n        out_channels=256,\n        num_outs=5),\n    rpn_head=dict(\n        type='RPNHead',\n        in_channels=256,\n        feat_channels=256,\n        anchor_generator=dict(\n            type='AnchorGenerator',\n            scales=[8],\n            ratios=[0.5, 1.0, 2.0],\n            strides=[4, 8, 16, 32, 64]),\n        bbox_coder=dict(\n            type='DeltaXYWHBBoxCoder',\n            target_means=[0.0, 0.0, 0.0, 0.0],\n            target_stds=[1.0, 1.0, 1.0, 1.0]),\n        loss_cls=dict(\n            type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),\n        loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n    roi_head=dict(\n        type='StandardRoIHead',\n        bbox_roi_extractor=dict(\n            type='SingleRoIExtractor',\n            roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),\n            out_channels=256,\n            featmap_strides=[4, 8, 16, 32]),\n        bbox_head=dict(\n            type='Shared2FCBBoxHead',\n            in_channels=256,\n            fc_out_channels=1024,\n            roi_feat_size=7,\n            num_classes=3,\n            bbox_coder=dict(\n                type='DeltaXYWHBBoxCoder',\n                target_means=[0.0, 0.0, 0.0, 0.0],\n                target_stds=[0.1, 0.1, 0.2, 0.2]),\n            reg_class_agnostic=False,\n            loss_cls=dict(\n                type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),\n            loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n        mask_roi_extractor=dict(\n            type='SingleRoIExtractor',\n            roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0),\n            out_channels=256,\n            featmap_strides=[4, 8, 16, 32]),\n        mask_head=dict(\n            type='FCNMaskHead',\n            num_convs=4,\n            in_channels=256,\n            conv_out_channels=256,\n            num_classes=3,\n            loss_mask=dict(\n                type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))),\n    train_cfg=dict(\n        rpn=dict(\n            assigner=dict(\n                type='MaxIoUAssigner',\n                pos_iou_thr=0.7,\n                neg_iou_thr=0.3,\n                min_pos_iou=0.3,\n                match_low_quality=True,\n                ignore_iof_thr=-1),\n            sampler=dict(\n                type='RandomSampler',\n                num=256,\n                pos_fraction=0.5,\n                neg_pos_ub=-1,\n                add_gt_as_proposals=False),\n            allowed_border=-1,\n            pos_weight=-1,\n            debug=False),\n        rpn_proposal=dict(\n            nms_pre=2000,\n            max_per_img=1000,\n            nms=dict(type='nms', iou_threshold=0.7),\n            min_bbox_size=0),\n        rcnn=dict(\n            assigner=dict(\n                type='MaxIoUAssigner',\n                pos_iou_thr=0.5,\n                neg_iou_thr=0.5,\n                min_pos_iou=0.5,\n                match_low_quality=True,\n                ignore_iof_thr=-1),\n            sampler=dict(\n                type='RandomSampler',\n                num=512,\n                pos_fraction=0.25,\n                neg_pos_ub=-1,\n                add_gt_as_proposals=True),\n            mask_size=28,\n            pos_weight=-1,\n            debug=False)),\n    test_cfg=dict(\n        rpn=dict(\n            nms_pre=1000,\n            max_per_img=1000,\n            nms=dict(type='nms', iou_threshold=0.7),\n            min_bbox_size=0),\n        rcnn=dict(\n            score_thr=0.05,\n            nms=dict(type='nms', iou_threshold=0.5),\n            max_per_img=100,\n            mask_thr_binary=0.5)))\ndataset_type = 'CocoDataset'\ndata_root = '../input/sartorius-cell-instance-segmentation'\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)\n\ndata = dict(\n    samples_per_gpu=2,\n    workers_per_gpu=2,\n    train=dict(\n        type='CocoDataset',\n        ann_file=data_root+\n        '../input/coco-format/train_coco_fold_0.json',\n        img_prefix=data_root,\n        pipeline=[\n            dict(type='LoadImageFromFile', to_float32=True),\n            dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n            dict(type='Resize', img_scale=(512, 512), keep_ratio=True),\n            dict(type='RandomFlip', flip_ratio=0.5),\n            dict(\n                type='Normalize',\n                mean=[123.675, 116.28, 103.53],\n                std=[58.395, 57.12, 57.375],\n                to_rgb=True),\n            dict(type='Pad', size_divisor=32),\n            dict(type='DefaultFormatBundle'),\n            dict(\n                type='Collect',\n                keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks'])\n        ],\n        classes=('cort', 'shsy5y', 'astro')),\n    val=dict(\n        type='CocoDataset',\n        ann_file=\n        '../input/coco-format/val_coco_fold_0.json',\n        img_prefix=data_root,\n        pipeline=[\n            dict(type='LoadImageFromFile'),\n            dict(\n                type='MultiScaleFlipAug',\n                img_scale=(512, 512),\n                flip=False,\n                transforms=[\n                    dict(type='Resize', keep_ratio=True),\n                    dict(type='RandomFlip'),\n                    dict(\n                        type='Normalize',\n                        mean=[123.675, 116.28, 103.53],\n                        std=[58.395, 57.12, 57.375],\n                        to_rgb=True),\n                    dict(type='Pad', size_divisor=32),\n                    dict(type='ImageToTensor', keys=['img']),\n                    dict(type='Collect', keys=['img'])\n                ])\n        ],\n        classes=('cort', 'shsy5y', 'astro')),\n    test=dict(\n        type='CustomDataset',\n        ann_file='./test/test_anns.pkl',\n        img_prefix=data_root+'/test',\n        pipeline=[\n            dict(type='LoadImageFromFile'),\n            dict(\n                type='MultiScaleFlipAug',\n                img_scale=(512, 512),\n                flip=False,\n                transforms=[\n                    dict(type='Resize', keep_ratio=True),\n                    dict(type='RandomFlip'),\n                    dict(\n                        type='Normalize',\n                        mean=[123.675, 116.28, 103.53],\n                        std=[58.395, 57.12, 57.375],\n                        to_rgb=True),\n                    dict(type='Pad', size_divisor=32),\n                    dict(type='ImageToTensor', keys=['img']),\n                    dict(type='Collect', keys=['img'])\n                ])\n        ],\n        classes=('cort', 'shsy5y', 'astro')))\nevaluation = dict(metric=['bbox', 'segm'])\noptimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)\noptimizer_config = dict(grad_clip=None)\nlr_config = dict(\n    policy='step',\n    warmup='linear',\n    warmup_iters=500,\n    warmup_ratio=0.001,\n    step=[16, 22])\nrunner = dict(type='EpochBasedRunner', max_epochs=24)\ncheckpoint_config = dict(interval=1)\nlog_config = dict(interval=50, hooks=[dict(type='TextLoggerHook')])\ncustom_hooks = [dict(type='NumClassCheckHook')]\ndist_params = dict(backend='nccl')\nlog_level = 'INFO'\nload_from = None\nresume_from = None\nworkflow = [('train', 1)]\nclasses = ('cort', 'shsy5y', 'astro')\nwork_dir = './test/mask_rcnn_save'\ngpu_ids = range(0, 1)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:09.990648Z","iopub.execute_input":"2021-12-04T12:05:09.990983Z","iopub.status.idle":"2021-12-04T12:05:10.006396Z","shell.execute_reply.started":"2021-12-04T12:05:09.990936Z","shell.execute_reply":"2021-12-04T12:05:10.005208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Test process\n","metadata":{}},{"cell_type":"code","source":"! ls ./cfg/","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:10.009019Z","iopub.execute_input":"2021-12-04T12:05:10.009670Z","iopub.status.idle":"2021-12-04T12:05:10.737856Z","shell.execute_reply.started":"2021-12-04T12:05:10.009627Z","shell.execute_reply":"2021-12-04T12:05:10.736661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def run_test_script(cfg):\n    config = f\"./cfg/{cfg.MODEL_CFG}.py\"\n    model_file = f\"../input/saved-weights/{cfg.CHECKPOINT}.pth\"\n    result_pkl = f\"test/{cfg.MODEL_CFG}.pkl\"\n    additional_conf = \"--cfg-options\"\n    additional_conf += f\" model.test_cfg.rcnn.score_thr={cfg.SCORE_TH}\"\n    cmd = f\"python ../input/mmdet2180/mmdetection-2.18.0/tools/test.py {config} {model_file} --out {result_pkl} {additional_conf}\"\n    !{cmd}\n    result = pickle.load(open(result_pkl, \"rb\"))\n    return result\n\n\ntest_results = run_test_script(CFG)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:05:12.316542Z","iopub.execute_input":"2021-12-04T12:05:12.317317Z","iopub.status.idle":"2021-12-04T12:05:45.274312Z","shell.execute_reply.started":"2021-12-04T12:05:12.317272Z","shell.execute_reply":"2021-12-04T12:05:45.273270Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndef show_results(cfg, anns, results):\n    num_imgs = len(results)\n    for i in range(num_imgs):\n        image_id = anns[i][\"filename\"].replace(\".jpg\", \"\").replace(\".png\", \"\")\n        print(image_id)\n        for class_id in range(3):\n            bbs = results[i][0][class_id]\n            sgs = results[i][1][class_id]\n            if len(sgs) == 0:\n                continue\n            for idx, (bb, sg) in enumerate(zip(bbs, sgs)):\n                box = bb[:4]\n                cnf = bb[4]\n                h = sg[\"size\"][0]\n                w = sg[\"size\"][0]\n                if cnf > 0.1:\n                    if idx == 0:\n                        mask = mutils.decode(sg)\n                    else:\n                        mask += mutils.decode(sg)\n            print(mask.shape)\n            print_masked_img(cfg, image_id, mask)\n            \n            \nshow_results(CFG, test_anns, test_results)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:26:36.197775Z","iopub.execute_input":"2021-12-04T12:26:36.198110Z","iopub.status.idle":"2021-12-04T12:26:39.141690Z","shell.execute_reply.started":"2021-12-04T12:26:36.198051Z","shell.execute_reply":"2021-12-04T12:26:39.140689Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def mask2rle(mask):\n    mask   = np.array(mask)\n    pixels = mask.flatten()\n    pad    = np.array([0])\n    pixels = np.concatenate([pad, pixels, pad])\n    runs   = np.where(pixels[1:] != pixels[:-1])[0] + 1\n    runs[1::2] -= runs[::2]\n    return \" \".join(str(x) for x in runs)\n\ndef one_hot(y, num_classes, dtype=np.uint8):\n    y = np.array(y, dtype=\"int\")\n    input_shape = y.shape\n    if input_shape and input_shape[-1] == 1 and len(input_shape) > 1:\n        input_shape = tuple(input_shape[:-1])\n    y = y.ravel()\n    if not num_classes:\n        num_classes = np.max(y) + 1\n    n = y.shape[0]\n    categorical = np.zeros((n, num_classes), dtype=dtype)\n    categorical[np.arange(n), y] = 1\n    output_shape = input_shape + (num_classes,)\n    categorical = np.reshape(categorical, output_shape)\n    return categorical\n\n\ndef fix_overlap(msk): # GPU\n    msk = np.array(msk)\n    msk = np.pad(msk, [[0, 0], [0, 0], [1, 0]])\n    ins_len = msk.shape[-1]\n    msk = np.argmax(msk,axis=-1)\n    msk = one_hot(msk, num_classes=ins_len, )\n    msk = msk[..., 1:]\n    msk = msk[..., np.any(msk, axis=(0,1))]\n    return msk\n\n\ndef check_overlap(msk):\n    msk = msk.astype(bool).astype(np.uint8)\n    return np.any(np.sum(msk, axis=-1) > 1)","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:32:00.280225Z","iopub.execute_input":"2021-12-04T12:32:00.280569Z","iopub.status.idle":"2021-12-04T12:32:00.297352Z","shell.execute_reply.started":"2021-12-04T12:32:00.280538Z","shell.execute_reply":"2021-12-04T12:32:00.296121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = []\nfor ii in tqdm(range(len(test_anns))):\n    image_id = test_anns[ii][\"filename\"].replace(\".jpg\",\"\").replace(\".png\",\"\")\n    mask = []\n    for class_id in range(3):\n        bbs = test_results[ii][0][class_id]\n        sgs = test_results[ii][1][class_id]\n        if len(sgs) == 0:\n            continue\n        \n        for bb, sg in zip(bbs,sgs):\n            box = bb[:4]\n            cnf = bb[4]\n            h = sg[\"size\"][0]\n            w = sg[\"size\"][1]\n            #convert coco format to kaggle format\n            mask.append(np.array(mutils.decode(sg)))\n    mask = np.stack(mask, axis=-1)\n    if check_overlap(mask): # if mask instances have overlap then fix it\n        mask = fix_overlap(mask)\n    if check_overlap(mask):\n        print(\"still overlap\")\n    p_mask = np.amax(mask, axis=-1)\n    print(p_mask.shape)\n    print_masked_img(CFG, image_id, p_mask)\n    for idx in range(mask.shape[-1]):\n        mask_ins = mask[..., idx]\n        rle  = mask2rle(mask_ins)\n        data.append([image_id, rle])\n    del mask, rle, sgs, bbs\n    gc.collect()\npred_df = pd.DataFrame(data, columns=[\"id\", \"predicted\"])","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:34:44.282367Z","iopub.execute_input":"2021-12-04T12:34:44.282678Z","iopub.status.idle":"2021-12-04T12:34:47.675058Z","shell.execute_reply.started":"2021-12-04T12:34:44.282650Z","shell.execute_reply":"2021-12-04T12:34:47.673853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df  = pd.read_csv(\"../input/sartorius-cell-instance-segmentation/sample_submission.csv\")\ndel sub_df[\"predicted\"]\nsub_df = sub_df.merge(pred_df, on=\"id\", how=\"left\")\nsub_df.to_csv(\"submission.csv\", index=False)\nsub_df.head()","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:41:54.109999Z","iopub.execute_input":"2021-12-04T12:41:54.110287Z","iopub.status.idle":"2021-12-04T12:41:54.155033Z","shell.execute_reply.started":"2021-12-04T12:41:54.110257Z","shell.execute_reply":"2021-12-04T12:41:54.154178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! rm -rf ./mmdet2180/\n! rm -rf ./yapf0310/\n! rm -rf ./test/\n! rm -rf ./pycocotools/\n! rm -rf ./addict240/\n! rm -rf ./mmcv1317/\n! rm -rf ./cfg","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:54:50.248782Z","iopub.execute_input":"2021-12-04T12:54:50.249360Z","iopub.status.idle":"2021-12-04T12:54:55.700053Z","shell.execute_reply.started":"2021-12-04T12:54:50.249312Z","shell.execute_reply":"2021-12-04T12:54:55.698561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! ls -lah ./","metadata":{"execution":{"iopub.status.busy":"2021-12-04T12:54:57.197202Z","iopub.execute_input":"2021-12-04T12:54:57.198009Z","iopub.status.idle":"2021-12-04T12:54:57.941550Z","shell.execute_reply.started":"2021-12-04T12:54:57.197957Z","shell.execute_reply":"2021-12-04T12:54:57.940364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}