{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":91249,"databundleVersionId":11294684,"sourceType":"competition"},{"sourceId":6063037,"sourceType":"datasetVersion","datasetId":3469773},{"sourceId":6063590,"sourceType":"datasetVersion","datasetId":3470137},{"sourceId":230316240,"sourceType":"kernelVersion"}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from IPython.display import clear_output\n\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/pycocotools-2.0.6-cp310-cp310-linux_x86_64.whl\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/torch-1.12.1+cu116-cp310-cp310-linux_x86_64.whl\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/torchvision-0.13.1+cu116-cp310-cp310-linux_x86_64.whl\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/mmcv-2.0.1-cp310-cp310-manylinux1_x86_64.whl \n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/openmim-0.3.9-py2.py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/mmengine-0.7.4-py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmdetectron-31-wheel/addict-2.4.0-py3-none-any.whl\n!pip install yapf==0.40.1\n!pip install terminaltables\n!pip install setuptools==69.5.1\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/einops-0.6.1-py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/mat4py-0.5.0-py2.py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/ordered_set-4.1.0-py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/model_index-0.1.11-py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/modelindex-0.0.2-py3-none-any.whl\n!pip install --no-index --no-deps /kaggle/input/mmpretrain/mmpretrain-1.0.0rc8-py2.py3-none-any.whl\nclear_output()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:48:49.324645Z","iopub.execute_input":"2025-03-31T03:48:49.325031Z","iopub.status.idle":"2025-03-31T03:50:53.487984Z","shell.execute_reply.started":"2025-03-31T03:48:49.324985Z","shell.execute_reply":"2025-03-31T03:50:53.486935Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tqdm.notebook import tqdm\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\nfrom PIL import Image\n\nfrom glob import glob\nimport matplotlib.pyplot as plt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:50:53.489531Z","iopub.execute_input":"2025-03-31T03:50:53.489890Z","iopub.status.idle":"2025-03-31T03:50:53.943121Z","shell.execute_reply.started":"2025-03-31T03:50:53.489853Z","shell.execute_reply":"2025-03-31T03:50:53.942400Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!git clone https://github.com/open-mmlab/mmdetection.git\n%cd /kaggle/working/mmdetection\n!pip install -e .\n\nclear_output()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:53:07.442512Z","iopub.execute_input":"2025-03-31T03:53:07.442802Z","iopub.status.idle":"2025-03-31T03:53:19.946066Z","shell.execute_reply.started":"2025-03-31T03:53:07.442781Z","shell.execute_reply":"2025-03-31T03:53:19.945227Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Check Pytorch installation\nimport torch, torchvision\nprint(\"torch version:\",torch.__version__, \"cuda:\",torch.cuda.is_available())\n\n# Check MMDetection installation\nimport mmdet\nprint(\"mmdetection:\",mmdet.__version__)\n\n# Check mmcv installation\nimport mmcv\nprint(\"mmcv:\",mmcv.__version__)\n\n# Check mmengine installation\nimport mmengine\nprint(\"mmengine:\",mmengine.__version__)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:51:07.059249Z","iopub.execute_input":"2025-03-31T03:51:07.059548Z","iopub.status.idle":"2025-03-31T03:51:08.854732Z","shell.execute_reply.started":"2025-03-31T03:51:07.059524Z","shell.execute_reply":"2025-03-31T03:51:08.853796Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Writing the config file","metadata":{}},{"cell_type":"code","source":"!mkdir -p configs/BYU","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:53:30.721281Z","iopub.execute_input":"2025-03-31T03:53:30.721576Z","iopub.status.idle":"2025-03-31T03:53:30.846527Z","shell.execute_reply.started":"2025-03-31T03:53:30.721553Z","shell.execute_reply":"2025-03-31T03:53:30.845458Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Centernet","metadata":{}},{"cell_type":"code","source":"%%writefile configs/BYU/custom_center_netconfig.py\n\n_base_ = '../common/lsj-200e_coco-detection.py'\n\ndataset_type = 'CocoDataset'\ndata_root = '/kaggle/input/byu-coco-dataset/dataset_json/'\nbackend_args = None\nclasses = ('motor',)\n\nimage_size = (960, 960)\nbatch_augments = [dict(type='BatchFixedSizePad', size=image_size)]\n\n# model settings\nmodel = dict(\n    type='CenterNet',\n    data_preprocessor=dict(\n        type='DetDataPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        bgr_to_rgb=True,\n        pad_size_divisor=32,\n        batch_augments=batch_augments),\n    backbone=dict(\n            type='ResNet',\n            depth=50,\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', checkpoint='torchvision://resnet50')),\n    neck=dict(\n        type='FPN',\n        in_channels=[256, 512, 1024, 2048],\n        out_channels=256,\n        start_level=1,\n        add_extra_convs='on_output',\n        num_outs=5,\n        init_cfg=dict(type='Caffe2Xavier', layer='Conv2d'),\n        relu_before_extra_convs=True),\n    bbox_head=dict(\n        type='CenterNetUpdateHead',\n        num_classes=80,\n        in_channels=256,\n        stacked_convs=4,\n        feat_channels=256,\n        strides=[8, 16, 32, 64, 128],\n        loss_cls=dict(\n            type='GaussianFocalLoss',\n            pos_weight=0.25,\n            neg_weight=0.75,\n            loss_weight=1.0),\n        loss_bbox=dict(type='GIoULoss', loss_weight=2.0),\n    ),\n    train_cfg=None,\n    test_cfg=dict(\n        nms_pre=1000,\n        min_bbox_size=0,\n        score_thr=0.05,\n        nms=dict(type='nms', iou_threshold=0.45),\n        max_per_img=100))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=backend_args),\n    dict(type='LoadAnnotations', with_bbox=True),\n    dict(\n        type='RandomResize',\n        scale=image_size,\n        ratio_range=(0.1, 2.0),\n        keep_ratio=True),\n    dict(\n        type='RandomCrop',\n        crop_type='absolute_range',\n        crop_size=image_size,\n        recompute_bbox=True,\n        allow_negative_crop=True),\n    dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)),\n    dict(type='RandomFlip', prob=0.5),\n    dict(type='PackDetInputs')\n]\ntest_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=backend_args),\n    dict(type='Resize', scale=(1333, 800), keep_ratio=True),\n    dict(type='LoadAnnotations', with_bbox=True),\n    dict(\n        type='PackDetInputs',\n        meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n                   'scale_factor'))\n]\n\ntrain_dataloader = dict(\n    batch_size=8,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    dataset=dict(\n        type='RepeatDataset',\n        times=4,  # simply change this from 2 to 16 for 50e - 400e training.\n        dataset=dict(\n            type=dataset_type,\n            data_root=data_root,\n            ann_file='annotations_train.json',\n            metainfo=dict(classes=classes),\n            data_prefix=dict(img='train2017/'),\n            filter_cfg=dict(filter_empty_gt=True, min_size=32),\n            pipeline=train_pipeline,\n            backend_args=backend_args)))\n\n\n\nval_dataloader = dict(\n    batch_size=16,\n    num_workers=4,\n    persistent_workers=True,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        metainfo=dict(classes=classes),\n        ann_file='annotations_valid.json',\n        data_prefix=dict(img='valid2017/'),\n        test_mode=True,\n        pipeline=test_pipeline,\n        backend_args=backend_args))\ntest_dataloader = val_dataloader\nval_evaluator = dict(\nann_file=data_root + 'annotations_valid.json', metric=['bbox'], format_only=False, backend_args=backend_args)\n\ntest_evaluator = val_evaluator\n\n# optimizer\noptim_wrapper = dict(\n    type='AmpOptimWrapper',\n    paramwise_cfg={\n        'decay_rate': 0.7,\n        'decay_type': 'layer_wise',\n        'num_layers': 12\n    },\n    optimizer=dict(\n        _delete_=True,\n        type='AdamW',\n        lr=0.0002,\n        betas=(0.9, 0.999),\n        weight_decay=0.05),\n        # accumulative_counts=4,\n)\n\nmax_epochs = 20\n\n# learning policy\n# Based on the default settings of modern detectors, we added warmup settings.\nparam_scheduler = [\n    dict(\n        type='LinearLR', start_factor=0.067, by_epoch=False, begin=0,\n        end=1000),\n    dict(\n        type='MultiStepLR',\n        begin=0,\n        end=max_epochs,\n        by_epoch=True,\n        milestones=[18, 24],  # the real step is [18*5, 24*5]\n        gamma=0.1)\n]\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1)  # the real epoch is 28*5=140\nval_cfg = dict(type='ValLoop')\ntest_cfg = dict(type='TestLoop')\n\n# NOTE: `auto_scale_lr` is for automatically scaling LR,\n# USER SHOULD NOT CHANGE ITS VALUES.\nauto_scale_lr = dict(base_batch_size=16)\n\nfp16=dict(loss_scale=512.)\nwork_dir = '../model_output'\n\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    early_stopping=dict(\n        type=\"EarlyStoppingHook\",\n        monitor=\"coco/bbox_mAP_50\",\n        patience=7,\n        min_delta=0.005),\n    checkpoint=dict(type='CheckpointHook', interval=1, max_keep_ckpts=1,\n        save_best='coco/bbox_mAP_50'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n    visualization=dict(type='DetVisualizationHook'))\nresume_from = None","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:55:47.874797Z","iopub.execute_input":"2025-03-31T03:55:47.875171Z","iopub.status.idle":"2025-03-31T03:55:47.882262Z","shell.execute_reply.started":"2025-03-31T03:55:47.875140Z","shell.execute_reply":"2025-03-31T03:55:47.881574Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# !python tools/train.py configs/BYU/custom_center_netconfig.py","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:51:09.000760Z","iopub.execute_input":"2025-03-31T03:51:09.000969Z","iopub.status.idle":"2025-03-31T03:51:09.016073Z","shell.execute_reply.started":"2025-03-31T03:51:09.000951Z","shell.execute_reply":"2025-03-31T03:51:09.015295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!bash ./tools/dist_train.sh\\\n    configs/BYU/custom_center_netconfig.py\\\n    2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:55:51.404316Z","iopub.execute_input":"2025-03-31T03:55:51.404608Z","execution_failed":"2025-03-31T04:06:44.412Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!rm -rf /kaggle/working/mmdetection","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-31T03:51:15.250349Z","iopub.execute_input":"2025-03-31T03:51:15.250588Z","iopub.status.idle":"2025-03-31T03:51:15.450984Z","shell.execute_reply.started":"2025-03-31T03:51:15.250568Z","shell.execute_reply":"2025-03-31T03:51:15.449896Z"}},"outputs":[],"execution_count":null}]}