open-mmlab / mmsegmentation

OpenMMLab Semantic Segmentation Toolbox and Benchmark.
https://mmsegmentation.readthedocs.io/en/main/
Apache License 2.0
8.21k stars 2.6k forks source link

in build_from_cfg raise KeyError( KeyError: '`cfg` or `default_args` must contain the key "type" #3253

Closed rouchoo closed 1 year ago

rouchoo commented 1 year ago

when training, my project can run normally. However, when testing, it reports the error: in build_from_cfg raise KeyError( KeyError: 'cfg or default_args must contain the key "type"

rouchoo commented 1 year ago

i run the segformer model. My config file is following:

norm_cfg = dict(type='BN', requires_grad=True)
data_preprocessor = dict(
    type='SegDataPreProcessor',
    mean=[123.675, 116.28,  103.53, ],
    std=[  58.395,  57.12,  57.375, ],
    bgr_to_rgb=True,
    pad_val=0,
    seg_pad_val=255,
    size=(  512,  512, ))
model = dict(
    type='EncoderDecoder',
    data_preprocessor=dict(
        type='SegDataPreProcessor',
        mean=[ 123.675,  116.28,  103.53, ],
        std=[ 58.395,  57.12, 57.375, ],
        bgr_to_rgb=True,
        pad_val=0,
        seg_pad_val=255,
        size=(  512,  512, )),
    pretrained=None,
    backbone=dict(
        type='MixVisionTransformer',
        in_channels=3,
        embed_dims=64,
        num_stages=4,
        num_layers=[ 3, 8,  27,   3,],
        num_heads=[ 1,   2,  5, 8, ],
        patch_sizes=[  7, 3,  3,  3,  ],
        sr_ratios=[ 8, 4,  2,  1, ],
        out_indices=(   0,   1,   2,   3,  ),
        mlp_ratio=4,
        qkv_bias=True,
        drop_rate=0.0,
        attn_drop_rate=0.0,
        drop_path_rate=0.1,
        init_cfg=dict(    type='Pretrained',    checkpoint=   'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segformer/mit_b4_20220624-d588d980.pth' )),
    decode_head=dict(  type='SegformerHead',   in_channels=[   64,  128,  320, 512,  ], in_index=[   0,   1,   2,    3,  ],
        channels=256,
        dropout_ratio=0.1,
        num_classes=2,
        norm_cfg=dict(type='SyncBN', requires_grad=True),
        align_corners=False,
        loss_decode=dict(   type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)),

    train_cfg=dict(mode='slide', crop_size=(512, 512,), stride=( 128,128)),
    test_cfg=dict(mode='slide', crop_size=(512,512), stride=(128,128)))

dataset_type = 'MyDataset'
data_root = '/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org'
crop_size = (  512,  512,)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', reduce_zero_label=False),
    dict(type='RandomCrop', crop_size=(  512,  512, ), cat_max_ratio=0.75),
    dict(type='RandomFlip', prob=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='PackSegInputs'),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', reduce_zero_label=False),
    dict(type='PackSegInputs'),
]
img_ratios = [
    0.5,
    0.75,
    1.0,
    1.25,
    1.5,
    1.75,
]
tta_pipeline = [
    dict(type='LoadImageFromFile', backend_args=None),
    dict(
        type='TestTimeAug',
        transforms=[
            [
                dict(type='Resize', scale_factor=0.5, keep_ratio=True),
                dict(type='Resize', scale_factor=0.75, keep_ratio=True),
                dict(type='Resize', scale_factor=1.0, keep_ratio=True),
                dict(type='Resize', scale_factor=1.25, keep_ratio=True),
                dict(type='Resize', scale_factor=1.5, keep_ratio=True),
                dict(type='Resize', scale_factor=1.75, keep_ratio=True),
            ],
            [
                dict(type='RandomFlip', prob=0.0, direction='horizontal'),
                dict(type='RandomFlip', prob=1.0, direction='horizontal'),
            ],
            [
                dict(type='LoadAnnotations'),
            ],
            [
                dict(type='PackSegInputs'),
            ],
        ]),
]
train_dataloader = dict(

    batch_size=2,
    num_workers=2,
    persistent_workers=True,
    sampler=dict(type='InfiniteSampler', shuffle=True),
    dataset=dict(
        type='MyDataset',
        data_root='/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org',
        data_prefix=dict(
            img_path='img_dir/train', seg_map_path='ann_dir/train'),
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', reduce_zero_label=False),
            dict(
                type='RandomCrop', crop_size=(
                    512,
                    512,
                ), cat_max_ratio=0.75),
            dict(type='RandomFlip', prob=0.5),
            dict(type='PhotoMetricDistortion'),
            dict(type='PackSegInputs'),
        ]))
