Pular para o conteúdo principal

Configuração

SSCMA usa o sistema de processamento de configuração fornecido por OpenMMLab - MMEngine com um design modular e herdável que oferece aos usuários uma interface unificada de acesso à configuração para vários testes e validações de diferentes redes neurais.

Estrutura de Diretórios​

Os arquivos de configuração usados pelo SSCMA estão localizados no diretório configs, que são usados para treinar diferentes modelos em diferentes tarefas. E nós criamos muitas subpastas de acordo com diferentes tarefas, e em cada subpasta são armazenados diferentes parâmetros de pipeline de treinamento de múltiplos modelos.

configs
├── _base_
│ ├── datasets
│ │ └── coco_detection.py
│ ├── default_runtime_cls.py
│ ├── default_runtime_det.py
│ ├── default_runtime_pose.py
│ └── schedules
│ ├── schedule_1x.py
│ ├── schedule_20e.py
│ └── schedule_2x.py
├── classification
│ ├── base.py
│ ├── mobnetv2_1.0_1bx16_300e_custom.py
│ └── mobnetv3_small_1bx16_300e_custom.py
├── fomo
│ ├── fomo_efficientnet_b0_x8_abl_coco.py
│ ├── fomo_mobnetv2_0.35_x8_abl_coco.py
│ └── fomo_squeezenet_0.1_x8_abl_coco.py
├── pfld
│ ├── pfld_dan_fpn_x8_192.py
│ ├── pfld_mbv2n_112.py
│ ├── pfld_mbv3l_192.py
│ └── README.md
└── swift_yolo
├── base_arch.py
└── swift_yolo_tiny_1xb16_300e_coco.py
└── <Other Tasks...>
dica

A pasta de tarefa chamada _base_ é um objeto de herança para outras tarefas. Para mais detalhes sobre herança de arquivos de configuração, consulte MMEngine - Configuration File Inheritance.

Estrutura da Configuração​

Tomando o arquivo de configuração fomo_mobnetv2_0.35_x8_abl_coco.py como exemplo, apresentamos diferentes campos neste arquivo de configuração de acordo com os diferentes módulos funcionais.

Parâmetros Importantes​

Ao alterar a configuração de treinamento, geralmente é necessário modificar os seguintes parâmetros. Por exemplo, os fatores height e width são geralmente para o tamanho da imagem. Portanto, recomendamos definir esses parâmetros separadamente no arquivo de configuração.

height=96       # Input image height
width=96 # Input image width
batch_size=16 # Batch size of a single GPU during validation
workers=4 # Worker to pre-fetch data for each single GPU during validation
epoches=300 # Maximum training epochs: 300 epochs
lr=0.001 # Learn rate

Configuração do Modelo​

No arquivo de configuração do modelo FOMO, usamos model para configurar os componentes do algoritmo de detecção, incluindo componentes de rede neural como backbone, neck, etc. Parte da configuração do modelo é mostrada abaixo:

num_classes=2                                   # Number of class
model=dict(
type='Fomo', # The name of detector
backbone=dict(
type='MobileNetV2',
widen_factor=0.35,
out_indices=(2, )), # The config of backbone
head=dict(
type='Fomo_Head', # The config of head
input_channels=16, # The input channels, this is consistent with the input channels of neck
num_classes=num_classes, # Number of classes for classification
middle_channels=[96, 32], # The output channels for head conv
act_cfg='ReLU6', # The config of activation function
loss_cls=dict(type='BCEWithLogitsLoss', # This loss combines a Sigmoid layer and the BCELoss in one single class
reduction='none',
pos_weight=40),
loss_bg=dict(type='BCEWithLogitsLoss', reduction='none'),
cls_weight=40) # Parameter for pos_weight
)

Configuração de Dataset e Avaliador​

Dataset e pipeline de dados precisam ser configurados para construir o dataloader. Devido à complexidade desta parte, usamos variáveis intermediárias para simplificar a escrita das configurações de dataloader. Métodos de argumentação de dados mais complexos podem ser encontrados no caminho sscma/datasets/pipelines.

Mostraremos aqui o pipeline de treinamento e teste para FOMO, que usa o Dataset Custom COCO_MASK:

