
01
引言
在前文中, 我们重点研究了ResNext blcok的原始表现形式(下图a),并给出了详细的阐述;

在本文中, 我们将继续研究ResNeXt block块的其他两种表现形式,它们分别利用Concat(上图b)和分组卷积(上图c)来构造对应的block块。
不再累述,让我们直接开始吧!
02
Concat形式
前文中,我们看到了ResNeXt分支利用Inception的拆分-变换-合并策略来构造对应的block块:减少通道数(split),运行3 X 3卷积(transform),重新调整宽度,并将每个分支的结果相加(merge)。
我们介绍的block块的Concat形式与其类似,即拆分和变换策略一样,但是合并的方式转化为了Concat形式,两种方式实质是等效的.
举例,以第一部分中的示例为例:32个分支输入为256维张量,它们将其缩小为4个通道。之后,他们继续使用3 X 3卷积变换数据,而不改变宽度。但是现在我们将合并方式转化为将分支的输出通过concat连接在一起,得到128=32*4个通道,并通过1 X 1卷积将通道数加倍。如下所示:

直观地说,上述方法从表现形式上来看更接近于Inception中的block块,其中变换(transform)的输出(例如,3 X 3和5 X 5卷积)简单地串联而不修改通道数。
Concat形式和形式a是完全一样的!从参数的数量到Flops,基本都保持一致,Concat形式B只是我们在前一篇文章中看到的block块形式a的另一种描述。
03
Grouped Convolutions
在AlexNet中,分组卷积最初被用作在两个GPU上进行训练的工程辅助工具,但ResNeXt表明,如果使用得当,分组卷积可以使模型获得更高的性能。
与前文一样,我们将使用一个示例来研究分组卷积:
假设我们有一个由128个通道组成的特征图,我们希望在不改变宽度的情况下对其进行变换,这可以使用1 X 1卷积来完成。具体地说,对于输入中的128个通道,每个卷积核将接受128个通道作为输入,而对于输出中的128个通道,总共需要128个这样的卷积核(为了简单起见,省略了空间维度)。请注意,卷积核的输入为整个128个通道,而不仅仅是其中的一半或四分之一;换句话说,输入没有被分成多个组,只有一个组。
如果有两组,会发生什么?输入将被分成两个较小的张量,每个张量有64个通道。因此,滤波器也将被分成两组,其中64个将对应于第一组,其余将对应于另一组。因此,每个滤波器将有64个通道,因为它只在一半的输入上工作,也就是滤波器的输入有64个通道。
对于4个组大小,输入将被四分之一,每个部分有32个通道,滤波器也将被分成4组,每组32个滤波器,每个滤波器有32个通道。
简单概括,如果输入通道数为n_in , 输出通道数为n_out , 我们分组数目为g, 那么
每个组的输入通道数为n_in/g,这样每个滤波器的通道数也为n_in/g
每个组的输出通道数为n_out/g,总的输出也就是n_out
每个滤波器仅在n_in/g上工作,不同组之间不进行任何交互
如下图所示,我们有一个具有8个输入通道、4个输出通道和4个组大小的卷积运算示例。

上图中,我们分了4个组,每个组中有2个通道,这表示每个过滤器采用2=8/4通道。因为组的数量等于输出通道的数量,所以每个组有一个过滤器,但是如果输出的通道数乘以f,那么过滤器的数量也将同时乘以f。
04
Form C: Grouped Convolutions
最后,我们介绍ResNeXt block块的第三种也是最后一种形式,它是最简洁的。
首先,在形式B中我们将32个3X3输出通道数为4的卷积通过concat操作后将通道数进行合并,这等效于使用一个3X3输出通道为128=4X32,分组数目为32的分组卷积,经过这样的操作后,形式B将被转化为如下右侧形式:

这是ResNeXt块的第三种也是最后一种形式,也是ResNeXt 原文采用的实现方式。
当然,这个网络可以探讨的点还有要多,我强烈建议大家阅读以下原文具体的细节.
05
总结
在这篇文章中,我们学习了ResNeXt中block的其他两种实现方式,同时我们重点介绍了分组卷积,即一种新的卷积类型,可以将一个张量视为多个单张量,并分别对每个单张量执行卷积操作。
您学废了吗?
注:关注公众号,后台回复 ResNeXt, 即可获取论文链接

