OctaveConv解讀

代碼實現:https://github.com/lxtGH/OctaveConv_pytorch/tree/master/libs/nn

微信推文:https://mp.weixin.qq.com/s/sF3pPJTPk67nbDt-mR9SOw

這個代碼中有用torch.nn.functiional 和用torch.nn.conv2d的兩種實現方法

代碼解讀:

輸入是x_h與x_l兩個feature,AP是stride=2,kernal=2的average pooling

l2l, h2h ,l2h , h2h 四個conv的默認strde都是1,kernal size作爲參數輸入;alpha默認爲0.5

而以上四個conv的輸入輸出通道數:low對應alpha* _channels , high 爲_channels- int( alpha * _channels)

_channels是out_channels還是input_channels就取決於是什麼轉什麼了

示意圖

可看出代碼中alpha是低頻率的feature所佔高+低通道數比例;高低維互相轉換是由f(X,W)操作完成的,在代碼中f體現爲普通的卷積;

高緯度間轉換:

1.l2h經過卷積後兩倍upsample

2.h2l經過stide=2,kernal=2的average pooling後卷積

技術細節:

高低維度的feature間轉換的時候,因爲高維的w,h是低維兩倍,卷積會導致以上問題(卷積前後的特徵圖不能整數對其),所以高低維轉換時候會有upsample和average_pooling的操作

==================================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章