天辰平台注册登录导航站
 
 

MMDetection-运行时

浏览:次    发布日期:2024-04-15

在之前的文章中,已经介绍了配置文件、数据、模型等方面的内容,在配置文件那篇文章中其实简单介绍了部分运行时相关的内容,本文将详细展开。需要说明的时,官方是将runtime与schedule区分开的,不过从配置继承的角度来看,它们可以放到一起,因此本文都将其视为运行时配置

自定义优化器

MMDetection支持所有的PyTorch定义的优化器(optimizer),如果想要使用某个优化器只需要修改配置文件中字段即可,比如想要使用Adam优化器则在配置文件中写入下面一行。

 

当然,往往我们需要使用自己实现的优化器,那么按照规范,需要在项目根目录下的下创建自定义的Python脚本,如文件并写入如下内容,创建自定义的方式和PyTorch中类似,只是需要注册为MMDetection识别的OPTIMIZERS即可。

 

然后,为了能够在配置文件中找到这个优化器,需要在文件中导入该优化器,也就是添加下面的一行内容。

 

此时,就可以在配置文件中修改字段来使用自定义的优化器了,示例如下。

 

除了自定义优化器,我们有时候还需要对优化器进行一些额外配置,这是官方优化器并没有实现的功能,就需要通过optimizer constructor(优化器构建器)来实现,常用的一些trick如下。

  • 梯度裁剪

    在配置文件中添加如下字段,其中的grad_clip参数控制梯度裁剪。

     
  • 动量调度

    MMDetection支持依据学习率动态调整动量使得训练收敛加快,示例如下。

     

自定义训练调度

默认情况下,我们使用的是中的调度设置,这是默认的Step LR调度,在MMCV中为,同时MMDetection也支持其他的调度器,如余弦调度(),在配置文件中及那个字段修改如下即可使用余弦调度。

 

自定义工作流

在MMDetection中,工作流决定整体的工作流程(包括运行顺序和轮数),它是一个元素格式为的列表。默认情况下其设置为,这表示仅仅运行一轮训练,常常我们需要在验证集上评估模型的泛化能力(通过计算某些metric),此时可以设置工作流为,这样就会迭代进行一轮训练一轮验证。需要注意的是,这里控制的只是一次操作,也就是说,它是不能控制整个调度的,如表示每训练两轮进行一轮验证。

此外还需要注意,验证时不会更新模型参数,且我们是通过字段控制训练总伦数的,这不会影响验证工作流的进行。

Hook

自定义Hook的内容可以参考MMCV的教程,这里不多赘述,介绍几个常用的Hook,它们由MMCV定义,只需要在配置文件中添加对应内容即可应用。比如我们想要在配置中使用MMCV自定义的来检查head中的是否匹配中的长度,那么可以在 中添加如下字段。

此外,还有不少常用的hook没有注册在中,主要有如下的几种。

  • log_config
  • checkpoint_config
  • evaluation
  • lr_config
  • optimizer_config
  • momentum_config

其中,、和上文已经涉及了,这里不再介绍,介绍剩下的三个的作用。

Checkpoint config来源于MMCV中的,用于控制模型参数的本地保存,可以在配置文件中添加如下字段来设置,其中常用的参数有三个,表示保存频率(多少轮进行一次保存),表示是否保存优化器参数,表示最大保存数目(常常我们只需要最后的几个模型,不需要所有轮的)。

 

log_config是很多logger hooks的包装器并且统一设置保存频率(同上),用于训练记录日志的保存,目前MMCV支持了三种、和,默认MMDetection设置的日志记录配置如下,只以文本的方式记录训练日志,建议打开Tensorboard记录。

 

evaluation字段用来初始化控制模型的评估,除了上面的外,你还需要设置如评估指标来传递给方法, 默认的评估设置如下。

 
 

本文介绍了MMDetection中运行时相关的配置,官方教程也有对应。最后,如果我的文章对你有所帮助,欢迎点赞收藏评论一键三连,你的支持是我不懈创作的动力。

平台注册入口