{"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":"markdown","source":"# Check existed package versions","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-06-25T04:58:55.658077Z","iopub.execute_input":"2023-06-25T04:58:55.658634Z","iopub.status.idle":"2023-06-25T04:58:59.331774Z","shell.execute_reply.started":"2023-06-25T04:58:55.658600Z","shell.execute_reply":"2023-06-25T04:58:59.330642Z"}}},{"cell_type":"code","source":"!pip freeze | grep torch","metadata":{"execution":{"iopub.status.busy":"2023-06-25T06:51:03.169894Z","iopub.execute_input":"2023-06-25T06:51:03.170307Z","iopub.status.idle":"2023-06-25T06:51:08.237897Z","shell.execute_reply.started":"2023-06-25T06:51:03.170270Z","shell.execute_reply":"2023-06-25T06:51:08.236710Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python -V","metadata":{"execution":{"iopub.status.busy":"2023-06-25T06:51:10.229984Z","iopub.execute_input":"2023-06-25T06:51:10.230389Z","iopub.status.idle":"2023-06-25T06:51:11.186471Z","shell.execute_reply.started":"2023-06-25T06:51:10.230352Z","shell.execute_reply":"2023-06-25T06:51:11.185275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!nvcc -V","metadata":{"execution":{"iopub.status.busy":"2023-06-25T06:51:12.813293Z","iopub.execute_input":"2023-06-25T06:51:12.813699Z","iopub.status.idle":"2023-06-25T06:51:13.778747Z","shell.execute_reply.started":"2023-06-25T06:51:12.813660Z","shell.execute_reply":"2023-06-25T06:51:13.777549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Install mmdet packages","metadata":{}},{"cell_type":"code","source":"!pip download openmim==0.3.7 -d ./openmim\n!pip download mmengine==0.7.1 -d ./mmengine","metadata":{"execution":{"iopub.status.busy":"2023-06-25T07:24:46.972259Z","iopub.execute_input":"2023-06-25T07:24:46.972648Z","iopub.status.idle":"2023-06-25T07:24:59.839782Z","shell.execute_reply.started":"2023-06-25T07:24:46.972618Z","shell.execute_reply":"2023-06-25T07:24:59.838652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ./openmim/openmim-0.3.7-py2.py3-none-any.whl > /dev/null 2>&1\n!pip install ./mmengine/mmengine-0.7.1-py3-none-any.whl > /dev/null 2>&1","metadata":{"execution":{"iopub.status.busy":"2023-06-25T07:23:32.531636Z","iopub.execute_input":"2023-06-25T07:23:32.532364Z","iopub.status.idle":"2023-06-25T07:23:37.779742Z","shell.execute_reply.started":"2023-06-25T07:23:32.532331Z","shell.execute_reply":"2023-06-25T07:23:37.778340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ./openmim/openmim-0.3.7-py2.py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:11:05.550671Z","iopub.execute_input":"2023-06-25T08:11:05.551105Z","iopub.status.idle":"2023-06-25T08:11:16.868347Z","shell.execute_reply.started":"2023-06-25T08:11:05.551070Z","shell.execute_reply":"2023-06-25T08:11:16.867198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip download mmcv==2.0.0rc4 -f https://download.openmmlab.com/mmcv/dist/cu118/torch2.0/index.html -d ./mmcv","metadata":{"execution":{"iopub.status.busy":"2023-06-25T07:29:00.289489Z","iopub.execute_input":"2023-06-25T07:29:00.290289Z","iopub.status.idle":"2023-06-25T07:29:13.507219Z","shell.execute_reply.started":"2023-06-25T07:29:00.290253Z","shell.execute_reply":"2023-06-25T07:29:13.506060Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip wheel --wheel-dir=./mmcvwheel ./mmcv/mmcv-2.0.0rc4.tar.gz","metadata":{"execution":{"iopub.status.busy":"2023-06-25T07:29:55.785612Z","iopub.execute_input":"2023-06-25T07:29:55.785979Z","iopub.status.idle":"2023-06-25T07:59:21.263055Z","shell.execute_reply.started":"2023-06-25T07:29:55.785943Z","shell.execute_reply":"2023-06-25T07:59:21.261903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !pip install ./mmcv/mmcv-2.0.0rc4.tar.gz\n!pip install ./mmcvwheel/mmcv-2.0.0rc4-cp310-cp310-linux_x86_64.whl","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:01:33.638226Z","iopub.execute_input":"2023-06-25T08:01:33.638623Z","iopub.status.idle":"2023-06-25T08:01:45.909360Z","shell.execute_reply.started":"2023-06-25T08:01:33.638588Z","shell.execute_reply":"2023-06-25T08:01:45.907898Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip download pycocotools==2.0.6 -d ./pycocotools","metadata":{"execution":{"iopub.status.busy":"2023-06-27T09:49:07.551324Z","iopub.execute_input":"2023-06-27T09:49:07.552228Z","iopub.status.idle":"2023-06-27T09:49:29.530619Z","shell.execute_reply.started":"2023-06-27T09:49:07.552188Z","shell.execute_reply":"2023-06-27T09:49:29.529268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip wheel --wheel-dir=./pycocotoolswheel ./pycocotools/pycocotools-2.0.6.tar.gz","metadata":{"execution":{"iopub.status.busy":"2023-06-27T09:49:50.341808Z","iopub.execute_input":"2023-06-27T09:49:50.342162Z","iopub.status.idle":"2023-06-27T09:50:16.304920Z","shell.execute_reply.started":"2023-06-27T09:49:50.342132Z","shell.execute_reply":"2023-06-27T09:50:16.303731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ./pycocotoolswheel/pycocotools-2.0.6-cp310-cp310-linux_x86_64.whl","metadata":{"execution":{"iopub.status.busy":"2023-06-27T09:50:27.142749Z","iopub.execute_input":"2023-06-27T09:50:27.143119Z","iopub.status.idle":"2023-06-27T09:50:38.318983Z","shell.execute_reply.started":"2023-06-27T09:50:27.143085Z","shell.execute_reply":"2023-06-27T09:50:38.317872Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip download mmdet==3.0.0 -d ./mmdet","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:02:43.660799Z","iopub.execute_input":"2023-06-25T08:02:43.661194Z","iopub.status.idle":"2023-06-25T08:03:06.530430Z","shell.execute_reply.started":"2023-06-25T08:02:43.661161Z","shell.execute_reply":"2023-06-25T08:03:06.529072Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ./mmdet/mmdet-3.0.0-py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:03:14.744323Z","iopub.execute_input":"2023-06-25T08:03:14.744717Z","iopub.status.idle":"2023-06-25T08:03:48.205338Z","shell.execute_reply.started":"2023-06-25T08:03:14.744682Z","shell.execute_reply":"2023-06-25T08:03:48.204177Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Test mmdet","metadata":{}},{"cell_type":"code","source":"import mmdet\nmmdet.__version__","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:03:56.870814Z","iopub.execute_input":"2023-06-25T08:03:56.871798Z","iopub.status.idle":"2023-06-25T08:03:59.107583Z","shell.execute_reply.started":"2023-06-25T08:03:56.871761Z","shell.execute_reply":"2023-06-25T08:03:59.106726Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writefile rtmdet_tiny_8xb32-300e_coco.py\ndefault_scope = 'mmdet'\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=50),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(type='CheckpointHook', interval=10, max_keep_ckpts=3),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n    visualization=dict(type='DetVisualizationHook'))\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    dist_cfg=dict(backend='nccl'))\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='DetLocalVisualizer',\n    vis_backends=[dict(type='LocalVisBackend')],\n    name='visualizer')\nlog_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)\nlog_level = 'INFO'\nload_from = None\nresume = False\ntrain_cfg = dict(\n    type='EpochBasedTrainLoop',\n    max_epochs=300,\n    val_interval=10,\n    dynamic_intervals=[(280, 1)])\nval_cfg = dict(type='ValLoop')\ntest_cfg = dict(type='TestLoop')\nparam_scheduler = [\n    dict(\n        type='LinearLR', start_factor=1e-05, by_epoch=False, begin=0,\n        end=1000),\n    dict(\n        type='CosineAnnealingLR',\n        eta_min=0.0002,\n        begin=150,\n        end=300,\n        T_max=150,\n        by_epoch=True,\n        convert_to_iter_based=True)\n]\noptim_wrapper = dict(\n    type='OptimWrapper',\n    optimizer=dict(type='AdamW', lr=0.004, weight_decay=0.05),\n    paramwise_cfg=dict(\n        norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))\nauto_scale_lr = dict(enable=False, base_batch_size=16)\ndataset_type = 'CocoDataset'\ndata_root = 'data/coco/'\nbackend_args = None\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=None),\n    dict(type='LoadAnnotations', with_bbox=True),\n    dict(\n        type='CachedMosaic',\n        img_scale=(640, 640),\n        pad_val=114.0,\n        max_cached_images=20,\n        random_pop=False),\n    dict(\n        type='RandomResize',\n        scale=(1280, 1280),\n        ratio_range=(0.5, 2.0),\n        keep_ratio=True),\n    dict(type='RandomCrop', crop_size=(640, 640)),\n    dict(type='YOLOXHSVRandomAug'),\n    dict(type='RandomFlip', prob=0.5),\n    dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n    dict(\n        type='CachedMixUp',\n        img_scale=(640, 640),\n        ratio_range=(1.0, 1.0),\n        max_cached_images=10,\n        random_pop=False,\n        pad_val=(114, 114, 114),\n        prob=0.5),\n    dict(type='PackDetInputs')\n]\ntest_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=None),\n    dict(type='Resize', scale=(640, 640), keep_ratio=True),\n    dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n    dict(\n        type='PackDetInputs',\n        meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n                   'scale_factor'))\n]\ntrain_dataloader = dict(\n    batch_size=32,\n    num_workers=10,\n    persistent_workers=True,\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    batch_sampler=None,\n    dataset=dict(\n        type='CocoDataset',\n        data_root='data/coco/',\n        ann_file='annotations/instances_train2017.json',\n        data_prefix=dict(img='train2017/'),\n        filter_cfg=dict(filter_empty_gt=True, min_size=32),\n        pipeline=[\n            dict(type='LoadImageFromFile', backend_args=None),\n            dict(type='LoadAnnotations', with_bbox=True),\n            dict(\n                type='CachedMosaic',\n                img_scale=(640, 640),\n                pad_val=114.0,\n                max_cached_images=20,\n                random_pop=False),\n            dict(\n                type='RandomResize',\n                scale=(1280, 1280),\n                ratio_range=(0.5, 2.0),\n                keep_ratio=True),\n            dict(type='RandomCrop', crop_size=(640, 640)),\n            dict(type='YOLOXHSVRandomAug'),\n            dict(type='RandomFlip', prob=0.5),\n            dict(\n                type='Pad', size=(640, 640),\n                pad_val=dict(img=(114, 114, 114))),\n            dict(\n                type='CachedMixUp',\n                img_scale=(640, 640),\n                ratio_range=(1.0, 1.0),\n                max_cached_images=10,\n                random_pop=False,\n                pad_val=(114, 114, 114),\n                prob=0.5),\n            dict(type='PackDetInputs')\n        ],\n        backend_args=None),\n    pin_memory=True)\nval_dataloader = dict(\n    batch_size=5,\n    num_workers=10,\n    persistent_workers=True,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='CocoDataset',\n        data_root='data/coco/',\n        ann_file='annotations/instances_val2017.json',\n        data_prefix=dict(img='val2017/'),\n        test_mode=True,\n        pipeline=[\n            dict(type='LoadImageFromFile', backend_args=None),\n            dict(type='Resize', scale=(640, 640), keep_ratio=True),\n            dict(\n                type='Pad', size=(640, 640),\n                pad_val=dict(img=(114, 114, 114))),\n            dict(\n                type='PackDetInputs',\n                meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n                           'scale_factor'))\n        ],\n        backend_args=None))\ntest_dataloader = dict(\n    batch_size=5,\n    num_workers=10,\n    persistent_workers=True,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='CocoDataset',\n        data_root='data/coco/',\n        ann_file='annotations/instances_val2017.json',\n        data_prefix=dict(img='val2017/'),\n        test_mode=True,\n        pipeline=[\n            dict(type='LoadImageFromFile', backend_args=None),\n            dict(type='Resize', scale=(640, 640), keep_ratio=True),\n            dict(\n                type='Pad', size=(640, 640),\n                pad_val=dict(img=(114, 114, 114))),\n            dict(\n                type='PackDetInputs',\n                meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n                           'scale_factor'))\n        ],\n        backend_args=None))\nval_evaluator = dict(\n    type='CocoMetric',\n    ann_file='data/coco/annotations/instances_val2017.json',\n    metric='bbox',\n    format_only=False,\n    backend_args=None,\n    proposal_nums=(100, 1, 10))\ntest_evaluator = dict(\n    type='CocoMetric',\n    ann_file='data/coco/annotations/instances_val2017.json',\n    metric='bbox',\n    format_only=False,\n    backend_args=None,\n    proposal_nums=(100, 1, 10))\ntta_model = dict(\n    type='DetTTAModel',\n    tta_cfg=dict(nms=dict(type='nms', iou_threshold=0.6), max_per_img=100))\nimg_scales = [(640, 640), (320, 320), (960, 960)]\ntta_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=None),\n    dict(\n        type='TestTimeAug',\n        transforms=[[{\n            'type': 'Resize',\n            'scale': (640, 640),\n            'keep_ratio': True\n        }, {\n            'type': 'Resize',\n            'scale': (320, 320),\n            'keep_ratio': True\n        }, {\n            'type': 'Resize',\n            'scale': (960, 960),\n            'keep_ratio': True\n        }],\n                    [{\n                        'type': 'RandomFlip',\n                        'prob': 1.0\n                    }, {\n                        'type': 'RandomFlip',\n                        'prob': 0.0\n                    }],\n                    [{\n                        'type': 'Pad',\n                        'size': (960, 960),\n                        'pad_val': {\n                            'img': (114, 114, 114)\n                        }\n                    }],\n                    [{\n                        'type':\n                        'PackDetInputs',\n                        'meta_keys':\n                        ('img_id', 'img_path', 'ori_shape', 'img_shape',\n                         'scale_factor', 'flip', 'flip_direction')\n                    }]])\n]\nmodel = dict(\n    type='RTMDet',\n    data_preprocessor=dict(\n        type='DetDataPreprocessor',\n        mean=[103.53, 116.28, 123.675],\n        std=[57.375, 57.12, 58.395],\n        bgr_to_rgb=False,\n        batch_augments=None),\n    backbone=dict(\n        type='CSPNeXt',\n        arch='P5',\n        expand_ratio=0.5,\n        deepen_factor=0.167,\n        widen_factor=0.375,\n        channel_attention=True,\n        norm_cfg=dict(type='SyncBN'),\n        act_cfg=dict(type='SiLU', inplace=True),\n        init_cfg=dict(\n            type='Pretrained',\n            prefix='backbone.',\n            checkpoint=\n            'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n        )),\n    neck=dict(\n        type='CSPNeXtPAFPN',\n        in_channels=[96, 192, 384],\n        out_channels=96,\n        num_csp_blocks=1,\n        expand_ratio=0.5,\n        norm_cfg=dict(type='SyncBN'),\n        act_cfg=dict(type='SiLU', inplace=True)),\n    bbox_head=dict(\n        type='RTMDetSepBNHead',\n        num_classes=80,\n        in_channels=96,\n        stacked_convs=2,\n        feat_channels=96,\n        anchor_generator=dict(\n            type='MlvlPointGenerator', offset=0, strides=[8, 16, 32]),\n        bbox_coder=dict(type='DistancePointBBoxCoder'),\n        loss_cls=dict(\n            type='QualityFocalLoss',\n            use_sigmoid=True,\n            beta=2.0,\n            loss_weight=1.0),\n        loss_bbox=dict(type='GIoULoss', loss_weight=2.0),\n        with_objectness=False,\n        exp_on_reg=False,\n        share_conv=True,\n        pred_kernel_size=1,\n        norm_cfg=dict(type='SyncBN'),\n        act_cfg=dict(type='SiLU', inplace=True)),\n    train_cfg=dict(\n        assigner=dict(type='DynamicSoftLabelAssigner', topk=13),\n        allowed_border=-1,\n        pos_weight=-1,\n        debug=False),\n    test_cfg=dict(\n        nms_pre=30000,\n        min_bbox_size=0,\n        score_thr=0.001,\n        nms=dict(type='nms', iou_threshold=0.65),\n        max_per_img=300))\ntrain_pipeline_stage2 = [\n    dict(type='LoadImageFromFile', backend_args=None),\n    dict(type='LoadAnnotations', with_bbox=True),\n    dict(\n        type='RandomResize',\n        scale=(640, 640),\n        ratio_range=(0.5, 2.0),\n        keep_ratio=True),\n    dict(type='RandomCrop', crop_size=(640, 640)),\n    dict(type='YOLOXHSVRandomAug'),\n    dict(type='RandomFlip', prob=0.5),\n    dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n    dict(type='PackDetInputs')\n]\nmax_epochs = 300\nstage2_num_epochs = 20\nbase_lr = 0.004\ninterval = 10\ncustom_hooks = [\n    dict(\n        type='EMAHook',\n        ema_type='ExpMomentumEMA',\n        momentum=0.0002,\n        update_buffers=True,\n        priority=49),\n    dict(\n        type='PipelineSwitchHook',\n        switch_epoch=280,\n        switch_pipeline=[\n            dict(type='LoadImageFromFile', backend_args=None),\n            dict(type='LoadAnnotations', with_bbox=True),\n            dict(\n                type='RandomResize',\n                scale=(640, 640),\n                ratio_range=(0.5, 2.0),\n                keep_ratio=True),\n            dict(type='RandomCrop', crop_size=(640, 640)),\n            dict(type='YOLOXHSVRandomAug'),\n            dict(type='RandomFlip', prob=0.5),\n            dict(\n                type='Pad', size=(640, 640),\n                pad_val=dict(img=(114, 114, 114))),\n            dict(type='PackDetInputs')\n        ])\n]\ncheckpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:30:33.821106Z","iopub.execute_input":"2023-06-25T08:30:33.821500Z","iopub.status.idle":"2023-06-25T08:30:33.836348Z","shell.execute_reply.started":"2023-06-25T08:30:33.821470Z","shell.execute_reply":"2023-06-25T08:30:33.835321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!wget https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_tiny_8xb32-300e_coco/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:23:07.611657Z","iopub.execute_input":"2023-06-25T08:23:07.612073Z","iopub.status.idle":"2023-06-25T08:23:10.619041Z","shell.execute_reply.started":"2023-06-25T08:23:07.612042Z","shell.execute_reply":"2023-06-25T08:23:10.617961Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!wget https://github.com/open-mmlab/mmdetection/blob/ecac3a77becc63f23d9f6980b2a36f86acd00a8a/demo/demo.jpg?raw=true -O ./demo.jpg","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:47:25.945359Z","iopub.execute_input":"2023-06-25T08:47:25.946637Z","iopub.status.idle":"2023-06-25T08:47:27.053967Z","shell.execute_reply.started":"2023-06-25T08:47:25.946590Z","shell.execute_reply":"2023-06-25T08:47:27.052819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import mmcv\nfrom mmdet.registry import VISUALIZERS\nfrom mmdet.apis import init_detector, inference_detector\n\nconfig_file = './rtmdet_tiny_8xb32-300e_coco.py'\ncheckpoint_file = './rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\nmodel = init_detector(config_file, checkpoint_file, device='cuda:0')  # or device='cuda:0'\n\n# inference\nimg = mmcv.imread('./demo.jpg')\nresult = inference_detector(model, img)\n\n# visualize result\nimg = mmcv.imconvert(img, 'bgr', 'rgb')\nvisualizer = VISUALIZERS.build(model.cfg.visualizer)\nvisualizer.dataset_meta = model.dataset_meta\nvisualizer.add_datasample(\n    'result',\n    img,\n    data_sample=result,\n    draw_gt=False,\n    show=False,\n    out_file='./output.jpg'\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:49:40.084186Z","iopub.execute_input":"2023-06-25T08:49:40.084569Z","iopub.status.idle":"2023-06-25T08:49:40.506487Z","shell.execute_reply.started":"2023-06-25T08:49:40.084534Z","shell.execute_reply":"2023-06-25T08:49:40.505547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimg2 = mmcv.imread('./output.jpg')\nplt.figure(figsize=(15, 10))\nplt.imshow(mmcv.bgr2rgb(img2))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-06-25T08:53:00.813076Z","iopub.execute_input":"2023-06-25T08:53:00.813444Z","iopub.status.idle":"2023-06-25T08:53:01.870587Z","shell.execute_reply.started":"2023-06-25T08:53:00.813414Z","shell.execute_reply":"2023-06-25T08:53:01.869573Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}