微调模型
在飞椅和3d飞物数据集上的光流预训练模型可以很好的应用在其他数据集上
此篇将说明如何在在标准数据集上训练模型
确定训练计划
从默认计划中微调超参数,通常需要更小的学习率和更少的迭代次数
# optimizer使用adam优化器
optimizer = dict(type='Adam', lr=1e-5, weight_decay=0.0004, betas=(0.9, 0.999))
optimizer_config = dict(grad_clip=None)
# learning policy
lr_config = dict(
policy='step',
by_epoch=False,
gamma=0.5,
step=[
45000, 65000, 85000, 95000, 97500, 100000, 110000, 120000, 130000,
140000
])
runner = dict(type='IterBasedRunner', max_iters=150000)
checkpoint_config = dict(by_epoch=False, interval=10000)
evaluation = dict(interval=10000, metric='EPE')
使用预训练模型
使用load_from
加载一个预训练模型
# use the pre-trained model for the whole PWC-Net
load_from = 'https://download.openmmlab.com/mmflow/pwcnet/pwcnet_8x1_sfine_flyingthings3d_subset_384x768.pth' # model path can be found in model zoo
在单gpu上训练
在tools/train.py中启动gpu训练
python tools/train.py \
${CONFIG_FILE} \
[optional arguments]
在训练区间,日志文件和检查点保存在工作目录,可以使用work_dir
配置工作路径
训练参数
--resume-from ${checkpoint_file}
:引入检查点文件--cfg-option
:重写一些设置
resume-from 和load_from的区别
- resume-from加载模型权重、优化器参数、迭代器也是从检查点文件继承下来的,通常用于恢复意外中断的训练过程
- load-from只加载模型权重文件,迭代从0开始,用于微调
标题在多个GPU上训练
sh tools/dist_train.sh \
${CONFIG_FILE} \
${GPU_NUM} \
[optional arguments]
在单个gpu上启动多个任务
如果想在一台机器上启动多个任务,比如用8GPU机器中的4个GPU上训练两个任务,需要修改不同的端口以免GPU互相通信
如果使用dist_train.sh训练多任务可以使用
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 sh tools/dist_train.sh ${CONFIG_FILE} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 sh tools/dist_train.sh ${CONFIG_FILE} 4