open-mmlab / mmpretrain

OpenMMLab Pre-training Toolbox and Benchmark
https://mmpretrain.readthedocs.io/en/latest/
Apache License 2.0
3.37k stars 1.05k forks source link

[Bug] error while training the HRNet model #1543

Open alaa-shubbak opened 1 year ago

alaa-shubbak commented 1 year ago

Branch

main branch (mmpretrain version)

Describe the bug

i am trying to pretrain the HRNet model on my custom dataset.

I ran this command : python tools/train.py configs/hrnet/hrnet-w32_4xb32_ACID_part.py --work-dir train_dir/just_test/hrnet-w32_ACID_part/

my dataset consist of one class ,and only training set, there is no test and val.

I got this error message:

Traceback (most recent call last):
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 122, in build_from_cfg
    obj = obj_cls(**args)  # type: ignore
TypeError: __init__() got an unexpected keyword argument 'batch_augments'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 122, in build_from_cfg
    obj = obj_cls(**args)  # type: ignore
  File "/scratch/shubbak/mmpretrain/mmpretrain/models/classifiers/image.py", line 61, in __init__
    data_preprocessor = MODELS.build(data_preprocessor)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/registry.py", line 548, in build
    return self.build_func(cfg, *args, **kwargs, registry=self)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 250, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 144, in build_from_cfg
    raise type(e)(
TypeError: class `SelfSupDataPreprocessor` in mmpretrain/models/utils/data_preprocessor.py: __init__() got an unexpected keyword argument 'batch_augments'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tools/train.py", line 160, in <module>
    main()
  File "tools/train.py", line 153, in main
    runner = Runner.from_cfg(cfg)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/runner/runner.py", line 439, in from_cfg
    runner = cls(
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/runner/runner.py", line 406, in __init__
    self.model = self.build_model(model)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/runner/runner.py", line 813, in build_model
    model = MODELS.build(model)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/registry.py", line 548, in build
    return self.build_func(cfg, *args, **kwargs, registry=self)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 250, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/shubbak/pose_env2/lib/python3.8/site-packages/mmengine/registry/build_functions.py", line 144, in build_from_cfg
    raise type(e)(
TypeError: class `ImageClassifier` in mmpretrain/models/classifiers/image.py: class `SelfSupDataPreprocessor` in mmpretrain/mod
``els/utils/data_preprocessor.py: __init__() got an unexpected keyword argument 'batch_augments'`

Environment

{'sys.platform': 'linux',
'Python': '3.9.10 (main, Mar 4 2022, 13:58:45) [GCC 8.4.0]',
'CUDA available': True,
'numpy_random_seed': 2147483648,
'GPU 0': 'Tesla V100-SXM2-32GB',
'CUDA_HOME': '/usr/local/cuda',
'NVCC': 'Cuda compilation tools, release 12.1, V12.1.105',
'GCC': 'gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)',
'PyTorch': '1.10.0+cu111',
'TorchVision': '0.11.0+cu111',
'OpenCV': '4.6.0',
'MMEngine': '0.7.2',
'MMCV': '2.0.0',
'MMPreTrain': '1.0.0rc7+e80418a'}

Other information

i modified the config file of hrnet model as bellow :

image

my dataset (ACID_part_n.py) file contains the following lines

dataset_type = 'CustomDataset'
data_root = '/work/shubbak/datasets/ACID_mmpose/'
data_preprocessor = dict(
    type='SelfSupDataPreprocessor',
    mean=[123.675, 116.28, 103.53],
    std=[58.395, 57.12, 57.375],
    to_rgb=True)

view_pipeline = [
   dict(
        type='RandomResizedCrop',
        scale=224,
        crop_ratio_range=(0.2, 1.),
        backend='pillow'),
    dict(
        type='RandomApply',
        transforms=[
            dict(
                type='ColorJitter',
                brightness=0.4,
                contrast=0.4,
                saturation=0.4,
                hue=0.1)
        ],
        prob=0.8),
   dict(
        type='RandomGrayscale',
        prob=0.2,
        keep_channels=True,
        channel_weights=(0.114, 0.587, 0.2989)),
    dict(
        type='GaussianBlur',
        magnitude_range=(0.1, 2.0),
        magnitude_std='inf',
        prob=0.5),
    dict(type='RandomFlip', prob=0.5),
 ]

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='MultiView', num_views=2, transforms=[view_pipeline]),
    dict(type='PackInputs')
]

train_dataloader = dict(
    batch_size=32,
    num_workers=8,
    drop_last=True,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=True),
    collate_fn=dict(type='default_collate'),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        ann_file='meta/train_ACID_mmself.txt',
        data_prefix=dict(img_path='train/'),
        with_label=True,
        #classes=['A', 'B', 'C', 'D', ...],
        classes=['Excavator', ],
        pipeline=train_pipeline))
Ezra-Yu commented 1 year ago

data_preprocessor = dict( type='SelfSupDataPreprocessor', mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)

If you train a classification model, just use original data_preprocessor.

data_preprocessor = dict(
    mean=[123.675, 116.28, 103.53],
    std=[58.395, 57.12, 57.375],
    to_rgb=True)
alaa-shubbak commented 1 year ago

what about using HRnet backbone on self-supervised approach ? for example use it within the simclr model .

I am trying to do so , and got some error on this issue

error is : raise ValueError( ValueError: Input dimension should be at least 3 any suggestion? please.