本文已参与「新人创作礼」活动,一起开启创作之路。

SqueezeNet:压缩、扩展和融合(提供代码)

背景:

当物体检测应用到实际工业场景时,模型的参数量是一个十分重要的指标,较小的模型可以高效地github官网登陆入口进行分布式训练,减小模型更新开销,降低平台体积功耗存储和计算能力的限制,方便在FPGA等边缘平台上部署。 基于以上几点,Han等人提出了轻量化模型SqueezeNet,github中文官网网页其性能与AlexNet相近,卷积公式而模型参数仅有Agithub直播平台永久回家lexNet的1/50。

论文地址:1602.07360.pdf (arxiv.org)

网络结构:

随着网络结构的逐渐加深,模型的性能有了大幅度提升,但这也增加了网络参数与前向计算的时间。Sque卷积积分ezeNet从网络结构优化的角度出发,使用了如下3点策略来减少网络参数,提升网络性能:

  • 使用11卷积来替代部分的33卷积,这也是之前介绍过的常用的策略,可以将参数减少为giti轮胎原来的1/9。
  • 减少输入通道的数量github官网,这一点也是通过11卷积来实现,通github道数github永久回家地址量的减少可以使后续卷积核的数量也相应地减少。
  • 在减少通道数之后,使用多个尺寸的卷积核进行计算,以保留更多的信息,提升分类的准确率。

基于以上3点,SqueezeNet提出了如图下图所示的基础模块,称卷积核之为Fire Module。图中输入特征尺寸为HW,通道数为M,依次经过一个Squeeze层与Expand层,然后进行融合处理。

每一个模块的具体意义如下:

  • SqueezeNet层:首先使用11卷积进行降维,特征图的尺github直播平台永久回家寸不变,这里的S1小giticomfort是什么轮胎于M,达到了压缩的目的。
  • Expand层:并行地使用11卷积与33卷积获得不同感受野的特github官网登陆入口征图,有点类似InceptGitHubion模块,达到扩展的github中文社区目的。
  • Concat:对得到的两个特征图进行通道拼接,作为最终输出。
  • 模块中的S1、e1与e2都giticomfort是什么轮胎是可调的超参,GitHubFire Module默认e1=e2=4S1。激活函数使用了ReLU函github直播平台永久回家数。

下面卷积核使用PyTorch来搭建一个单独的SqueezeNet的Fire模块,代码如下:

import torch
from torch import nn
class Fire(nn.Module):
 def __init__(self, inplanes, squeeze_planes, expand_planes):
  super(Fire, self).__init__()
  # 这里的squeeze_planes为S1
  self.conv1 = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1, stride=1)
  self.bn1 = nn.BatchNorm2d(squeeze_planes)
  self.relu1 = nn.ReLU(inplace=True)
  # expand_planes为e1和e2
  self.conv2 = nn.Conv2d(squeeze_planes, expand_planes, kernel_size=1,
  stride=1)
  self.bn2 = nn.BatchNorm2d(expand_planes)
  self.conv3 = nn.Conv2d(squeeze_planes, expand_planes, kernel_size=3,
  stride=1, padding=1)
  self.bn3 = nn.BatchNorm2d(expand_planes)
  self.relu2 = nn.ReLU(inplace=True)def forward(self, x):
  x = self.conv1(x)
  x = self.bn1(x)
  x = self.relu1(x)
  out1 = self.conv2(x)
  out1 = self.bn2(out1)
  out2 = self.conv3(x)
  out2 = self.bn3(out2)
  # 对两个分支的输出进行Concat处理
  out = torch.cat([out1, out2], 1)
  out = self.relu2(out)
  return out

基于Fire Module,SqueezeNet的网络结构如图上图所示。输入图像首先github官网登陆入口送入Conv 1,得到通道数为96的特征图,然后依次使用8个Fire Modgithub中文官网网页ule,通道数git教程也逐渐增加。图7.4中横github官网登陆入口线上的值代表了通道数。最后一个卷积为Conv 10,输入通道数为N的特征图,N代表需要物体的类别数。 SqueezeNet一共使用了3个Pgithub直播平台永久回家ool层,前两个是github永久回家地址Max Poogitlabling层,步长为2,最后一个为全局平均池化,利用该层可以取代全连接层,减少了计算量。

小结

SqueezeNet卷积神经网络是一个精心设计的轻量化网络,使用常见的模型压缩技术,如SVD、剪枝和量化等,可以进一步压缩该模型的大小。例如,使用Deep Compresion技术对其进行压缩时github官网,在几乎不损失性能的前提下,模型大小可以压缩到0.5MB。基于其轻量化的特性,Sqgithub下载ueezeN卷积核et可以广泛地应用到卷积云移动端,促进了物体检测技术在移动端的部署与应用。

代码地址:GitHub – forresti/SqueezeNet: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters