SqueezeNet详解
SqueezeNet是2016年发表在ICLR上的文章,其主要创新在于仅使用AlexNet网络1/50的参数,却能够实现同等水平的准确率。此篇文章仅对论文SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE中的网络结构进行分析,其中的参数实验不在此赘述,如若感兴趣可以看看原文。
网络优势
SqueezeNet作为轻量级CNN模型之一,其主要有以下优势:
- 更有效的分布式训练
- 导入模型到客户端只需更小的通信代价
- 适用于FPGA和嵌入式设备
网络设计策略
原文中提到三点主要策略:
- 使用1x1的卷积核代替3x3的卷积核
- 减少3x3卷积核的输入通道数目
- 网络中的下采样设置,让更多层有较大的激活映射(activation maps)
此外,还有其他技术:
- 1x1和3x3的卷积核都要保持输出与输出尺寸的相等,对于3x3的卷积核,设置padding=1
- Relu激活函数
- Dropout技术
- 用GAP代替全连接层训练时
- 线性减少学习率
网络结构
基础模块
原文中提出一种名为fire的模块,其结构如下图所示:
主要分成两个部分,一部分是squeeze子模块,由1x1的卷积核组成;一部分是expand子模块,由1x1和3x3的卷积核组成。
整体结构
SqueezeNet网络的整体结构如下图所示
图左是原始SqueezeNet网络,图中是加入简单跳跃连接的网络,图右是加入复杂跳跃连接的网络
原文中分别对此三者的模型大小与准确度做了对比实验,结果证明加入简单跳跃连接的网络更好。
网络参数
原文中直接展示了网络参数,如下图所示:
从中可以看出,相对于AlexNet而言,大大降低了网络参数。如果使用模型压缩方法(也是此论文作者提出的),参数则要再减少2/3的参数。
总结
从减少参数的角度来看,AlexNet网络的主要参数集中在全连接层,几乎占据了总参数的94%左右,因此在SqueezeNet中去除了全连接层,自然减少了参数。但是文中针对网络结构设计,做了大量的实验,这一点还是比较有意义的。