做網(wǎng)站買空間谷歌廣告開戶
何為EMA?
定義: 滑動平均/指數(shù)加權(quán)平均:用來估計變量的局部均值,使得變量的更新與一段時間內(nèi)的歷史取值有關(guān),滑動平均可以看作是變量的過去一段時間取值的均值。
優(yōu)點: 相比于直接賦值,滑動平均得到的值在圖像上更加平緩光滑,抖動性更小。也可以理解為,由于model在最后收斂時,weights會在全局最優(yōu)點抖動,所有在最后收斂過程中使用模型權(quán)重均值更能代表模型的最終訓練結(jié)果,即僅在測試時使用。
需要注意的是 ,訓練時計算EMA得到的shadow-weights更新值不在訓練時使用,其使用的仍然是原始weights。而shadow-weights使用在val測試中,這部分可以通過代碼理解。
yolox/core/trainer.py
驗證是否使用了ema
跳轉(zhuǎn)yolox/exp/yolox_base.py
繼續(xù)回到self.ema_model,進入ModelEMA跳轉(zhuǎn)至 yolox/utils/ema.py
通過代碼,我們可以看見訓練時計算EMA得到的shadow-weights更新值被存到v中,其并不會參加梯度下降,即只在測試時使用。此外,在計算時使用了.detach(),說明所得到的v是被生成的一個新的tensor,其不會影響訓練時梯度求導,即weights和shadow-weights是兩個分離的tensor。