Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how to test the SP-NAS mAP on COCO with vega #14

Closed
xieenze opened this issue Jul 7, 2020 · 2 comments
Closed

how to test the SP-NAS mAP on COCO with vega #14

xieenze opened this issue Jul 7, 2020 · 2 comments

Comments

@xieenze
Copy link

xieenze commented Jul 7, 2020

how to test the SP-NAS mAP on COCO with vega

@chanyn
Copy link

chanyn commented Jul 9, 2020

how to test the SP-NAS mAP on COCO with vega

how to test the SP-NAS mAP on COCO with vega

Hi, if you want to reproduce the best performance of SP-NAS on COCO, you should get ImageNet pretrained weight of the corresponding model code in the paper (1111-21111-2111111111111111111111111-211-1), and use the following config file to replace config_template in vega/examples/nas/sp_nas/spnas.yml. Uncomment fullytrain, and remove nas1 and nas2. You will get the full training models and the test results.

"""This is the model settings file for SPNet."""
norm_cfg = dict(type='BN', requires_grad=True)
model = dict(
    type='CascadeRCNN',
    num_stages=3,
    pretrained='/efs-hn/pretrained/backbone/SPNetXB_COCO_ImageNetPretrained.pth',
    backbone=dict(
        type='SpNet',
        pretrained_arch='1111-21111-2111111111111111111111111-211-1',
        layers_arch='1111-21111-2111111111111111111111111-211-1',
        mb_arch='1-0-2-1-2',
        reignition=True,
        arch_block='Bottleneck',
        groups=32,    # ResNext block
        base_width=4,    # ResNext block
        num_stages=5,
        strides=(1, 2, 2, 2, 2),
        dilations=(1, 1, 1, 1, 1),
        out_indices=(0, 1, 2, 3, 4),  # if addit_stage=True, num of out_indices + 1
        stage_with_dcn=(False, False, False, False, False),
        stage_with_gcb=(False, False, False, False, False),
        stage_with_gen_attention=((), (), (), (), ()),
        frozen_stages=0,
        norm_cfg=norm_cfg,
        norm_eval=False,
        style='pytorch'),
    neck=dict(
        type='SpFPN',
        in_channels=[256, 512, 1024, 2048, 2048],
        out_channels=256,
        num_outs=6),
    rpn_head=dict(
        type='RPNHead',
        in_channels=256,
        feat_channels=256,
        anchor_scales=[8],
        anchor_ratios=[0.5, 1.0, 2.0],
        anchor_strides=[4, 8, 16, 32, 64, 128],
        target_means=[.0, .0, .0, .0],
        target_stds=[1.0, 1.0, 1.0, 1.0],
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),
    bbox_roi_extractor=dict(
        type='SingleRoIExtractor',
        roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2),
        out_channels=256,
        featmap_strides=[4, 8, 16, 32, 64]),
    bbox_head=[
        dict(
            type='SharedFCBBoxHead',
            num_fcs=2,
            in_channels=256,
            fc_out_channels=1024,
            roi_feat_size=7,
            num_classes=81,
            target_means=[0., 0., 0., 0.],
            target_stds=[0.1, 0.1, 0.2, 0.2],
            reg_class_agnostic=True,
            norm_cfg=norm_cfg,
            loss_cls=dict(
                type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
            loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)),
        dict(
            type='SharedFCBBoxHead',
            num_fcs=2,
            in_channels=256,
            fc_out_channels=1024,
            roi_feat_size=7,
            num_classes=81,
            target_means=[0., 0., 0., 0.],
            target_stds=[0.05, 0.05, 0.1, 0.1],
            reg_class_agnostic=True,
            norm_cfg=norm_cfg,
            loss_cls=dict(
                type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
            loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)),
        dict(
            type='SharedFCBBoxHead',
            num_fcs=2,
            in_channels=256,
            fc_out_channels=1024,
            roi_feat_size=7,
            num_classes=81,
            target_means=[0., 0., 0., 0.],
            target_stds=[0.033, 0.033, 0.067, 0.067],
            reg_class_agnostic=True,
            norm_cfg=norm_cfg,
            loss_cls=dict(
                type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
            loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))
    ],
    mask_roi_extractor=dict(
        type='SingleRoIExtractor',
        roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2),
        out_channels=256,
        featmap_strides=[4, 8, 16, 32, 64]),
    mask_head=dict(
        type='FCNMaskHead',
        num_convs=4,
        in_channels=256,
        conv_out_channels=256,
        num_classes=81,
        norm_cfg=norm_cfg,
        loss_mask=dict(
            type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)))
