1.调整卷积模式
(1)引入1*1的卷积降维--inception V1
例如GoogLenet,假设输入是28✖️28✖️192的feature map,1*1的channel是64,3*3的channel是128,5*5的channel是32
在左图被3个 不同尺寸的卷积核卷积之后,参数量是1*1*192*64+3*3*192*64+5*5*192*32=265344
如右图,如果在3*3和5*5之前分别添加channel为96和 16的1*1的卷积核降维后,参数量是1*1*192*64+(1*1*192*96+3*3*96*128)+(1*1*192*16+5*5*16*32)=157184,是原来的大约0.6倍
此外,1*1的卷积还可以引入非线性,实现跨通道信息交互。
1*1卷积和fc不同,fc要求输入尺寸固定,cnn没有限制;
(2)小的卷积核代替大的卷积核---VGGnet的思想,inception V2
2个3*3的conv的感知野相当于1个5*5的
3个3*3的感知野相当于7*7
拆分的优点:1.引入了更多的非线性,使网络学习能力更好;2.减少了参数量
(3)用1*3和3*1的卷积
前提是矩阵的秩比较低,可以拆分
引入了 Factorization into small convolutions 的思想,将一个较大的二维卷积拆成两个较小的一维卷积,比如将7´7卷积拆成1´7卷积和7´1卷积,或者将3✖️3卷积拆成1✖️3卷积和3✖️1卷积,如上图所示。一方面节约了大量参数,加速运算并减轻了过拟合(比将7✖️7卷积拆成1✖️7卷积和7✖️1卷积,比拆成3个3✖️3卷积更节约参数),同时增加了一层非线性扩展模型表达能力。论文中指出,这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。
2.学习蒸馏teacher-student网络
3.剪枝
4.量化
5.低比特
不改变模型和参数量,将float64的网络迁移到float32实现,理论上可以基本达到不掉精度,但是gpu的占用率和内存大大减少
甚至是int16,int8,int4,甚至是二值三值的网络。
一个v1-v4总结很好的博客:https://www.cnblogs.com/haiyang21/p/7243200.html
还没看,先放个链接的
蒸馏法:https://baijiahao.baidu.com/s?id=1598625949059208402&wfr=spider&for=pc
剪枝法:https://blog.csdn.net/sigai_csdn/article/details/80803956
模型压缩:https://blog.csdn.net/sigai_csdn/article/details/80803956(经典:含蒸馏、剪枝、量化等介绍)