val_dataloader = dict(

    batch_size=1,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type='MyDataset',
        data_root='/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org',
        data_prefix=dict(img_path='img_dir/val', seg_map_path='ann_dir/val'),
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', reduce_zero_label=False),
            dict(type='PackSegInputs'),
        ]))
test_dataloader = dict(

    batch_size=1,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type='MyDataset',
        data_root='/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org',
        data_prefix=dict(img_path='img_dir/test', seg_map_path='ann_dir/test'),
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', reduce_zero_label=False),
            dict(type='PackSegInputs'),
        ]))
val_evaluator = dict(
    type='IoUMetric', iou_metrics=[
        'mIoU',
    ])
test_evaluator = dict(
    batch_size=1,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type='MyDataset',
        data_root='/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org',
        data_prefix=dict(img_path='img_dir/test', seg_map_path='ann_dir/test'),
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', reduce_zero_label=False),
            dict(type='PackSegInputs'),
        ]))
default_scope = 'mmseg'
env_cfg = dict(
    cudnn_benchmark=True,
    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),
    dist_cfg=dict(backend='nccl'))
vis_backends = [
    dict(type='LocalVisBackend'),
]
visualizer = dict(
    type='SegLocalVisualizer',
    vis_backends=[
        dict(type='LocalVisBackend'),
    ],
    name='visualizer')
log_processor = dict(by_epoch=False)
log_level = 'INFO'
load_from = None
resume = '/home/rouch/PycharmProjects/mseg1x/result/segb4/last_checkpoint'
tta_model = dict(type='SegTTAModel')
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005)
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(
        type='AdamW', lr=6e-05, betas=(
            0.9,
            0.999,
        ), weight_decay=0.01),
    paramwise_cfg=dict(
        custom_keys=dict(
            pos_block=dict(decay_mult=0.0),
            norm=dict(decay_mult=0.0),
            head=dict(lr_mult=10.0))))
param_scheduler = [
    dict(
        type='LinearLR', start_factor=1e-06, by_epoch=False, begin=0,
        end=1500),
    dict(
        type='PolyLR',
        eta_min=0.0,
        power=1.0,
        begin=1500,
        end=160000,
        by_epoch=False),
]
train_cfg = dict(
    type='IterBasedTrainLoop', max_iters=120000, val_interval=10000)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')
default_hooks = dict(
    timer=dict(type='IterTimerHook'),
    logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False),
    param_scheduler=dict(type='ParamSchedulerHook'),
    checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=40000),
    sampler_seed=dict(type='DistSamplerSeedHook'),
    visualization=dict(type='SegVisualizationHook'))
checkpoint = 'https://download.openmmlab.com/mmsegmentation/v0.5/pretrain/segformer/mit_b4_20220624-d588d980.pth'
launcher = 'none'
work_dir = '/home/rouch/PycharmProjects/mseg1x/result/segb4'
rouchoo commented 1 year ago

the version of mmcv and mmsegmentstion is:

WeChat087551ad234aec6f76cef1c8245ee8d9 WeChat65c1f80e72f2040a0f0274794debcd94
xiexinch commented 1 year ago

Hi @Lenleooo, Could you provide a full error log? This error usually means that there are some errors in the config.

rouchoo commented 1 year ago

Hi @Lenleooo, Could you provide a full error log? This error usually means that there are some errors in the config.

thanks for your attention. Here it is:

45481691593300_ pic_hd

rouchoo commented 1 year ago

it seems that the parameter cfg in build_from_cfg(cfg, registry, default_args) from build_functions.py lacks the key "type". But i do not know how to set. Please help! Thanks!

rouchoo commented 1 year ago

when i add "type=None," in test_dataloader from segformer_mit-b4_8xb2-160k_ade20k-512x512.py, the bug disappears, But the new problem appears:

5403348C-3164-41E9-B345-B64D1C4CA3D8
xiexinch commented 1 year ago

Hi @Lenleooo, The test_evaluator in your config is incorrect:

test_evaluator = dict(
    batch_size=1,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type='MyDataset',
        data_root='/home/rouch/leaf_vein_all_datasets/leafvein_cut_T_org',
        data_prefix=dict(img_path='img_dir/test', seg_map_path='ann_dir/test'),
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(type='LoadAnnotations', reduce_zero_label=False),
            dict(type='PackSegInputs'),
        ]))

You might modify it to:

test_evaluator = dict(
    type='IoUMetric', iou_metrics=[
        'mIoU',
    ])
rouchoo commented 1 year ago

Thanks for your help. It works.