本文介绍 从shuffleseg以及分组卷积说起

从shuffleseg以及分组(群)卷积说起

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

什么是shufflenet

shufflenet两个核心的骚操作其实就是:逐点的群卷积与通道混洗,in english it is: pointwise group convolution and channel shuffle, so this is how the name comes.

在引入shufflenet的分组卷积之前,有必要总结一下当前在加速卷积运算基础上做的一些变种研究:

  • mobilenetv2: 可分离卷积,几乎所有的卷积改进算法都是降低 mxm 的运算复杂度的,比如你 mxm, 我用 (mxa + mxb), 可以实现相同的功能,但是计算更小。为什么呢?举个例子,输入是16通道,用3x3的卷积将输出变为32通道,这个操作可以用32个3x3的卷积完成,但是,这样的操作参数对应为: 16x32x3x3 (32个3x3卷积对16尺寸的输入做卷积),我换一种方式,先用 1个3x3的卷积操作,此时尺寸满足要求了,但是通道是16,再用32个1x1卷积去卷积它,最终也可以得到,但是此时的参数数目为(16x3x3 + 16x32x1x1), 参数数目确实减少了很多。
  • 逐点卷积,其实就是用1x1的卷积去改变通道,在不改变尺寸的情况下,这与上面的第二部是一样的

最后,sufflenet里面的群卷积是个什么东西?其实shufflenet并没有提出群卷积,而是提出了一个解决群卷积问题的方法,那么群卷积存在什么问题呢? Group Convolution 其实并不是什么新玩意儿,早在alexenet里面就已经存在,简单来说,就是将同一个层的featuremap,斩断,分为多个group,每个group单独的再进行卷积,然后结果concat,这样你会发现一个有趣的现象,最终的featuremap会存在分截,比如,第一个group全是黑白的,第二个group全是彩色的。

shufflenet觉得这是一个问题,看起来好像确实是一个问题,问题在哪儿呢?输出的不同group之间信息无法共享了。而shufflenet就提出了这么一个操作,使得输出可以很好的共享信息:

总的来说,shufflenet总结出来了几个结论:

  1. 有组的比没有组的好,因为有组可以让组学习到不同的通道特征;
  2. shuffle组的比没有shuffle组的要好,因为shuffle之后每个组的信息将不再单一,使得捕获到的信息更加丰富

shuffleseg

有人基于shuffelnet测试了,基于shufflenet基础上,构建分割算法。