本文首发于个人博客
Octave卷积
Octave卷积的主题思想来自于图片的分频思想,首先认为图像可进行分频:
- 低频部分:图像低频部分保存图像的大体信息,信息数据量较少
- 高频部分:图像高频部分保留图像的细节信息,信息数据量较大
由此,认为卷积神经网络中的feature map也可以进行分频,可按channel分为高频部分和低频部分,如图所示:
对于一个feature map,将其按通道分为两个部分,分别为低频通道和高频通道。随后将低频通道的长宽各缩减一半,则将一个feature map分为了高频和低频两个部分,即为Octave卷积处理的基本feature map,使用X表示,该类型X可表示为 X = [ X H , X L ] X = [X^H,X^L] X=[XH,XL],其中 X H X^H XH为高频部分, X L X^L XL为低频部分。
为了处理这种结构的feature map,其使用了如下所示的Octave卷积操作:
首先考虑低频部分输入 X L X^L XL,该部分进行两个部分的操作:
- X L → X H X^L \to X^H XL→XH:从低频到高频,首先使用指定卷积核 W L → H W^{L \to H} WL→H进行卷积,随后进行Upample操作生成与高频部分长宽相同的Tensor,最终产生 Y L → H = U p s a m p l e ( C o n v ( X L , W L → H ) , 2 ) Y^{L\to H} = Upsample(Conv(X^L,W^{L \to H}),2) YL→H=Upsample(Conv(XL,WL→H),2)
- X L → X L X^L \to X^L XL→XL:从低频到低频,这个部分为直接进行卷积操作 Y L → L = C o n v ( X L , W L → L ) Y^{L \to L} = Conv(X^L,W^{L \to L}) YL→L=Conv(XL,WL→L)
随后考虑高频部分,与低频部分类似有两个部分的操作:
- X H → X H X^H \to X^H XH→XH:从高频到高频,直接进行卷积操作 Y H → H = C o n v ( X H , W H → H ) Y^{H \to H} = Conv(X^H,W^{H \to H}) YH→H=Conv(XH,WH→H)
- X H → X L X^H \to X^L XH→XL:从高频到低频,首先进行stride和kernel均为2的平均值池化,再进行卷积操作,生成与 Y L Y^L YL通道数相同的feature map,最终产生 Y H → L = c o n v ( a v g p o o l ( X H , 2 ) , W H → L ) ) Y^{H \to L} = conv(avgpool(X^H,2),W^{H \to L})) YH→L=conv(avgpool(XH,2),WH→L))
最终,有 Y L = Y H → L + Y L → L Y^L = Y^{H \to L} + Y^{L \to L} YL=YH→L+YL→L和 Y H = Y H → H + Y L → H Y^H = Y^{H \to H} +Y^{L \to H} YH=YH→H+YL→H,因此可以总结如下公式:
Y L = Y H → L + Y L → L = Y H → L = c o n v ( a v g p o o l ( X H , 2 ) , W H → L ) ) + C o n v ( X L , W L → L ) Y H = Y H → H + Y L → H = C o n v ( X H , W H → H ) + U p s a m p l e ( C o n v ( X L , W L → H ) , 2 ) Y^L = Y^{H \to L} + Y^{L \to L} = Y^{H \to L} = conv(avgpool(X^H,2),W^{H \to L})) + Conv(X^L,W^{L \to L}) \\ Y^H = Y^{H \to H} +Y^{L \to H} = Conv(X^H,W^{H \to H}) + Upsample(Conv(X^L,W^{L \to H}),2) YL=YH→L+YL→L=YH