1.按照指定评价指标保存最优模型

修改配置文件中default_hooks中的checkpoint字段,具体例子如下:

default_hooks = dict(
    checkpoint=dict(
        interval=1,  # 验证间隔
        max_keep_ckpts=1,  # 最多保存多少个权重文件
        save_best='coco/bbox_mAP_50',  # 按照该指标保存最优模型
        type='CheckpointHook'),
    ...)

2.使用tensorboard可视化训练过程

vis_backends = [dict(type='LocalVisBackend'),
                dict(type='TensorboardVisBackend')  # 使用tensorboard
                ]

3.根据指定指标的变化自适应调整学习率

param_scheduler = [
    dict(
        begin=0,
        by_epoch=True,
        end=1000,
        monitor='coco/bbox_mAP_50',  # 参考的指标
        rule='greater',  # 指标变化的评估规则
        factor=0.8,  # 学习率衰减系数
        patience=20,  # 20 epoch参考指标不再变化则进行衰减学习率
        type='ReduceOnPlateauLR'
    )
]

4.早停策略

default_hooks = dict(
...

earlystop=dict(
monitor='coco/bbox_mAP_50',   # 参考的指标
min_delta=0, 
rule='greater',   # 指标变化规则
patience=50,   # 参考指标50 epoch没有提升则停止训练
type='EarlyStoppingHook')

...
)

 最近使用早停策略训练DDQ踩了一个大坑:min_delta参数默认是0.1,源码中每次得到验证集指标之后,之前的最优指标best_score会加上min_delta,然后与当前指标current_socre进行比较,如果best_score + min_delta < current_scorebest_score才会更新成current_score,但是0.1对于mAP50而言过大,相当于10个点的提升,也就是说,如果使用min_delta默认值,则在指定的patience个epoch中,mAP50没有提升10个点,就会停止训练,并且最后日志输出记录的最优指标是第一次验证得到的指标。但checkpointhook仍会正常工作,保存该过程中指标最高的模型权重。因此建议指定min_delta=0

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