mmselfSup entrena su propio conjunto de datos

mmselfsup entrena tu propio conjunto de datos

       He estado trabajando en el aprendizaje autosupervisado recientemente, utilizando datos sin etiquetar como modelo de preentrenamiento. Me gustaría compartirlo. Perdóneme si no está bien escrito.

        Dirección de mmselfsup: https://github.com/open-mmlab/mmselfsup

       Documentación relacionada: ¡Bienvenido a la documentación de MMSelfSup! — Documentación de MMSelfSup 0.10.1

1. Configuración del entorno

1. Crea un entorno virtual

si crea --name openmmlab python=3.8 -y

Activar el entorno virtual:

conda activar openmmlab

2. Instale pytorch, torchvision

Instale la versión correspondiente según su propia configuración.

pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 -f  https://download.pytorch.org/whl/torch_stable.html

O descargar manualmente, dirección: https://download.pytorch.org/whl/torch_stable.html

3. Descargue I  MMEngine  y  MMCV

instalación de pip -U openmim 
mim install mmengine 
mim install 'mmcv>=2.0.0rc1'

4. Descargue mmselfSup y compile

git clone https://github.com/open-mmlab/mmselfsup.git 
cd mmselfsup 
git checkout 1.x 
pip install -v -e.

2. Entrenamiento del modelo autosupervisado ( SimCLR )

1. Construya un conjunto de datos

La estructura del conjunto de datos es datasetdir->{namedirs}->pics

 2. Escriba el archivo de configuración para el preentrenamiento autosupervisado del modelo.

Cree un nuevo  simclr_resnet50_1xb32-coslr-1e_tinyin200.py archivo de configuración llamado

Crea una ubicación personalizada, la mía es: configs/selfsup/simclr

escribir

_base_ = [
    '../_base_/models/simclr.py',
    # '../_base_/datasets/imagenet_mae.py',  # removed
    '../_base_/schedules/lars_coslr-200e_in1k.py',
    '../_base_/default_runtime.py',
]

# custom dataset
dataset_type = 'mmcls.CustomDataset'
data_root = 'data/custom_dataset/' #数据集路径
file_client_args = dict(backend='disk')
view_pipeline = [
    dict(type='RandomResizedCrop', size=224, backend='pillow'),
    dict(type='RandomFlip', prob=0.5),
    dict(
        type='RandomApply',
        transforms=[
            dict(
                type='ColorJitter',
                brightness=0.8,
                contrast=0.8,
                saturation=0.8,
                hue=0.2) 
        ],
        prob=0.8),
    dict(
        type='RandomGrayscale',
        prob=0.2,
        keep_channels=True,
        channel_weights=(0.114, 0.587, 0.2989)),
        dict(type='RandomGaussianBlur', sigma_min=0.1, sigma_max=2.0, prob=0.5),
]
train_pipeline = [
    dict(type='LoadImageFromFile', file_client_args=file_client_args),
    dict(type='MultiView', num_views=2, transforms=[view_pipeline]),
    dict(type='PackSelfSupInputs', meta_keys=['img_path'])
]
train_dataloader = dict(
    batch_size=32, 
    num_workers=4,
    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.txt',
        data_prefix=dict(img_path='./'),
        pipeline=train_pipeline))
# optimizer
optimizer = dict(type='LARS', lr=0.3, momentum=0.9, weight_decay=1e-6)
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=optimizer,
    paramwise_cfg=dict( 
            custom_keys={
            'bn': dict(decay_mult=0, lars_exclude=True),
            'bias': dict(decay_mult=0, lars_exclude=True),
            # bn layer in ResNet block downsample module
            'downsample.1': dict(decay_mult=0, lars_exclude=True),
}))
# runtime settings
default_hooks = dict(
    # only keeps the latest 3 checkpoints
    checkpoint=dict(type='CheckpointHook', interval=10, max_keep_ckpts=3))
3. Escriba el archivo de configuración previo al entrenamiento de datos (mae)

Cree un nuevo  selfsup_mae.py archivo de configuración llamado

La nueva ubicación está personalizada, la mía es: configs/selfsup/_base_/datasets

escribir

_base_ = [
    '../_base_/models/mae_vit-base-p16.py',

   # '../_base_/datasets/imagenet_mae.py',  # removed'

    ../_base_/schedules/adamw_coslr-200e_in1k.py',
    '../_base_/default_runtime.py',
]

#<<<<<<<  modified <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# custom dataset
dataset_type = 'mmcls.CustomDataset'

data_root = 'data/sbu/' #数据集地址
file_client_args = dict(backend='disk')

train_pipeline = [
    dict(type='LoadImageFromFile', file_client_args=file_client_args),

    dict(
        type='RandomResizedCrop',
        size=224,
        scale=(0.2, 1.0),

        backend='pillow',
        interpolation='bicubic'),
    dict(type='RandomFlip', prob=0.5),

   dict(type='PackSelfSupInputs', meta_keys=['img_path'])

]

# dataset 8 x 512

train_dataloader = dict(
    batch_size=512,

    num_workers=8,
    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.txt', # removed if you don't have the annotation file

        data_prefix=dict(img_path='./'),
        pipeline=train_pipeline))

# optimizer wrapper

optimizer = dict(
    type='AdamW', lr=1.5e-4 * 4096 / 256, betas=(0.9, 0.95), weight_decay=0.05)

optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=optimizer, 

    paramwise_cfg=dict(
        custom_keys={
            'ln': dict(decay_mult=0.0),

            'bias': dict(decay_mult=0.0),
            'pos_embed': dict(decay_mult=0.),

            'mask_token': dict(decay_mult=0.),
            'cls_token': dict(decay_mult=0.)

}))

# learning rate scheduler

param_scheduler = [
    dict(
        type='LinearLR',

       start_factor=1e-4,
        by_epoch=True,
        begin=0,
        end=40,

        convert_to_iter_based=True),
    dict(
        type='CosineAnnealingLR', 

       T_max=360,
        by_epoch=True,
        begin=40,
        end=400,       

       convert_to_iter_based=True)
]

# runtime settings
# pre-train for 400 epochs

train_cfg = dict(max_epochs=400) #训练次数
default_hooks = dict(

    logger=dict(type='LoggerHook', interval=100),

    # only keeps the latest 3 checkpoints

    checkpoint=dict(type='CheckpointHook', interval=1, max_keep_ckpts=3))

# randomness
randomness = dict(seed=0, diff_rank_seed=True)

resume = True

4. Iniciar el programa de formación

parámetro

tren

 resultado

Supongo que te gusta

Origin blog.csdn.net/qq_41980080/article/details/127727598
Recomendado
Clasificación