CNN经典网络中的模型压缩方法

CNN的模型文件通常比较大,给实际应用带来了困难。为了解决这个问题,人们通常使用模型压缩的方法。本文介绍经典网络中包含的模型压缩方法。

卷积层参数个数计算公式:c_out * c_in * k_w * k_h。从公式可以看到,要想减少卷积层的参数个数,要么使用比较小的卷积核,要么减少通道数。

VGG相比于AlexNet,一个显著的特点就是卷积核的尺寸从7x7缩小为3x3,从而减少了网络的参数个数。卷积核感知域变小带来的网络容量问题可以用叠加卷积层解决。对于一般通常意义的卷积运算而言,3x3的卷积核已经是极限。
GoogleNet的一个Inception中,每条路都经过一个1x1的卷积。这个1x1的卷积可以为后面的层操作降低输入通道数c_in。

Resnet相比于GoogleNet在使用1x1的卷积上更进了一步。在一个bottleneck结构中,残差支路有三个卷积层,一头和一尾都是1x1的卷积。第一个1x1卷积为中间的“正常”卷积减少输入通道数,一般是减3/4,或者减半(卷积组的第一个时)。后一个1x1卷积起到增加feature map的通道数的作用,使得中间的“正常”卷积的输出通道数可以减3/4,或者减半(连接下一个卷积组时)。

MobileNet中使用了可分离卷积:通道卷积(deepwise convolution)+ 单像素卷积(pointwise convolution)。其中单像素卷积的参数占大部分,参数个数是一般卷积的1/(k_wk_h);通道卷积的参数个数等于c11k_w*k_h,一次只使用一个输入通道做卷积运算,使得计算量和参数个数是一般卷积的1/c。通道卷积其实做了c次卷积,每次卷积的输入输出通道数都为1。注意,这里的1x1卷积的作用有两个,一个是对通道间的加权以进行特征组合,第二个是改变通道数因为通道卷积不能变通道数(输出通道数等于输入通道数)。

其实通道卷积是分组卷积的一种极端情况(group数等于通道数c)。通过分组卷积可以减少卷积的输入输出通道数,group数就是减少的倍数。所以最终group卷积可以将参数和计算量缩小为原来的1/group。但是group卷积只能给局部通道的特征做组合,组与组之前阻隔了信息的关联。因此,shufflenet为了让组与组之间的特征关联起来,让group卷积后各组的一部分通道做交换(shuffle),这样就既省了计算量参数量,又保持了网络的表达能力。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值