# model training and testing settings
train_cfg = dict(
    rpn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.7,
            neg_iou_thr=0.3,
            min_pos_iou=0.3,
            ignore_iof_thr=-1),
        sampler=dict(
            type='RandomSampler',
            num=256,
            pos_fraction=0.5,
            neg_pos_ub=-1,
            add_gt_as_proposals=False),
        allowed_border=0,
        pos_weight=-1,
        debug=False),
    rpn_proposal=dict(
        nms_across_levels=False,
        nms_pre=2000,
        nms_post=2000,
        max_num=2000,
        nms_thr=0.7,
        min_bbox_size=0),
    rcnn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.5,
            neg_iou_thr=0.5,
            min_pos_iou=0.5,
            ignore_iof_thr=-1),
        sampler=dict(
            type='RandomSampler',
            num=512,
            pos_fraction=0.25,
            neg_pos_ub=-1,
            add_gt_as_proposals=True),
        pos_weight=-1,
        debug=False))
test_cfg = dict(
    rpn=dict(
        nms_across_levels=False,
        nms_pre=1000,
        nms_post=1000,
        max_num=1000,
        nms_thr=0.7,
        min_bbox_size=0),
    rcnn=dict(
        score_thr=0.05, nms=dict(type='nms', iou_thr=0.5), max_per_img=100)
    # soft-nms is also supported for rcnn testing
    # e.g., nms=dict(type='soft_nms', iou_thr=0.5, min_score=0.05)
)
# dataset settings
dataset_type = 'CocoDataset'
data_root = '/cache/datasets/COCO2017/'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(type='Resize',
         img_scale=(1280, 1280),
         ratio_range=(0.8, 1.2),
         keep_ratio=True),
    dict(type='RandomCrop', crop_size=(1280, 1280)),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=(1280, 1280)),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1280, 1280),
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='Pad', size=(1280, 1280)),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]
data = dict(
    imgs_per_gpu=1,
    workers_per_gpu=4,
    train=dict(
        type=dataset_type,
        ann_file=data_root + 'annotations/instances_train2017.json',
        img_prefix=data_root + 'train2017/',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        ann_file=data_root + 'annotations/instances_val2017.json',
        img_prefix=data_root + 'val2017/',
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        ann_file=data_root + 'annotations/instances_val2017.json',
        img_prefix=data_root + 'val2017/',
        pipeline=test_pipeline))

# optimizer
optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
# learning policy
lr_config = dict(
    policy='step',
    warmup='linear',
    warmup_iters=15000,
    warmup_ratio=0.002,
    step=[30, 40])
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
    interval=500,
    hooks=[
        dict(type='TextLoggerHook'),
        # dict(type='TensorboardLoggerHook')
    ])
# yapf:enable
# runtime settings
total_epochs = 50
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/spnet_coco_cascade_mask'
load_from = None
resume_from = None
workflow = [('train', 1)]

@AyeshaNirma
Copy link

AyeshaNirma commented Jul 23, 2020

@chanyn @zhangjiajin I have two questions

  1. Where can I find SPNetXB_COCO_ImageNetPretrained.pth model ?
  2. When you say remove "nas1 and nas2", you mean just have simply the filed in the bottom fully_train ? My impression is that the following .yml file should be used to train ? is this correct, please kindly let me know.
general:
    worker:
        timeout: 1000
        gpus_per_job: -1

#pipeline: [nas1, nas2]
pipeline: [nas1, nas2, fullytrain]

nas1:
    pipe_step:
        type: SpNasPipeStep

    search_algorithm:
        type: SpNas
        codec: SpNasCodec
        total_list: 'total_list_s.csv'
        sample_level: 'serial'
        max_sample: 10
        max_optimal: 5
        serial_settings:
            num_mutate: 3
            addstage_ratio: 0.05
            expend_ratio: 0.3
            max_stages: 6
        regnition: False
#        last_search_result:

    search_space:
        type: SearchSpace
        config_template_file: "./nas/sp_nas/cascade_rcnn_r50_fpn_1x.py"
        epoch: 5

    trainer:
        type: SpNasTrainer
        gpus: 8
        debug: False

nas2:
    pipe_step:
        type: SpNasPipeStep

    search_algorithm:
        type: SpNas
        codec: SpNasCodec
        total_list: 'total_list_p.csv'
        sample_level: 'parallel'
        max_sample: 10
        max_optimal: 1
        serial_settings:
        last_search_result: 'total_list_s.csv'
        regnition: False

    search_space:
        type: SearchSpace
        config_template_file: "./nas/sp_nas/cascade_rcnn_r50_fpn_1x.py"
        epoch: 5

    trainer:
        type: SpNasTrainer
        gpus: 8
        debug: False


fullytrain:
     pipe_step:
         type: FullyTrainPipeStep

     trainer:
         type: SpNasTrainer
         gpus: 8
         model_desc_file: 'total_list_p.csv'
# #        model_desc: 'r_111-2111-211111-211_0-0-0-0'
         config_template: "./nas/sp_nas/cascade_rcnn_r50_fpn_1x.py"
         regnition: False
         epoch: 12
         debug: False

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants