使用BN时需要注意的问题:
Group Convolution 是对输入feature map进行分组,然后每组分别卷积。如果分为G组,则参数量会降低为原来的 1/G。
速度提升: 理论上可以提高网络的速度,但实际上未必有3X3的卷积效率高,这是因为 pytorch 专门对 3X3 的卷积进行了优化,而分组卷积破坏了这种优化。
精度提升: 分组可以把特征变为若干子空间(subspace),对于图像信息有更加全面的了解。有些像Transformer 里的 Multi-Head Self-Attention,只不过 Transformer 里面是对注意力计算分组,起了个名字叫做“多头”,而组卷积里是对 convolution 分组。
Transformer来自于自然语言处理,在真实语言环境中,每一个词和不同的词,都有不同的关系。可以用不同的 Attention 来补充这些不同的关系。上图展示了三种 attention,即三个子空间,放在子空间里可以更好的学习这种关系。
AlexNet里也有一个经典的发现,上图中前三行是 GPU1 学习到的滤波器,后三行是GPU2学习到的滤波器。可以发现一个主要学习了纹理、梯度信息,另一个主要学习了色彩信息,可以理解为不同的子空间。
来自于南开大学程明明老师组的工作,特征分组+多尺度的完美结合。论文中有两个实验讨论了特征的分组。可以看出,随着尺度的提升,准确率会提升,速度会降低。而且,分组大于4的时候,相对于分组为4提升并不十分明显。所以,特征分组并不是越多越好,组数增加会增加计算消耗,需要一定的平衡。