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的操作

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

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