日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MMDetection-运行时

發布時間:2024/4/11 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MMDetection-运行时 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

在之前的文章中,已經介紹了配置文件、數據、模型等方面的內容,在配置文件那篇文章中其實簡單介紹了部分運行時相關的內容,本文將詳細展開。需要說明的時,官方是將runtime與schedule區分開的,不過從配置繼承的角度來看,它們可以放到一起,因此本文都將其視為運行時配置

運行時定制

自定義優化器

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

optimizer = dict(type='Adam', lr=0.0003, weight_decay=0.0001)

當然,往往我們需要使用自己實現的優化器,那么按照規范,需要在項目根目錄下的mmdet/core/optimizer/下創建自定義的Python腳本,如mmdet/core/optimizer/my_optimizer.py文件并寫入如下內容,創建自定義MyOptimizer的方式和PyTorch中類似,只是需要注冊為MMDetection識別的OPTIMIZERS即可。

from .registry import OPTIMIZERS from torch.optim import Optimizer@OPTIMIZERS.register_module() class MyOptimizer(Optimizer):def __init__(self, a, b, c):pass

然后,為了能夠在配置文件中找到這個優化器,需要在mmdet/core/optimizer/__init__.py文件中導入該優化器,也就是添加下面的一行內容。

from .my_optimizer import MyOptimizer

此時,就可以在配置文件中修改optimizer字段來使用自定義的優化器了,示例如下。

optimizer = dict(type='MyOptimizer', a=a_value, b=b_value, c=c_value)

除了自定義優化器,我們有時候還需要對優化器進行一些額外配置,這是官方優化器并沒有實現的功能,就需要通過optimizer constructor(優化器構建器)來實現,常用的一些trick如下。

  • 梯度裁剪

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

    optimizer_config = dict(_delete_=True, grad_clip=dict(max_norm=35, norm_type=2))
  • 動量調度

    MMDetection支持依據學習率動態調整動量使得訓練收斂加快,示例如下。

    lr_config = dict( policy='cyclic', target_ratio=(10, 1e-4), cyclic_times=1, step_ratio_up=0.4, ) momentum_config = dict(policy='cyclic',target_ratio=(0.85 / 0.95, 1),cyclic_times=1,step_ratio_up=0.4, )

自定義訓練調度

默認情況下,我們使用的是configs/_base_/schedules/schedule_1x.py中的調度設置,這是默認的Step LR調度,在MMCV中為StepLRHook,同時MMDetection也支持其他的調度器,如余弦調度(CosineAnneaing),在配置文件中及那個lr_config字段修改如下即可使用余弦調度。

lr_config = dict(policy='CosineAnnealing',warmup='linear',warmup_iters=1000,warmup_ratio=1.0 / 10,min_lr_ratio=1e-5)

自定義工作流

在MMDetection中,工作流決定整體的工作流程(包括運行順序和輪數),它是一個元素格式為(phase, epochs)的列表。默認情況下其設置為workflow = [('train', 1)],這表示僅僅運行一輪訓練,常常我們需要在驗證集上評估模型的泛化能力(通過計算某些metric),此時可以設置工作流為[('train', 1), ('val', 1)],這樣就會迭代進行一輪訓練一輪驗證。需要注意的是,這里控制的只是一次操作,也就是說,它是不能控制整個調度的,如[('train', 2), ('val', 1)]表示每訓練兩輪進行一輪驗證。

此外還需要注意,驗證時不會更新模型參數,且我們是通過total_epochs字段控制訓練總倫數的,這不會影響驗證工作流的進行。

Hook

自定義Hook的內容可以參考MMCV的教程,這里不多贅述,介紹幾個常用的Hook,它們由MMCV定義,只需要在配置文件中添加對應內容即可應用。比如我們想要在配置中使用MMCV自定義的NumClassCheckHook來檢查head中的num_classes是否匹配dataset中的CLASSES長度,那么可以在 default_runtime.py中添加如下字段。

此外,還有不少常用的hook沒有注冊在custom_hooks中,主要有如下的幾種。

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

其中,optimizer_config、momentum_config和lr_config上文已經涉及了,這里不再介紹,介紹剩下的三個的作用。

Checkpoint config來源于MMCV中的CheckpointHook,用于控制模型參數的本地保存,可以在配置文件中添加如下字段來設置,其中常用的參數有三個,interval表示保存頻率(多少輪進行一次保存),save_optimizer表示是否保存優化器參數,max_keep_ckpts表示最大保存數目(常常我們只需要最后的幾個模型,不需要所有輪的)。

checkpoint_config = dict(interval=1, save_optimizer=True, max_keep_ckpts=-1)

log_config是很多logger hooks的包裝器并且統一設置保存頻率(interval同上),用于訓練記錄日志的保存,目前MMCV支持了三種WandbLoggerHook、MlflowLoggerHook和TensorboardLoggerHook,默認MMDetection設置的日志記錄配置如下,只以文本的方式記錄訓練日志,建議打開Tensorboard記錄。

log_config = dict(interval=50,hooks=[dict(type='TextLoggerHook'),# dict(type='TensorboardLoggerHook')])

evaluation字段用來初始化EvalHook控制模型的評估,除了上面的interval外,你還需要設置如評估指標metric來傳遞給dataset.evaluate()方法, 默認的評估設置如下。

evaluation = dict(interval=1, metric='bbox')

總結

本文介紹了MMDetection中運行時相關的配置,官方教程也有對應。最后,如果我的文章對你有所幫助,歡迎點贊收藏評論一鍵三連,你的支持是我不懈創作的動力。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的MMDetection-运行时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。