轻量化卷积:TBC,不仅仅是参数共享组卷积,更具备跨通道建模

2021-05-24 10:52:36 浏览数 (1)

标题&作者团队

大家好,我是Happy。

今天看到一篇非常有意思的文章:Tied Block Convolution,它也是一种轻量化卷积算子,但还算不上即插即用。为什么这么说呢?我理解的即插即用应该是不用对现有模块中其他地方进行任何改进,直接采用该模块替换卷积即可。显然,TBC是做不到的。

言归正传,我们先来看一下TB到底是何方神圣?

Method

TBC Formulation

在正式介绍TBC之前,我们先看一下卷积与组卷机的定义。假设输入特征为

X in R^{c_i times h times w}

,输出特征为

tilde{X} in R^{c_o times h times w}

。卷积核尺寸表示为

ktimes k

,为描述的简单性,这里假设输入与输出的分辨率不变。

标准卷积(见上图a)定义如下:

tilde{X} = X * W

其中,

W in R^{c_o times c_i times k times k}

表示卷积核。也就是说,参数量为

c_o times c_i times k times k

组卷积(见上图b)的则是将输入特征拆分为G个通道数相等的特征

X_1, cdots, X_G

,且每组共享卷积核参数,即组内为标准卷积,输出再进行concat拼接。组卷机的定义公式如下:

tilde{X} = X_1 * W_1 oplus X_2 * W_2 oplus cdots oplus X_G * W_G

注:

oplus

表示concat操作,此时每组卷积核信息

W_i in R^{c_0/G times c_i/G times k times k}, i =1,2,cdots G

,组卷积的整体参数量为

G times c_o/G times c_i /G times k times k

Tied Block Convolution (见上图c)是一种有效降低参数量的轻量算子,类似组卷积,它同样将输入特征进行分组,每组内部采用标准卷积进行操作;但不同于组卷积之处在于:组间参数共享。定义公式如下:

tilde{X} = X_1 * W^{'} oplus X_2 * W^{'} oplus cdots oplus X_B * W^{'}

注:

W^{'} in R^{c_o/B times c_i/B times k times k}

。由于组间参数共享,TBC的参数量只有

c_o/B times c_i/B times k times k

。很明显,TBC是一种组间参数共享的组卷积

你以为两者之间的异同就这么简简单单的完事了吗?NoNoNo!

  • 相比组卷积,TBC具有更少的参数量;
  • 组卷积需要G个fragmentations进行计算,而TBC仅需一个fragmentation,这可极大的降低并行度。下图对比了GC与TBC在GPU端计算时不同分组数的耗时对比,很明显:TBC耗时几乎不随组数增加而变化,而GC则成线性关系

image-20210515101116372

  • TBC可以更好的建模跨通道相关性。由于GC每组滤波器仅作用于通道子集,因此难以进行跨通道全局建模;而TBC的滤波器可以作用于所有通道,故而可以更好的建模跨通道相关性。
  • 在目标检测与实例分割任务上,基于TCB的TiedResNet显著优于基于GC的ResNeXt模型;TiedResNet-S甚至凭借更小的模型(2x)优于ResNeXt,证实了TiedResNet可以更有效的利用模型参数

Tied Block Group Convolution 类似卷积到组卷积的过度,TBC也可以做成组TBC的形式:TGC,定义如下:

tilde{X} = (X_{11} * W_1^{'} oplus cdots oplus X_{1B}* W_1^{'}) oplus cdots oplus (X_{G1} * W_G^{'} oplus cdots oplus X_{GB}* W_G^{'})

其中,

W_g^{'} in R^{c_o/{BG} times c_i/{BG} times k times k}

,G和B分别表示组卷积数与TBC数。

类似地,我们还可以构建Tied Block Fully Connected Layer,由于太简单了,略过吧。

TBC/TGC in Bottleneck Modules

上图给出了TGC、TBC在ResNet、ResNeXt以及ResNeSt中所构建的模块示意图。简单介绍如下:

  • 对于ResNet与ResNeXt中的
3times 3

部分,我们先进行分组,每组有各自的TBC/TGC。对于开头与结尾的

1times 1

,开头部分替换为TBC(B=2),结尾部分不变。

  • 对于ResNeSt,替换所有
3times 3

卷积为TBC(B=2)。

默认配置信息:Tied-ResNet50(Tied-ResNeXt50)拆分为4个split且基础宽度为32/64,即

4stimes32w(4stimes 64w)

;Tied-ResNet-S(Tied-ResNeXt50-S)的配置则为

4stimes 18w(4stimes36w)

所提TiedBottleNeck可以带来1%的性能提升,然而跨通道集成确实会弱化模型性能,为补偿之,我们引入了mixer融合多个split的输出,此时可以带来额外的0.5%性能提升。

TBC and TFC in Attention Modules

上图给出了TBC、TFC与注意力模块SE、GCB的组合示意图。这里只是简单地TBC、TFC在对应模块的替换,不再赘述。

Experiments

接下来,我们从图像分类、目标检测、实例分割三个任务上对所提方案进行验证。

ImageNet Classification

上表对比所提方案与其他基线模型的性能对比,可以看到:

  • TiedResNet50-S取得了与ResNet50相当的性能,且仅需60%计算量、54%参数量;
  • TiedNet50与TiedResNet101同样可以更少的参数量超越了其对应的基线模型,指标分别提升1.5%、1.4%;
  • TiedResNeSt-50-S仅需59%参数量、82%的计算量取得了优于ResNeSt50的性能;
  • TiedResNet50-S凭借相当的参数量、计算量超过了轻量化模型ShuffleNet50与GhostNet50.

Object Detection & Segmentation

上图给出了所提方案在目标检测方面的性能对比,可以看到:

  • 以Cascade R-CNN、RetinaNet、Mask R-CNN作为基线模型,所提方案可以带来2%-2.5%指标提升;
  • 以RetinaNet作为基线模型,所提方案TiedResNet101显著优于重度模型ResNeXt101-64x4d。
  • 在轻量型方面,TiedResNet-S与TiedResNet相较同量级模型可以带来1.1%、2.1%性能提升;
  • 无论基线检测器多强,我们总是可以看到TBC可以带来性能提升,这进一步说明了TBC的有效性。

上图a与上图b表明:ResNet会受遮挡影响,当

r=0.8

时,ResNet的

AP^{0.75}

指标下降高达6%,而TiedResNet仅下降0.7%。类似地,随着遮挡比例增加,AP的直播啊提升从2.8%到5.9%。这意味着:TiedResNet具有极强的处理重叠实例的能力。上图c表明:TiedResNet具有更少的FP、更高的分割质量。

Lightweight Attention

上表给出了轻量型注意力模块方面的性能对比,从中可以看到:

  • 当B=8时,TiedSE可以带来64倍参数量(仅针对注意力模块)下降,并取得相当性能;
  • 无论是在SEResNet还是EfficientNet,所提TiedSE可以显著降低参数量且不会造成性能牺牲。

0 人点赞