dataset_type='FomoDatasets'   # Dataset type, this will be used to define the dataset
data_root='' # Root path of data
train_pipeline=[ # Training data loading pipeline
dict(type='RandomResizedCrop', height=height, width=width, scale=(0.90, 1.1),
p=1), # RandomResizedCrop augmentation in albumentation for fomo
dict(type='Rotate', limit=20), # Rotate transform with limit degree 20
dict(type='RandomBrightnessContrast', # RandomBrightnessContrast augmentation in albumentation
brightness_limit=0.2, # Factor range for changing brightness
contrast_limit=0.2, # Factor range for changing contrast
p=0.5), # Probability of applying the transform
dict(type='HorizontalFlip', p=0.5), # Flip the input horizontally around the y-axis
]
test_pipeline=[dict(type='Resize', height=height, width=width,
p=1)] # Resize the input to the given height and width

data=dict(samples_per_gpu=batch_size, # Batch size of a single GPU during training
workers_per_gpu=workers, # Worker to pre-fetch data for each single GPU during training
train_dataloader=dict(collate=True), # Flag of merging a list of samples to form a mini-batch
val_dataloader=dict(collate=True),
train=dict(type=dataset_type,
data_root=data_root,
ann_file='annotations/person_keypoints_train2017.json',
img_prefix='train2017', # Path of annotation file and prefix of image path
pipeline=train_pipeline),
val=dict(type=dataset_type,
data_root=data_root,
test_mode=True, # Enable test mode of the dataset to avoid filtering annotations or images
ann_file='annotations/person_keypoints_val2017.json',
img_prefix='val2017',
pipeline=test_pipeline),
test=dict(type=dataset_type,
data_root=data_root,
test_mode=True,
ann_file='annotations/person_keypoints_val2017.json',
img_prefix='val2017',
pipeline=test_pipeline))

Os avaliadores são usados para calcular as métricas do modelo treinado nos conjuntos de dados de validação e teste. A configuração dos avaliadores consiste em uma ou uma lista de configurações de métricas:

evaluation=dict(interval=1, metric=['mAP'], fomo=True) # Validation metric for evaluate mAP
find_unused_parameters=True

Configuração do Otimizador​

optimizer=dict(type='Adam', lr=lr, weight_decay=0.0005)         # Adam gradient descent optimizer with base learning rate and weight decay
optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2)) # Config used to build the optimizer hook
dica

Para mais detalhes sobre a aplicação de Hook, consulte MMEngine - Hook.

Herança de Arquivo de Configuração​

O diretório config/_base_ contém o arquivo de configuração padrão, e o arquivo de configuração é composto pelos componentes em _base_, o que é chamado de primitivo.

Para facilitar os testes, recomendamos que os usuários herdem os arquivos de configuração existentes. Por exemplo, o arquivo de configuração de treinamento de um modelo FOMO com _base_='. /_base_/default_runtime_det.py', e então, com base no arquivo herdado, modificamos os campos necessários no arquivo de configuração.

_base_='../_base_/default_runtime_det.py
checkpoint_config=dict(interval=5) # Config to set the checkpoint hook
log_config=dict( # Config to register logger hook
interval=150, # Interval to print the log
hooks=[
dict(type='TextLoggerHook', ndigits=4), # TXT logger
dict(type='TensorboardLoggerHook', ndigits=4) # Tensorboard logger
]) # The logger used to record the training process
epochs=300
runner=dict(type='EpochBasedRunner', # Type of runner to use (i.e. IterBasedRunner or EpochBasedRunner)
max_epochs=epochs) # Runner that runs the workflow in total max_epochs. For IterBasedRunner use `max_iters`
dist_params=dict(backend='nccl') # Parameters to setup distributed training, the port can also be set
log_level = 'INFO' # The level of logging
load_from = None # Load models as a pre-trained model from a given path, this will not resume training
resume_from = None # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved
workflow = [('train', 1)] # Workflow for runner. [('train', 1)] means there is only one workflow and the workflow named 'train' is executed once. The workflow trains the model by 300 epochs according to the total_epochs
opencv_num_threads = 1 # Disable OpenCV multi-threads to save memory
work_dir = './work_dirs' # Directory to save the model checkpoints and logs for the current experiments

Configuração Parametrizada​

Ao enviar um job usando tools/train.py ou tools/test.py do SSCMA, você pode especificar --cfg-options para sobrescrever temporariamente a configuração.

dica

Você pode especificar opções de configuração na ordem das chaves do dicionário na configuração original e atualizar a cadeia de dicionários das chaves de configuração. Por exemplo, --cfg-options data_root='. /dataset/coco' altera o diretório raiz de dados do conjunto de dados.

FAQs​

Loading Comments...