{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":19989,"databundleVersionId":1160143,"sourceType":"competition"},{"sourceId":10128109,"sourceType":"datasetVersion","datasetId":6250282},{"sourceId":10128540,"sourceType":"datasetVersion","datasetId":6250587},{"sourceId":10137280,"sourceType":"datasetVersion","datasetId":6256442}],"dockerImageVersionId":30698,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip3 install torch==2.1.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118\n!pip install -U openmim\n!mim install mmengine\n!pip install /kaggle/input/mmcv-try/mmcv-2.1.0-cp38-cp38-manylinux1_x86_64.whl\n!mim install mmdet","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T14:37:34.217068Z","iopub.execute_input":"2024-12-09T14:37:34.217684Z","iopub.status.idle":"2024-12-09T14:40:36.643434Z","shell.execute_reply.started":"2024-12-09T14:37:34.217661Z","shell.execute_reply":"2024-12-09T14:40:36.642617Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import wandb\nsecret_value_0 = 'f0762786b349079aa9a08f88d2891a7c96028208'\nwandb.login(key=secret_value_0)\nwandb.init(\n    project=\"wheat_on_mmde\",\n)\nimport cv2\nfrom itertools import groupby\nfrom pycocotools import mask as mutils\nfrom pycocotools.coco import COCO\nimport numpy as np\nfrom tqdm.notebook import tqdm\nimport pandas as pd\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nimport wandb\nfrom PIL import Image\nimport gc\n\nfrom glob import glob\nimport matplotlib.pyplot as plt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T14:43:15.933242Z","iopub.execute_input":"2024-12-09T14:43:15.933905Z","iopub.status.idle":"2024-12-09T14:43:38.163675Z","shell.execute_reply.started":"2024-12-09T14:43:15.933879Z","shell.execute_reply":"2024-12-09T14:43:38.162552Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"DATA_DIR = '/kaggle/input/coco-wheat'\nconfig = '/kaggle/working/configs/wheat/custom_config.py'\nGPU_NUM=2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:02:59.874672Z","iopub.execute_input":"2024-12-09T02:02:59.875005Z","iopub.status.idle":"2024-12-09T02:02:59.880737Z","shell.execute_reply.started":"2024-12-09T02:02:59.874964Z","shell.execute_reply":"2024-12-09T02:02:59.879506Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"annotation_file = '/kaggle/input/coco-wheat/instances_train2017.json'\ncoco = COCO(annotation_file)\n\n# 2. 加载图片信息\nimage_ids = coco.getImgIds()  # 获取所有图像的ID\nimage_info = coco.loadImgs(image_ids[0])[0]  # 加载第一个图像的信息\nimage_path = f'/kaggle/input/coco-wheat/train2017/{image_info[\"file_name\"]}'\nimage = cv2.imread(image_path)\n\nannotation_ids = coco.getAnnIds(imgIds=image_info['id'], iscrowd=None)\nannotations = coco.loadAnns(annotation_ids)\nplt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))\nfor ann in annotations:\n    x, y, w, h = ann['bbox']\n    plt.gca().add_patch(plt.Rectangle((x, y), w, h, linewidth=2, edgecolor='r', facecolor='none'))\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:03:01.794888Z","iopub.execute_input":"2024-12-09T02:03:01.795678Z","iopub.status.idle":"2024-12-09T02:03:03.037867Z","shell.execute_reply.started":"2024-12-09T02:03:01.795648Z","shell.execute_reply":"2024-12-09T02:03:03.037054Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"os.makedirs('/kaggle/working/configs/wheat/', exist_ok=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:03:06.870092Z","iopub.execute_input":"2024-12-09T02:03:06.870930Z","iopub.status.idle":"2024-12-09T02:03:06.880761Z","shell.execute_reply.started":"2024-12-09T02:03:06.870890Z","shell.execute_reply":"2024-12-09T02:03:06.879632Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%writefile /kaggle/working/configs/wheat/dataset.py\n_base_ = ['/kaggle/input/mmcv-main/mmdetection-main/configs/_base_/datasets/coco_detection.py']\ndataset_type = 'CocoDataset'\ndata_root = '/kaggle/input/coco-wheat/'\nbackend_args = None\nbatch_size = 8\nimg_norm_cfg = dict(\n    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)\nnum_workers = 4\nmetainfo = {\n    'classes': ('wheat'),\n    'palette': [(220, 20, 60)]\n}\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', backend_args=backend_args),\n    dict(type='LoadAnnotations', with_bbox=True),\n    dict(type='Resize',\n         scale=(1042, 1042), # [(1280, 1280), (1152, 1152), (1024, 1024)],\n#          multiscale_mode='value',\n         keep_ratio=True),\n    dict(type='Normalize', **img_norm_cfg),\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='LoadAnnotations', with_bbox=True),\n    dict(type='Normalize', **img_norm_cfg),\n    dict(type='Resize', scale=(1042, 1042), keep_ratio=True),\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=2,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    batch_sampler=dict(type='AspectRatioBatchSampler'),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=metainfo,\n        data_root=data_root,\n        ann_file='instances_train2017.json',\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))\nval_dataloader = dict(\n    batch_size=1,\n    num_workers=2,\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        ann_file='instances_valid2017.json',\n        data_prefix=dict(img='valid2017/'),\n        test_mode=True,\n        metainfo=metainfo,\n        pipeline=test_pipeline,\n        backend_args=backend_args))\ntest_dataloader = val_dataloader\n\nval_evaluator = dict(\n    type='CocoMetric',\n    ann_file=data_root + 'instances_valid2017.json',\n    metric='bbox',\n    format_only=False,\n    backend_args=backend_args)\ntest_evaluator = val_evaluator","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:03:09.114097Z","iopub.execute_input":"2024-12-09T02:03:09.114427Z","iopub.status.idle":"2024-12-09T02:03:09.124007Z","shell.execute_reply.started":"2024-12-09T02:03:09.114403Z","shell.execute_reply":"2024-12-09T02:03:09.123090Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%writefile /kaggle/working/configs/wheat/custom_config.py\n_base_ = [\n    '/kaggle/working/configs/wheat/dataset.py',\n    '/kaggle/input/mmcv-main/mmdetection-main/configs/_base_/models/retinanet_r50_fpn.py',\n    '/kaggle/input/mmcv-main/mmdetection-main/configs/_base_/default_runtime.py']\nmodel = dict(\n    type='RetinaNet',\n    backbone=dict(\n        _delete_=True,\n        type='PyramidVisionTransformerV2',\n        embed_dims=64,\n        num_layers=[3, 4, 6, 3],\n        init_cfg=dict(checkpoint='https://github.com/whai362/PVT/'\n                      'releases/download/v2/pvt_v2_b2.pth')),\n        neck=dict(\n        type='FPN',\n        in_channels=[64, 128, 320, 512],\n        out_channels=256,\n        start_level=1,\n        add_extra_convs='on_input',\n        num_outs=5),\n    bbox_head=dict(\n        type='RetinaHead',\n        num_classes=1,\n        in_channels=256,\n        stacked_convs=4,\n        feat_channels=256,\n        anchor_generator=dict(\n            type='AnchorGenerator',\n            octave_base_scale=4,\n            scales_per_octave=3,\n            ratios=[0.5, 1.0, 2.0],\n            strides=[8, 16, 32, 64, 128]),\n        bbox_coder=dict(\n            type='DeltaXYWHBBoxCoder',\n            target_means=[.0, .0, .0, .0],\n            target_stds=[1.0, 1.0, 1.0, 1.0]),\n        loss_cls=dict(\n            type='FocalLoss',\n            use_sigmoid=True,\n            gamma=2.0,\n            alpha=0.25,\n            loss_weight=1.0),\n        loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n    # model training and testing settings\n    train_cfg=dict(\n        assigner=dict(\n            type='MaxIoUAssigner',\n            pos_iou_thr=0.5,\n            neg_iou_thr=0.4,\n            min_pos_iou=0,\n            ignore_iof_thr=-1),\n        sampler=dict(\n            type='PseudoSampler'),  # Focal loss should use PseudoSampler\n        allowed_border=-1,\n        pos_weight=-1,\n        debug=False),\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.5),\n        max_per_img=100))\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=15, val_interval=1)\nval_cfg = dict(type='ValLoop')\ntest_cfg = dict(type='TestLoop')\n\n# learning rate\nparam_scheduler = [\n    dict(\n        type='LinearLR', start_factor=0.00001, by_epoch=False, begin=0, end=1000),\n    dict(\n        type='MultiStepLR',\n        begin=0,\n        end=12,\n        by_epoch=True,\n        milestones=[8, 11],\n        gamma=0.1)\n]\n# optimizer\noptim_wrapper = dict(\n    type='AmpOptimWrapper',\n    optimizer=dict(\n        type='AdamW', \n        lr=0.000025,  # 原始学习率 0.001 除以累计更新次数 4\n        weight_decay=0.0001\n    )\n)\nauto_scale_lr = dict(enable=False, base_batch_size=16)\noptimizer_config = dict(\n    type='OptimizerHook',\n    grad_clip=dict(max_norm=4096, norm_type=2),  # 设置梯度裁剪\n    cumulative_iters=4  # 累积 4 次梯度更新\n)\n\ndefault_hooks = dict(\n    ### 每隔多少个epoch保存一次模型权重\n    checkpoint=dict(interval=1, max_keep_ckpts=2, save_best='auto'),  # 同时保存最好性能权重\n \n    logger=dict(type='LoggerHook', interval=5))\nload_from = 'https://download.openmmlab.com/mmdetection/v2.0/pvt/retinanet_pvtv2-b2_fpn_1x_coco/retinanet_pvtv2-b2_fpn_1x_coco_20210901_174843-529f0b9a.pth'\nresume_from = None\nworkflow = [('train', 1), ('val', 1)]\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:03:12.505682Z","iopub.execute_input":"2024-12-09T02:03:12.506026Z","iopub.status.idle":"2024-12-09T02:03:12.516433Z","shell.execute_reply.started":"2024-12-09T02:03:12.506000Z","shell.execute_reply":"2024-12-09T02:03:12.514199Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!bash /kaggle/input/mmcv-main/mmdetection-main/tools/dist_train.sh /kaggle/working/configs/wheat/custom_config.py 2\n\nwandb.finish()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-09T02:03:16.765057Z","iopub.execute_input":"2024-12-09T02:03:16.765362Z"}},"outputs":[],"execution_count":null}]}