轻量化网络(三)Squeezenet: Alexnet-Level Accuracy With 50x Fewer Parameters And 0.5mb Model Size

论文链接
Caffe实现
Pytorch实现
Tensorflow实现
轻量化网络有至少以下三个优点:1、更小的网络在服务器上训练需要更少的计算量。2、更小的模型需要更少的带宽从云端下载到自动驾驶汽车上。3、更小的模型可以更灵活得部署在FPGAs和其他有限内存的硬件上。本文基于以上优点提出了SqueezeNet,保持模型性能不变的情况下,使得AlexNet模型减少了50倍的参数量。

一、网络设计策略
作者基于三个策略来设计网络结构。
1.使用 1 × 1 1 \times 1 1×1卷积核代替 3 × 3 3 \times 3 3×3卷积核,模型参数可以变为原来的 1 9 \frac{1}{9} 91
2.减少输入 3 × 3 3 \times 3 3×3卷积核的特征通道。考虑卷积核的参数量为 3 × 3 × C i n × C o u t 3 \times 3 \times C_{in} \times C_{out} 3×3×Cin×Cout,减少输入特征的通道,就会减少 C i n C_{in} Cin,从而减少卷积核参数量。在论文中模型使用 squeeze layers来减少输入特征的通道数。
3.在整个网络中延迟降采样的时机。如果在网络初期就开始降采样,后期网络都将只有较小分辨率的输入的特征,这会影响网络精度。He & Sun, 2015的一篇文章也提到了这点。

策略1和2是为了减少网络参数同时尽量保持精度,策略3是在有限参数的情况下最大化网络精度。
二、Fire Module
基于以上三个原则,作者设计了Fire Module。首先使用一个 1 × 1 1 \times 1 1×1卷积核来降维,之后分别使用一个 1 × 1 1 \times 1 1×1卷积核和 3 × 3 3 \times 3 3×3卷积核进行卷积,输出后的特征进行concat。

class Fire(nn.Module):
      def __init__(self, inplanes, squeeze_planes,expand1x1_planes, expand3x3_planes):
               super(Fire, self).__init__()
               self.inplanes = inplanes
               self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
               self.squeeze_activation = nn.ReLU(inplace=True)
               self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,kernel_size=1)
               self.expand1x1_activation = nn.ReLU(inplace=True)
               self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,kernel_size=3, padding=1)
               self.expand3x3_activation = nn.ReLU(inplace=True)   
       def forward(self, x):
               x = self.squeeze_activation(self.squeeze(x))
               return torch.cat([
                   self.expand1x1_activation(self.expand1x1(x)),
                   self.expand3x3_activation(self.expand3x3(x))], 1)

三、网络结构
Figure2中左图是标准的SqueezeNet,网络首先是一个标准卷积,之后是8个 Fire modules,最后是一个卷积层和softmax。从网络的开始到最后,逐渐增加Fire modules中卷积核的数量,即逐渐增加特征通道。
在这里插入图片描述
四、实验结果
在这里插入图片描述
Table 2中的第2行到第5行是对比的压缩模型方法,第6行是提出的SqueezeNet。从结果可以看到,模型参数减少了50倍,但是精度保持不变。引出一个新的问题,SqueezeNet在更小的数据类型中表型如何,从数据类型为8-bit和6-bit可以看出,SqueezeNet经得起继续压缩。
五、两个实验
作者设计了两个实验来总结网络模型中的两个参数对模型大小和精度的影响。
在这里插入图片描述
Figure 3(a)中 squeeze ratio (SR) 定义是压缩层中卷积核的数量和拓展层中卷积核的数量之比。从图中可知,随着压缩层卷积核的数量提升,模型大小逐渐增加,模型精度提升先增加后增加逐渐逐趋于缓和。
Figure 3(b)中 的实验是是针对策略1的,即使用 3 × 3 3 \times 3 3×3卷积核来代替 1 × 1 1 \times 1 1×1卷积核。实验逐渐增加 3 × 3 3 \times 3 3×3卷积核,模型大小逐渐增加,模型的精度先增加后增加逐趋于缓和。
从以上两个实验可以看出,压缩层和减少 3 × 3 3 \times 3 3×3卷积核的确有助于模型压缩,可见可以使用以上策略来压缩模型。
六、两个变体网络的实验
在这里插入图片描述
Figure 2中有两个变体的网络,在其中加入残差思想,Table 3中展示这这两个网络的性能和模型大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值