|
本帖最后由 shaoheshaohe 于 2020-8-5 11:44 编辑
分组卷积,可以成倍减少计算量。但是,分组卷积,应用也并不广泛。原因可能是因为,分组减少计算量,是以伤害性能为代价的。
1. 分组后,同一层、不同组之间,filter是相同的吗?或者说,不同组之间,权重是共享的吗?
推测,应该如此。道理是:如果权值不共享,那么不同的组之间,完全没有关联。这时就相当于多个网络拼接。这种形态,应该不是理想的。权值共享,就会要求filter能对下一层的所有数据,都发生作用。这样,其实是要求filter具有更强的特征提取能力。因此,共享是合理的。
那么,实验结果,是否支持?是否真的如此,我们应该做实验。观察两种分组实现时,权值文件的大小。若两者的文件大小不同,则印证了我们的这种理解。否则,若相同,则说明我们的理解不对。
更新:实验结果证实,分组越多,权值文件越大;说明,不同组之间,权值不共享。
2. 按这个理解,分组不能太多。
假设输出通道为N,分组为G,则有效、不同的filter数量为N //G。因此,分组多了,filters数量就少了,特征提取能力必然下降。就图像压缩的网络来看,G=2尚合理;G再大,则不太合理。
更新:不共享,本条分析不再成立。但结论仍然是对的,分组不能太多。
3. 分组卷积,如何高效实现?
开源代码ugly实现,for循环。这显然,不够高效。
综合来看,分组有意义、但不是灵丹妙药,分组所产生的提升,通过后期的模型压缩应该也可以差不多实现。
这恐怕也是分组在用、但又不怎么广受community待见的原因吧。
|
|