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