MMSelfSup 自监督学习框架配置系统详解
概述
MMSelfSup 是一个基于 PyTorch 的自监督学习框架,其配置系统采用了模块化和继承的设计理念,使得实验配置更加灵活和高效。本文将深入解析 MMSelfSup 的配置系统,帮助用户更好地理解和使用这一框架。
配置文件命名规范
MMSelfSup 采用了一套清晰的配置文件命名规范,文件名由四部分组成:
{算法信息}_{模块信息}_{训练信息}_{数据信息}.py
1. 算法信息
算法信息部分包含算法名称及其版本信息,例如:
simclr
- SimCLR 算法mocov2
- MoCo v2 算法relative-loc
- 相对位置预测算法
2. 模块信息
模块信息主要描述模型结构,包括:
- 主干网络:如
resnet50
、vit-base-p16
- 颈部结构:如
mocov2neck
- 头部结构:如
contrastivehead
- 损失函数:如
crossentropyloss
3. 训练信息
训练信息包含训练相关的参数:
- 批量大小:如
8xb32
表示 8 个 GPU,每个 GPU 32 个样本 - 训练策略:如
coslr
表示余弦学习率衰减 - 训练轮数:如
200e
表示训练 200 个 epoch
4. 数据信息
数据信息描述数据集和输入尺寸:
in1k
- ImageNet-1K 数据集,默认 224x224 输入in1k-384
- ImageNet-1K 数据集,384x384 输入cifar10
- CIFAR-10 数据集
示例解析
以 swav_resnet50_8xb32-mcrop-2-6-coslr-200e_in1k-224-96.py
为例:
swav
:SWAV 算法resnet50
:ResNet50 主干网络8xb32-mcrop-2-6-coslr-200e
:8 GPU,批量 32,多裁剪(2+6),余弦学习率,200 epochin1k-224-96
:ImageNet-1K 数据集,224x224 和 96x96 输入
配置文件结构
MMSelfSup 的配置文件采用模块化设计,主要包含四个基础部分:
- 模型配置:定义模型结构、损失函数等
- 数据集配置:定义数据加载、预处理等
- 训练计划:定义优化器、学习率策略等
- 运行时配置:定义日志、检查点等
配置继承机制
MMSelfSup 支持配置文件的继承,用户可以通过 _base_
字段继承现有配置,只需修改需要的部分即可创建新配置。例如:
_base_ = './mocov2_resnet50_8xb32-coslr-200e_in1k.py'
# 修改训练轮数为 800
param_scheduler = [
dict(type='CosineAnnealingLR', T_max=800, by_epoch=True, begin=0, end=800)
]
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=800)
高级配置技巧
- 使用中间变量:将常用配置定义为变量,提高可读性和复用性
dataset_type = 'mmcls.ImageNet'
data_root = 'data/imagenet/'
train_pipeline = [...]
- 删除基类配置:使用
_delete_=True
完全替换基类中的某些配置
model = dict(
neck=dict(
_delete_=True,
type='MoCoV2Neck',
...))
- 复用基类变量:使用
{{_base_.xxx}}
引用基类中的变量
model = dict(
head=dict(num_classes={{_base_.num_classes}}))
运行时配置修改
MMSelfSup 支持在运行脚本时动态修改配置:
python tools/train.py config.py --cfg-options model.backbone.norm_eval=False
可以修改:
- 字典键值:
data.train.pipeline.1.flip_prob=0.0
- 列表/元组:
param_scheduler="[dict(type='LinearLR',...)]"
跨代码库模块导入
当需要使用其他 OpenMMLab 代码库中的模块时,可以在配置中添加:
custom_imports = dict(
imports=['mmcls.datasets', 'mmcls.models'],
allow_failed_imports=False)
总结
MMSelfSup 的配置系统通过模块化设计和继承机制,提供了极大的灵活性。理解其命名规范和结构设计,可以帮助用户快速构建和修改实验配置,提高研究效率。建议用户在创建新配置时遵循相同的规范,保持项目的一致性和可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考